diff options
Diffstat (limited to 'app/src/main/java/net')
11 files changed, 87 insertions, 50 deletions
diff --git a/app/src/main/java/net/taler/wallet/Amount.kt b/app/src/main/java/net/taler/wallet/Amount.kt index 4954815..a19e9bc 100644 --- a/app/src/main/java/net/taler/wallet/Amount.kt +++ b/app/src/main/java/net/taler/wallet/Amount.kt @@ -125,6 +125,7 @@ class ParsedAmount( return value == 0u && fraction == 0.0 } + @Suppress("unused") fun toJSONString(): String { return "$currency:${getValueString()}" } diff --git a/app/src/main/java/net/taler/wallet/HostCardEmulatorService.kt b/app/src/main/java/net/taler/wallet/HostCardEmulatorService.kt index c38bc10..93f1d3f 100644 --- a/app/src/main/java/net/taler/wallet/HostCardEmulatorService.kt +++ b/app/src/main/java/net/taler/wallet/HostCardEmulatorService.kt @@ -16,14 +16,16 @@ package net.taler.wallet -import android.content.* +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter import android.net.Uri import android.nfc.cardemulation.HostApduService import android.os.Bundle import android.util.Log import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream -import java.net.URI import java.util.concurrent.ConcurrentLinkedDeque fun makeApduSuccessResponse(payload: ByteArray): ByteArray { @@ -46,7 +48,7 @@ fun makeApduFailureResponse(): ByteArray { fun readApduBodySize(stream: ByteArrayInputStream): Int { val b0 = stream.read() if (b0 == -1) { - return 0; + return 0 } if (b0 != 0) { return b0 @@ -61,7 +63,7 @@ fun readApduBodySize(stream: ByteArrayInputStream): Int { class HostCardEmulatorService: HostApduService() { val queuedRequests: ConcurrentLinkedDeque<String> = ConcurrentLinkedDeque() - lateinit var receiver: BroadcastReceiver + private lateinit var receiver: BroadcastReceiver override fun onCreate() { super.onCreate() diff --git a/app/src/main/java/net/taler/wallet/MainActivity.kt b/app/src/main/java/net/taler/wallet/MainActivity.kt index 299fbfe..29a56da 100644 --- a/app/src/main/java/net/taler/wallet/MainActivity.kt +++ b/app/src/main/java/net/taler/wallet/MainActivity.kt @@ -70,6 +70,7 @@ class MainActivity : AppCompatActivity(), OnNavigationItemSelectedListener, nav_view.menu.getItem(0).isChecked = true } + setSupportActionBar(toolbar) val appBarConfiguration = AppBarConfiguration( setOf(R.id.showBalance, R.id.settings, R.id.walletHistory), drawer_layout ) diff --git a/app/src/main/java/net/taler/wallet/ReviewExchangeTOS.kt b/app/src/main/java/net/taler/wallet/ReviewExchangeTOS.kt index 662bb8d..4f5db9e 100644 --- a/app/src/main/java/net/taler/wallet/ReviewExchangeTOS.kt +++ b/app/src/main/java/net/taler/wallet/ReviewExchangeTOS.kt @@ -18,14 +18,13 @@ package net.taler.wallet import android.os.Bundle -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button import android.widget.CheckBox -import android.widget.CompoundButton import android.widget.TextView +import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import androidx.navigation.findNavController @@ -61,7 +60,7 @@ class ReviewExchangeTOS : Fragment() { model.cancelCurrentWithdraw() navController.navigateUp() } - acceptButton = view.findViewById<Button>(R.id.button_tos_accept) + acceptButton = view.findViewById(R.id.button_tos_accept) acceptButton.setOnClickListener { model.acceptCurrentTermsOfService() } diff --git a/app/src/main/java/net/taler/wallet/Settings.kt b/app/src/main/java/net/taler/wallet/Settings.kt index 66e6a34..8a91d62 100644 --- a/app/src/main/java/net/taler/wallet/Settings.kt +++ b/app/src/main/java/net/taler/wallet/Settings.kt @@ -18,19 +18,17 @@ package net.taler.wallet import android.app.Dialog import android.content.Context -import android.content.DialogInterface import android.content.Intent import android.os.Bundle -import android.provider.DocumentsContract import android.util.Log -import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button import androidx.appcompat.app.AlertDialog import androidx.fragment.app.DialogFragment -import androidx.lifecycle.ViewModelProviders +import androidx.fragment.app.Fragment +import kotlinx.android.synthetic.main.fragment_settings.* interface ResetDialogEventListener { @@ -40,7 +38,6 @@ interface ResetDialogEventListener { class ResetDialogFragment : DialogFragment() { - private lateinit var model: WalletViewModel private lateinit var listener: ResetDialogEventListener override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { @@ -134,6 +131,10 @@ class Settings : Fragment() { return view } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + textView4.text = BuildConfig.VERSION_NAME + } + companion object { private const val TAG = "taler-wallet" private const val CREATE_FILE = 1 diff --git a/app/src/main/java/net/taler/wallet/ShowBalance.kt b/app/src/main/java/net/taler/wallet/ShowBalance.kt index b9e52ff..1238903 100644 --- a/app/src/main/java/net/taler/wallet/ShowBalance.kt +++ b/app/src/main/java/net/taler/wallet/ShowBalance.kt @@ -17,6 +17,7 @@ package net.taler.wallet +import android.annotation.SuppressLint import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -30,7 +31,7 @@ import android.widget.LinearLayout import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProviders +import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -40,7 +41,7 @@ import com.google.zxing.integration.android.IntentIntegrator.QR_CODE_TYPES import me.zhanghai.android.materialprogressbar.MaterialProgressBar import org.json.JSONObject -class WalletBalanceAdapter(private var myDataset: WalletBalances, private var model: WalletViewModel) : +class WalletBalanceAdapter(private var myDataset: WalletBalances) : RecyclerView.Adapter<WalletBalanceAdapter.MyViewHolder>() { init { @@ -72,6 +73,7 @@ class WalletBalanceAdapter(private var myDataset: WalletBalances, private var mo amountIncomingRow.visibility = View.GONE } else { amountIncomingRow.visibility = View.VISIBLE + @SuppressLint("SetTextI18n") amountIncomingView.text = "${amountIncoming.amount} ${amountIncoming.currency}" } } @@ -117,7 +119,7 @@ class PendingOperationsAdapter(private var myDataset: PendingOperations) : when (p.type) { "proposal-choice" -> { val btn1 = holder.rowView.findViewById<TextView>(R.id.button_pending_action_1) - btn1.text = "Refuse Proposal" + btn1.text = btn1.context.getString(R.string.pending_operations_refuse) btn1.visibility = View.VISIBLE btn1.setOnClickListener { this.listener?.onPendingOperationActionClick(p.type, p.detail) @@ -125,7 +127,7 @@ class PendingOperationsAdapter(private var myDataset: PendingOperations) : } else -> { val btn1 = holder.rowView.findViewById<TextView>(R.id.button_pending_action_1) - btn1.text = "(no action)" + btn1.text = btn1.context.getString(R.string.pending_operations_no_action) btn1.visibility = View.GONE btn1.setOnClickListener {} } @@ -156,12 +158,12 @@ interface PendingOperationClickListener { class ShowBalance : Fragment(), PendingOperationClickListener { private lateinit var pendingOperationsLabel: View - lateinit var balancesView: RecyclerView - lateinit var balancesPlaceholderView: TextView - lateinit var model: WalletViewModel - lateinit var balancesAdapter: WalletBalanceAdapter + private lateinit var balancesView: RecyclerView + private lateinit var balancesPlaceholderView: TextView + private lateinit var model: WalletViewModel + private lateinit var balancesAdapter: WalletBalanceAdapter - lateinit var pendingAdapter: PendingOperationsAdapter + private lateinit var pendingAdapter: PendingOperationsAdapter private fun triggerLoading() { val loading: Boolean = @@ -199,7 +201,9 @@ class ShowBalance : Fragment(), PendingOperationClickListener { } override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { - activity?.menuInflater?.inflate(R.menu.balance, menu) + inflater.inflate(R.menu.balance, menu) + Log.e("TEST", "MENU INFLATED!!! ${menu.size()}") + super.onCreateOptionsMenu(menu, inflater) } override fun onCreate(savedInstanceState: Bundle?) { @@ -207,7 +211,7 @@ class ShowBalance : Fragment(), PendingOperationClickListener { setHasOptionsMenu(true) model = activity?.run { - ViewModelProviders.of(this)[WalletViewModel::class.java] + ViewModelProvider(this)[WalletViewModel::class.java] } ?: throw Exception("Invalid Activity") } @@ -224,12 +228,12 @@ class ShowBalance : Fragment(), PendingOperationClickListener { balancesPlaceholderView.visibility = View.GONE balancesView.visibility = View.VISIBLE } - Log.v(TAG, "updating balances ${balances}") + Log.v(TAG, "updating balances $balances") balancesAdapter.update(balances) } private fun updatePending(pendingOperations: PendingOperations) { - if (pendingOperations.pending.size == 0) { + if (pendingOperations.pending.isEmpty()) { pendingOperationsLabel.visibility = View.GONE } else { pendingOperationsLabel.visibility = View.VISIBLE @@ -256,7 +260,7 @@ class ShowBalance : Fragment(), PendingOperationClickListener { val balances = model.balances.value!! - balancesAdapter = WalletBalanceAdapter(balances, model) + balancesAdapter = WalletBalanceAdapter(balances) view.findViewById<RecyclerView>(R.id.list_balances).apply { val myLayoutManager = LinearLayoutManager(context) @@ -280,7 +284,7 @@ class ShowBalance : Fragment(), PendingOperationClickListener { } model.testWithdrawalInProgress.observe(viewLifecycleOwner, Observer { loading -> - Log.v("taler-wallet", "observing balance loading ${loading} in show balance") + Log.v("taler-wallet", "observing balance loading $loading in show balance") withdrawTestkudosButton.isEnabled = !loading triggerLoading() }) @@ -307,11 +311,11 @@ class ShowBalance : Fragment(), PendingOperationClickListener { override fun onPendingOperationClick(type: String, detail: JSONObject) { val v = view ?: return - when (type) { + when { else -> { val bar = Snackbar.make( v, - "No detail view for ${type} implemented yet.", + "No detail view for $type implemented yet.", Snackbar.LENGTH_SHORT ) bar.show() diff --git a/app/src/main/java/net/taler/wallet/backend/WalletBackendService.kt b/app/src/main/java/net/taler/wallet/backend/WalletBackendService.kt index d97ccf2..0b71774 100644 --- a/app/src/main/java/net/taler/wallet/backend/WalletBackendService.kt +++ b/app/src/main/java/net/taler/wallet/backend/WalletBackendService.kt @@ -20,7 +20,11 @@ package net.taler.wallet.backend import akono.AkonoJni import android.app.Service import android.content.Intent -import android.os.* +import android.os.Handler +import android.os.IBinder +import android.os.Message +import android.os.Messenger +import android.os.RemoteException import android.util.Log import net.taler.wallet.HostCardEmulatorService import org.json.JSONObject @@ -96,7 +100,7 @@ class WalletBackendService : Service() { val svc = serviceWeakRef.get() ?: return when (msg.what) { MSG_COMMAND -> { - val data = msg.getData() + val data = msg.data val serviceRequestID = svc.nextRequestID++ val clientRequestID = data.getInt("requestID", 0) if (clientRequestID == 0) { @@ -124,10 +128,7 @@ class WalletBackendService : Service() { TAG, "mapping service request ID $serviceRequestID to client request ID $clientRequestID" ) - svc.requests.put( - serviceRequestID, - RequestData(clientRequestID, msg.replyTo) - ) + svc.requests[serviceRequestID] = RequestData(clientRequestID, msg.replyTo) } MSG_SUBSCRIBE_NOTIFY -> { Log.i(TAG, "subscribing client") @@ -165,7 +166,7 @@ class WalletBackendService : Service() { s.send(m) } catch (e: RemoteException) { if (rm == null) { - rm = LinkedList<Messenger>() + rm = LinkedList() } rm.add(s) subscribers.remove(s) @@ -179,10 +180,9 @@ class WalletBackendService : Service() { } private fun handleAkonoMessage(messageStr: String) { - Log.v(TAG, "got back message: ${messageStr}") + Log.v(TAG, "got back message: $messageStr") val message = JSONObject(messageStr) - val type = message.getString("type") - when (type) { + when (message.getString("type")) { "notification" -> { sendNotify() } @@ -195,8 +195,7 @@ class WalletBackendService : Service() { } } "response" -> { - val operation = message.getString("operation") - when (operation) { + when (val operation = message.getString("operation")) { "init" -> { Log.v(TAG, "got response for init operation") sendNotify() @@ -207,7 +206,7 @@ class WalletBackendService : Service() { else -> { val id = message.getInt("id") Log.v(TAG, "got response for operation $operation") - val rd = requests.get(id) + val rd = requests[id] if (rd == null) { Log.e(TAG, "wallet returned unknown request ID ($id)") return diff --git a/app/src/main/java/net/taler/wallet/crypto/Encoding.kt b/app/src/main/java/net/taler/wallet/crypto/Encoding.kt index 91a4c14..25a59be 100644 --- a/app/src/main/java/net/taler/wallet/crypto/Encoding.kt +++ b/app/src/main/java/net/taler/wallet/crypto/Encoding.kt @@ -51,7 +51,7 @@ object Base32Crockford { sb.append(encTable[v]) numBits -= 5 } - return sb.toString(); + return sb.toString() } fun decode(encoded: String, out: ByteArrayOutputStream) { @@ -114,6 +114,7 @@ object Base32Crockford { * @param dataSize size of the data to encode in bytes * @return size of the string that would result from encoding */ + @Suppress("unused") fun calculateEncodedStringLength(dataSize: Int): Int { return (dataSize * 8 + 4) / 5 } @@ -125,6 +126,7 @@ object Base32Crockford { * @param stringSize size of the string to decode * @return size of the resulting data in bytes */ + @Suppress("unused") fun calculateDecodedDataLength(stringSize: Int): Int { return stringSize * 5 / 8 } diff --git a/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt b/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt index fbae49c..9e5c99d 100644 --- a/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt +++ b/app/src/main/java/net/taler/wallet/history/HistoryEvent.kt @@ -19,11 +19,16 @@ package net.taler.wallet.history import androidx.annotation.DrawableRes import androidx.annotation.LayoutRes import androidx.annotation.StringRes -import com.fasterxml.jackson.annotation.* +import com.fasterxml.jackson.annotation.JsonIgnoreProperties +import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.annotation.JsonInclude.Include.NON_EMPTY +import com.fasterxml.jackson.annotation.JsonProperty +import com.fasterxml.jackson.annotation.JsonSubTypes import com.fasterxml.jackson.annotation.JsonSubTypes.Type +import com.fasterxml.jackson.annotation.JsonTypeInfo import com.fasterxml.jackson.annotation.JsonTypeInfo.As.PROPERTY import com.fasterxml.jackson.annotation.JsonTypeInfo.Id.NAME +import com.fasterxml.jackson.annotation.JsonTypeName import net.taler.wallet.ParsedAmount.Companion.parseAmount import net.taler.wallet.R import org.json.JSONObject @@ -38,6 +43,7 @@ enum class ReserveType { * Withdrawn from a bank that has "tight" Taler integration */ @JsonProperty("taler-bank-withdraw") + @Suppress("unused") TALER_BANK_WITHDRAW, } @@ -46,16 +52,21 @@ class ReserveCreationDetail(val type: ReserveType, val bankUrl: String?) enum class RefreshReason { @JsonProperty("manual") + @Suppress("unused") MANUAL, @JsonProperty("pay") PAY, @JsonProperty("refund") + @Suppress("unused") REFUND, @JsonProperty("abort-pay") + @Suppress("unused") ABORT_PAY, @JsonProperty("recoup") + @Suppress("unused") RECOUP, @JsonProperty("backup-restored") + @Suppress("unused") BACKUP_RESTORED } @@ -406,6 +417,7 @@ class HistoryRefundedEvent( ) abstract class WithdrawalSource +@Suppress("unused") @JsonTypeName("tip") class WithdrawalSourceTip( val tipId: String diff --git a/app/src/main/java/net/taler/wallet/history/WalletHistory.kt b/app/src/main/java/net/taler/wallet/history/WalletHistory.kt index a534f24..76b11ea 100644 --- a/app/src/main/java/net/taler/wallet/history/WalletHistory.kt +++ b/app/src/main/java/net/taler/wallet/history/WalletHistory.kt @@ -18,9 +18,14 @@ package net.taler.wallet.history import android.os.Bundle -import android.view.* +import android.view.LayoutInflater +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import android.view.View import android.view.View.INVISIBLE import android.view.View.VISIBLE +import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider @@ -40,7 +45,7 @@ interface OnEventClickListener { */ class WalletHistory : Fragment(), OnEventClickListener { - lateinit var model: WalletViewModel + private lateinit var model: WalletViewModel private lateinit var showAllItem: MenuItem private val historyAdapter = WalletHistoryAdapter(this) @@ -107,7 +112,4 @@ class WalletHistory : Fragment(), OnEventClickListener { .show(parentFragmentManager, null) } - companion object { - const val TAG = "taler-wallet" - } } diff --git a/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt b/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt index d47c31f..71bdebc 100644 --- a/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt +++ b/app/src/main/java/net/taler/wallet/history/WalletHistoryAdapter.kt @@ -16,8 +16,17 @@ package net.taler.wallet.history +import android.annotation.SuppressLint import android.graphics.Paint.STRIKE_THRU_TEXT_FLAG -import android.text.format.DateUtils.* +import android.text.format.DateUtils.DAY_IN_MILLIS +import android.text.format.DateUtils.FORMAT_ABBREV_MONTH +import android.text.format.DateUtils.FORMAT_ABBREV_RELATIVE +import android.text.format.DateUtils.FORMAT_NO_YEAR +import android.text.format.DateUtils.FORMAT_SHOW_DATE +import android.text.format.DateUtils.FORMAT_SHOW_TIME +import android.text.format.DateUtils.MINUTE_IN_MILLIS +import android.text.format.DateUtils.formatDateTime +import android.text.format.DateUtils.getRelativeTimeSpanString import android.view.LayoutInflater import android.view.View import android.view.View.GONE @@ -172,12 +181,14 @@ internal class WalletHistoryAdapter( } private fun showAmounts(effective: ParsedAmount, raw: ParsedAmount) { + @SuppressLint("SetTextI18n") amountWithdrawn.text = "+$raw" val calculatedFee = raw - effective if (calculatedFee.isZero()) { fee.visibility = GONE feeLabel.visibility = GONE } else { + @SuppressLint("SetTextI18n") fee.text = "-$calculatedFee" fee.visibility = VISIBLE feeLabel.visibility = VISIBLE @@ -208,11 +219,13 @@ internal class WalletHistoryAdapter( private fun bind(event: HistoryPaymentSentEvent) { title.text = event.orderShortInfo.summary + @SuppressLint("SetTextI18n") amountPaidWithFees.text = "-${parseAmount(event.amountPaidWithFees)}" } private fun bind(event: HistoryPaymentAbortedEvent) { title.text = event.orderShortInfo.summary + @SuppressLint("SetTextI18n") amountPaidWithFees.text = "-${parseAmount(event.amountLost)}" } @@ -220,6 +233,7 @@ internal class WalletHistoryAdapter( title.text = "" val fee = parseAmount(event.amountRefreshedRaw) - parseAmount(event.amountRefreshedEffective) + @SuppressLint("SetTextI18n") if (fee.isZero()) amountPaidWithFees.text = null else amountPaidWithFees.text = "-$fee" } |