From 592fd2e068361094f84aeb6ed327824d103b84e0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 30 Jan 2019 22:11:52 +0300 Subject: [PATCH 01/12] Updated on 2026-08-14 --- .../presentation/dialog/WaitSecurityDelayDialog.java | 2 -- .../com/tangem/presentation/fragment/LoadedWallet.kt | 11 +++++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/tangem/presentation/dialog/WaitSecurityDelayDialog.java b/app/src/main/java/com/tangem/presentation/dialog/WaitSecurityDelayDialog.java index afdfe49465..232666d59e 100644 --- a/app/src/main/java/com/tangem/presentation/dialog/WaitSecurityDelayDialog.java +++ b/app/src/main/java/com/tangem/presentation/dialog/WaitSecurityDelayDialog.java @@ -3,8 +3,6 @@ package com.tangem.presentation.dialog; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; - -import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt index c1d0a3eafc..941929df51 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -111,7 +111,7 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - val engine=CoinEngineFactory.create(ctx) + val engine = CoinEngineFactory.create(ctx) tvBalance.setSingleLine(!engine!!.needMultipleLinesForBalance()) @@ -663,6 +663,8 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback requestCounter++ coinEngine!!.requestBalanceAndUnspentTransactions( object : CoinEngine.BlockchainRequestsCallbacks { + + override fun onComplete(success: Boolean) { LOG.i(TAG, "requestBalanceAndUnspentTransactions onComplete: $success, request counter $requestCounter") if (activity == null) return @@ -680,7 +682,12 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback } override fun allowAdvance(): Boolean { - return context?.let { UtilHelper.isOnline(it) }!! + return try { + context?.let { UtilHelper.isOnline(it) }!! + } catch (e: KotlinNullPointerException) { + e.printStackTrace() + false + } } } ) From f630f78d0cd19b427726c0cf04c46e2b810a098f Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 30 Jan 2019 22:30:27 +0300 Subject: [PATCH 02/12] Updated on 2026-08-14 --- app/src/main/res/layout/activity_logo.xml | 41 ++++++++++++----------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/app/src/main/res/layout/activity_logo.xml b/app/src/main/res/layout/activity_logo.xml index 3aafbaa73a..9523ad9386 100644 --- a/app/src/main/res/layout/activity_logo.xml +++ b/app/src/main/res/layout/activity_logo.xml @@ -1,11 +1,9 @@ - @@ -13,34 +11,39 @@ android:id="@+id/ivLogo" android:layout_width="match_parent" android:layout_height="70dp" - android:layout_gravity="center_vertical" - android:baselineAligned="false" - android:src="@drawable/tangem_logo_full_new"/> + android:src="@drawable/tangem_logo_full_new" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + android:textSize="@dimen/text_size_small" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/ivLogo" /> + android:textSize="@dimen/text_size_small" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" /> - + \ No newline at end of file From 9258251287aa507e4f4325c0487ad4c788a7ba73 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 30 Jan 2019 23:07:35 +0300 Subject: [PATCH 03/12] Updated on 2026-08-14 --- app/src/main/res/layout/fr_loaded_wallet.xml | 10 ++++---- app/src/main/res/layout/fr_verify_card.xml | 26 +++++++++----------- app/src/main/res/layout/toolbar.xml | 10 -------- 3 files changed, 17 insertions(+), 29 deletions(-) delete mode 100644 app/src/main/res/layout/toolbar.xml diff --git a/app/src/main/res/layout/fr_loaded_wallet.xml b/app/src/main/res/layout/fr_loaded_wallet.xml index 79aacd1d7f..4ef67bebce 100644 --- a/app/src/main/res/layout/fr_loaded_wallet.xml +++ b/app/src/main/res/layout/fr_loaded_wallet.xml @@ -88,9 +88,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="@font/maaxmedium" - android:text=" " android:textAlignment="center" - android:visibility="visible" /> + android:visibility="visible" + tools:text="Verified balance" + tools:textColor="@color/confirmed" /> @@ -117,12 +117,12 @@ android:id="@+id/loWallet" android:layout_width="match_parent" android:layout_height="0dp" + android:baselineAligned="false" android:gravity="top|center" android:orientation="horizontal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHeight_min="wrap" - app:layout_constraintTop_toBottomOf="@+id/guideline" - android:baselineAligned="false"> + app:layout_constraintTop_toBottomOf="@+id/guideline"> @@ -44,8 +44,8 @@ android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentTop="true" - android:layout_marginBottom="24dp" android:layout_marginTop="8dp" + android:layout_marginBottom="24dp" android:fontFamily="@font/maaxmedium" android:text="@string/card_id" android:textAlignment="center" @@ -57,8 +57,8 @@ android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentTop="true" - android:layout_marginBottom="4dp" android:layout_marginTop="32dp" + android:layout_marginBottom="4dp" android:fontFamily="@font/maax" android:text="@string/no_data_string_1" android:textAlignment="center" @@ -71,8 +71,8 @@ android:id="@+id/view" android:layout_width="match_parent" android:layout_height="1dp" - android:layout_marginBottom="8dp" android:layout_marginTop="6dp" + android:layout_marginBottom="8dp" android:layout_weight="1" android:background="@android:color/darker_gray" /> @@ -134,7 +134,9 @@ android:layout_height="32dp" android:layout_marginEnd="8dp" android:src="@drawable/tangem_logo_small_new" - app:layout_constraintEnd_toEndOf="parent" /> + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" /> @@ -293,8 +295,8 @@ android:id="@+id/view2" android:layout_width="match_parent" android:layout_height="1dp" - android:layout_marginBottom="6dp" android:layout_marginTop="6dp" + android:layout_marginBottom="6dp" android:layout_weight="1" android:background="@android:color/darker_gray" /> @@ -408,8 +410,8 @@ android:id="@+id/view3" android:layout_width="match_parent" android:layout_height="1dp" - android:layout_marginBottom="6dp" android:layout_marginTop="6dp" + android:layout_marginBottom="6dp" android:layout_weight="1" android:background="@android:color/darker_gray" /> @@ -527,8 +529,6 @@ android:shadowDx="2" android:shadowDy="2" android:shadowRadius="2" - - android:textAlignment="center" android:textColor="@color/black" android:textStyle="bold" @@ -537,8 +537,6 @@ @@ -590,8 +588,8 @@ android:id="@+id/imgDeveloperVersion" android:layout_width="24dp" android:layout_height="24dp" - android:layout_alignParentBottom="true" android:layout_alignParentStart="true" + android:layout_alignParentBottom="true" android:layout_marginStart="4dp" android:src="@drawable/ic_developer_version" /> diff --git a/app/src/main/res/layout/toolbar.xml b/app/src/main/res/layout/toolbar.xml deleted file mode 100644 index c60dba3580..0000000000 --- a/app/src/main/res/layout/toolbar.xml +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file From a7e2964c53b2e018dab669708eba0d45dfd181ae Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 4 Feb 2019 12:26:56 +0300 Subject: [PATCH 04/12] Updated on 2026-08-14 --- app/src/main/java/com/tangem/data/Logger.java | 2 +- .../com/tangem/domain/wallet/CoinEngine.java | 4 +- .../activity/CreateNewWalletActivity.kt | 86 +++++-------------- .../presentation/activity/MainActivity.kt | 60 ++----------- .../presentation/activity/PurgeActivity.kt | 54 ++---------- .../activity/SignTransactionActivity.kt | 79 +++-------------- .../main/java/com/tangem/util/CryptoUtil.java | 2 +- .../res/layout/activity_create_new_wallet.xml | 1 - app/src/main/res/layout/layout_touch_card.xml | 8 +- .../android/nfc/DeviceNFCAntennaLocation.kt | 63 +++++++++++++- 10 files changed, 117 insertions(+), 242 deletions(-) diff --git a/app/src/main/java/com/tangem/data/Logger.java b/app/src/main/java/com/tangem/data/Logger.java index ad6f408d07..3c1aece038 100644 --- a/app/src/main/java/com/tangem/data/Logger.java +++ b/app/src/main/java/com/tangem/data/Logger.java @@ -226,7 +226,7 @@ public class Logger { // // verifyStoragePermissions(activity); // initLogFile(activity.getApplicationContext()); -// t.start(); +// t.init(); // } catch (Exception e) { // e.printStackTrace(); // } diff --git a/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java b/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java index 1f53e9b4bd..a234d6be10 100644 --- a/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/CoinEngine.java @@ -247,10 +247,10 @@ public abstract class CoinEngine { * Transaction processing sequence: * 1. User enter transaction attributes * 2. Application create instance of {@link SignTask.TransactionToSign} by call {@see constructTransaction} - * 3. Application set notification when transaction were prepared {@see setOnNeedSendTransaction} and start {@link SignTask} + * 3. Application set notification when transaction were prepared {@see setOnNeedSendTransaction} and init {@link SignTask} * 4. User tap card and card sign transaction * 5. Application receive {@link OnNeedSendTransaction} notification with prepared raw transaction - * 6. Application show user information that transaction ready for sending and start sending procedure by call {@see requestSendTransaction} + * 6. Application show user information that transaction ready for sending and init sending procedure by call {@see requestSendTransaction} * 7. Application receive notification of sending result through {@link CoinEngine.BlockchainRequestsCallbacks} and show result to user * * @param amountValue - amount of desired transaction diff --git a/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt b/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt index d3a208d258..2d658484a7 100644 --- a/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt @@ -31,6 +31,7 @@ import com.tangem.tangemcard.tasks.CreateNewWalletTask import com.tangem.tangemcard.util.Util import com.tangem.wallet.R import kotlinx.android.synthetic.main.activity_create_new_wallet.* +import kotlinx.android.synthetic.main.layout_progress_horizontal.* import kotlinx.android.synthetic.main.layout_touch_card.* class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtocol.Notifications { @@ -46,13 +47,11 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, private lateinit var nfcManager: NfcManager private lateinit var ctx: TangemContext - private lateinit var antenna: DeviceNFCAntennaLocation + private lateinit var nfcAntenna: DeviceNFCAntennaLocation private var createNewWalletTask: CreateNewWalletTask? = null private var lastReadSuccess = true - private var progressBar: ProgressBar? = null - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_create_new_wallet) @@ -61,36 +60,13 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, ctx = TangemContext.loadFromBundle(this, intent.extras) + // init NFC Antenna + nfcAntenna = DeviceNFCAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) + nfcAntenna.init() + tvCardId.text = ctx.card!!.cidDescription - - progressBar = findViewById(R.id.progressBar) - progressBar!!.progressTintList = ColorStateList.valueOf(Color.DKGRAY) - progressBar!!.visibility = View.INVISIBLE - - // get NFC Antenna - antenna = DeviceNFCAntennaLocation() - antenna.getAntennaLocation() - - // set card orientation - when (antenna.orientation) { - DeviceNFCAntennaLocation.CARD_ORIENTATION_HORIZONTAL -> { - ivHandCardHorizontal.visibility = View.VISIBLE - ivHandCardVertical.visibility = View.GONE - } - - DeviceNFCAntennaLocation.CARD_ORIENTATION_VERTICAL -> { - ivHandCardVertical.visibility = View.VISIBLE - ivHandCardHorizontal.visibility = View.GONE - } - } - - // set card z position - when (antenna.z) { - DeviceNFCAntennaLocation.CARD_ON_BACK -> llHand.elevation = 0.0f - DeviceNFCAntennaLocation.CARD_ON_FRONT -> llHand.elevation = 30.0f - } - - animate() + progressBar.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar.visibility = View.INVISIBLE } override fun onTagDiscovered(tag: Tag) { @@ -141,11 +117,11 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, } override fun onReadStart(cardProtocol: CardProtocol) { - rlProgressBar.post { rlProgressBar.visibility = View.VISIBLE } + rlProgressBar?.post { rlProgressBar.visibility = View.VISIBLE } - progressBar!!.post { - progressBar!!.visibility = View.VISIBLE - progressBar!!.progress = 5 + progressBar?.post { + progressBar?.visibility = View.VISIBLE + progressBar?.progress = 5 } } @@ -210,11 +186,11 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, } }, 500) - progressBar!!.postDelayed({ + progressBar?.postDelayed({ try { - progressBar!!.progress = 0 - progressBar!!.progressTintList = ColorStateList.valueOf(Color.DKGRAY) - progressBar!!.visibility = View.INVISIBLE + progressBar?.progress = 0 + progressBar?.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar?.visibility = View.INVISIBLE } catch (e: Exception) { e.printStackTrace() } @@ -222,17 +198,17 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, } override fun onReadProgress(protocol: CardProtocol, progress: Int) { - progressBar!!.post { progressBar!!.progress = progress } + progressBar?.post { progressBar?.progress = progress } } override fun onReadCancel() { createNewWalletTask = null - progressBar!!.postDelayed({ + progressBar?.postDelayed({ try { - progressBar!!.progress = 0 - progressBar!!.progressTintList = ColorStateList.valueOf(Color.DKGRAY) - progressBar!!.visibility = View.INVISIBLE + progressBar?.progress = 0 + progressBar?.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar?.visibility = View.INVISIBLE } catch (e: Exception) { e.printStackTrace() } @@ -251,24 +227,4 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, WaitSecurityDelayDialog.onReadAfterRequest(this) } - private fun animate() { - val lp = llHand.layoutParams as RelativeLayout.LayoutParams - val lp2 = llNfc.layoutParams as RelativeLayout.LayoutParams - val dp = resources.displayMetrics.density - val lm = dp * (69 + antenna.x * 75) - lp.topMargin = (dp * (-100 + antenna.y * 250)).toInt() - lp2.topMargin = (dp * (-125 + antenna.y * 250)).toInt() - llNfc.layoutParams = lp2 - - val a = object : Animation() { - override fun applyTransformation(interpolatedTime: Float, t: Transformation) { - lp.leftMargin = (lm * interpolatedTime).toInt() - llHand.layoutParams = lp - } - } - a.duration = 2000 - a.interpolator = DecelerateInterpolator() - llHand.startAnimation(a) - } - } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt b/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt index fe9567b33d..f3bae0bdf9 100644 --- a/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt @@ -18,10 +18,6 @@ import android.util.Log import android.view.Menu import android.view.MenuItem import android.view.View -import android.view.animation.Animation -import android.view.animation.DecelerateInterpolator -import android.view.animation.Transformation -import android.widget.RelativeLayout import android.widget.Toast import com.scottyab.rootbeer.RootBeer import com.tangem.App @@ -34,7 +30,6 @@ import com.tangem.domain.wallet.TangemContext import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog import com.tangem.presentation.dialog.RootFoundDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialog -import com.tangem.presentation.dialog.WaitSecurityDelayDialogNew import com.tangem.tangemcard.android.nfc.DeviceNFCAntennaLocation import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.android.reader.NfcReader @@ -67,7 +62,7 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco private lateinit var nfcManager: NfcManager private var zipFile: File? = null - private lateinit var antenna: DeviceNFCAntennaLocation + private lateinit var nfcAntenna: DeviceNFCAntennaLocation private var unsuccessReadCount = 0 private var lastTag: Tag? = null private var readCardInfoTask: ReadCardInfoTask? = null @@ -100,34 +95,13 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco rippleBackgroundNfc.startRippleAnimation() - // get NFC Antenna - antenna = DeviceNFCAntennaLocation() - antenna.getAntennaLocation() - - // set card orientation - when (antenna.orientation) { - DeviceNFCAntennaLocation.CARD_ORIENTATION_HORIZONTAL -> { - ivHandCardHorizontal.visibility = View.VISIBLE - ivHandCardVertical.visibility = View.GONE - } - - DeviceNFCAntennaLocation.CARD_ORIENTATION_VERTICAL -> { - ivHandCardVertical.visibility = View.VISIBLE - ivHandCardHorizontal.visibility = View.GONE - } - } - - // set card z position - when (antenna.z) { - DeviceNFCAntennaLocation.CARD_ON_BACK -> llHand.elevation = 0.0f - DeviceNFCAntennaLocation.CARD_ON_FRONT -> llHand.elevation = 30.0f - } - - animate() + // init NFC Antenna + nfcAntenna = DeviceNFCAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) + nfcAntenna.init() // set phone name - if (antenna.fullName != "") - tvNFCHint.text = String.format(getString(R.string.scan_banknote), antenna.fullName) + if (nfcAntenna.fullName != "") + tvNFCHint.text = String.format(getString(R.string.scan_banknote), nfcAntenna.fullName) else tvNFCHint.text = String.format(getString(R.string.scan_banknote), getString(R.string.phone)) @@ -267,7 +241,7 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco public override fun onResume() { super.onResume() - animate() + nfcAntenna.animate() ReadCardInfoTask.resetLastReadInfo() nfcManager.onResume() } @@ -385,26 +359,6 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco onNfcReaderCallback = callback } - private fun animate() { - val lp = llHand.layoutParams as RelativeLayout.LayoutParams - val lp2 = llNfc.layoutParams as RelativeLayout.LayoutParams - val dp = resources.displayMetrics.density - val lm = dp * (69 + antenna.x * 75) - lp.topMargin = (dp * (-100 + antenna.y * 250)).toInt() - lp2.topMargin = (dp * (-125 + antenna.y * 250)).toInt() - llNfc.layoutParams = lp2 - - val a = object : Animation() { - override fun applyTransformation(interpolatedTime: Float, t: Transformation) { - lp.leftMargin = (lm * interpolatedTime).toInt() - llHand.layoutParams = lp - } - } - a.duration = 2000 - a.interpolator = DecelerateInterpolator() - llHand.startAnimation(a) - } - private fun showMenu(v: View) { val popup = PopupMenu(this, v) val inflater = popup.menuInflater diff --git a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt index 29a952eb7f..2db65fc008 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt @@ -59,7 +59,7 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc private lateinit var nfcManager: NfcManager private lateinit var ctx: TangemContext - private lateinit var antenna: DeviceNFCAntennaLocation + private lateinit var nfcAntenna: DeviceNFCAntennaLocation private var purgeTask: PurgeTask? = null @@ -75,34 +75,13 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc ctx = TangemContext.loadFromBundle(this, intent.extras) + // init NFC Antenna + nfcAntenna = DeviceNFCAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) + nfcAntenna.init() + tvCardID.text = ctx.card!!.cidDescription progressBar.progressTintList = ColorStateList.valueOf(Color.DKGRAY) progressBar.visibility = View.INVISIBLE - - // get NFC Antenna - antenna = DeviceNFCAntennaLocation() - antenna.getAntennaLocation() - - // set card orientation - when (antenna.orientation) { - DeviceNFCAntennaLocation.CARD_ORIENTATION_HORIZONTAL -> { - ivHandCardHorizontal.visibility = View.VISIBLE - ivHandCardVertical.visibility = View.GONE - } - - DeviceNFCAntennaLocation.CARD_ORIENTATION_VERTICAL -> { - ivHandCardVertical.visibility = View.VISIBLE - ivHandCardHorizontal.visibility = View.GONE - } - } - - // set card z position - when (antenna.z) { - DeviceNFCAntennaLocation.CARD_ON_BACK -> llHand.elevation = 0.0f - DeviceNFCAntennaLocation.CARD_ON_FRONT -> llHand.elevation = 30.0f - } - - animate() } public override fun onResume() { @@ -126,7 +105,8 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc override fun onTagDiscovered(tag: Tag) { try { // get IsoDep handle and run cardReader thread - val isoDep = IsoDep.get(tag) ?: throw CardProtocol.TangemException(getString(R.string.wrong_tag_err)) + val isoDep = IsoDep.get(tag) + ?: throw CardProtocol.TangemException(getString(R.string.wrong_tag_err)) val uid = tag.id val sUID = Util.byteArrayToHexString(uid) LOG.d(TAG, "UID: $sUID") @@ -274,24 +254,4 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc }, 500) } - private fun animate() { - val lp = llHand.layoutParams as RelativeLayout.LayoutParams - val lp2 = llNfc.layoutParams as RelativeLayout.LayoutParams - val dp = resources.displayMetrics.density - val lm = dp * (69 + antenna.x * 75) - lp.topMargin = (dp * (-100 + antenna.y * 250)).toInt() - lp2.topMargin = (dp * (-125 + antenna.y * 250)).toInt() - llNfc.layoutParams = lp2 - - val a = object : Animation() { - override fun applyTransformation(interpolatedTime: Float, t: Transformation) { - lp.leftMargin = (lm * interpolatedTime).toInt() - llHand.layoutParams = lp - } - } - a.duration = 2000 - a.interpolator = DecelerateInterpolator() - llHand.startAnimation(a) - } - } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt index c2669e7d1b..2e20915f48 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt @@ -8,15 +8,11 @@ import android.nfc.NfcAdapter import android.nfc.Tag import android.nfc.tech.IsoDep import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity import android.view.KeyEvent import android.view.View -import android.view.animation.Animation -import android.view.animation.DecelerateInterpolator -import android.view.animation.Transformation import android.widget.ProgressBar -import android.widget.RelativeLayout import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity import com.tangem.App import com.tangem.Constant import com.tangem.domain.wallet.CoinEngine @@ -34,6 +30,7 @@ import com.tangem.tangemcard.util.Util import com.tangem.util.LOG import com.tangem.wallet.R import kotlinx.android.synthetic.main.activity_sign_transaction.* +import kotlinx.android.synthetic.main.layout_progress_horizontal.* import kotlinx.android.synthetic.main.layout_touch_card.* class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtocol.Notifications { @@ -45,7 +42,7 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, private lateinit var nfcManager: NfcManager private lateinit var ctx: TangemContext - private lateinit var antenna: DeviceNFCAntennaLocation + private lateinit var nfcAntenna: DeviceNFCAntennaLocation private var signTransactionTask: SignTask? = null @@ -55,8 +52,6 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, private var outAddressStr: String? = null private var lastReadSuccess = true - private var progressBar: ProgressBar? = null - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_sign_transaction) @@ -65,41 +60,18 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, ctx = TangemContext.loadFromBundle(this, intent.extras) + // init NFC Antenna + nfcAntenna = DeviceNFCAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) + nfcAntenna.init() + amount = CoinEngine.Amount(intent.getStringExtra(Constant.EXTRA_AMOUNT), intent.getStringExtra(Constant.EXTRA_AMOUNT_CURRENCY)) fee = CoinEngine.Amount(intent.getStringExtra(Constant.EXTRA_FEE), intent.getStringExtra(Constant.EXTRA_FEE_CURRENCY)) isIncludeFee = intent.getBooleanExtra(Constant.EXTRA_FEE_INCLUDED, true) outAddressStr = intent.getStringExtra(Constant.EXTRA_TARGET_ADDRESS) tvCardID.text = ctx.card!!.cidDescription - - progressBar = findViewById(R.id.progressBar) - progressBar!!.progressTintList = ColorStateList.valueOf(Color.DKGRAY) - progressBar!!.visibility = View.INVISIBLE - - // get NFC Antenna - antenna = DeviceNFCAntennaLocation() - antenna.getAntennaLocation() - - // set card orientation - when (antenna.orientation) { - DeviceNFCAntennaLocation.CARD_ORIENTATION_HORIZONTAL -> { - ivHandCardHorizontal.visibility = View.VISIBLE - ivHandCardVertical.visibility = View.GONE - } - - DeviceNFCAntennaLocation.CARD_ORIENTATION_VERTICAL -> { - ivHandCardVertical.visibility = View.VISIBLE - ivHandCardHorizontal.visibility = View.GONE - } - } - - // set card z position - when (antenna.z) { - DeviceNFCAntennaLocation.CARD_ON_BACK -> llHand.elevation = 0.0f - DeviceNFCAntennaLocation.CARD_ON_FRONT -> llHand.elevation = 30.0f - } - - animate() + progressBar.progressTintList = ColorStateList.valueOf(Color.DKGRAY) + progressBar.visibility = View.INVISIBLE } public override fun onResume() { @@ -194,14 +166,14 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, override fun onReadStart(cardProtocol: CardProtocol) { rlProgressBar.post { rlProgressBar.visibility = View.VISIBLE } - progressBar!!.post { - progressBar!!.visibility = View.VISIBLE - progressBar!!.progress = 5 + progressBar?.post { + progressBar?.visibility = View.VISIBLE + progressBar?.progress = 5 } } override fun onReadProgress(protocol: CardProtocol, progress: Int) { - progressBar!!.post { progressBar!!.progress = progress } + progressBar?.post { progressBar!!.progress = progress } } override fun onReadFinish(cardProtocol: CardProtocol?) { @@ -311,7 +283,6 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, // val readBeforeRequest = ReadBeforeRequest() // readBeforeRequest.timeout = timeout // EventBus.getDefault().post(readBeforeRequest) - } override fun onReadAfterRequest() { @@ -320,7 +291,6 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, // val readAfterRequest = ReadAfterRequest() // EventBus.getDefault().post(readAfterRequest) - } override fun onReadWait(msec: Int) { @@ -330,29 +300,6 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, // val readWait = ReadWait() // readWait.msec = msec // EventBus.getDefault().post(readWait) - - } - private fun animate() { - val lp = llHand.layoutParams as RelativeLayout.LayoutParams - val lp2 = llNfc.layoutParams as RelativeLayout.LayoutParams - val dp = resources.displayMetrics.density - val lm = dp * (69 + antenna.x * 75) - lp.topMargin = (dp * (-100 + antenna.y * 250)).toInt() - lp2.topMargin = (dp * (-125 + antenna.y * 250)).toInt() - llNfc.layoutParams = lp2 - - val a = object : Animation() { - override fun applyTransformation(interpolatedTime: Float, t: Transformation) { - lp.leftMargin = (lm * interpolatedTime).toInt() - llHand.layoutParams = lp - } - } - a.duration = 2000 - a.interpolator = DecelerateInterpolator() - llHand.startAnimation(a) - } - - } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/util/CryptoUtil.java b/app/src/main/java/com/tangem/util/CryptoUtil.java index 495c29175e..9e5c5d08d1 100644 --- a/app/src/main/java/com/tangem/util/CryptoUtil.java +++ b/app/src/main/java/com/tangem/util/CryptoUtil.java @@ -155,7 +155,7 @@ public class CryptoUtil { // See Bitcoin Core's IsCanonicalSignature, https://bitcointalk.org/index.php?topic=8392.msg127623#msg127623 // A canonical signature exists of: <30> <02> <02> // Where R and S are not negative (their first byte has its highest bit not set), and not - // excessively padded (do not start with a 0 byte, unless an otherwise negative number follows, + // excessively padded (do not init with a 0 byte, unless an otherwise negative number follows, // in which case a single 0 byte is necessary and even required). if (signature.length < 9 || signature.length > 73) return false; diff --git a/app/src/main/res/layout/activity_create_new_wallet.xml b/app/src/main/res/layout/activity_create_new_wallet.xml index 070774ae38..9776ceca9e 100644 --- a/app/src/main/res/layout/activity_create_new_wallet.xml +++ b/app/src/main/res/layout/activity_create_new_wallet.xml @@ -58,7 +58,6 @@ \ No newline at end of file diff --git a/app/src/main/res/layout/layout_touch_card.xml b/app/src/main/res/layout/layout_touch_card.xml index fce12a51f3..592067c9dd 100644 --- a/app/src/main/res/layout/layout_touch_card.xml +++ b/app/src/main/res/layout/layout_touch_card.xml @@ -24,7 +24,7 @@ - - + - - + { + ivHandCardHorizontal.visibility = View.VISIBLE + ivHandCardVertical.visibility = View.GONE + } + + CARD_ORIENTATION_VERTICAL -> { + ivHandCardVertical.visibility = View.VISIBLE + ivHandCardHorizontal.visibility = View.GONE + } + } + + // set card z position + when (z) { + DeviceNFCAntennaLocation.CARD_ON_BACK -> llHand.elevation = 0.0f + DeviceNFCAntennaLocation.CARD_ON_FRONT -> llHand.elevation = 30.0f + } + } + } \ No newline at end of file From 06ab12ed1009d3838a58dbcf9b9b501138553b00 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 4 Feb 2019 14:15:10 +0300 Subject: [PATCH 05/12] Updated on 2026-08-14 --- app/build.gradle | 3 ++ .../activity/ConfirmTransactionActivity.kt | 16 +----- .../activity/CreateNewWalletActivity.kt | 25 ++------- .../activity/EmptyWalletActivity.kt | 16 +----- .../presentation/activity/MainActivity.kt | 5 +- .../activity/NfcLifecycleObserver.kt | 25 +++++++++ .../activity/PinRequestActivity.kt | 7 +-- .../presentation/activity/PinSwapActivity.kt | 15 ++---- ...pareCryptonitOtherApiWithdrawalActivity.kt | 53 +++++-------------- .../PrepareCryptonitWithdrawalActivity.kt | 45 ++++++---------- .../PrepareKrakenWithdrawalActivity.kt | 38 ++++--------- .../activity/PrepareTransactionActivity.kt | 16 +----- .../presentation/activity/PurgeActivity.kt | 24 ++------- .../activity/SendTransactionActivity.kt | 16 +----- .../activity/SignTransactionActivity.kt | 16 ++---- .../presentation/fragment/LoadedWallet.kt | 21 ++------ .../presentation/fragment/VerifyCard.kt | 20 ++----- app/src/main/res/values/strings.xml | 5 ++ 18 files changed, 98 insertions(+), 268 deletions(-) create mode 100644 app/src/main/java/com/tangem/presentation/activity/NfcLifecycleObserver.kt diff --git a/app/build.gradle b/app/build.gradle index 0419d814a4..9a0201b554 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,12 +44,15 @@ android { } dependencies { + def lifecycle_version = "2.0.0" + implementation project(':tangemcard-common') implementation project(':tangemcard-android') implementation project(':tangemserver-android') implementation 'androidx.appcompat:appcompat:1.1.0-alpha01' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" implementation 'com.google.android.material:material:1.1.0-alpha02' implementation 'com.google.dagger:dagger:2.16' implementation 'com.google.zxing:core:3.3.3' diff --git a/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt index aa7826c36f..290d86db93 100644 --- a/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt @@ -44,6 +44,7 @@ class ConfirmTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac setContentView(R.layout.activity_confirm_transaction) nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) ctx = TangemContext.loadFromBundle(this, intent.extras) @@ -185,21 +186,6 @@ class ConfirmTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac amount) } - public override fun onResume() { - super.onResume() - nfcManager.onResume() - } - - public override fun onPause() { - super.onPause() - nfcManager.onPause() - } - - public override fun onStop() { - super.onStop() - nfcManager.onStop() - } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == Constant.REQUEST_CODE_SIGN_TRANSACTION) { diff --git a/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt b/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt index 2d658484a7..97da6ec7c5 100644 --- a/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt @@ -9,14 +9,9 @@ import android.nfc.NfcAdapter import android.nfc.Tag import android.nfc.tech.IsoDep import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity import android.view.View -import android.view.animation.Animation -import android.view.animation.DecelerateInterpolator -import android.view.animation.Transformation -import android.widget.ProgressBar -import android.widget.RelativeLayout import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity import com.tangem.App import com.tangem.Constant import com.tangem.domain.wallet.TangemContext @@ -57,6 +52,7 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, setContentView(R.layout.activity_create_new_wallet) nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) ctx = TangemContext.loadFromBundle(this, intent.extras) @@ -96,26 +92,11 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, } } - public override fun onResume() { - super.onResume() - nfcManager.onResume() - } - public override fun onPause() { - nfcManager.onPause() - if (createNewWalletTask != null) - createNewWalletTask!!.cancel(true) + createNewWalletTask?.cancel(true) super.onPause() } - public override fun onStop() { - // dismiss enable NFC dialog - nfcManager.onStop() - if (createNewWalletTask != null) - createNewWalletTask!!.cancel(true) - super.onStop() - } - override fun onReadStart(cardProtocol: CardProtocol) { rlProgressBar?.post { rlProgressBar.visibility = View.VISIBLE } diff --git a/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt b/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt index 25218e0f0f..7aaa9aadde 100644 --- a/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt @@ -64,6 +64,7 @@ class EmptyWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card App.getNavigatorComponent().inject(this) nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) ctx = TangemContext.loadFromBundle(this, intent.extras) @@ -99,21 +100,6 @@ class EmptyWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card } } - public override fun onResume() { - super.onResume() - nfcManager.onResume() - } - - public override fun onPause() { - super.onPause() - nfcManager.onPause() - } - - public override fun onStop() { - super.onStop() - nfcManager.onStop() - } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode == Constant.REQUEST_CODE_CREATE_NEW_WALLET_ACTIVITY) { if (resultCode == Activity.RESULT_OK) { diff --git a/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt b/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt index f3bae0bdf9..d4fe8a6c5b 100644 --- a/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt @@ -86,6 +86,7 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) verifyPermissions() @@ -243,18 +244,14 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco super.onResume() nfcAntenna.animate() ReadCardInfoTask.resetLastReadInfo() - nfcManager.onResume() } public override fun onPause() { - nfcManager.onPause() readCardInfoTask?.cancel(true) super.onPause() } public override fun onStop() { - // dismiss enable NFC dialog - nfcManager.onStop() readCardInfoTask?.cancel(true) super.onStop() } diff --git a/app/src/main/java/com/tangem/presentation/activity/NfcLifecycleObserver.kt b/app/src/main/java/com/tangem/presentation/activity/NfcLifecycleObserver.kt new file mode 100644 index 0000000000..73d9b6dccf --- /dev/null +++ b/app/src/main/java/com/tangem/presentation/activity/NfcLifecycleObserver.kt @@ -0,0 +1,25 @@ +package com.tangem.presentation.activity + +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.OnLifecycleEvent +import com.tangem.tangemcard.android.reader.NfcManager + +class NfcLifecycleObserver(private var nfcManager: NfcManager) : LifecycleObserver { + + @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) + fun onResume() { + nfcManager.onResume() + } + + @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) + fun onPause() { + nfcManager.onPause() + } + + @OnLifecycleEvent(Lifecycle.Event.ON_STOP) + fun onStop() { + nfcManager.onStop() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt index ec5851e00c..25f9e20784 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt @@ -100,6 +100,7 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge setContentView(R.layout.activity_pin_request) nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) mode = Mode.valueOf(intent.getStringExtra(Constant.EXTRA_MODE)) @@ -171,7 +172,6 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge override fun onPause() { super.onPause() - if (fingerprintHelper != null) fingerprintHelper!!.cancel() @@ -179,8 +179,6 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge startFingerprintReaderTask!!.cancel(true) startFingerprintReaderTask = null } - - nfcManager.onPause() } override fun onStop() { @@ -192,13 +190,10 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge startFingerprintReaderTask!!.cancel(true) startFingerprintReaderTask = null } - - nfcManager.onStop() } override fun onResume() { super.onResume() - nfcManager.onResume() if (allowFingerprint) startFingerprintReader() } diff --git a/app/src/main/java/com/tangem/presentation/activity/PinSwapActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PinSwapActivity.kt index 95272c5346..49aa637d0e 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PinSwapActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PinSwapActivity.kt @@ -56,6 +56,7 @@ class PinSwapActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProt setContentView(R.layout.activity_pin_swap) nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) card = TangemCard(intent.getStringExtra(EXTRA_TANGEM_CARD_UID)) card!!.loadFromBundle(intent.extras!!.getBundle(EXTRA_TANGEM_CARD)) @@ -92,23 +93,13 @@ class PinSwapActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProt } } - public override fun onResume() { - super.onResume() - nfcManager.onResume() - } - public override fun onPause() { - nfcManager.onPause() - if (swapPinTask != null) - swapPinTask!!.cancel(true) + swapPinTask?.cancel(true) super.onPause() } public override fun onStop() { - // dismiss enable NFC dialog - nfcManager.onStop() - if (swapPinTask != null) - swapPinTask!!.cancel(true) + swapPinTask?.cancel(true) super.onStop() } diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt index 9d13b3c9e4..4450912190 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt @@ -44,6 +44,7 @@ class PrepareCryptonitOtherApiWithdrawalActivity : AppCompatActivity(), NfcAdapt App.getNavigatorComponent().inject(this) nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) ctx = TangemContext.loadFromBundle(this, intent.extras) @@ -129,47 +130,6 @@ class PrepareCryptonitOtherApiWithdrawalActivity : AppCompatActivity(), NfcAdapt doRequestBalance() } - private fun doRequestBalance() { - if (cryptonit!!.havaAccountInfo()) { - rlProgressBar.visibility = View.VISIBLE - tvProgressDescription.text = getString(R.string.cryptonit_request_balance) - tvError.visibility = View.INVISIBLE - cryptonit!!.requestBalance(ctx.blockchain.currency, "USD") - } else { - tvError.visibility = View.VISIBLE - tvError.text = getString(R.string.cryptonit_not_enough_account_data) - } - } - -// private fun EditText.afterTextChanged(afterTextChanged: (String) -> Unit) { -// this.addTextChangedListener(object : TextWatcher { -// override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { -// } -// -// override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { -// } -// -// override fun afterTextChanged(editable: Editable?) { -// afterTextChanged.invoke(editable.toString()) -// } -// }) -// } - - public override fun onResume() { - super.onResume() - nfcManager.onResume() - } - - public override fun onPause() { - super.onPause() - nfcManager.onPause() - } - - public override fun onStop() { - super.onStop() - nfcManager.onStop() - } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK && data != null && data.extras!!.containsKey("QRCode")) { @@ -198,7 +158,18 @@ class PrepareCryptonitOtherApiWithdrawalActivity : AppCompatActivity(), NfcAdapt } catch (e: IOException) { e.printStackTrace() } + } + private fun doRequestBalance() { + if (cryptonit!!.havaAccountInfo()) { + rlProgressBar.visibility = View.VISIBLE + tvProgressDescription.text = getString(R.string.cryptonit_request_balance) + tvError.visibility = View.INVISIBLE + cryptonit!!.requestBalance(ctx.blockchain.currency, "USD") + } else { + tvError.visibility = View.VISIBLE + tvError.text = getString(R.string.cryptonit_not_enough_account_data) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt index 18737def81..7f90e8e0b4 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt @@ -28,8 +28,8 @@ class PrepareCryptonitWithdrawalActivity : AppCompatActivity(), NfcAdapter.Reade val TAG: String = PrepareCryptonitWithdrawalActivity::class.java.simpleName } - private lateinit var nfcManager: NfcManager private lateinit var ctx: TangemContext + private lateinit var nfcManager: NfcManager private var cryptonit: Cryptonit? = null @@ -38,10 +38,11 @@ class PrepareCryptonitWithdrawalActivity : AppCompatActivity(), NfcAdapter.Reade super.onCreate(savedInstanceState) setContentView(R.layout.activity_prepare_cryptonit_withdrawal) - nfcManager = NfcManager(this, this) - ctx = TangemContext.loadFromBundle(this, intent.extras) + nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) + cryptonit = Cryptonit(this) etUsername.setText(cryptonit!!.username) @@ -56,9 +57,9 @@ class PrepareCryptonitWithdrawalActivity : AppCompatActivity(), NfcAdapter.Reade tvFeeCurrency.text = engine.feeCurrency etAmount.setText(engine.convertToAmount(engine.convertToInternalAmount(ctx.card!!.denomination)).toValueString()) - etAmount.filters=engine.amountInputFilters + etAmount.filters = engine.amountInputFilters - etAmount.setOnEditorActionListener { lv, actionId, event -> + etAmount.setOnEditorActionListener { lv, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_DONE) { val imm = lv.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(lv.windowToken, 0) @@ -125,7 +126,7 @@ class PrepareCryptonitWithdrawalActivity : AppCompatActivity(), NfcAdapter.Reade cryptonit!!.setWithdrawalListener { response -> rlProgressBar.visibility = View.INVISIBLE if (response.success != null && response.success!!) { - Toast.makeText(this, "Withdrawal successful!", Toast.LENGTH_LONG).show(); + Toast.makeText(this, R.string.withdrawal_successful, Toast.LENGTH_LONG).show(); finish() } else { tvError.visibility = View.VISIBLE @@ -136,6 +137,14 @@ class PrepareCryptonitWithdrawalActivity : AppCompatActivity(), NfcAdapter.Reade doRequestBalance() } + override fun onTagDiscovered(tag: Tag) { + try { + nfcManager.ignoreTag(tag) + } catch (e: IOException) { + e.printStackTrace() + } + } + private fun doRequestBalance() { if (cryptonit!!.haveAccountInfo()) { rlProgressBar.visibility = View.VISIBLE @@ -148,28 +157,4 @@ class PrepareCryptonitWithdrawalActivity : AppCompatActivity(), NfcAdapter.Reade } } - public override fun onResume() { - super.onResume() - nfcManager.onResume() - } - - public override fun onPause() { - super.onPause() - nfcManager.onPause() - } - - public override fun onStop() { - super.onStop() - nfcManager.onStop() - } - - override fun onTagDiscovered(tag: Tag) { - try { - nfcManager.ignoreTag(tag) - } catch (e: IOException) { - e.printStackTrace() - } - - } - } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt index b99dfa531c..74f190c552 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt @@ -38,7 +38,8 @@ class PrepareKrakenWithdrawalActivity : AppCompatActivity(), NfcAdapter.ReaderCa } private lateinit var ctx: TangemContext - private var nfcManager: NfcManager? = null + private lateinit var nfcManager: NfcManager + private var kraken: Kraken? = null private var fee: BigDecimal? = null @@ -52,10 +53,11 @@ class PrepareKrakenWithdrawalActivity : AppCompatActivity(), NfcAdapter.ReaderCa App.getNavigatorComponent().inject(this) - nfcManager = NfcManager(this, this) - ctx = TangemContext.loadFromBundle(this, intent.extras) + nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) + kraken = Kraken(this) tvKey.text = kraken!!.key @@ -68,7 +70,7 @@ class PrepareKrakenWithdrawalActivity : AppCompatActivity(), NfcAdapter.ReaderCa tvCurrency.text = engine!!.balanceCurrency etAmount.setText(engine.convertToAmount(engine.convertToInternalAmount(ctx.card!!.denomination)).toValueString()) - etAmount.filters=engine.amountInputFilters + etAmount.filters = engine.amountInputFilters etAmount.setOnEditorActionListener { lv, actionId, event -> if (actionId == EditorInfo.IME_ACTION_DONE) { @@ -167,7 +169,7 @@ class PrepareKrakenWithdrawalActivity : AppCompatActivity(), NfcAdapter.ReaderCa val builder = AlertDialog.Builder(this) // Set a title for alert dialog - builder.setTitle("Please confirm withdraw") + builder.setTitle(R.string.please_confirm_withdraw) // Set a message for alert dialog builder.setMessage(String.format("Continue with fee %s %s?", fee!!.toString().trimEnd('0'), ctx.blockchain.currency)) @@ -186,23 +188,22 @@ class PrepareKrakenWithdrawalActivity : AppCompatActivity(), NfcAdapter.ReaderCa rlProgressBar.visibility = View.VISIBLE tvProgressDescription.text = getString(R.string.kraken_request_withdrawal) - //Toast.makeText(this, String.format("Withdraw %s!",dblAmount.toString()), Toast.LENGTH_LONG).show() kraken!!.requestWithdraw(ctx.blockchain.currency, dblAmount.toString(), ctx.coinData!!.wallet) } catch (e: Exception) { etAmount.error = getString(R.string.unknown_amount_format) } } DialogInterface.BUTTON_NEGATIVE -> { - Toast.makeText(this, "Operation canceled!", Toast.LENGTH_LONG).show() + Toast.makeText(this, R.string.operation_canceled, Toast.LENGTH_LONG).show() } } } // Set the alert dialog positive/yes button - builder.setPositiveButton("YES", dialogClickListener) + builder.setPositiveButton(R.string.yes, dialogClickListener) // Set the alert dialog negative/no button - builder.setNegativeButton("NO", dialogClickListener) + builder.setNegativeButton(R.string.no, dialogClickListener) // Initialize the AlertDialog using builder object @@ -224,21 +225,6 @@ class PrepareKrakenWithdrawalActivity : AppCompatActivity(), NfcAdapter.ReaderCa } } - public override fun onResume() { - super.onResume() - nfcManager!!.onResume() - } - - public override fun onPause() { - super.onPause() - nfcManager!!.onPause() - } - - public override fun onStop() { - super.onStop() - nfcManager!!.onStop() - } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK && data != null && data.extras!!.containsKey("QRCode")) { @@ -262,12 +248,10 @@ class PrepareKrakenWithdrawalActivity : AppCompatActivity(), NfcAdapter.ReaderCa override fun onTagDiscovered(tag: Tag) { try { -// Log.w(javaClass.name, "Ignore discovered tag!") - nfcManager!!.ignoreTag(tag) + nfcManager.ignoreTag(tag) } catch (e: IOException) { e.printStackTrace() } - } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt index 6050ead283..3cb2c6db29 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt @@ -47,6 +47,7 @@ class PrepareTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac App.getNavigatorComponent().inject(this) nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) ctx = TangemContext.loadFromBundle(this, intent.extras) @@ -129,21 +130,6 @@ class PrepareTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac ivCamera.setOnClickListener { navigator.showQrScanActivity(this, Constant.REQUEST_CODE_SCAN_QR) } } - public override fun onResume() { - super.onResume() - nfcManager.onResume() - } - - public override fun onPause() { - super.onPause() - nfcManager.onPause() - } - - public override fun onStop() { - super.onStop() - nfcManager.onStop() - } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == Constant.REQUEST_CODE_SCAN_QR && resultCode == Activity.RESULT_OK && data != null && data.extras!!.containsKey("QRCode")) { diff --git a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt index 2db65fc008..7fc331f2be 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt @@ -10,28 +10,21 @@ import android.nfc.NfcAdapter import android.nfc.Tag import android.nfc.tech.IsoDep import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity import android.view.View -import android.view.animation.Animation -import android.view.animation.DecelerateInterpolator -import android.view.animation.Transformation -import android.widget.RelativeLayout import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity import com.tangem.App -import com.tangem.tangemcard.tasks.PurgeTask -import com.tangem.tangemcard.reader.CardProtocol -import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.domain.wallet.TangemContext import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialogNew import com.tangem.presentation.event.DeletingWalletFinish -import com.tangem.presentation.event.ReadAfterRequest -import com.tangem.presentation.event.ReadBeforeRequest -import com.tangem.presentation.event.ReadWait import com.tangem.tangemcard.android.nfc.DeviceNFCAntennaLocation +import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.android.reader.NfcReader import com.tangem.tangemcard.data.asBundle +import com.tangem.tangemcard.reader.CardProtocol +import com.tangem.tangemcard.tasks.PurgeTask import com.tangem.tangemcard.util.Util import com.tangem.util.LOG import com.tangem.wallet.R @@ -72,6 +65,7 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) ctx = TangemContext.loadFromBundle(this, intent.extras) @@ -84,20 +78,12 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc progressBar.visibility = View.INVISIBLE } - public override fun onResume() { - super.onResume() - nfcManager.onResume() - } - public override fun onPause() { - nfcManager.onPause() purgeTask?.cancel(true) super.onPause() } public override fun onStop() { - // dismiss enable NFC dialog - nfcManager.onStop() purgeTask?.cancel(true) super.onStop() } diff --git a/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt index dc568af6ae..866da0588c 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt @@ -31,6 +31,7 @@ class SendTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { setContentView(R.layout.activity_send_transaction) nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) ctx = TangemContext.loadFromBundle(this, intent.extras) tx = intent.getByteArrayExtra(Constant.EXTRA_TX) @@ -67,21 +68,6 @@ class SendTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback { return super.onKeyDown(keyCode, event) } - public override fun onResume() { - super.onResume() - nfcManager.onResume() - } - - public override fun onPause() { - super.onPause() - nfcManager.onPause() - } - - public override fun onStop() { - super.onStop() - nfcManager.onStop() - } - override fun onTagDiscovered(tag: Tag) { try { nfcManager.ignoreTag(tag) diff --git a/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt index 2e20915f48..959c6e1f8c 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt @@ -10,7 +10,6 @@ import android.nfc.tech.IsoDep import android.os.Bundle import android.view.KeyEvent import android.view.View -import android.widget.ProgressBar import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.tangem.App @@ -57,6 +56,7 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, setContentView(R.layout.activity_sign_transaction) nfcManager = NfcManager(this, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) ctx = TangemContext.loadFromBundle(this, intent.extras) @@ -74,23 +74,13 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, progressBar.visibility = View.INVISIBLE } - public override fun onResume() { - super.onResume() - nfcManager.onResume() - } - public override fun onPause() { - nfcManager.onPause() - if (signTransactionTask != null) - signTransactionTask!!.cancel(true) + signTransactionTask?.cancel(true) super.onPause() } public override fun onStop() { - // dismiss enable NFC dialog - nfcManager.onStop() - if (signTransactionTask != null) - signTransactionTask!!.cancel(true) + signTransactionTask?.cancel(true) super.onStop() } diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt index 941929df51..fe2dd54a87 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -27,10 +27,7 @@ import com.tangem.domain.wallet.BalanceValidator import com.tangem.domain.wallet.CoinEngine import com.tangem.domain.wallet.CoinEngineFactory import com.tangem.domain.wallet.TangemContext -import com.tangem.presentation.activity.LoadedWalletActivity -import com.tangem.presentation.activity.PinRequestActivity -import com.tangem.presentation.activity.PrepareCryptonitWithdrawalActivity -import com.tangem.presentation.activity.PrepareKrakenWithdrawalActivity +import com.tangem.presentation.activity.* import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog import com.tangem.presentation.dialog.PINSwapWarningDialog import com.tangem.presentation.dialog.ShowQRCodeDialog @@ -97,10 +94,11 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - nfcManager = NfcManager(activity, this) - ctx = TangemContext.loadFromBundle(activity, activity?.intent?.extras) + nfcManager = NfcManager(activity, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) + lastTag = activity?.intent?.getParcelableExtra(Constant.EXTRA_LAST_DISCOVERED_TAG) } @@ -276,14 +274,8 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback startVerify(lastTag) } - override fun onResume() { - super.onResume() - nfcManager.onResume() - } - override fun onPause() { super.onPause() - nfcManager.onPause() if (timerHideErrorAndMessage != null) { timerHideErrorAndMessage!!.cancel() timerHideErrorAndMessage = null @@ -296,11 +288,6 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback EventBus.getDefault().register(this) } - override fun onStop() { - super.onStop() - nfcManager.onStop() - } - override fun onDestroy() { EventBus.getDefault().unregister(this) super.onDestroy() diff --git a/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt b/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt index 35c5a8cf01..dc8403a612 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt @@ -50,8 +50,10 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - nfcManager = NfcManager(activity, this) ctx = TangemContext.loadFromBundle(activity, activity?.intent?.extras) + + nfcManager = NfcManager(activity, this) + lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { @@ -60,7 +62,6 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - updateViews() srlVerifyCard.setOnRefreshListener { srlVerifyCard.isRefreshing = false } @@ -210,21 +211,6 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { } } - override fun onResume() { - super.onResume() - nfcManager.onResume() - } - - override fun onPause() { - super.onPause() - nfcManager.onPause() - } - - override fun onStop() { - super.onStop() - nfcManager.onStop() - } - override fun onTagDiscovered(tag: Tag?) { try { nfcManager.ignoreTag(tag) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c56cbf03da..d490e04416 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,6 +2,8 @@ OK Cancel + Yes + No No connection with blockchain nodes Continue Not found @@ -247,6 +249,7 @@ Get balance Withdrawal operation fee + Withdrawal successful! KRAKEN payment @@ -256,5 +259,7 @@ Please enter account data Get balance Withdrawal + Operation canceled! + Please confirm withdraw \ No newline at end of file From 5d142463fb3ecdba8743506e20c1c43d31a97cb5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 4 Feb 2019 14:35:48 +0300 Subject: [PATCH 06/12] Updated on 2026-08-14 --- .../activity/ConfirmTransactionActivity.kt | 2 +- .../activity/CreateNewWalletActivity.kt | 9 +++++---- .../presentation/activity/EmptyWalletActivity.kt | 1 + .../tangem/presentation/activity/MainActivity.kt | 15 ++++++++------- .../presentation/activity/PinRequestActivity.kt | 1 + .../presentation/activity/PinSwapActivity.kt | 1 + .../PrepareCryptonitOtherApiWithdrawalActivity.kt | 1 + .../PrepareCryptonitWithdrawalActivity.kt | 1 + .../activity/PrepareKrakenWithdrawalActivity.kt | 1 + .../activity/PrepareTransactionActivity.kt | 1 + .../tangem/presentation/activity/PurgeActivity.kt | 9 +++++---- .../activity/SendTransactionActivity.kt | 1 + .../activity/SignTransactionActivity.kt | 9 +++++---- .../tangem/presentation/fragment/LoadedWallet.kt | 1 + .../tangem/presentation/fragment/VerifyCard.kt | 1 + ...nnaLocation.kt => NfcDeviceAntennaLocation.kt} | 8 ++++---- .../android/nfc}/NfcLifecycleObserver.kt | 7 ++++++- .../nfc/{NFCLocation.kt => NfcLocation.kt} | 2 +- 18 files changed, 45 insertions(+), 26 deletions(-) rename tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/{DeviceNFCAntennaLocation.kt => NfcDeviceAntennaLocation.kt} (92%) rename {app/src/main/java/com/tangem/presentation/activity => tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc}/NfcLifecycleObserver.kt (80%) rename tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/{NFCLocation.kt => NfcLocation.kt} (99%) diff --git a/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt index 290d86db93..6d1c2cd4da 100644 --- a/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt @@ -13,11 +13,11 @@ import android.view.KeyEvent import android.view.View import android.widget.Toast import com.tangem.Constant -import com.tangem.data.Blockchain import com.tangem.domain.wallet.CoinEngine import com.tangem.domain.wallet.CoinEngineFactory import com.tangem.domain.wallet.TangemContext import com.tangem.presentation.event.TransactionFinishWithError +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.data.TangemCard import com.tangem.tangemcard.data.loadFromBundle diff --git a/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt b/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt index 97da6ec7c5..d20ddac09e 100644 --- a/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt @@ -17,7 +17,8 @@ import com.tangem.Constant import com.tangem.domain.wallet.TangemContext import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialog -import com.tangem.tangemcard.android.nfc.DeviceNFCAntennaLocation +import com.tangem.tangemcard.android.nfc.NfcDeviceAntennaLocation +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.android.reader.NfcReader import com.tangem.tangemcard.data.asBundle @@ -42,7 +43,7 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, private lateinit var nfcManager: NfcManager private lateinit var ctx: TangemContext - private lateinit var nfcAntenna: DeviceNFCAntennaLocation + private lateinit var nfcDeviceAntenna: NfcDeviceAntennaLocation private var createNewWalletTask: CreateNewWalletTask? = null private var lastReadSuccess = true @@ -57,8 +58,8 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, ctx = TangemContext.loadFromBundle(this, intent.extras) // init NFC Antenna - nfcAntenna = DeviceNFCAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) - nfcAntenna.init() + nfcDeviceAntenna = NfcDeviceAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) + nfcDeviceAntenna.init() tvCardId.text = ctx.card!!.cidDescription progressBar.progressTintList = ColorStateList.valueOf(Color.DKGRAY) diff --git a/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt b/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt index 7aaa9aadde..0cd4d062ba 100644 --- a/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt @@ -20,6 +20,7 @@ import com.tangem.di.Navigator import com.tangem.domain.wallet.TangemContext import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialog +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.android.reader.NfcReader import com.tangem.tangemcard.data.TangemCard diff --git a/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt b/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt index d4fe8a6c5b..9be5713ee9 100644 --- a/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt @@ -30,7 +30,8 @@ import com.tangem.domain.wallet.TangemContext import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog import com.tangem.presentation.dialog.RootFoundDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialog -import com.tangem.tangemcard.android.nfc.DeviceNFCAntennaLocation +import com.tangem.tangemcard.android.nfc.NfcDeviceAntennaLocation +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.android.reader.NfcReader import com.tangem.tangemcard.data.TangemCard @@ -62,7 +63,7 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco private lateinit var nfcManager: NfcManager private var zipFile: File? = null - private lateinit var nfcAntenna: DeviceNFCAntennaLocation + private lateinit var nfcDeviceAntenna: NfcDeviceAntennaLocation private var unsuccessReadCount = 0 private var lastTag: Tag? = null private var readCardInfoTask: ReadCardInfoTask? = null @@ -97,12 +98,12 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco rippleBackgroundNfc.startRippleAnimation() // init NFC Antenna - nfcAntenna = DeviceNFCAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) - nfcAntenna.init() + nfcDeviceAntenna = NfcDeviceAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) + nfcDeviceAntenna.init() // set phone name - if (nfcAntenna.fullName != "") - tvNFCHint.text = String.format(getString(R.string.scan_banknote), nfcAntenna.fullName) + if (nfcDeviceAntenna.fullName != "") + tvNFCHint.text = String.format(getString(R.string.scan_banknote), nfcDeviceAntenna.fullName) else tvNFCHint.text = String.format(getString(R.string.scan_banknote), getString(R.string.phone)) @@ -242,7 +243,7 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco public override fun onResume() { super.onResume() - nfcAntenna.animate() + nfcDeviceAntenna.animate() ReadCardInfoTask.resetLastReadInfo() } diff --git a/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt index 25f9e20784..576ace6402 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt @@ -25,6 +25,7 @@ import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.data.fingerprint.FingerprintHelper import com.tangem.domain.wallet.TangemContext import com.tangem.tangemcard.android.data.PINStorage +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.data.TangemCard import com.tangem.tangemcard.data.loadFromBundle import com.tangem.tangemcard.data.EXTRA_TANGEM_CARD diff --git a/app/src/main/java/com/tangem/presentation/activity/PinSwapActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PinSwapActivity.kt index 49aa637d0e..7700515491 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PinSwapActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PinSwapActivity.kt @@ -17,6 +17,7 @@ import com.tangem.App import com.tangem.Constant import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialog +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.android.reader.NfcReader import com.tangem.tangemcard.data.* diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt index 4450912190..018fa6fa20 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt @@ -16,6 +16,7 @@ import com.tangem.data.network.CryptonitOtherApi import com.tangem.di.Navigator import com.tangem.domain.wallet.CoinEngineFactory import com.tangem.domain.wallet.TangemContext +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.wallet.R import kotlinx.android.synthetic.main.activity_prepare_cryptonit_other_api_withdrawal.* diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt index 7f90e8e0b4..a10a44628c 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt @@ -17,6 +17,7 @@ import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.data.Blockchain import com.tangem.domain.wallet.CoinEngineFactory import com.tangem.domain.wallet.TangemContext +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.util.DecimalDigitsInputFilter import com.tangem.wallet.R import kotlinx.android.synthetic.main.activity_prepare_cryptonit_withdrawal.* diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt index 74f190c552..5eef701c62 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt @@ -23,6 +23,7 @@ import com.tangem.data.Blockchain import com.tangem.di.Navigator import com.tangem.domain.wallet.CoinEngineFactory import com.tangem.domain.wallet.TangemContext +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.wallet.R import kotlinx.android.synthetic.main.activity_prepare_kraken_withdrawal.* import java.io.IOException diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt index 3cb2c6db29..4da817a270 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt @@ -18,6 +18,7 @@ import com.tangem.data.Blockchain import com.tangem.di.Navigator import com.tangem.domain.wallet.CoinEngineFactory import com.tangem.domain.wallet.TangemContext +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.wallet.R import kotlinx.android.synthetic.main.activity_prepare_transaction.* diff --git a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt index 7fc331f2be..26e19b1b1c 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt @@ -19,7 +19,8 @@ import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialogNew import com.tangem.presentation.event.DeletingWalletFinish -import com.tangem.tangemcard.android.nfc.DeviceNFCAntennaLocation +import com.tangem.tangemcard.android.nfc.NfcDeviceAntennaLocation +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.android.reader.NfcReader import com.tangem.tangemcard.data.asBundle @@ -52,7 +53,7 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc private lateinit var nfcManager: NfcManager private lateinit var ctx: TangemContext - private lateinit var nfcAntenna: DeviceNFCAntennaLocation + private lateinit var nfcDeviceAntenna: NfcDeviceAntennaLocation private var purgeTask: PurgeTask? = null @@ -70,8 +71,8 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc ctx = TangemContext.loadFromBundle(this, intent.extras) // init NFC Antenna - nfcAntenna = DeviceNFCAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) - nfcAntenna.init() + nfcDeviceAntenna = NfcDeviceAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) + nfcDeviceAntenna.init() tvCardID.text = ctx.card!!.cidDescription progressBar.progressTintList = ColorStateList.valueOf(Color.DKGRAY) diff --git a/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt index 866da0588c..f29eb48e4e 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SendTransactionActivity.kt @@ -13,6 +13,7 @@ import com.tangem.domain.wallet.CoinEngineFactory import com.tangem.domain.wallet.TangemContext import com.tangem.presentation.event.TransactionFinishWithError import com.tangem.presentation.event.TransactionFinishWithSuccess +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.util.UtilHelper import com.tangem.wallet.R diff --git a/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt index 959c6e1f8c..8a88b1c0b3 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt @@ -19,7 +19,8 @@ import com.tangem.domain.wallet.CoinEngineFactory import com.tangem.domain.wallet.TangemContext import com.tangem.presentation.dialog.NoExtendedLengthSupportDialog import com.tangem.presentation.dialog.WaitSecurityDelayDialog -import com.tangem.tangemcard.android.nfc.DeviceNFCAntennaLocation +import com.tangem.tangemcard.android.nfc.NfcDeviceAntennaLocation +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.android.reader.NfcReader import com.tangem.tangemcard.data.asBundle @@ -41,7 +42,7 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, private lateinit var nfcManager: NfcManager private lateinit var ctx: TangemContext - private lateinit var nfcAntenna: DeviceNFCAntennaLocation + private lateinit var nfcDeviceAntenna: NfcDeviceAntennaLocation private var signTransactionTask: SignTask? = null @@ -61,8 +62,8 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, ctx = TangemContext.loadFromBundle(this, intent.extras) // init NFC Antenna - nfcAntenna = DeviceNFCAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) - nfcAntenna.init() + nfcDeviceAntenna = NfcDeviceAntennaLocation(this, ivHandCardHorizontal, ivHandCardVertical, llHand, llNfc) + nfcDeviceAntenna.init() amount = CoinEngine.Amount(intent.getStringExtra(Constant.EXTRA_AMOUNT), intent.getStringExtra(Constant.EXTRA_AMOUNT_CURRENCY)) fee = CoinEngine.Amount(intent.getStringExtra(Constant.EXTRA_FEE), intent.getStringExtra(Constant.EXTRA_FEE_CURRENCY)) diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt index fe2dd54a87..1453766033 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -35,6 +35,7 @@ import com.tangem.presentation.dialog.WaitSecurityDelayDialog import com.tangem.presentation.event.DeletingWalletFinish import com.tangem.presentation.event.TransactionFinishWithError import com.tangem.presentation.event.TransactionFinishWithSuccess +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.android.reader.NfcReader import com.tangem.tangemcard.data.EXTRA_TANGEM_CARD diff --git a/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt b/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt index dc8403a612..6f9192be0c 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt @@ -22,6 +22,7 @@ import com.tangem.presentation.activity.* import com.tangem.presentation.dialog.PINSwapWarningDialog import com.tangem.presentation.event.DeletingWalletFinish import com.tangem.tangemcard.android.data.PINStorage +import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager import com.tangem.tangemcard.data.TangemCard import com.tangem.tangemcard.data.loadFromBundle diff --git a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/DeviceNFCAntennaLocation.kt b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NfcDeviceAntennaLocation.kt similarity index 92% rename from tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/DeviceNFCAntennaLocation.kt rename to tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NfcDeviceAntennaLocation.kt index b06ea3530b..f237869987 100644 --- a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/DeviceNFCAntennaLocation.kt +++ b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NfcDeviceAntennaLocation.kt @@ -10,7 +10,7 @@ import android.widget.ImageView import android.widget.RelativeLayout import androidx.appcompat.widget.LinearLayoutCompat -class DeviceNFCAntennaLocation(private var context: Context, +class NfcDeviceAntennaLocation(private var context: Context, private var ivHandCardHorizontal: ImageView, private var ivHandCardVertical: ImageView, private var llHand: LinearLayoutCompat, @@ -65,7 +65,7 @@ class DeviceNFCAntennaLocation(private var context: Context, this.y = 0.35f this.z = 0 - for (nfcLocation in NFCLocation.values()) { + for (nfcLocation in NfcLocation.values()) { if (codename.startsWith(nfcLocation.codename)) { this.fullName = nfcLocation.fullName this.orientation = nfcLocation.orientation @@ -91,8 +91,8 @@ class DeviceNFCAntennaLocation(private var context: Context, // set card z position when (z) { - DeviceNFCAntennaLocation.CARD_ON_BACK -> llHand.elevation = 0.0f - DeviceNFCAntennaLocation.CARD_ON_FRONT -> llHand.elevation = 30.0f + NfcDeviceAntennaLocation.CARD_ON_BACK -> llHand.elevation = 0.0f + NfcDeviceAntennaLocation.CARD_ON_FRONT -> llHand.elevation = 30.0f } } diff --git a/app/src/main/java/com/tangem/presentation/activity/NfcLifecycleObserver.kt b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NfcLifecycleObserver.kt similarity index 80% rename from app/src/main/java/com/tangem/presentation/activity/NfcLifecycleObserver.kt rename to tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NfcLifecycleObserver.kt index 73d9b6dccf..559adbfdfa 100644 --- a/app/src/main/java/com/tangem/presentation/activity/NfcLifecycleObserver.kt +++ b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NfcLifecycleObserver.kt @@ -1,10 +1,15 @@ -package com.tangem.presentation.activity +package com.tangem.tangemcard.android.nfc import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleObserver import androidx.lifecycle.OnLifecycleEvent import com.tangem.tangemcard.android.reader.NfcManager +/** + * Lifecycle observer for all activities and fragments with nfc + * + * @see NfcManager + */ class NfcLifecycleObserver(private var nfcManager: NfcManager) : LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) diff --git a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NFCLocation.kt b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NfcLocation.kt similarity index 99% rename from tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NFCLocation.kt rename to tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NfcLocation.kt index cbb341b966..6f5199781b 100644 --- a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NFCLocation.kt +++ b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/nfc/NfcLocation.kt @@ -1,6 +1,6 @@ package com.tangem.tangemcard.android.nfc -enum class NFCLocation(val codename: String, val fullName: String, val orientation: Int, val x: Int, val y: Int, val z: Int) { +enum class NfcLocation(val codename: String, val fullName: String, val orientation: Int, val x: Int, val y: Int, val z: Int) { model1("sailfish", "Google Pixel", 0, 65, 25, 0), model2("walleye", "Google Pixel 2", 0, 40, 15, 0), model3("taimen", "Google Pixel 2 XL", 0, 40, 15, 0), From 22930964c991a7de55c04e8a2a54f15b6b496c89 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 4 Feb 2019 15:04:39 +0300 Subject: [PATCH 07/12] Updated on 2026-08-14 --- .../java/com/tangem/presentation/activity/PurgeActivity.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt index 26e19b1b1c..e9961fe73e 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt @@ -79,11 +79,6 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc progressBar.visibility = View.INVISIBLE } - public override fun onPause() { - purgeTask?.cancel(true) - super.onPause() - } - public override fun onStop() { purgeTask?.cancel(true) super.onStop() From aad9d9479bdd532fb8f15ec693873a0aea184e6b Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 4 Feb 2019 15:54:40 +0300 Subject: [PATCH 08/12] Updated on 2026-08-14 --- .../tangem/presentation/dialog/PINSwapWarningDialog.java | 4 +++- app/src/main/res/values/strings.xml | 4 ---- .../android/presentation/dialog/NfcEnableDialog.kt | 9 +++------ .../com/tangem/tangemcard/android/reader/NfcManager.java | 8 ++------ tangemcard-android/src/main/res/values/strings.xml | 1 + tangemserver-android/src/main/res/values/strings.xml | 2 ++ 6 files changed, 11 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/tangem/presentation/dialog/PINSwapWarningDialog.java b/app/src/main/java/com/tangem/presentation/dialog/PINSwapWarningDialog.java index 264e04a5a2..2f4d2ba00d 100644 --- a/app/src/main/java/com/tangem/presentation/dialog/PINSwapWarningDialog.java +++ b/app/src/main/java/com/tangem/presentation/dialog/PINSwapWarningDialog.java @@ -4,6 +4,8 @@ import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; + +import androidx.annotation.NonNull; import androidx.fragment.app.DialogFragment; import com.tangem.wallet.R; @@ -29,9 +31,9 @@ public class PINSwapWarningDialog extends DialogFragment { message = getArguments().getString(EXTRA_MESSAGE); } + @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - return new AlertDialog.Builder(getActivity()) .setIcon(R.drawable.tangem_logo_small_new) .setTitle(R.string.your_money_is_at_risk) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d490e04416..5864598db5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,10 +10,6 @@ Not ISO tag! Card must be loaded first! Tag lost! - OK - Quit - Enable NFC? - This app is useless when NFC is disabled. Reader mode depends on it. Hit OK to go to Settings, where you can enable NFC. command response Hello World from section: %1$d diff --git a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/presentation/dialog/NfcEnableDialog.kt b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/presentation/dialog/NfcEnableDialog.kt index 5e02553731..fd198bec10 100644 --- a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/presentation/dialog/NfcEnableDialog.kt +++ b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/presentation/dialog/NfcEnableDialog.kt @@ -4,20 +4,18 @@ import android.app.Dialog import android.content.Intent import android.os.Bundle import android.provider.Settings -import androidx.fragment.app.DialogFragment import androidx.appcompat.app.AlertDialog +import androidx.fragment.app.DialogFragment import com.tangem.tangemcard.R -class NfcEnableDialog : androidx.fragment.app.DialogFragment() { - +class NfcEnableDialog : DialogFragment() { companion object { val TAG: String = NfcEnableDialog::class.java.simpleName } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val builder = context?.let { AlertDialog.Builder(it) } builder?.setCancelable(false) ?.setIcon(R.drawable.ic_action_nfc_gray) @@ -25,8 +23,7 @@ class NfcEnableDialog : androidx.fragment.app.DialogFragment() { ?.setMessage(R.string.enable_nfc) ?.setPositiveButton(R.string.dialog_ok ) { _, _ -> - // take user to wireless settings - activity?.startActivity(Intent(Settings.ACTION_WIRELESS_SETTINGS)) + activity?.startActivity(Intent(Settings.ACTION_NFC_SETTINGS)) } ?.setNegativeButton(R.string.dialog_quit ) { dialog, _ -> diff --git a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.java b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.java index ca6a441dad..eff969ccec 100644 --- a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.java +++ b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.java @@ -13,6 +13,7 @@ import android.nfc.Tag; import android.nfc.tech.IsoDep; import android.os.Build; import android.os.Bundle; + import androidx.core.app.ActivityCompat; import androidx.fragment.app.FragmentActivity; @@ -99,7 +100,6 @@ public class NfcManager { } private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { - @SuppressWarnings("deprecation") @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); @@ -156,11 +156,7 @@ public class NfcManager { if (permission != PackageManager.PERMISSION_GRANTED) { // We don't have permission so prompt the user - ActivityCompat.requestPermissions( - activity, - PERMISSIONS_NFC, - REQUEST_NFC_PERMISSIONS - ); + ActivityCompat.requestPermissions(activity, PERMISSIONS_NFC, REQUEST_NFC_PERMISSIONS); } } diff --git a/tangemcard-android/src/main/res/values/strings.xml b/tangemcard-android/src/main/res/values/strings.xml index 3be1a76c7b..c604935c0f 100644 --- a/tangemcard-android/src/main/res/values/strings.xml +++ b/tangemcard-android/src/main/res/values/strings.xml @@ -1,4 +1,5 @@ + tangemcard OK Quit diff --git a/tangemserver-android/src/main/res/values/strings.xml b/tangemserver-android/src/main/res/values/strings.xml index 7c2c6570f5..e8367bfe4f 100644 --- a/tangemserver-android/src/main/res/values/strings.xml +++ b/tangemserver-android/src/main/res/values/strings.xml @@ -1,3 +1,5 @@ + TangemServer + From 3c8806f9c7dac498680ebfe7fdb9ee2534ff5ed6 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 4 Feb 2019 22:40:47 +0300 Subject: [PATCH 09/12] Updated on 2026-08-14 --- app/build.gradle | 7 +++---- .../presentation/activity/ConfirmTransactionActivity.kt | 8 ++++++-- .../activity/PrepareCryptonitWithdrawalActivity.kt | 4 ++-- .../java/com/tangem/presentation/fragment/VerifyCard.kt | 7 ++++++- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9a0201b554..90f582a051 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -45,20 +45,20 @@ android { dependencies { def lifecycle_version = "2.0.0" + def spongycastle_version = "1.56.0.0" implementation project(':tangemcard-common') implementation project(':tangemcard-android') implementation project(':tangemserver-android') implementation 'androidx.appcompat:appcompat:1.1.0-alpha01' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" implementation 'com.google.android.material:material:1.1.0-alpha02' implementation 'com.google.dagger:dagger:2.16' implementation 'com.google.zxing:core:3.3.3' implementation 'com.google.code.gson:gson:2.8.5' - implementation 'com.madgag.spongycastle:core:1.56.0.0' - implementation 'com.madgag.spongycastle:prov:1.56.0.0' + implementation "com.madgag.spongycastle:core:$spongycastle_version" + implementation "com.madgag.spongycastle:prov:$spongycastle_version" implementation 'com.scottyab:rootbeer-lib:0.0.7' implementation 'com.squareup.retrofit2:converter-gson:2.5.0' implementation 'com.squareup.retrofit2:retrofit:2.5.0' @@ -75,5 +75,4 @@ dependencies { implementation 'io.reactivex.rxjava2:rxjava:2.2.0' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0' - } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt index 6d1c2cd4da..46fbfa8537 100644 --- a/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/ConfirmTransactionActivity.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Intent import android.nfc.NfcAdapter import android.nfc.Tag +import android.os.Build import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import android.text.Editable @@ -50,7 +51,10 @@ class ConfirmTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac val engine = CoinEngineFactory.create(ctx) - val html = Html.fromHtml(engine!!.balanceHTML) + @Suppress("DEPRECATION") val html = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + Html.fromHtml(engine!!.balanceHTML, Html.FROM_HTML_MODE_LEGACY) + else + Html.fromHtml(engine!!.balanceHTML) tvBalance.text = html isIncludeFee = intent.getBooleanExtra(Constant.EXTRA_FEE_INCLUDED, true) @@ -75,7 +79,7 @@ class ConfirmTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac btnSend.visibility = View.INVISIBLE - val allowFeeLevelSelection = engine!!.allowSelectFeeLevel() + val allowFeeLevelSelection = engine.allowSelectFeeLevel() for (lol in rgFee.touchables) { lol.isEnabled = allowFeeLevelSelection } diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt index a10a44628c..4649032c20 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitWithdrawalActivity.kt @@ -65,10 +65,10 @@ class PrepareCryptonitWithdrawalActivity : AppCompatActivity(), NfcAdapter.Reade val imm = lv.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(lv.windowToken, 0) true - } else { + } else false - } } + when (ctx.blockchain) { Blockchain.Bitcoin -> { etAmount.filters = arrayOf(DecimalDigitsInputFilter(5)) diff --git a/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt b/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt index 6f9192be0c..2cf643d5f3 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Intent 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 @@ -257,7 +258,11 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { tvIssuer.text = ctx.card!!.issuerDescription tvCardRegistredDate.text = DateUtils.formatDateTime(null, ctx.card!!.personalizationDateTime.time, DateUtils.FORMAT_SHOW_DATE or DateUtils.FORMAT_NUMERIC_DATE or DateUtils.FORMAT_SHOW_YEAR) - val html = Html.fromHtml(ctx.blockchainName) + + @Suppress("DEPRECATION") val html = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + Html.fromHtml(ctx.blockchainName, Html.FROM_HTML_MODE_LEGACY) + else + Html.fromHtml(ctx.blockchainName) tvBlockchain.text = html tvValidationNode.text = ctx.coinData!!.validationNodeDescription From 77c2ff30e569b0d474f38ca438d49b3a30403973 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 6 Feb 2019 16:28:32 +0300 Subject: [PATCH 10/12] Updated on 2026-08-14 --- app/build.gradle | 1 + .../activity/PinRequestActivity.kt | 21 ++++------ .../activity/PrepareTransactionActivity.kt | 8 +++- .../presentation/dialog/ShowQRCodeDialog.java | 1 - .../main/java/com/tangem/util/UtilHelper.kt | 1 - .../layout/activity_prepare_transaction.xml | 42 +++++++++---------- 6 files changed, 38 insertions(+), 36 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 90f582a051..f91af6af43 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -53,6 +53,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.1.0-alpha01' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" + implementation 'androidx.biometric:biometric:1.0.0-alpha03' implementation 'com.google.android.material:material:1.1.0-alpha02' implementation 'com.google.dagger:dagger:2.16' implementation 'com.google.zxing:core:3.3.3' diff --git a/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt index 576ace6402..23ab30cf58 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PinRequestActivity.kt @@ -173,8 +173,7 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge override fun onPause() { super.onPause() - if (fingerprintHelper != null) - fingerprintHelper!!.cancel() + fingerprintHelper?.cancel() if (startFingerprintReaderTask != null) { startFingerprintReaderTask!!.cancel(true) @@ -184,8 +183,7 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge override fun onStop() { super.onStop() - if (fingerprintHelper != null) - fingerprintHelper!!.cancel() + fingerprintHelper?.cancel() if (startFingerprintReaderTask != null) { startFingerprintReaderTask!!.cancel(true) @@ -214,7 +212,7 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge @TargetApi(Build.VERSION_CODES.M) override fun authenticationSucceeded(result: FingerprintManager.AuthenticationResult) { - LOG.i(TAG,"Authentication succeeded!") + LOG.i(TAG, "Authentication succeeded!") val cipher = result.cryptoObject.cipher if (mode == Mode.RequestNewPIN || mode == Mode.ConfirmNewPIN) { @@ -242,34 +240,33 @@ class PinRequestActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Finge finish() } - @SuppressLint("SetTextI18n") private fun buttonClick(button: Button) { - tvPin!!.text = tvPin!!.text.toString() + button.text as String + tvPin.text = tvPin.text.toString() + button.text.toString() } @SuppressLint("NewApi") private fun testFingerPrintSettings(): Boolean { - LOG.i(TAG,"Testing Fingerprint Settings") + LOG.i(TAG, "Testing Fingerprint Settings") val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager fingerprintManager = getSystemService(Context.FINGERPRINT_SERVICE) as FingerprintManager if (!keyguardManager.isKeyguardSecure) { - LOG.i(TAG,"User hasn't enabled Lock Screen") + LOG.i(TAG, "User hasn't enabled Lock Screen") return false } if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) { - LOG.i(TAG,"User hasn't granted permission to use Fingerprint") + LOG.i(TAG, "User hasn't granted permission to use Fingerprint") return false } if (!fingerprintManager!!.hasEnrolledFingerprints()) { - LOG.i(TAG,"User hasn't registered any fingerprints") + LOG.i(TAG, "User hasn't registered any fingerprints") return false } - LOG.i(TAG,"Fingerprint authentication is set.\n") + LOG.i(TAG, "Fingerprint authentication is set.\n") return true } diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt index 4da817a270..2a5cd99068 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt @@ -11,6 +11,7 @@ import android.text.Html import android.view.View import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import com.tangem.App import com.tangem.Constant @@ -20,6 +21,7 @@ import com.tangem.domain.wallet.CoinEngineFactory import com.tangem.domain.wallet.TangemContext import com.tangem.tangemcard.android.nfc.NfcLifecycleObserver import com.tangem.tangemcard.android.reader.NfcManager +import com.tangem.util.UtilHelper import com.tangem.wallet.R import kotlinx.android.synthetic.main.activity_prepare_transaction.* import java.io.IOException @@ -89,8 +91,12 @@ class PrepareTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac } btnVerify.setOnClickListener { - val engine1 = CoinEngineFactory.create(ctx) + if (!UtilHelper.isOnline(this)) { + Toast.makeText(this, R.string.no_connection, Toast.LENGTH_LONG).show() + return@setOnClickListener + } + val engine1 = CoinEngineFactory.create(ctx) val strAmount: String = etAmount.text.toString().replace(",", ".") val amount = engine1!!.convertToAmount(etAmount.text.toString(), tvCurrency.text.toString()) diff --git a/app/src/main/java/com/tangem/presentation/dialog/ShowQRCodeDialog.java b/app/src/main/java/com/tangem/presentation/dialog/ShowQRCodeDialog.java index a3b588f885..475986f0b9 100644 --- a/app/src/main/java/com/tangem/presentation/dialog/ShowQRCodeDialog.java +++ b/app/src/main/java/com/tangem/presentation/dialog/ShowQRCodeDialog.java @@ -1,6 +1,5 @@ package com.tangem.presentation.dialog; -import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; diff --git a/app/src/main/java/com/tangem/util/UtilHelper.kt b/app/src/main/java/com/tangem/util/UtilHelper.kt index 63daab7ea5..060a82cf76 100644 --- a/app/src/main/java/com/tangem/util/UtilHelper.kt +++ b/app/src/main/java/com/tangem/util/UtilHelper.kt @@ -1,6 +1,5 @@ package com.tangem.util -import android.app.Activity import android.content.Context import android.graphics.Bitmap import android.graphics.Color diff --git a/app/src/main/res/layout/activity_prepare_transaction.xml b/app/src/main/res/layout/activity_prepare_transaction.xml index b5059e66f2..1d4951d4c3 100644 --- a/app/src/main/res/layout/activity_prepare_transaction.xml +++ b/app/src/main/res/layout/activity_prepare_transaction.xml @@ -1,26 +1,26 @@ - + tools:context="com.tangem.presentation.activity.PrepareTransactionActivity" + tools:ignore="contentDescription"> + app:layout_constraintTop_toTopOf="parent" /> + android:textSize="@dimen/text_size_medium" /> + tools:text="BB00 0000 1210 0233" /> + android:textSize="@dimen/text_size_medium" /> + tools:text="4.51735 Btc" /> @@ -119,7 +119,7 @@ android:textSize="@dimen/text_size_medium" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" - app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" /> @@ -137,12 +137,12 @@ android:id="@+id/etWallet" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginEnd="8dp" android:layout_marginStart="8dp" + android:layout_marginEnd="8dp" android:fontFamily="@font/maax" android:hint="@string/enter_wallet_address" - android:inputType="text|textMultiLine|textNoSuggestions" android:imeOptions="actionNext" + android:inputType="text|textMultiLine|textNoSuggestions" android:padding="12dp" android:singleLine="false" android:textColor="@color/colorPrimaryDark" @@ -150,7 +150,7 @@ android:textSize="@dimen/text_size_medium" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@+id/ivCamera" - tools:layout_editor_absoluteY="2dp"/> + tools:layout_editor_absoluteY="2dp" /> + app:layout_constraintTop_toTopOf="parent" /> @@ -194,14 +194,14 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintWidth_min="150dp"/> + app:layout_constraintWidth_min="150dp" /> Date: Thu, 7 Feb 2019 13:13:36 +0300 Subject: [PATCH 11/12] Updated on 2026-08-14 --- .../java/com/tangem/data/LogFileProvider.java | 2 +- app/src/main/java/com/tangem/data/Logger.java | 2 +- .../domain/wallet/BalanceValidator.java | 2 +- .../presentation/fragment/LoadedWallet.kt | 39 +++-- .../presentation/fragment/VerifyCard.kt | 4 +- build.gradle | 4 +- .../tangemcard/android/reader/NfcManager.java | 163 ------------------ .../tangemcard/android/reader/NfcManager.kt | 139 +++++++++++++++ tangemcard-common/build.gradle | 7 +- 9 files changed, 172 insertions(+), 190 deletions(-) delete mode 100644 tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.java create mode 100644 tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.kt diff --git a/app/src/main/java/com/tangem/data/LogFileProvider.java b/app/src/main/java/com/tangem/data/LogFileProvider.java index 1c95cf0459..48c9b1ff56 100644 --- a/app/src/main/java/com/tangem/data/LogFileProvider.java +++ b/app/src/main/java/com/tangem/data/LogFileProvider.java @@ -51,7 +51,7 @@ public class LogFileProvider extends ContentProvider { Log.v(LOG_TAG, "Called with uri: '" + uri + "'." + uri.getLastPathSegment()); - // Check incoming Uri against the matcher + // check incoming Uri against the matcher switch (uriMatcher.match(uri)) { // If it returns 1 - then it matches the Uri defined in onCreate diff --git a/app/src/main/java/com/tangem/data/Logger.java b/app/src/main/java/com/tangem/data/Logger.java index 3c1aece038..9196d9987c 100644 --- a/app/src/main/java/com/tangem/data/Logger.java +++ b/app/src/main/java/com/tangem/data/Logger.java @@ -268,7 +268,7 @@ public class Logger { // //Checks if the app has permission to write to device storage // //If the app does not has permission then the user will be prompted to grant permissions // public static void verifyStoragePermissions(Activity activity) { -// // Check if we have write permission +// // check if we have write permission // int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); // // if (permission != PackageManager.PERMISSION_GRANTED) { diff --git a/app/src/main/java/com/tangem/domain/wallet/BalanceValidator.java b/app/src/main/java/com/tangem/domain/wallet/BalanceValidator.java index e5ada4f494..a40ef82c03 100644 --- a/app/src/main/java/com/tangem/domain/wallet/BalanceValidator.java +++ b/app/src/main/java/com/tangem/domain/wallet/BalanceValidator.java @@ -49,7 +49,7 @@ public class BalanceValidator { } } - public void Check(TangemContext ctx, Boolean attest) { + public void check(TangemContext ctx, Boolean attest) { firstLine = "Verification failed"; secondLine = ""; TangemCard card = ctx.getCard(); diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt index 1453766033..7d59bc7143 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -64,14 +64,10 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback val TAG: String = LoadedWallet::class.java.simpleName } + private lateinit var ctx: TangemContext private lateinit var nfcManager: NfcManager - private var serverApiCommon: ServerApiCommon = ServerApiCommon() private var serverApiTangem: ServerApiTangem = ServerApiTangem() - - - private lateinit var ctx: TangemContext - private var lastTag: Tag? = null private var lastReadSuccess = true private var verifyCardTask: VerifyCardTask? = null @@ -80,24 +76,37 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback private var newPIN = "" private var newPIN2 = "" private var cardProtocol: CardProtocol? = null - private val inactiveColor: ColorStateList by lazy { resources.getColorStateList(R.color.btn_dark) } - private val activeColor: ColorStateList by lazy { resources.getColorStateList(R.color.colorAccent) } + private val inactiveColor: ColorStateList by lazy { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + resources.getColorStateList(R.color.btn_dark, activity?.theme) + else + @Suppress("DEPRECATION") + resources.getColorStateList(R.color.btn_dark) + } + private val activeColor: ColorStateList by lazy { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + resources.getColorStateList(R.color.colorAccent, activity?.theme) + else + @Suppress("DEPRECATION") + resources.getColorStateList(R.color.colorAccent) + } private var requestCounter: Int = 0 set(value) { field = value LOG.i(TAG, "requestCounter, set $field") if (field <= 0) { LOG.e(TAG, "+++++++++++ FINISH REFRESH") - if (srl != null && srl.isRefreshing) srl.isRefreshing = false - //updateViews() - } else if (srl != null && !srl.isRefreshing) srl.isRefreshing = true + if (srl != null && srl.isRefreshing) + srl.isRefreshing = false + } else if (srl != null && !srl.isRefreshing) + srl.isRefreshing = true } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ctx = TangemContext.loadFromBundle(activity, activity?.intent?.extras) - nfcManager = NfcManager(activity, this) + nfcManager = NfcManager(activity!!, this) lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) lastTag = activity?.intent?.getParcelableExtra(Constant.EXTRA_LAST_DISCOVERED_TAG) @@ -141,7 +150,7 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback getString(R.string.in_app) -> { try { val engine = CoinEngineFactory.create(ctx) - val intent = Intent(Intent.ACTION_VIEW, engine!!.shareWalletUri) + val intent = Intent(Intent.ACTION_VIEW, engine?.shareWalletUri) intent.addCategory(Intent.CATEGORY_DEFAULT) startActivity(intent) } catch (e: ActivityNotFoundException) { @@ -561,7 +570,7 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback } else { val validator = BalanceValidator() // TODO why attest=false? - validator.Check(ctx, false) + validator.check(ctx, false) context?.let { ContextCompat.getColor(it, validator.color) }?.let { tvBalanceLine1.setTextColor(it) } tvBalanceLine1.text = validator.firstLine tvBalanceLine2.text = validator.getSecondLine(false) @@ -607,10 +616,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() { diff --git a/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt b/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt index 2cf643d5f3..4afa6e42ab 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/VerifyCard.kt @@ -54,7 +54,7 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { super.onCreate(savedInstanceState) ctx = TangemContext.loadFromBundle(activity, activity?.intent?.extras) - nfcManager = NfcManager(activity, this) + nfcManager = NfcManager(activity!!, this) lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) } @@ -215,7 +215,7 @@ class VerifyCard : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback { override fun onTagDiscovered(tag: Tag?) { try { - nfcManager.ignoreTag(tag) + nfcManager.ignoreTag(tag!!) } catch (e: IOException) { e.printStackTrace() } diff --git a/build.gradle b/build.gradle index 3648e89e4f..2bfb6ce8b6 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,11 @@ buildscript { - ext.kotlin_version = '1.3.20' + ext.kotlin_version = '1.3.21' repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' + classpath 'com.android.tools.build:gradle:3.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.java b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.java deleted file mode 100644 index eff969ccec..0000000000 --- a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.java +++ /dev/null @@ -1,163 +0,0 @@ -package com.tangem.tangemcard.android.reader; - -import android.Manifest; -import android.annotation.TargetApi; -import android.app.Activity; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.PackageManager; -import android.nfc.NfcAdapter; -import android.nfc.Tag; -import android.nfc.tech.IsoDep; -import android.os.Build; -import android.os.Bundle; - -import androidx.core.app.ActivityCompat; -import androidx.fragment.app.FragmentActivity; - -import com.tangem.tangemcard.android.presentation.dialog.NfcEnableDialog; - -import java.io.IOException; - -public class NfcManager { - public static final String TAG = NfcManager.class.getSimpleName(); - - // reader mode flags: listen for type A (not B), skipping ndef check - private static final int READER_FLAGS = NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK | NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS; - - private NfcAdapter nfcAdapter; - private NfcEnableDialog mEnableNfcDialog; - private FragmentActivity activity; - private NfcAdapter.ReaderCallback mReaderCallback; - - private boolean broadcomWorkaround = false; - private static final int DELAY_PRESENCE = 1500; - - - public NfcManager(FragmentActivity activity, NfcAdapter.ReaderCallback readerCallback) { - this.activity = activity; - mReaderCallback = readerCallback; - nfcAdapter = NfcAdapter.getDefaultAdapter(activity); - } - - public void onResume() { - // register broadcast receiver - IntentFilter filter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED); - activity.registerReceiver(mBroadcastReceiver, filter); - - if (nfcAdapter == null || !nfcAdapter.isEnabled()) - showNFCEnableDialog(); - else - enableReaderMode(); - } - - public void onPause() { - activity.unregisterReceiver(mBroadcastReceiver); - disableReaderMode(); - } - - public void onStop() { - if (mEnableNfcDialog != null) { - mEnableNfcDialog.dismiss(); - } - } - - public void ignoreTag(Tag tag) throws IOException { -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { -// nfcAdapter.ignore(tag, 500, null, null); -// }else{ - IsoDep isoDep = IsoDep.get(tag); - if (isoDep != null) { - isoDep.close(); - } -// } - } - - int errorCount = 0; - - public void notifyReadResult(boolean success) { -// if (success) { -// errorCount = 0; -// } else { -// errorCount++; -// } -// if (errorCount >= 3) { -// disableReaderMode(); -// nfcAdapter = null; -//// Toast.makeText(activity,"NFC restarted!",Toast.LENGTH_SHORT).show(); -// activity.runOnUiThread(() -> { -// nfcAdapter = NfcAdapter.getDefaultAdapter(activity); -// enableReaderMode(); -// }); -// } - } - - private void showNFCEnableDialog() { - mEnableNfcDialog = new NfcEnableDialog(); - mEnableNfcDialog.show(activity.getSupportFragmentManager(), NfcEnableDialog.Companion.getTAG()); - } - - private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action == null) - return; - if (action.equals(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED)) { - int state = intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_ON); - if (state == NfcAdapter.STATE_ON || state == NfcAdapter.STATE_TURNING_ON) { -// Log.d(TAG, "state: " + state + " , dialog: " + mEnableNfcDialog); - if (mEnableNfcDialog != null) { - mEnableNfcDialog.dismiss(); - } - if (state == NfcAdapter.STATE_ON) { - enableReaderMode(); - } - } else { - if (mEnableNfcDialog == null || !mEnableNfcDialog.isVisible()) { - showNFCEnableDialog(); - } - } - } - } - }; - - @TargetApi(Build.VERSION_CODES.KITKAT) - private void enableReaderMode() { - Bundle options = new Bundle(); - if (broadcomWorkaround) { - /* This is a work around for some Broadcom chipsets that does - * the presence check by sending commands that interrupt the - * processing of the ongoing command. - */ - options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, DELAY_PRESENCE); - } - nfcAdapter.enableReaderMode(activity, mReaderCallback, READER_FLAGS, options); - } - - @TargetApi(Build.VERSION_CODES.KITKAT) - private void disableReaderMode() { - if (nfcAdapter != null) { - nfcAdapter.disableReaderMode(activity); - } - } - - private static final int REQUEST_NFC_PERMISSIONS = 1; - private static String[] PERMISSIONS_NFC = { - Manifest.permission.NFC - }; - - // checks if the app has NFC permission if the app does not has permission then the user will be prompted to grant permissions - public static void verifyPermissions(Activity activity) { - // Check if we have write permission - int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.NFC); - - if (permission != PackageManager.PERMISSION_GRANTED) { - // We don't have permission so prompt the user - ActivityCompat.requestPermissions(activity, PERMISSIONS_NFC, REQUEST_NFC_PERMISSIONS); - } - } - -} \ No newline at end of file diff --git a/tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.kt b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.kt new file mode 100644 index 0000000000..5216e86052 --- /dev/null +++ b/tangemcard-android/src/main/java/com/tangem/tangemcard/android/reader/NfcManager.kt @@ -0,0 +1,139 @@ +package com.tangem.tangemcard.android.reader + +import android.Manifest +import android.annotation.TargetApi +import android.app.Activity +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.content.pm.PackageManager +import android.nfc.NfcAdapter +import android.nfc.Tag +import android.nfc.tech.IsoDep +import android.os.Build +import android.os.Bundle +import androidx.core.app.ActivityCompat +import androidx.fragment.app.FragmentActivity +import com.tangem.tangemcard.android.presentation.dialog.NfcEnableDialog +import com.tangem.tangemcard.util.Log +import java.io.IOException + +class NfcManager(private val activity: FragmentActivity, private val readerCallback: NfcAdapter.ReaderCallback) { + companion object { + val TAG: String = NfcManager::class.java.simpleName + + // reader mode flags: listen for type A (not B), skipping ndef check + private const val READER_FLAGS = NfcAdapter.FLAG_READER_NFC_A or NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK or NfcAdapter.FLAG_READER_NO_PLATFORM_SOUNDS + private const val DELAY_PRESENCE = 1500 + + private const val REQUEST_NFC_PERMISSIONS = 1 + private val PERMISSIONS_NFC = arrayOf(Manifest.permission.NFC) + + // checks if the app has NFC permission if the app does not has permission then the user will be prompted to grant permissions + fun verifyPermissions(activity: Activity) { + // check if we have write permission + val permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.NFC) + + if (permission != PackageManager.PERMISSION_GRANTED) { + // we don't have permission so prompt the user + ActivityCompat.requestPermissions(activity, PERMISSIONS_NFC, REQUEST_NFC_PERMISSIONS) + } + } + } + + private val nfcAdapter: NfcAdapter? = NfcAdapter.getDefaultAdapter(activity) + private var nfcEnableDialog: NfcEnableDialog? = null + private val broadcomWorkaround = false + internal var errorCount = 0 + private val mBroadcastReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + val action = intent.action ?: return + if (action == NfcAdapter.ACTION_ADAPTER_STATE_CHANGED) { + val state = intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_ON) + if (state == NfcAdapter.STATE_ON || state == NfcAdapter.STATE_TURNING_ON) { + Log.i(TAG, "state: $state , dialog: $nfcEnableDialog") + nfcEnableDialog?.dismiss() + + if (state == NfcAdapter.STATE_ON) + enableReaderMode() + + } else { + if (nfcEnableDialog == null || !nfcEnableDialog!!.isVisible) + showNFCEnableDialog() + } + } + } + } + + fun onResume() { + // register broadcast receiver + val filter = IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED) + activity.registerReceiver(mBroadcastReceiver, filter) + + if (nfcAdapter == null || !nfcAdapter.isEnabled) + showNFCEnableDialog() + else + enableReaderMode() + } + + fun onPause() { + activity.unregisterReceiver(mBroadcastReceiver) + disableReaderMode() + } + + fun onStop() { + nfcEnableDialog?.dismiss() + } + + @Throws(IOException::class) + fun ignoreTag(tag: Tag) { + // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + // nfcAdapter.ignore(tag, 500, null, null); + // }else{ + val isoDep = IsoDep.get(tag) + isoDep?.close() + // } + } + + fun notifyReadResult(success: Boolean) { + // if (success) { + // errorCount = 0; + // } else { + // errorCount++; + // } + // if (errorCount >= 3) { + // disableReaderMode(); + // nfcAdapter = null; + //// Toast.makeText(activity,"NFC restarted!",Toast.LENGTH_SHORT).show(); + // activity.runOnUiThread(() -> { + // nfcAdapter = NfcAdapter.getDefaultAdapter(activity); + // enableReaderMode(); + // }); + // } + } + + private fun showNFCEnableDialog() { + nfcEnableDialog = NfcEnableDialog() + nfcEnableDialog?.show(activity.supportFragmentManager, NfcEnableDialog.TAG) + } + + @TargetApi(Build.VERSION_CODES.KITKAT) + private fun enableReaderMode() { + val options = Bundle() + if (broadcomWorkaround) { + /* This is a work around for some Broadcom chipsets that does + * the presence check by sending commands that interrupt the + * processing of the ongoing command. + */ + options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, DELAY_PRESENCE) + } + nfcAdapter!!.enableReaderMode(activity, readerCallback, READER_FLAGS, options) + } + + @TargetApi(Build.VERSION_CODES.KITKAT) + private fun disableReaderMode() { + nfcAdapter?.disableReaderMode(activity) + } + +} \ No newline at end of file diff --git a/tangemcard-common/build.gradle b/tangemcard-common/build.gradle index 6dc4a7ca41..98c83e33a7 100644 --- a/tangemcard-common/build.gradle +++ b/tangemcard-common/build.gradle @@ -1,10 +1,11 @@ apply plugin: 'java-library' dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + def spongycastle_version = "1.56.0.0" - implementation 'com.madgag.spongycastle:core:1.56.0.0' - implementation 'com.madgag.spongycastle:prov:1.56.0.0' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation "com.madgag.spongycastle:core:$spongycastle_version" + implementation "com.madgag.spongycastle:prov:$spongycastle_version" implementation 'net.i2p.crypto:eddsa:0.3.0' } From c670ecdb1518126d87f8776270d81d2e0b88d325 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 7 Feb 2019 14:39:57 +0300 Subject: [PATCH 12/12] Updated on 2026-08-14 --- .idea/kotlinc.xml | 6 - .idea/misc.xml | 43 +------ app/build.gradle | 16 ++- app/src/main/java/com/tangem/App.java | 106 ------------------ app/src/main/java/com/tangem/App.kt | 81 +++++++++++++ .../tangem/data/network/ServerApiCommon.java | 6 +- .../data/network/ServerApiElectrum.java | 24 ++-- .../tangem/data/network/ServerApiInfura.java | 2 +- .../data/network/ServerApiRootstock.java | 2 +- .../com/tangem/di/NavigatorComponent.java | 39 ------- .../java/com/tangem/di/NavigatorComponent.kt | 39 +++++++ .../java/com/tangem/di/NavigatorModule.java | 25 ----- .../java/com/tangem/di/NavigatorModule.kt | 25 +++++ .../java/com/tangem/di/NetworkComponent.java | 35 ------ .../java/com/tangem/di/NetworkComponent.kt | 35 ++++++ .../java/com/tangem/di/NetworkModule.java | 106 ------------------ .../main/java/com/tangem/di/NetworkModule.kt | 105 +++++++++++++++++ .../activity/EmptyWalletActivity.kt | 2 +- .../activity/LoadedWalletActivity.kt | 2 +- .../presentation/activity/LogoActivity.kt | 2 +- .../presentation/activity/MainActivity.kt | 2 +- ...pareCryptonitOtherApiWithdrawalActivity.kt | 2 +- .../PrepareKrakenWithdrawalActivity.kt | 2 +- .../activity/PrepareTransactionActivity.kt | 2 +- .../presentation/activity/PurgeActivity.kt | 2 +- .../activity/VerifyCardActivity.kt | 2 +- 26 files changed, 322 insertions(+), 391 deletions(-) delete mode 100644 .idea/kotlinc.xml delete mode 100644 app/src/main/java/com/tangem/App.java create mode 100644 app/src/main/java/com/tangem/App.kt delete mode 100644 app/src/main/java/com/tangem/di/NavigatorComponent.java create mode 100644 app/src/main/java/com/tangem/di/NavigatorComponent.kt delete mode 100644 app/src/main/java/com/tangem/di/NavigatorModule.java create mode 100644 app/src/main/java/com/tangem/di/NavigatorModule.kt delete mode 100644 app/src/main/java/com/tangem/di/NetworkComponent.java create mode 100644 app/src/main/java/com/tangem/di/NetworkComponent.kt delete mode 100644 app/src/main/java/com/tangem/di/NetworkModule.java create mode 100644 app/src/main/java/com/tangem/di/NetworkModule.kt diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml deleted file mode 100644 index 8b7f4afdab..0000000000 --- a/.idea/kotlinc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 514c99b327..703e5d4b89 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,44 +1,9 @@ - - - - - - - - + + + + diff --git a/app/build.gradle b/app/build.gradle index f91af6af43..ffaf1ec3b4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' - +apply plugin: 'kotlin-kapt' static def generateVersionName() { def gitCommitsCount = "git rev-list HEAD --count".execute().text.trim() @@ -44,29 +44,27 @@ android { } dependencies { - def lifecycle_version = "2.0.0" - def spongycastle_version = "1.56.0.0" - implementation project(':tangemcard-common') implementation project(':tangemcard-android') implementation project(':tangemserver-android') implementation 'androidx.appcompat:appcompat:1.1.0-alpha01' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" + implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0' implementation 'androidx.biometric:biometric:1.0.0-alpha03' implementation 'com.google.android.material:material:1.1.0-alpha02' - implementation 'com.google.dagger:dagger:2.16' + implementation 'com.google.dagger:dagger:2.21' + kapt 'com.google.dagger:dagger-compiler:2.21' + annotationProcessor 'com.google.dagger:dagger-compiler:2.21' implementation 'com.google.zxing:core:3.3.3' implementation 'com.google.code.gson:gson:2.8.5' - implementation "com.madgag.spongycastle:core:$spongycastle_version" - implementation "com.madgag.spongycastle:prov:$spongycastle_version" + implementation 'com.madgag.spongycastle:core:1.56.0.0' + implementation 'com.madgag.spongycastle:prov:1.56.0.0' implementation 'com.scottyab:rootbeer-lib:0.0.7' implementation 'com.squareup.retrofit2:converter-gson:2.5.0' implementation 'com.squareup.retrofit2:retrofit:2.5.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0' implementation 'com.skyfishjy.ripplebackground:library:1.0.1' implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' - annotationProcessor 'com.google.dagger:dagger-compiler:2.16' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'org.bitcoinj:bitcoinj-parent:0.14.7' implementation 'org.bitcoinj:bitcoinj-core:0.14.7' diff --git a/app/src/main/java/com/tangem/App.java b/app/src/main/java/com/tangem/App.java deleted file mode 100644 index 14b3775f08..0000000000 --- a/app/src/main/java/com/tangem/App.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.tangem; - -import android.app.Application; -import androidx.appcompat.app.AppCompatDelegate; - -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.tangem.tangemserver.android.data.LocalStorage; -import com.tangem.di.DaggerNavigatorComponent; -import com.tangem.di.DaggerNetworkComponent; -import com.tangem.di.NavigatorComponent; -import com.tangem.di.NetworkComponent; -import com.tangem.tangemcard.data.Issuer; -import com.tangem.tangemcard.android.data.Firmwares; -import com.tangem.tangemcard.android.data.PINStorage; -import com.tangem.tangemcard.data.external.FirmwaresDigestsProvider; -import com.tangem.tangemcard.data.external.PINsProvider; - -import java.io.InputStream; -import java.io.InputStreamReader; -import java.lang.reflect.Type; -import java.nio.charset.StandardCharsets; -import java.util.List; - -public class App extends Application { - - /** - * A singleton instance of the application class for easy access in other places - */ - private static App sInstance; - - public App() { - super(); - } - - static { - AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); - } - - private static NetworkComponent networkComponent; - private static NavigatorComponent navigatorComponent; - - public static NavigatorComponent getNavigatorComponent() { - return navigatorComponent; - } - - public static LocalStorage localStorage; - public static PINsProvider pinStorage; - public static FirmwaresDigestsProvider firmwaresStorage; - - @Override - public void onCreate() { - super.onCreate(); - // initialize the singleton - sInstance = this; - - networkComponent = DaggerNetworkComponent.create(); - navigatorComponent = buildNavigatorComponent(); - - // common init - if (PINStorage.needInit()) - PINStorage.init(getApplicationContext()); - - initIssuers(); - - firmwaresStorage = new Firmwares(getApplicationContext()); - - localStorage = new LocalStorage(getApplicationContext()); - - pinStorage = new PINStorage(); - } - - /** - * @return singleton instance - */ - public static synchronized App getInstance() { - return sInstance; - } - - public static NetworkComponent getNetworkComponent() { - return networkComponent; - } - - protected NavigatorComponent buildNavigatorComponent() { - return DaggerNavigatorComponent.builder() - .build(); - } - - - public void initIssuers() { - try { - try (InputStream is = getApplicationContext().getAssets().open("issuers.json")) { - try (InputStreamReader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) { - Type listType = new TypeToken>() { - }.getType(); - - - Issuer.fillIssuers(new Gson().fromJson(reader, listType)); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/App.kt b/app/src/main/java/com/tangem/App.kt new file mode 100644 index 0000000000..d226c4afb7 --- /dev/null +++ b/app/src/main/java/com/tangem/App.kt @@ -0,0 +1,81 @@ +package com.tangem + +import android.app.Application +import androidx.appcompat.app.AppCompatDelegate +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.tangem.di.DaggerNavigatorComponent +import com.tangem.di.DaggerNetworkComponent +import com.tangem.di.NavigatorComponent +import com.tangem.di.NetworkComponent +import com.tangem.tangemcard.android.data.Firmwares +import com.tangem.tangemcard.android.data.PINStorage +import com.tangem.tangemcard.data.Issuer +import com.tangem.tangemcard.data.external.FirmwaresDigestsProvider +import com.tangem.tangemcard.data.external.PINsProvider +import com.tangem.tangemserver.android.data.LocalStorage +import java.io.InputStreamReader +import java.nio.charset.StandardCharsets + +class App : Application() { + companion object { + @get:Synchronized + var instance: App? = null + private set + + init { + AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) + } + + var networkComponent: NetworkComponent? = null + private set + var navigatorComponent: NavigatorComponent? = null + private set + + lateinit var firmwaresStorage: FirmwaresDigestsProvider + lateinit var localStorage: LocalStorage + lateinit var pinStorage: PINsProvider + } + + override fun onCreate() { + super.onCreate() + // initialize the singleton + instance = this + + networkComponent = DaggerNetworkComponent.create() + navigatorComponent = buildNavigatorComponent() + + // common init + if (PINStorage.needInit()) + PINStorage.init(applicationContext) + + initIssuers() + + firmwaresStorage = Firmwares(applicationContext) + localStorage = LocalStorage(applicationContext) + pinStorage = PINStorage() + } + + private fun buildNavigatorComponent(): NavigatorComponent { + return DaggerNavigatorComponent.builder() + .build() + } + + private fun initIssuers() { + try { + applicationContext.assets.open("issuers.json").use { `is` -> + InputStreamReader(`is`, StandardCharsets.UTF_8).use { reader -> + val listType = object : TypeToken>() { + + }.type + + Issuer.fillIssuers(Gson().fromJson(reader, listType)) + } + } + } catch (e: Exception) { + e.printStackTrace() + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/data/network/ServerApiCommon.java b/app/src/main/java/com/tangem/data/network/ServerApiCommon.java index df196fc762..0a7affb756 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiCommon.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiCommon.java @@ -36,7 +36,7 @@ public class ServerApiCommon { } public void requestBtcEstimatedFee(int blockCount) { - EstimatefeeApi estimatefeeApi = App.getNetworkComponent().getRetrofitEstimatefee().create(EstimatefeeApi.class); + EstimatefeeApi estimatefeeApi = App.Companion.getNetworkComponent().getRetrofitEstimatefee().create(EstimatefeeApi.class); Call call; switch (blockCount) { @@ -91,7 +91,7 @@ public class ServerApiCommon { @SuppressLint("CheckResult") public void requestRateInfo(String cryptoId) { - CoinmarketApi coinmarketApi = App.getNetworkComponent().getRetrofitCoinmarketcap().create(CoinmarketApi.class); + CoinmarketApi coinmarketApi = App.Companion.getNetworkComponent().getRetrofitCoinmarketcap().create(CoinmarketApi.class); coinmarketApi.getRateInfoList() .subscribeOn(Schedulers.io()) @@ -126,7 +126,7 @@ public class ServerApiCommon { } public void requestLastVersion() { - UpdateVersionApi updateVersionApi = App.getNetworkComponent().getRetrofitGithubusercontent().create(UpdateVersionApi.class); + UpdateVersionApi updateVersionApi = App.Companion.getNetworkComponent().getRetrofitGitHubUserContent().create(UpdateVersionApi.class); Call call = updateVersionApi.getLastVersion(); call.enqueue(new Callback() { diff --git a/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java b/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java index a3995a4c5c..a087030180 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiElectrum.java @@ -230,7 +230,7 @@ public class ServerApiElectrum { private void doElectrumRequestTcp(ElectrumRequest electrumRequest, String host, int port) { try { - Socket socket = App.getNetworkComponent().getSocket(); + Socket socket = App.Companion.getNetworkComponent().getSocket(); socket.setSoTimeout(3000); Log.i(TAG, "Start process "+electrumRequest.getMethod()+" @ "+host + ":" + port); socket.connect(new InetSocketAddress(InetAddress.getByName(host), port)); @@ -252,18 +252,18 @@ public class ServerApiElectrum { if( (electrumRequest.getError()!=null && electrumRequest.getError().startsWith(ERROR_STARTS_WITH_CODE_32601)) ) { // method unknown error??? - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain)); electrumRequest.answerData=null; } } else { - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_no_answer)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_no_answer)); Log.i(TAG, ">> "); } } catch (ConnectException e) { //e.printStackTrace(); //responseListener.onFail(e.getMessage()); - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_no_connection)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_no_connection)); Log.e(TAG, "doElectrumRequestTcp " + electrumRequest.getMethod() + " ConnectException " + e.getMessage()); } finally { Log.i(TAG, "doElectrumRequestTcp " + electrumRequest.getMethod() + " socket.close"); @@ -274,13 +274,13 @@ public class ServerApiElectrum { { e.printStackTrace(); Log.e(TAG,"Can't close socket"); - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_communication_error)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_communication_error)); } } } catch (IOException e) { //e.printStackTrace(); //responseListener.onFail(e.getMessage()); - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_communication_error)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_communication_error)); Log.e(TAG, "doElectrumRequestTcp " + electrumRequest.getMethod() + " IOException " + e.getMessage()); } } @@ -341,17 +341,17 @@ public class ServerApiElectrum { if( (electrumRequest.getError()!=null && electrumRequest.getError().startsWith(ERROR_STARTS_WITH_CODE_32601)) ) { // method unknown error??? - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain)); electrumRequest.answerData=null; } } else { - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_no_answer)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_no_answer)); Log.i(TAG, ">> "); } } catch (ConnectException e) { e.printStackTrace(); - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_no_connection)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_no_connection)); Log.e(TAG, "doElectrumRequestSsl " + electrumRequest.getMethod() + " ConnectException " + e.getMessage()); } finally { Log.i(TAG, "doElectrumRequestSsl " + electrumRequest.getMethod() + " socket.close"); @@ -360,7 +360,7 @@ public class ServerApiElectrum { } catch (Exception e) { - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_communication_error)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_communication_error)); e.printStackTrace(); Log.e(TAG, "Can't close ssl socket"); } @@ -368,11 +368,11 @@ public class ServerApiElectrum { } catch (IOException e) { e.printStackTrace(); - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_communication_error)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain_communication_error)); Log.e(TAG, "doElectrumRequestSsl " + electrumRequest.getMethod() + " IOException " + e.getMessage()); } } catch (NoSuchAlgorithmException | KeyManagementException e) { - electrumRequest.setError(App.getInstance().getString(R.string.cannot_obtain_data_from_blockchain)); + electrumRequest.setError(App.Companion.getInstance().getString(R.string.cannot_obtain_data_from_blockchain)); Log.e(TAG, e.getMessage()); } } diff --git a/app/src/main/java/com/tangem/data/network/ServerApiInfura.java b/app/src/main/java/com/tangem/data/network/ServerApiInfura.java index 82b4b3d8e8..a477364f12 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiInfura.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiInfura.java @@ -52,7 +52,7 @@ public class ServerApiInfura { public void requestData(String method, int id, String wallet, String contract, String tx) { requestsCount++; - InfuraApi infuraApi = App.getNetworkComponent().getRetrofitInfura().create(InfuraApi.class); + InfuraApi infuraApi = App.Companion.getNetworkComponent().getRetrofitInfura().create(InfuraApi.class); InfuraBody infuraBody; switch (method) { diff --git a/app/src/main/java/com/tangem/data/network/ServerApiRootstock.java b/app/src/main/java/com/tangem/data/network/ServerApiRootstock.java index 2629c31cc1..0bcf5b7b4f 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiRootstock.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiRootstock.java @@ -52,7 +52,7 @@ public class ServerApiRootstock { public void requestData(String method, int id, String wallet, String contract, String tx) { requestsCount++; - RootstockApi rootstockApi = App.getNetworkComponent().getRetrofitRootstock().create(RootstockApi.class); + RootstockApi rootstockApi = App.Companion.getNetworkComponent().getRetrofitRootstock().create(RootstockApi.class); InfuraBody infuraBody; switch (method) { diff --git a/app/src/main/java/com/tangem/di/NavigatorComponent.java b/app/src/main/java/com/tangem/di/NavigatorComponent.java deleted file mode 100644 index ceac2a440a..0000000000 --- a/app/src/main/java/com/tangem/di/NavigatorComponent.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.tangem.di; - -import com.tangem.presentation.activity.EmptyWalletActivity; -import com.tangem.presentation.activity.LoadedWalletActivity; -import com.tangem.presentation.activity.LogoActivity; -import com.tangem.presentation.activity.MainActivity; -import com.tangem.presentation.activity.PrepareCryptonitOtherApiWithdrawalActivity; -import com.tangem.presentation.activity.PrepareKrakenWithdrawalActivity; -import com.tangem.presentation.activity.PrepareTransactionActivity; -import com.tangem.presentation.activity.PurgeActivity; -import com.tangem.presentation.activity.VerifyCardActivity; - -import javax.inject.Singleton; - -import dagger.Component; - -@Singleton -@Component(modules = {NavigatorModule.class}) -public interface NavigatorComponent { - - void inject(LogoActivity activity); - - void inject(MainActivity activity); - - void inject(PurgeActivity activity); - - void inject(PrepareTransactionActivity activity); - - void inject(PrepareCryptonitOtherApiWithdrawalActivity activity); - - void inject(PrepareKrakenWithdrawalActivity activity); - - void inject(LoadedWalletActivity activity); - - void inject(VerifyCardActivity activity); - - void inject(EmptyWalletActivity activity); - -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/di/NavigatorComponent.kt b/app/src/main/java/com/tangem/di/NavigatorComponent.kt new file mode 100644 index 0000000000..d4eff92dfe --- /dev/null +++ b/app/src/main/java/com/tangem/di/NavigatorComponent.kt @@ -0,0 +1,39 @@ +package com.tangem.di + +import com.tangem.presentation.activity.EmptyWalletActivity +import com.tangem.presentation.activity.LoadedWalletActivity +import com.tangem.presentation.activity.LogoActivity +import com.tangem.presentation.activity.MainActivity +import com.tangem.presentation.activity.PrepareCryptonitOtherApiWithdrawalActivity +import com.tangem.presentation.activity.PrepareKrakenWithdrawalActivity +import com.tangem.presentation.activity.PrepareTransactionActivity +import com.tangem.presentation.activity.PurgeActivity +import com.tangem.presentation.activity.VerifyCardActivity + +import javax.inject.Singleton + +import dagger.Component + +@Singleton +@Component(modules = [NavigatorModule::class]) +interface NavigatorComponent { + + fun inject(activity: LogoActivity) + + fun inject(activity: MainActivity) + + fun inject(activity: PurgeActivity) + + fun inject(activity: PrepareTransactionActivity) + + fun inject(activity: PrepareCryptonitOtherApiWithdrawalActivity) + + fun inject(activity: PrepareKrakenWithdrawalActivity) + + fun inject(activity: LoadedWalletActivity) + + fun inject(activity: VerifyCardActivity) + + fun inject(activity: EmptyWalletActivity) + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/di/NavigatorModule.java b/app/src/main/java/com/tangem/di/NavigatorModule.java deleted file mode 100644 index 718fc07003..0000000000 --- a/app/src/main/java/com/tangem/di/NavigatorModule.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.tangem.di; - -import com.tangem.presentation.dialog.WaitSecurityDelayDialogNew; - -import javax.inject.Singleton; - -import dagger.Module; -import dagger.Provides; - -@Module -class NavigatorModule { - - @Singleton - @Provides - Navigator provideNavigator() { - return new Navigator(); - } - - @Singleton - @Provides - WaitSecurityDelayDialogNew provideWaitSecurityDelayDialogNew() { - return new WaitSecurityDelayDialogNew(); - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/di/NavigatorModule.kt b/app/src/main/java/com/tangem/di/NavigatorModule.kt new file mode 100644 index 0000000000..1eb397c3c6 --- /dev/null +++ b/app/src/main/java/com/tangem/di/NavigatorModule.kt @@ -0,0 +1,25 @@ +package com.tangem.di + +import com.tangem.presentation.dialog.WaitSecurityDelayDialogNew + +import javax.inject.Singleton + +import dagger.Module +import dagger.Provides + +@Module +internal class NavigatorModule { + + @Singleton + @Provides + fun provideNavigator(): Navigator { + return Navigator() + } + + @Singleton + @Provides + fun provideWaitSecurityDelayDialogNew(): WaitSecurityDelayDialogNew { + return WaitSecurityDelayDialogNew() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/di/NetworkComponent.java b/app/src/main/java/com/tangem/di/NetworkComponent.java deleted file mode 100644 index a58b5e7e1a..0000000000 --- a/app/src/main/java/com/tangem/di/NetworkComponent.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.tangem.di; - -import com.tangem.data.network.Server; - -import java.net.Socket; - -import javax.inject.Named; -import javax.inject.Singleton; - -import dagger.Component; -import retrofit2.Retrofit; - -@Singleton -@Component(modules = {NetworkModule.class}) -public interface NetworkComponent { - - @Named(Server.ApiInfura.URL_INFURA) - Retrofit getRetrofitInfura(); - - @Named(Server.ApiEstimatefee.URL_ESTIMATEFEE) - Retrofit getRetrofitEstimatefee(); - - @Named(Server.ApiCoinmarket.URL_COINMARKET) - Retrofit getRetrofitCoinmarketcap(); - - @Named(Server.ApiUpdateVersion.URL_UPDATE_VERSION) - Retrofit getRetrofitGithubusercontent(); - - @Named(Server.ApiRootstock.URL_ROOTSTOCK) - Retrofit getRetrofitRootstock(); - - @Named("socket") - Socket getSocket(); - -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/di/NetworkComponent.kt b/app/src/main/java/com/tangem/di/NetworkComponent.kt new file mode 100644 index 0000000000..7621faf5a2 --- /dev/null +++ b/app/src/main/java/com/tangem/di/NetworkComponent.kt @@ -0,0 +1,35 @@ +package com.tangem.di + +import com.tangem.data.network.Server + +import java.net.Socket + +import javax.inject.Named +import javax.inject.Singleton + +import dagger.Component +import retrofit2.Retrofit + +@Singleton +@Component(modules = [NetworkModule::class]) +interface NetworkComponent { + + @get:Named(Server.ApiInfura.URL_INFURA) + val retrofitInfura: Retrofit + + @get:Named(Server.ApiEstimatefee.URL_ESTIMATEFEE) + val retrofitEstimatefee: Retrofit + + @get:Named(Server.ApiCoinmarket.URL_COINMARKET) + val retrofitCoinmarketcap: Retrofit + + @get:Named(Server.ApiUpdateVersion.URL_UPDATE_VERSION) + val retrofitGitHubUserContent: Retrofit + + @get:Named(Server.ApiRootstock.URL_ROOTSTOCK) + val retrofitRootstock: Retrofit + + @get:Named("socket") + val socket: Socket + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/di/NetworkModule.java b/app/src/main/java/com/tangem/di/NetworkModule.java deleted file mode 100644 index d540f79d73..0000000000 --- a/app/src/main/java/com/tangem/di/NetworkModule.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.tangem.di; - -import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; -import com.tangem.data.network.Server; - -import java.io.IOException; -import java.net.InetSocketAddress; -import java.net.Socket; -import java.net.SocketException; - -import javax.inject.Named; -import javax.inject.Singleton; - -import dagger.Module; -import dagger.Provides; -import okhttp3.OkHttpClient; -import okhttp3.logging.HttpLoggingInterceptor; -import retrofit2.Retrofit; -import retrofit2.converter.gson.GsonConverterFactory; - -@Module -class NetworkModule { - - @Singleton - @Provides - @Named(Server.ApiInfura.URL_INFURA) - Retrofit provideRetrofitInfura() { - return new Retrofit.Builder() - .baseUrl(Server.ApiInfura.URL_INFURA) - .addConverterFactory(GsonConverterFactory.create()) - .build(); - } - - @Singleton - @Provides - @Named(Server.ApiRootstock.URL_ROOTSTOCK) - Retrofit provideRetrofitRootstock() { - return new Retrofit.Builder() - .baseUrl(Server.ApiRootstock.URL_ROOTSTOCK) - .addConverterFactory(GsonConverterFactory.create()) - .build(); - } - - @Singleton - @Provides - @Named(Server.ApiEstimatefee.URL_ESTIMATEFEE) - Retrofit provideRetrofitEstimatefee() { - return new Retrofit.Builder() - .baseUrl(Server.ApiEstimatefee.URL_ESTIMATEFEE) - .addConverterFactory(GsonConverterFactory.create()) - .build(); - } - - @Singleton - @Provides - @Named(Server.ApiUpdateVersion.URL_UPDATE_VERSION) - Retrofit provideGithubusercontent() { - return new Retrofit.Builder() - .baseUrl(Server.ApiUpdateVersion.URL_UPDATE_VERSION) - .addConverterFactory(GsonConverterFactory.create()) - .client(createOkHttpClient()) - .build(); - } - - @Singleton - @Provides - @Named(Server.ApiCoinmarket.URL_COINMARKET) - Retrofit provideRetrofitCoinmarketcap() { - return new Retrofit.Builder() - .baseUrl(Server.ApiCoinmarket.URL_COINMARKET) - .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) - .build(); - } - - private OkHttpClient createOkHttpClient() { - return new OkHttpClient.Builder(). - addInterceptor(createHttpLoggingInterceptor()). - build(); - } - - private HttpLoggingInterceptor createHttpLoggingInterceptor() { - HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); - logging.setLevel(HttpLoggingInterceptor.Level.BODY); - return logging; - } - - @Provides - @Named("socket") - Socket provideSocket() { - Socket socket = new Socket(); - try { - socket.setSoTimeout(2000); - try { - socket.bind(new InetSocketAddress(0)); - } catch (IOException e) { - e.printStackTrace(); - } - } catch (SocketException e) { - e.printStackTrace(); - } - - return socket; - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/di/NetworkModule.kt b/app/src/main/java/com/tangem/di/NetworkModule.kt new file mode 100644 index 0000000000..fb29acccbd --- /dev/null +++ b/app/src/main/java/com/tangem/di/NetworkModule.kt @@ -0,0 +1,105 @@ +package com.tangem.di + +import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory +import com.tangem.data.network.Server + +import java.io.IOException +import java.net.InetSocketAddress +import java.net.Socket +import java.net.SocketException + +import javax.inject.Named +import javax.inject.Singleton + +import dagger.Module +import dagger.Provides +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +@Module +internal class NetworkModule { + + @Singleton + @Provides + @Named(Server.ApiInfura.URL_INFURA) + fun provideRetrofitInfura(): Retrofit { + return Retrofit.Builder() + .baseUrl(Server.ApiInfura.URL_INFURA) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + + @Singleton + @Provides + @Named(Server.ApiRootstock.URL_ROOTSTOCK) + fun provideRetrofitRootstock(): Retrofit { + return Retrofit.Builder() + .baseUrl(Server.ApiRootstock.URL_ROOTSTOCK) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + + @Singleton + @Provides + @Named(Server.ApiEstimatefee.URL_ESTIMATEFEE) + fun provideRetrofitEstimatefee(): Retrofit { + return Retrofit.Builder() + .baseUrl(Server.ApiEstimatefee.URL_ESTIMATEFEE) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + + @Singleton + @Provides + @Named(Server.ApiUpdateVersion.URL_UPDATE_VERSION) + fun provideGithubusercontent(): Retrofit { + return Retrofit.Builder() + .baseUrl(Server.ApiUpdateVersion.URL_UPDATE_VERSION) + .addConverterFactory(GsonConverterFactory.create()) + .client(createOkHttpClient()) + .build() + } + + @Singleton + @Provides + @Named(Server.ApiCoinmarket.URL_COINMARKET) + fun provideRetrofitCoinmarketcap(): Retrofit { + return Retrofit.Builder() + .baseUrl(Server.ApiCoinmarket.URL_COINMARKET) + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .build() + } + + private fun createOkHttpClient(): OkHttpClient { + return OkHttpClient.Builder().addInterceptor(createHttpLoggingInterceptor()).build() + } + + private fun createHttpLoggingInterceptor(): HttpLoggingInterceptor { + val logging = HttpLoggingInterceptor() + logging.level = HttpLoggingInterceptor.Level.BODY + return logging + } + + @Provides + @Named("socket") + fun provideSocket(): Socket { + val socket = Socket() + try { + socket.soTimeout = 2000 + try { + socket.bind(InetSocketAddress(0)) + } catch (e: IOException) { + e.printStackTrace() + } + + } catch (e: SocketException) { + e.printStackTrace() + } + + return socket + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt b/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt index 0cd4d062ba..2a87fbdf71 100644 --- a/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/EmptyWalletActivity.kt @@ -62,7 +62,7 @@ class EmptyWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, Card super.onCreate(savedInstanceState) setContentView(R.layout.activity_empty_wallet) - App.getNavigatorComponent().inject(this) + App.navigatorComponent?.inject(this) nfcManager = NfcManager(this, this) lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) diff --git a/app/src/main/java/com/tangem/presentation/activity/LoadedWalletActivity.kt b/app/src/main/java/com/tangem/presentation/activity/LoadedWalletActivity.kt index 9231929c75..44fffccc9a 100644 --- a/app/src/main/java/com/tangem/presentation/activity/LoadedWalletActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/LoadedWalletActivity.kt @@ -32,7 +32,7 @@ class LoadedWalletActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_loaded_wallet) - App.getNavigatorComponent().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/presentation/activity/LogoActivity.kt b/app/src/main/java/com/tangem/presentation/activity/LogoActivity.kt index c7b2d40220..acb03e8626 100644 --- a/app/src/main/java/com/tangem/presentation/activity/LogoActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/LogoActivity.kt @@ -31,7 +31,7 @@ class LogoActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_logo) - App.getNavigatorComponent().inject(this) + App.navigatorComponent?.inject(this) ivLogo.setOnClickListener { hide() } } diff --git a/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt b/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt index 9be5713ee9..11ab269e93 100644 --- a/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/MainActivity.kt @@ -82,7 +82,7 @@ class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoco super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - App.getNavigatorComponent().inject(this) + App.navigatorComponent?.inject(this) requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt index 018fa6fa20..820a1715cf 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareCryptonitOtherApiWithdrawalActivity.kt @@ -42,7 +42,7 @@ class PrepareCryptonitOtherApiWithdrawalActivity : AppCompatActivity(), NfcAdapt super.onCreate(savedInstanceState) setContentView(R.layout.activity_prepare_cryptonit_other_api_withdrawal) - App.getNavigatorComponent().inject(this) + App.navigatorComponent?.inject(this) nfcManager = NfcManager(this, this) lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt index 5eef701c62..73f365c799 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareKrakenWithdrawalActivity.kt @@ -52,7 +52,7 @@ class PrepareKrakenWithdrawalActivity : AppCompatActivity(), NfcAdapter.ReaderCa super.onCreate(savedInstanceState) setContentView(R.layout.activity_prepare_kraken_withdrawal) - App.getNavigatorComponent().inject(this) + App.navigatorComponent?.inject(this) ctx = TangemContext.loadFromBundle(this, intent.extras) diff --git a/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt index 2a5cd99068..758ea7ae85 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PrepareTransactionActivity.kt @@ -47,7 +47,7 @@ class PrepareTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallbac super.onCreate(savedInstanceState) setContentView(R.layout.activity_prepare_transaction) - App.getNavigatorComponent().inject(this) + App.navigatorComponent?.inject(this) nfcManager = NfcManager(this, this) lifecycle.addObserver(NfcLifecycleObserver(nfcManager)) diff --git a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt index e9961fe73e..dc8bbb7665 100644 --- a/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/PurgeActivity.kt @@ -61,7 +61,7 @@ class PurgeActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtoc super.onCreate(savedInstanceState) setContentView(R.layout.activity_purge) - App.getNavigatorComponent().inject(this) + App.navigatorComponent?.inject(this) requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT diff --git a/app/src/main/java/com/tangem/presentation/activity/VerifyCardActivity.kt b/app/src/main/java/com/tangem/presentation/activity/VerifyCardActivity.kt index 1089d8ea68..976b1bb083 100644 --- a/app/src/main/java/com/tangem/presentation/activity/VerifyCardActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/VerifyCardActivity.kt @@ -29,7 +29,7 @@ class VerifyCardActivity : AppCompatActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_verify_card) - App.getNavigatorComponent().inject(this) + App.navigatorComponent?.inject(this) } override fun onBackPressed() {