diff --git a/.idea/misc.xml b/.idea/misc.xml index 703e5d4b89..cd2f3a654d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,6 +5,41 @@ + + + + diff --git a/app/build.gradle b/app/build.gradle index 7151fdcba5..b654558186 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.tangem.wallet" minSdkVersion 21 targetSdkVersion 28 - versionCode 104 - versionName "0.902.2." + generateVersionName() + versionCode 106 + versionName "0.903.2." + generateVersionName() testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } androidExtensions { diff --git a/app/src/main/java/com/tangem/App.kt b/app/src/main/java/com/tangem/App.kt index 5624dfb960..f4c1acd03a 100644 --- a/app/src/main/java/com/tangem/App.kt +++ b/app/src/main/java/com/tangem/App.kt @@ -5,13 +5,10 @@ import androidx.appcompat.app.AppCompatDelegate import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.tangem.data.local.PendingTransactionsStorage -import com.tangem.di.DaggerNavigatorComponent -import com.tangem.di.DaggerNetworkComponent -import com.tangem.di.NavigatorComponent -import com.tangem.di.NetworkComponent import com.tangem.card_android.android.data.Firmwares import com.tangem.card_android.android.data.PINStorage import com.tangem.card_common.data.Issuer +import com.tangem.di.* import com.tangem.server_android.data.LocalStorage import java.io.InputStreamReader import java.nio.charset.StandardCharsets @@ -26,10 +23,9 @@ class App : Application() { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) } - var networkComponent: NetworkComponent? = null - private set - var navigatorComponent: NavigatorComponent? = null - private set + lateinit var networkComponent: NetworkComponent + lateinit var navigatorComponent: NavigatorComponent + lateinit var toastHelperComponent: ToastHelperComponent lateinit var firmwaresStorage: Firmwares lateinit var localStorage: LocalStorage @@ -44,6 +40,7 @@ class App : Application() { networkComponent = DaggerNetworkComponent.create() navigatorComponent = buildNavigatorComponent() + toastHelperComponent = buildToastHelperComponent() // common init if (PINStorage.needInit()) @@ -62,6 +59,11 @@ class App : Application() { .build() } + private fun buildToastHelperComponent(): ToastHelperComponent { + return DaggerToastHelperComponent.builder() + .build() + } + private fun initIssuers() { try { applicationContext.assets.open("issuers.json").use { `is` -> diff --git a/app/src/main/java/com/tangem/Constant.kt b/app/src/main/java/com/tangem/Constant.kt index 433d912aa0..6283ce6435 100644 --- a/app/src/main/java/com/tangem/Constant.kt +++ b/app/src/main/java/com/tangem/Constant.kt @@ -4,14 +4,22 @@ import android.app.Activity object Constant { + const val URL_TANGEM = "https://play.google.com/store/apps/details?id=com.tangem.wallet" + const val EXTRA_BLOCKCHAIN_DATA = "BLOCKCHAIN_DATA" + const val WALLET_ADDRESS = "Wallet address" + const val EXTRA_MESSAGE = "message" const val EXTRA_MODIFICATION = "modification" const val EXTRA_MODIFICATION_DELETE = "delete" const val EXTRA_MODIFICATION_UPDATE = "update" + const val EXTRA_MODE = "mode" + + const val INTENT_TYPE_TEXT_PLAIN = "text/plain" + // LoadedWallet, VerifyCard const val REQUEST_CODE_SEND_TRANSACTION = 1 const val REQUEST_CODE_PURGE = 2 @@ -37,7 +45,7 @@ object Constant { const val MILLIS_AUTO_HIDE = 1000 // PinRequestActivity - const val EXTRA_MODE = "mode" + const val KEY_ALIAS = "pinKey" const val KEYSTORE = "AndroidKeyStore" diff --git a/app/src/main/java/com/tangem/di/NavigatorModule.kt b/app/src/main/java/com/tangem/di/NavigatorModule.kt index 7e4ee23826..0028345e74 100644 --- a/app/src/main/java/com/tangem/di/NavigatorModule.kt +++ b/app/src/main/java/com/tangem/di/NavigatorModule.kt @@ -16,6 +16,12 @@ internal class NavigatorModule { return Navigator() } + @Singleton + @Provides + fun provideToastHelper(): ToastHelper { + return ToastHelper() + } + @Singleton @Provides fun provideWaitSecurityDelayDialogNew(): WaitSecurityDelayDialogNew { diff --git a/app/src/main/java/com/tangem/di/ToastHelper.kt b/app/src/main/java/com/tangem/di/ToastHelper.kt new file mode 100644 index 0000000000..de340aecea --- /dev/null +++ b/app/src/main/java/com/tangem/di/ToastHelper.kt @@ -0,0 +1,27 @@ +package com.tangem.di + +import android.content.ActivityNotFoundException +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.view.ViewGroup +import com.google.android.material.snackbar.Snackbar +import com.tangem.Constant +import com.tangem.wallet.R + +class ToastHelper { + + fun showSnackbarUpdateVersion(context: Context, vg: ViewGroup, versionName: String) { + Snackbar.make(vg, String.format(context.getString(R.string.new_app_version), versionName), Snackbar.LENGTH_INDEFINITE) + .setAction(R.string.update) { + try { + val intent = Intent(Intent.ACTION_VIEW) + intent.data = Uri.parse(Constant.URL_TANGEM) + context.startActivity(intent) + } catch (e: ActivityNotFoundException) { + e.printStackTrace() + } + }.show() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/di/ToastHelperComponent.kt b/app/src/main/java/com/tangem/di/ToastHelperComponent.kt new file mode 100644 index 0000000000..b98d944333 --- /dev/null +++ b/app/src/main/java/com/tangem/di/ToastHelperComponent.kt @@ -0,0 +1,13 @@ +package com.tangem.di + +import com.tangem.ui.activity.MainActivity +import dagger.Component +import javax.inject.Singleton + +@Singleton +@Component(modules = [NavigatorModule::class]) +interface ToastHelperComponent { + + fun inject(activity: MainActivity) + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java b/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java index 4f27c40330..824bee559a 100644 --- a/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/btc/BtcEngine.java @@ -759,71 +759,64 @@ public class BtcEngine extends CoinEngine { public void requestFee(BlockchainRequestsCallbacks blockchainRequestsCallbacks, String targetAddress, Amount amount) throws Exception { final int calcSize = calculateEstimatedTransactionSize(targetAddress, amount.toValueString()); Log.e(TAG, String.format("Estimated tx size %d", calcSize)); - coinData.minFee = null; - coinData.maxFee = null; - coinData.normalFee = null; + coinData.minFee=null; + coinData.maxFee=null; + coinData.normalFee=null; - final ServerApiCommon serverApiCommon = new ServerApiCommon(); + final ServerApiElectrum serverApiElectrum = new ServerApiElectrum(); - final ServerApiCommon.EstimatedFeeListener estimatedFeeListener = new ServerApiCommon.EstimatedFeeListener() { + final ServerApiElectrum.ResponseListener electrumListener = new ServerApiElectrum.ResponseListener() { @Override - public void onSuccess(int blockCount, String estimateFeeResponse) { - BigDecimal fee = new BigDecimal(estimateFeeResponse); // BTC per 1 kb + public void onSuccess(ElectrumRequest electrumRequest) { + BigDecimal fee; + if (electrumRequest.isMethod(ElectrumRequest.METHOD_GetFee)) { + try { + fee = new BigDecimal(electrumRequest.getResultString()); //fee per KB - if (fee.equals(BigDecimal.ZERO)) { - if (blockchainRequestsCallbacks.allowAdvance()) { - serverApiCommon.requestBtcEstimatedFee(blockCount); + if (fee.equals(BigDecimal.ZERO)) { + serverApiElectrum.requestData(ctx, ElectrumRequest.getFee()); + } + +// if (calcSize != 0) { + fee = fee.multiply(new BigDecimal(calcSize)).divide(new BigDecimal(1024)); // (per KB -> per byte)*size +// } else { +// serverApiElectrum.requestData(ctx, ElectrumRequest.getFee()); +// } + + //compare fee to usual relay fee +// if (fee.compareTo(relayFee) < 0) { +// fee = relayFee; +// } + fee = fee.setScale(8, RoundingMode.DOWN); + + CoinEngine.Amount minAmount = new CoinEngine.Amount(fee, ctx.getBlockchain().getCurrency()); + CoinEngine.Amount normalAmount = new CoinEngine.Amount(fee.multiply(new BigDecimal(3)), ctx.getBlockchain().getCurrency()); + CoinEngine.Amount maxAmount = new CoinEngine.Amount(fee.multiply(new BigDecimal(6)), ctx.getBlockchain().getCurrency()); + + coinData.minFee = minAmount; + coinData.normalFee = normalAmount; + coinData.maxFee = maxAmount; +// if (coinData.minFee != null && coinData.normalFee != null && coinData.maxFee != null) { + blockchainRequestsCallbacks.onComplete(true); +// } else { +// blockchainRequestsCallbacks.onProgress(); +// } + + } catch (JSONException e) { + e.printStackTrace(); } - return; - } - - if (calcSize != 0) { - fee = fee.multiply(new BigDecimal(calcSize)).divide(new BigDecimal(1024), BigDecimal.ROUND_DOWN); // per Kb -> per byte - } else { - if (blockchainRequestsCallbacks.allowAdvance()) { - serverApiCommon.requestBtcEstimatedFee(blockCount); - } - return; - } - - fee = fee.setScale(8, RoundingMode.DOWN); - - switch (blockCount) { - case ServerApiCommon.ESTIMATE_FEE_MINIMAL: - coinData.minFee = new CoinEngine.Amount(fee, getFeeCurrency()); - break; - case ServerApiCommon.ESTIMATE_FEE_NORMAL: - coinData.normalFee = new CoinEngine.Amount(fee, getFeeCurrency()); - break; - case ServerApiCommon.ESTIMATE_FEE_PRIORITY: - coinData.maxFee = new CoinEngine.Amount(fee, getFeeCurrency()); - break; - } - - if (coinData.minFee != null && coinData.normalFee != null && coinData.maxFee != null) { - blockchainRequestsCallbacks.onComplete(true); - } else { - blockchainRequestsCallbacks.onProgress(); } } @Override - public void onFail(int blockCount, String message) { - // TODO - add fail counter to terminate after NNN tries - if (blockchainRequestsCallbacks.allowAdvance()) { - serverApiCommon.requestBtcEstimatedFee(blockCount); - return; - } - ctx.setError(ctx.getContext().getString(R.string.cannot_calculate_fee_wrong_data_received_from_node)); + public void onFail(ElectrumRequest electrumRequest) { + ctx.setError(electrumRequest.getError()); blockchainRequestsCallbacks.onComplete(false); } }; - serverApiCommon.setBtcEstimatedFeeListener(estimatedFeeListener); - - serverApiCommon.requestBtcEstimatedFee(ServerApiCommon.ESTIMATE_FEE_PRIORITY); - serverApiCommon.requestBtcEstimatedFee(ServerApiCommon.ESTIMATE_FEE_NORMAL); - serverApiCommon.requestBtcEstimatedFee(ServerApiCommon.ESTIMATE_FEE_MINIMAL); + serverApiElectrum.setResponseListener(electrumListener); + serverApiElectrum.requestData(ctx, ElectrumRequest.getFee()); } @Override diff --git a/app/src/main/java/com/tangem/ui/activity/CreateNewWalletActivity.kt b/app/src/main/java/com/tangem/ui/activity/CreateNewWalletActivity.kt index c8190e6477..c09d220e7b 100644 --- a/app/src/main/java/com/tangem/ui/activity/CreateNewWalletActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/CreateNewWalletActivity.kt @@ -33,6 +33,7 @@ import com.tangem.card_android.data.EXTRA_TANGEM_CARD import com.tangem.card_android.data.EXTRA_TANGEM_CARD_UID class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtocol.Notifications { + companion object { fun callingIntent(context: Context, ctx: TangemContext): Intent { val intent = Intent(context, CreateNewWalletActivity::class.java) @@ -69,26 +70,21 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, } override fun onTagDiscovered(tag: Tag) { - try { - // get IsoDep handle and run cardReader thread - val isoDep = IsoDep.get(tag) - val uid = tag.id - val sUID = Util.byteArrayToHexString(uid) + // get IsoDep handle and run cardReader thread + val isoDep = IsoDep.get(tag) + val uid = tag.id + val sUID = Util.byteArrayToHexString(uid) - if (sUID == ctx.card.uid) { - if (lastReadSuccess) - isoDep.timeout = ctx.card.pauseBeforePIN2 + 5000 - else - isoDep.timeout = ctx.card.pauseBeforePIN2 + 65000 + if (sUID == ctx.card.uid) { + if (lastReadSuccess) + isoDep.timeout = ctx.card.pauseBeforePIN2 + 5000 + else + isoDep.timeout = ctx.card.pauseBeforePIN2 + 65000 - createNewWalletTask = CreateNewWalletTask(ctx.card, NfcReader(nfcManager, isoDep), App.localStorage, App.pinStorage, this) - createNewWalletTask?.start() - } else { - nfcManager.ignoreTag(isoDep.tag) - } - } catch (e: Exception) { - e.printStackTrace() - } + createNewWalletTask = CreateNewWalletTask(ctx.card, NfcReader(nfcManager, isoDep), App.localStorage, App.pinStorage, this) + createNewWalletTask?.start() + } else + nfcManager.ignoreTag(isoDep.tag) } public override fun onPause() { @@ -143,37 +139,27 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, } }, 500) } else { - progressBar!!.post { + progressBar?.post { if (cardProtocol.error is CardProtocol.TangemException_ExtendedLengthNotSupported) { if (!NoExtendedLengthSupportDialog.allReadyShowed) { NoExtendedLengthSupportDialog().show(supportFragmentManager, NoExtendedLengthSupportDialog.TAG) } - } else { - Toast.makeText(baseContext, R.string.try_to_scan_again, Toast.LENGTH_SHORT).show() - } - progressBar!!.progress = 100 - progressBar!!.progressTintList = ColorStateList.valueOf(Color.RED) + } else + Toast.makeText(this, R.string.try_to_scan_again, Toast.LENGTH_SHORT).show() + + progressBar?.progress = 100 + progressBar?.progressTintList = ColorStateList.valueOf(Color.RED) } } } } - rlProgressBar.postDelayed({ - try { - rlProgressBar.visibility = View.GONE - } catch (e: Exception) { - e.printStackTrace() - } - }, 500) + rlProgressBar.postDelayed({ rlProgressBar?.visibility = View.GONE }, 500) progressBar?.postDelayed({ - try { - progressBar?.progress = 0 - progressBar?.progressTintList = ColorStateList.valueOf(Color.DKGRAY) - progressBar?.visibility = View.INVISIBLE - } catch (e: Exception) { - e.printStackTrace() - } + progressBar?.progress = 0 + progressBar?.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar?.visibility = View.INVISIBLE }, 500) } @@ -185,13 +171,9 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, createNewWalletTask = null progressBar?.postDelayed({ - try { - progressBar?.progress = 0 - progressBar?.progressTintList = ColorStateList.valueOf(Color.DKGRAY) - progressBar?.visibility = View.INVISIBLE - } catch (e: Exception) { - e.printStackTrace() - } + progressBar?.progress = 0 + progressBar?.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar?.visibility = View.INVISIBLE }, 500) } diff --git a/app/src/main/java/com/tangem/ui/activity/EmptyWalletActivity.kt b/app/src/main/java/com/tangem/ui/activity/EmptyWalletActivity.kt index 73c45ccee3..ce1adb51fd 100644 --- a/app/src/main/java/com/tangem/ui/activity/EmptyWalletActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/EmptyWalletActivity.kt @@ -64,7 +64,7 @@ class EmptyWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card super.onCreate(savedInstanceState) setContentView(R.layout.activity_empty_wallet) - App.navigatorComponent?.inject(this) + App.navigatorComponent.inject(this) nfcManager = NfcManager(this, this) lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) @@ -89,7 +89,7 @@ class EmptyWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card btnNewWallet.setOnClickListener { requestPIN2Count = 0 val intent = Intent(baseContext, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestPIN2.toString()) intent.putExtra(EXTRA_TANGEM_CARD_UID, ctx.card!!.uid) intent.putExtra(EXTRA_TANGEM_CARD, ctx.card!!.asBundle) startActivityForResult(intent, Constant.REQUEST_CODE_REQUEST_PIN2) @@ -107,7 +107,7 @@ class EmptyWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card if (requestCode == Constant.REQUEST_CODE_CREATE_NEW_WALLET_ACTIVITY) { if (resultCode == Activity.RESULT_OK) { if (data != null) { - data.putExtra("modification", "updateAndViewCard") + data.putExtra(Constant.EXTRA_MODIFICATION, "updateAndViewCard") data.putExtra("updateDelay", 0) setResult(Activity.RESULT_OK, data) } @@ -121,7 +121,7 @@ class EmptyWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card if (resultCode == Constant.RESULT_INVALID_PIN && requestPIN2Count < 2) { requestPIN2Count++ val intent = Intent(baseContext, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestPIN2.toString()) intent.putExtra(EXTRA_TANGEM_CARD_UID, ctx.card!!.uid) intent.putExtra(EXTRA_TANGEM_CARD, ctx.card!!.asBundle) startActivityForResult(intent, Constant.REQUEST_CODE_REQUEST_PIN2) diff --git a/app/src/main/java/com/tangem/ui/activity/LoadedWalletActivity.kt b/app/src/main/java/com/tangem/ui/activity/LoadedWalletActivity.kt index 8026d17341..ed8ecb2152 100644 --- a/app/src/main/java/com/tangem/ui/activity/LoadedWalletActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/LoadedWalletActivity.kt @@ -32,7 +32,7 @@ class LoadedWalletActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_loaded_wallet) - App.navigatorComponent?.inject(this) + App.navigatorComponent.inject(this) if (intent.extras!!.containsKey(NfcAdapter.EXTRA_TAG)) { val tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG) diff --git a/app/src/main/java/com/tangem/ui/activity/LogoActivity.kt b/app/src/main/java/com/tangem/ui/activity/LogoActivity.kt index 9b1baa5087..93e2452276 100644 --- a/app/src/main/java/com/tangem/ui/activity/LogoActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/LogoActivity.kt @@ -31,7 +31,7 @@ class LogoActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_logo) - App.navigatorComponent?.inject(this) + App.navigatorComponent.inject(this) ivLogo.setOnClickListener { hide() } } diff --git a/app/src/main/java/com/tangem/ui/activity/MainActivity.kt b/app/src/main/java/com/tangem/ui/activity/MainActivity.kt index cff1c18a5c..4ee6e16658 100644 --- a/app/src/main/java/com/tangem/ui/activity/MainActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/MainActivity.kt @@ -2,10 +2,13 @@ package com.tangem.ui.activity import android.Manifest import android.app.Activity +import android.content.ActivityNotFoundException import android.content.Context import android.content.Intent import android.content.pm.ActivityInfo import android.content.pm.PackageManager +import android.graphics.Color +import android.net.Uri import android.nfc.NfcAdapter import android.nfc.Tag import android.nfc.tech.IsoDep @@ -18,6 +21,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.PopupMenu import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat +import com.google.android.material.snackbar.Snackbar import com.scottyab.rootbeer.RootBeer import com.tangem.App import com.tangem.Constant @@ -50,6 +54,7 @@ import java.util.* import javax.inject.Inject import com.tangem.card_android.data.EXTRA_TANGEM_CARD import com.tangem.card_android.data.EXTRA_TANGEM_CARD_UID +import com.tangem.di.ToastHelper class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtocol.Notifications, PopupMenu.OnMenuItemClickListener { @@ -60,6 +65,8 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco @Inject internal lateinit var navigator: Navigator + @Inject + internal lateinit var toastHelper: ToastHelper private lateinit var nfcManager: NfcManager @@ -83,7 +90,8 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - App.navigatorComponent?.inject(this) + App.navigatorComponent.inject(this) + App.toastHelperComponent.inject(this) requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT @@ -128,11 +136,13 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco val apiHelper = ServerApiCommon() apiHelper.setLastVersionListener { response -> try { - if (response.isNullOrEmpty()) return@setLastVersionListener + if (response.isNullOrEmpty()) + return@setLastVersionListener val responseVersionName = response.trim(' ', '\n', '\r', '\t') val responseBuildVersion = responseVersionName.split('.').last() val appBuildVersion = BuildConfig.VERSION_NAME.split('.').last() - if (responseBuildVersion.toInt() > appBuildVersion.toInt()) Toast.makeText(this, "There is a new application version: $responseVersionName", Toast.LENGTH_LONG).show() + if (responseBuildVersion.toInt() > appBuildVersion.toInt()) + toastHelper.showSnackbarUpdateVersion(this, cl, responseVersionName) } catch (E: Exception) { E.printStackTrace() } @@ -275,7 +285,7 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco cardInfo.putBundle(EXTRA_TANGEM_CARD, bCard) cardProtocol.card.saveToBundle(bCard) - val uid = cardInfo.getString("UID") + val uid = cardInfo.getString(EXTRA_TANGEM_CARD_UID) val card = TangemCard(uid) cardInfo.getBundle(EXTRA_TANGEM_CARD)?.let { card.loadFromBundle(it) } @@ -288,7 +298,6 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco navigator.showLoadedWallet(this, it, ctx) } } -// ?: throw CardProtocol.TangemException("Can't create CoinEngine!") card.status == TangemCard.Status.Empty -> navigator.showEmptyWallet(this, ctx) card.status == TangemCard.Status.Purged -> Toast.makeText(this, R.string.erased_wallet, Toast.LENGTH_SHORT).show() card.status == TangemCard.Status.NotPersonalized -> Toast.makeText(this, R.string.not_personalized, Toast.LENGTH_SHORT).show() diff --git a/app/src/main/java/com/tangem/ui/activity/PinRequestActivity.kt b/app/src/main/java/com/tangem/ui/activity/PinRequestActivity.kt index 70d69899d6..f0e8188008 100644 --- a/app/src/main/java/com/tangem/ui/activity/PinRequestActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/PinRequestActivity.kt @@ -218,15 +218,15 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge if (mode == Mode.RequestNewPIN || mode == Mode.ConfirmNewPIN) { val resultData = Intent() val pin = PINStorage.loadEncryptedPIN(cipher) - resultData.putExtra("newPIN", pin) - resultData.putExtra("confirmPIN", pin) + resultData.putExtra(Constant.EXTRA_NEW_PIN, pin) + resultData.putExtra(Constant.EXTRA_CONFIRM_PIN, pin) setResult(Activity.RESULT_OK, resultData) finish() } else if (mode == Mode.RequestNewPIN2 || mode == Mode.ConfirmNewPIN2) { val resultData = Intent() val pin = PINStorage.loadEncryptedPIN2(cipher) - resultData.putExtra("newPIN2", pin) - resultData.putExtra("confirmPIN2", pin) + resultData.putExtra(Constant.EXTRA_NEW_PIN_2, pin) + resultData.putExtra(Constant.EXTRA_CONFIRM_PIN_2, pin) setResult(Activity.RESULT_OK, resultData) finish() } else if (mode == Mode.RequestPIN) { @@ -297,13 +297,13 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge var focusView: View? = null if (mode == Mode.ConfirmNewPIN) { - if (pin != intent.getStringExtra("newPIN")) { + if (pin != intent.getStringExtra(Constant.EXTRA_NEW_PIN)) { tvPin!!.error = getString(R.string.error_pin_confirmation_failed) focusView = tvPin cancel = true } } else if (mode == Mode.ConfirmNewPIN2) { - if (pin != intent.getStringExtra("newPIN2")) { + if (pin != intent.getStringExtra(Constant.EXTRA_NEW_PIN_2)) { tvPin!!.error = getString(R.string.error_pin_confirmation_failed) focusView = tvPin cancel = true @@ -321,17 +321,17 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge else { if (mode == Mode.RequestNewPIN || mode == Mode.ConfirmNewPIN) { val resultData = Intent() - resultData.putExtra("newPIN", pin) + resultData.putExtra(Constant.EXTRA_NEW_PIN, pin) if (mode == Mode.ConfirmNewPIN) - resultData.putExtra("confirmPIN", pin) + resultData.putExtra(Constant.EXTRA_CONFIRM_PIN, pin) setResult(Activity.RESULT_OK, resultData) finish() } else if (mode == Mode.RequestNewPIN2 || mode == Mode.ConfirmNewPIN2) { val resultData = Intent() - resultData.putExtra("newPIN2", pin) + resultData.putExtra(Constant.EXTRA_NEW_PIN_2, pin) if (mode == Mode.ConfirmNewPIN2) - resultData.putExtra("confirmPIN2", pin) + resultData.putExtra(Constant.EXTRA_CONFIRM_PIN_2, pin) setResult(Activity.RESULT_OK, resultData) finish() diff --git a/app/src/main/java/com/tangem/ui/activity/PinSwapActivity.kt b/app/src/main/java/com/tangem/ui/activity/PinSwapActivity.kt index d7f5e2b4c3..813d237ea9 100644 --- a/app/src/main/java/com/tangem/ui/activity/PinSwapActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/PinSwapActivity.kt @@ -136,7 +136,7 @@ class PinSwapActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProt progressBar!!.progressTintList = ColorStateList.valueOf(Color.DKGRAY) progressBar!!.visibility = View.INVISIBLE val intent = Intent() - intent.putExtra("message", "Cannot change PIN(s). Make sure you enter correct PIN2!") + intent.putExtra(Constant.EXTRA_MESSAGE, "Cannot change PIN(s). Make sure you enter correct PIN2!") intent.putExtra(EXTRA_TANGEM_CARD_UID, cardProtocol.card.uid) intent.putExtra(EXTRA_TANGEM_CARD, cardProtocol.card.asBundle) setResult(RESULT_INVALID_PIN, intent) diff --git a/app/src/main/java/com/tangem/ui/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt b/app/src/main/java/com/tangem/ui/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt index 9a7245e542..fb878b2629 100644 --- a/app/src/main/java/com/tangem/ui/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt @@ -42,7 +42,7 @@ class PrepareCryptonitOtherApiWithdrawalActivity : AppCompatActivity(), NfcAdapt super.onCreate(savedInstanceState) setContentView(R.layout.activity_prepare_cryptonit_other_api_withdrawal) - App.navigatorComponent?.inject(this) + App.navigatorComponent.inject(this) nfcManager = NfcManager(this, this) lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) diff --git a/app/src/main/java/com/tangem/ui/activity/PrepareKrakenWithdrawalActivity.kt b/app/src/main/java/com/tangem/ui/activity/PrepareKrakenWithdrawalActivity.kt index 0e1f03864a..370df3dc68 100644 --- a/app/src/main/java/com/tangem/ui/activity/PrepareKrakenWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/PrepareKrakenWithdrawalActivity.kt @@ -52,7 +52,7 @@ class PrepareKrakenWithdrawalActivity : AppCompatActivity(), NfcAdapter.ReaderCa super.onCreate(savedInstanceState) setContentView(R.layout.activity_prepare_kraken_withdrawal) - App.navigatorComponent?.inject(this) + App.navigatorComponent.inject(this) ctx = TangemContext.loadFromBundle(this, intent.extras) diff --git a/app/src/main/java/com/tangem/ui/activity/PrepareTransactionActivity.kt b/app/src/main/java/com/tangem/ui/activity/PrepareTransactionActivity.kt index 684c06fe39..9789a22815 100644 --- a/app/src/main/java/com/tangem/ui/activity/PrepareTransactionActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/PrepareTransactionActivity.kt @@ -47,7 +47,7 @@ class PrepareTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac super.onCreate(savedInstanceState) setContentView(R.layout.activity_prepare_transaction) - App.navigatorComponent?.inject(this) + App.navigatorComponent.inject(this) nfcManager = NfcManager(this, this) lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) diff --git a/app/src/main/java/com/tangem/ui/activity/PurgeActivity.kt b/app/src/main/java/com/tangem/ui/activity/PurgeActivity.kt index 58e3bc942e..1dc1095f33 100644 --- a/app/src/main/java/com/tangem/ui/activity/PurgeActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/PurgeActivity.kt @@ -14,6 +14,7 @@ import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.tangem.App +import com.tangem.Constant import com.tangem.domain.wallet.TangemContext import com.tangem.ui.dialog.NoExtendedLengthSupportDialog import com.tangem.ui.dialog.WaitSecurityDelayDialog @@ -63,7 +64,7 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc super.onCreate(savedInstanceState) setContentView(R.layout.activity_purge) - App.navigatorComponent?.inject(this) + App.navigatorComponent.inject(this) requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT @@ -175,7 +176,7 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc val intent = Intent() intent.putExtra(EXTRA_TANGEM_CARD_UID, cardProtocol.card.uid) intent.putExtra(EXTRA_TANGEM_CARD, cardProtocol.card.asBundle) - intent.putExtra("message", getString(R.string.cannot_erase_wallet)) + intent.putExtra(Constant.EXTRA_MESSAGE, getString(R.string.cannot_erase_wallet)) setResult(RESULT_INVALID_PIN, intent) finish() } catch (e: Exception) { diff --git a/app/src/main/java/com/tangem/ui/activity/VerifyCardActivity.kt b/app/src/main/java/com/tangem/ui/activity/VerifyCardActivity.kt index c9942b0195..1321576d1a 100644 --- a/app/src/main/java/com/tangem/ui/activity/VerifyCardActivity.kt +++ b/app/src/main/java/com/tangem/ui/activity/VerifyCardActivity.kt @@ -29,7 +29,7 @@ class VerifyCardActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_verify_card) - App.navigatorComponent?.inject(this) + App.navigatorComponent.inject(this) } override fun onBackPressed() { diff --git a/app/src/main/java/com/tangem/ui/dialog/PINSwapWarningDialog.java b/app/src/main/java/com/tangem/ui/dialog/PINSwapWarningDialog.java index 50b24b101e..a977511814 100644 --- a/app/src/main/java/com/tangem/ui/dialog/PINSwapWarningDialog.java +++ b/app/src/main/java/com/tangem/ui/dialog/PINSwapWarningDialog.java @@ -8,13 +8,13 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.fragment.app.DialogFragment; +import com.tangem.Constant; import com.tangem.wallet.R; public class PINSwapWarningDialog extends DialogFragment { public static final String TAG = PINSwapWarningDialog.class.getSimpleName(); - public static final String EXTRA_MESSAGE = "message"; - private String message; + private String message = ""; private OnPositiveButton mOnPositiveButton; public interface OnPositiveButton { @@ -28,7 +28,9 @@ public class PINSwapWarningDialog extends DialogFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - message = getArguments().getString(EXTRA_MESSAGE); + if (getArguments() != null) { + message = getArguments().getString(Constant.EXTRA_MESSAGE); + } } @NonNull @@ -45,7 +47,7 @@ public class PINSwapWarningDialog extends DialogFragment { } @Override - public void onCancel(DialogInterface dialog) { + public void onCancel(@NonNull DialogInterface dialog) { super.onCancel(dialog); } diff --git a/app/src/main/java/com/tangem/ui/dialog/ShowQRCodeDialog.java b/app/src/main/java/com/tangem/ui/dialog/ShowQRCodeDialog.java index 49646c489f..119c2a6e49 100644 --- a/app/src/main/java/com/tangem/ui/dialog/ShowQRCodeDialog.java +++ b/app/src/main/java/com/tangem/ui/dialog/ShowQRCodeDialog.java @@ -21,6 +21,8 @@ import androidx.fragment.app.DialogFragment; * Created by dvol on 06.03.2018. */ public class ShowQRCodeDialog extends DialogFragment { + public static final String TAG = ShowQRCodeDialog.class.getSimpleName(); + private ImageView ivQR; private TextView tvQRaddress; private Bitmap bmQR; @@ -71,7 +73,7 @@ public class ShowQRCodeDialog extends DialogFragment { activity.runOnUiThread(() -> { ShowQRCodeDialog instance = new ShowQRCodeDialog(); instance.setup(content); - instance.show(activity.getSupportFragmentManager(), "ShowQRCodeDialog"); + instance.show(activity.getSupportFragmentManager(), TAG); }); } diff --git a/app/src/main/java/com/tangem/ui/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/ui/fragment/LoadedWallet.kt index cafb001a58..1a71db7376 100644 --- a/app/src/main/java/com/tangem/ui/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/ui/fragment/LoadedWallet.kt @@ -360,9 +360,9 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback pinSwapWarningDialog.setOnRefreshPage { (activity as LoadedWalletActivity).navigator.showPinSwap(context as Activity, newPIN, newPIN2) } val bundle = Bundle() if (!CardProtocol.isDefaultPIN(newPIN) || !CardProtocol.isDefaultPIN2(newPIN2)) - bundle.putString(PINSwapWarningDialog.EXTRA_MESSAGE, getString(R.string.if_you_forget)) + bundle.putString(Constant.EXTRA_MESSAGE, getString(R.string.if_you_forget)) else - bundle.putString(PINSwapWarningDialog.EXTRA_MESSAGE, getString(R.string.if_you_use_default)) + bundle.putString(Constant.EXTRA_MESSAGE, getString(R.string.if_you_use_default)) pinSwapWarningDialog.arguments = bundle activity?.supportFragmentManager?.let { pinSwapWarningDialog.show(it, PINSwapWarningDialog.TAG) } } @@ -388,8 +388,8 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback (activity as LoadedWalletActivity).navigator.showPinRequestRequestPin2(context as Activity, PinRequestActivity.Mode.RequestPIN2.toString(), ctx) return } else { - if (data != null && data.extras!!.containsKey("message")) { - ctx.error = data.getStringExtra("message") + if (data != null && data.extras!!.containsKey(Constant.EXTRA_MESSAGE)) { + ctx.error = data.getStringExtra(Constant.EXTRA_MESSAGE) } } } @@ -420,8 +420,8 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback return } else { - if (data != null && data.extras!!.containsKey("message")) { - ctx.error = data.getStringExtra("message") + if (data != null && data.extras!!.containsKey(Constant.EXTRA_MESSAGE)) { + ctx.error = data.getStringExtra(Constant.EXTRA_MESSAGE) } } updateViews() @@ -622,10 +622,6 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback btnExtract.isEnabled = false btnExtract.backgroundTintList = inactiveColor } - -// //TODO why ??? -// ctx.error = null -// ctx.message = null } private fun refresh() { @@ -767,10 +763,10 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback private fun doShareWallet(useURI: Boolean) { if (useURI) { val engine = CoinEngineFactory.create(ctx) - val txtShare = engine!!.shareWalletUri.toString() + val txtShare = engine?.shareWalletUri.toString() val intent = Intent(Intent.ACTION_SEND) - intent.type = "text/plain" - intent.putExtra(Intent.EXTRA_SUBJECT, "Wallet address") + intent.type = Constant.INTENT_TYPE_TEXT_PLAIN + intent.putExtra(Intent.EXTRA_SUBJECT, Constant.WALLET_ADDRESS) intent.putExtra(Intent.EXTRA_TEXT, txtShare) val packageManager = activity?.packageManager diff --git a/app/src/main/java/com/tangem/ui/fragment/VerifyCard.kt b/app/src/main/java/com/tangem/ui/fragment/VerifyCard.kt index 302c7f2347..c13af16ed7 100644 --- a/app/src/main/java/com/tangem/ui/fragment/VerifyCard.kt +++ b/app/src/main/java/com/tangem/ui/fragment/VerifyCard.kt @@ -6,7 +6,6 @@ import android.nfc.NfcAdapter import android.nfc.Tag import android.os.Build import android.os.Bundle -import androidx.core.content.ContextCompat import android.text.Html import android.text.format.DateUtils import android.view.LayoutInflater @@ -14,21 +13,24 @@ import android.view.View import android.view.ViewGroup import android.widget.PopupMenu import android.widget.Toast +import androidx.core.content.ContextCompat import com.tangem.App import com.tangem.Constant -import com.tangem.data.Blockchain -import com.tangem.domain.wallet.CoinEngineFactory -import com.tangem.domain.wallet.TangemContext -import com.tangem.ui.activity.* -import com.tangem.ui.dialog.PINSwapWarningDialog -import com.tangem.ui.event.DeletingWalletFinish import com.tangem.card_android.android.data.PINStorage import com.tangem.card_android.android.nfc.NfcLifecycleObserver import com.tangem.card_android.android.reader.NfcManager +import com.tangem.card_android.data.EXTRA_TANGEM_CARD +import com.tangem.card_android.data.EXTRA_TANGEM_CARD_UID import com.tangem.card_android.data.loadFromBundle import com.tangem.card_common.data.TangemCard import com.tangem.card_common.reader.CardProtocol -import com.tangem.util.LOG +import com.tangem.data.Blockchain +import com.tangem.domain.wallet.CoinEngineFactory +import com.tangem.domain.wallet.TangemContext +import com.tangem.ui.activity.PinRequestActivity +import com.tangem.ui.activity.VerifyCardActivity +import com.tangem.ui.dialog.PINSwapWarningDialog +import com.tangem.ui.event.DeletingWalletFinish import com.tangem.wallet.BuildConfig import com.tangem.wallet.R import kotlinx.android.synthetic.main.fr_verify_card.* @@ -73,7 +75,7 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { btnOk.setOnClickListener { val data = prepareResultIntent() - data.putExtra(Constant.EXTRA_MODIFICATION, "update") + data.putExtra(Constant.EXTRA_MODIFICATION, getString(R.string.update)) activity?.finish() } } @@ -96,20 +98,19 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - LOG.i(TAG, "requestCode $requestCode resultCode $resultCode") when (requestCode) { Constant.REQUEST_CODE_ENTER_NEW_PIN -> if (resultCode == Activity.RESULT_OK) { if (data != null) { - if (data.extras!!.containsKey("confirmPIN")) { + if (data.extras!!.containsKey(Constant.EXTRA_CONFIRM_PIN)) { val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestPIN2.toString()) ctx.saveToIntent(intent) - newPIN = data.getStringExtra("newPIN") + newPIN = data.getStringExtra(Constant.EXTRA_NEW_PIN) startActivityForResult(intent, Constant.REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN) } else { val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("newPIN", data.getStringExtra("newPIN")) - intent.putExtra("mode", PinRequestActivity.Mode.ConfirmNewPIN.toString()) + intent.putExtra(Constant.EXTRA_NEW_PIN, data.getStringExtra(Constant.EXTRA_NEW_PIN)) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.ConfirmNewPIN.toString()) startActivityForResult(intent, Constant.REQUEST_CODE_ENTER_NEW_PIN) } } @@ -117,16 +118,16 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { Constant.REQUEST_CODE_ENTER_NEW_PIN2 -> if (resultCode == Activity.RESULT_OK) { if (data != null) { - if (data.extras!!.containsKey("confirmPIN2")) { + if (data.extras!!.containsKey(Constant.EXTRA_CONFIRM_PIN_2)) { val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestPIN2.toString()) ctx.saveToIntent(intent) - newPIN2 = data.getStringExtra("newPIN2") + newPIN2 = data.getStringExtra(Constant.EXTRA_NEW_PIN_2) startActivityForResult(intent, Constant.REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN) } else { val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("newPIN2", data.getStringExtra("newPIN2")) - intent.putExtra("mode", PinRequestActivity.Mode.ConfirmNewPIN2.toString()) + intent.putExtra(Constant.EXTRA_NEW_PIN_2, data.getStringExtra(Constant.EXTRA_NEW_PIN_2)) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.ConfirmNewPIN2.toString()) startActivityForResult(intent, Constant.REQUEST_CODE_ENTER_NEW_PIN2) } } @@ -141,9 +142,9 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { pinSwapWarningDialog.setOnRefreshPage { (activity as VerifyCardActivity).navigator.showPinSwap(context as Activity, newPIN, newPIN2) } val bundle = Bundle() if (!CardProtocol.isDefaultPIN(newPIN) || !CardProtocol.isDefaultPIN2(newPIN2)) - bundle.putString(PINSwapWarningDialog.EXTRA_MESSAGE, getString(R.string.if_you_forget)) + bundle.putString(Constant.EXTRA_MESSAGE, getString(R.string.if_you_forget)) else - bundle.putString(PINSwapWarningDialog.EXTRA_MESSAGE, getString(R.string.if_you_use_default)) + bundle.putString(Constant.EXTRA_MESSAGE, getString(R.string.if_you_use_default)) pinSwapWarningDialog.arguments = bundle activity?.supportFragmentManager?.let { pinSwapWarningDialog.show(it, PINSwapWarningDialog.TAG) } } @@ -151,27 +152,27 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { Constant.REQUEST_CODE_SWAP_PIN -> if (resultCode == Activity.RESULT_OK) { if (data == null) { ctx.saveToIntent(data) - data?.putExtra("modification", "delete") + data?.putExtra(Constant.EXTRA_MODIFICATION, Constant.EXTRA_MODIFICATION_DELETE) } else - data.putExtra("modification", "update") - activity!!.setResult(Activity.RESULT_OK, data) - activity!!.finish() + data.putExtra(Constant.EXTRA_MODIFICATION, Constant.EXTRA_MODIFICATION_UPDATE) + activity?.setResult(Activity.RESULT_OK, data) + activity?.finish() } else { - if (data != null && data.extras!!.containsKey("UID") && data.extras!!.containsKey("Card")) { - val updatedCard = TangemCard(data.getStringExtra("UID")) - updatedCard.loadFromBundle(data.getBundleExtra("Card")) + if (data != null && data.extras!!.containsKey(EXTRA_TANGEM_CARD_UID) && data.extras!!.containsKey(EXTRA_TANGEM_CARD)) { + val updatedCard = TangemCard(data.getStringExtra(EXTRA_TANGEM_CARD_UID)) + updatedCard.loadFromBundle(data.getBundleExtra(EXTRA_TANGEM_CARD)) ctx.card = updatedCard } if (resultCode == Constant.RESULT_INVALID_PIN && requestPIN2Count < 2) { requestPIN2Count++ val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestPIN2.toString()) ctx.saveToIntent(intent) startActivityForResult(intent, Constant.REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN) return } else { - if (data != null && data.extras!!.containsKey("message")) { - ctx.error = data.getStringExtra("message") + if (data != null && data.extras!!.containsKey(Constant.EXTRA_MESSAGE)) { + ctx.error = data.getStringExtra(Constant.EXTRA_MESSAGE) } } } @@ -179,21 +180,10 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { Constant.REQUEST_CODE_REQUEST_PIN2_FOR_PURGE -> if (resultCode == Activity.RESULT_OK) (activity as VerifyCardActivity).navigator.showPurge(context as Activity, ctx) -// Constant.REQUEST_CODE_PURGE -> if (resultCode == Activity.RESULT_OK) { -// if (data == null) { -// ctx.saveToIntent(data) -// data?.putExtra(Constant.EXTRA_MODIFICATION, "delete") -// } else -// data.putExtra(Constant.EXTRA_MODIFICATION, "update") -// -// activity?.setResult(Activity.RESULT_OK, data) -// activity?.finish() -// } - else { - if (data != null && data.extras!!.containsKey("UID") && data.extras!!.containsKey("Card")) { - val updatedCard = TangemCard(data.getStringExtra("UID")) - updatedCard.loadFromBundle(data.getBundleExtra("Card")) + if (data != null && data.extras!!.containsKey(EXTRA_TANGEM_CARD_UID) && data.extras!!.containsKey(EXTRA_TANGEM_CARD)) { + val updatedCard = TangemCard(data.getStringExtra(EXTRA_TANGEM_CARD_UID)) + updatedCard.loadFromBundle(data.getBundleExtra(EXTRA_TANGEM_CARD)) ctx.card = updatedCard } if (resultCode == Constant.RESULT_INVALID_PIN && requestPIN2Count < 2) { @@ -204,8 +194,8 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { startActivityForResult(intent, Constant.REQUEST_CODE_REQUEST_PIN2_FOR_PURGE) return } else { - if (data != null && data.extras!!.containsKey("message")) { - ctx.error = data.getStringExtra("message") + if (data != null && data.extras!!.containsKey(Constant.EXTRA_MESSAGE)) { + ctx.error = data.getStringExtra(Constant.EXTRA_MESSAGE) } } updateViews() @@ -403,7 +393,7 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { private fun doSetPin() { requestPIN2Count = 0 val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestNewPIN.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestNewPIN.toString()) newPIN = "" newPIN2 = "" startActivityForResult(intent, Constant.REQUEST_CODE_ENTER_NEW_PIN) @@ -412,7 +402,7 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { private fun doResetPin() { requestPIN2Count = 0 val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestPIN2.toString()) ctx.saveToIntent(intent) newPIN = PINStorage.getDefaultPIN() newPIN2 = "" @@ -422,7 +412,7 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { private fun doResetPin2() { requestPIN2Count = 0 val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestPIN2.toString()) ctx.saveToIntent(intent) newPIN = "" newPIN2 = PINStorage.getDefaultPIN2() @@ -432,7 +422,7 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { private fun doResetPins() { requestPIN2Count = 0 val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestPIN2.toString()) ctx.saveToIntent(intent) newPIN = PINStorage.getDefaultPIN() newPIN2 = PINStorage.getDefaultPIN2() @@ -442,7 +432,7 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { private fun doSetPin2() { requestPIN2Count = 0 val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestNewPIN2.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestNewPIN2.toString()) newPIN = "" newPIN2 = "" startActivityForResult(intent, Constant.REQUEST_CODE_ENTER_NEW_PIN2) @@ -459,7 +449,7 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { } val intent = Intent(context, PinRequestActivity::class.java) - intent.putExtra("mode", PinRequestActivity.Mode.RequestPIN2.toString()) + intent.putExtra(Constant.EXTRA_MODE, PinRequestActivity.Mode.RequestPIN2.toString()) ctx.saveToIntent(intent) startActivityForResult(intent, Constant.REQUEST_CODE_REQUEST_PIN2_FOR_PURGE) } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index edc089a4db..cc0bdcca10 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,8 +1,8 @@ - - - - - - + android:layout_gravity="bottom|start" + android:layout_margin="10dp" + android:src="@drawable/ic_show_menu" + app:backgroundTint="@color/colorPrimary" + app:fabSize="normal" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fr_loaded_wallet.xml b/app/src/main/res/layout/fr_loaded_wallet.xml index 19b3bfe5d2..85a18b6774 100644 --- a/app/src/main/res/layout/fr_loaded_wallet.xml +++ b/app/src/main/res/layout/fr_loaded_wallet.xml @@ -117,89 +117,83 @@ android:id="@+id/loWallet" android:layout_width="match_parent" android:layout_height="0dp" + android:layout_weight="1" android:baselineAligned="false" - android:gravity="top|center" - android:orientation="horizontal" + android:gravity="center_vertical|center_horizontal" + android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHeight_min="wrap" app:layout_constraintTop_toBottomOf="@+id/guideline"> - + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" + android:fontFamily="@font/maaxmedium" + android:textAlignment="center" + android:textColor="@color/primary_dark" + android:textSize="18sp" + android:textStyle="normal" + tools:text="Bitcoin" /> - + + + + + + - - - - - - - - - + android:layout_weight="1" + android:backgroundTint="@color/white" + android:drawableStart="@drawable/ic_content_copy_black_24dp" + android:elevation="15dp" + android:fontFamily="@font/saira_condensed_bold" + android:paddingLeft="20dp" + android:paddingRight="20dp" + android:text="@string/copy" + android:textColor="@color/primary_dark" /> + @@ -236,7 +230,7 @@ android:elevation="3dp" android:fontFamily="@font/maax" android:padding="4dp" - android:shadowColor="@color/cardview_shadow_start_color" + android:shadowColor="@color/cardview_shadow_star" android:textAlignment="center" android:textColor="@color/white" android:textStyle="bold" @@ -257,14 +251,11 @@ android:id="@+id/btnLoad" style="@style/AppTheme.RoundedCornerMaterialButton" android:layout_width="0dp" - android:layout_height="50dp" + android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:layout_marginBottom="5dp" + android:layout_marginBottom="10dp" android:layout_weight="1" - android:elevation="15dp" android:fontFamily="@font/saira_condensed_bold" - android:paddingLeft="20dp" - android:paddingRight="20dp" android:text="@string/load" android:textSize="@dimen/text_size_large" /> @@ -272,15 +263,12 @@ android:id="@+id/btnExtract" style="@style/AppTheme.RoundedCornerMaterialButton" android:layout_width="0dp" - android:layout_height="50dp" + android:layout_height="wrap_content" android:layout_marginTop="10dp" - android:layout_marginBottom="5dp" + android:layout_marginBottom="10dp" android:layout_weight="1" - android:elevation="15dp" android:enabled="false" android:fontFamily="@font/saira_condensed_bold" - android:paddingLeft="20dp" - android:paddingRight="20dp" android:text="@string/extract" android:textSize="@dimen/text_size_large" /> @@ -291,8 +279,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" - android:paddingTop="10dp" - android:paddingBottom="10dp" app:layout_constraintBottom_toBottomOf="parent"> @@ -301,13 +287,12 @@ android:id="@+id/btnNewScan" style="@style/AppTheme.RoundedCornerMaterialButton" android:layout_width="0dp" - android:layout_height="34dp" - android:layout_marginTop="5dp" - android:layout_marginBottom="5dp" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" android:layout_weight="1" android:backgroundTint="@color/white" android:drawableStart="@drawable/ic_nfc_white_24dp" - android:elevation="15dp" android:fontFamily="@font/saira_condensed_bold" android:paddingLeft="20dp" android:paddingRight="20dp" diff --git a/app/src/main/res/layout/layout_btn_details.xml b/app/src/main/res/layout/layout_btn_details.xml index 34de9aff03..b10556cf5f 100644 --- a/app/src/main/res/layout/layout_btn_details.xml +++ b/app/src/main/res/layout/layout_btn_details.xml @@ -4,13 +4,12 @@ android:id="@+id/btnDetails" style="@style/AppTheme.RoundedCornerMaterialButton" android:layout_width="0dp" - android:layout_height="34dp" - android:layout_marginTop="5dp" - android:layout_marginBottom="5dp" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp" android:layout_weight="1" android:backgroundTint="@color/white" android:drawableStart="@drawable/ic_settings_black_24dp" - android:elevation="15dp" android:fontFamily="@font/saira_condensed_bold" android:paddingLeft="20dp" android:paddingRight="20dp" diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index bc28012e33..3d72001a11 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -37,5 +37,6 @@ #7c0a02 #600600 #bff2af + #37000000 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f20adac23e..815f8e5599 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -91,6 +91,8 @@ Last unspent Wallet was erased Not personalized + There is a new application version: %1$s + Update The wallet is empty