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 b44faede4c..d3a208d258 100644 --- a/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/CreateNewWalletActivity.kt @@ -155,7 +155,6 @@ class CreateNewWalletActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, if (cardProtocol.error == null) { rlProgressBar.post { rlProgressBar.visibility = View.GONE } - progressBar!!.post { progressBar!!.progress = 100 progressBar!!.progressTintList = ColorStateList.valueOf(Color.GREEN) 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 cc8db08cc7..c2669e7d1b 100644 --- a/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt +++ b/app/src/main/java/com/tangem/presentation/activity/SignTransactionActivity.kt @@ -11,7 +11,11 @@ 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 com.tangem.App import com.tangem.Constant @@ -20,6 +24,7 @@ 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.reader.NfcManager import com.tangem.tangemcard.android.reader.NfcReader import com.tangem.tangemcard.data.asBundle @@ -29,6 +34,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_touch_card.* class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, CardProtocol.Notifications { @@ -39,6 +45,8 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, private lateinit var nfcManager: NfcManager private lateinit var ctx: TangemContext + private lateinit var antenna: DeviceNFCAntennaLocation + private var signTransactionTask: SignTask? = null private lateinit var amount: CoinEngine.Amount @@ -67,6 +75,31 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, 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() } public override fun onResume() { @@ -159,6 +192,8 @@ 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 @@ -173,6 +208,8 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, signTransactionTask = null if (cardProtocol != null) { if (cardProtocol.error == null) { + rlProgressBar.post { rlProgressBar.visibility = View.GONE } + progressBar!!.post { progressBar!!.progress = 100 progressBar!!.progressTintList = ColorStateList.valueOf(Color.GREEN) @@ -228,6 +265,14 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, } } + rlProgressBar.postDelayed({ + try { + rlProgressBar.visibility = View.GONE + } catch (e: Exception) { + e.printStackTrace() + } + }, 500) + progressBar!!.postDelayed({ try { progressBar!!.progress = 0 @@ -289,5 +334,25 @@ class SignTransactionActivity : AppCompatActivity(), NfcAdapter.ReaderCallback, } + 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/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt index 3b497e3568..5a563102ba 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -653,7 +653,7 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback coinEngine!!.requestBalanceAndUnspentTransactions( object : CoinEngine.BlockchainRequestsCallbacks { override fun onComplete(success: Boolean) { - LOG.i(TAG, "requestBalanceAndUnspentTransactions onComplete: " + success.toString() + ", request counter " + requestCounter.toString()) + LOG.i(TAG, "requestBalanceAndUnspentTransactions onComplete: $success, request counter $requestCounter") if (activity == null) return requestCounter-- if (!success) { @@ -672,8 +672,7 @@ class LoadedWallet : androidx.fragment.app.Fragment(), NfcAdapter.ReaderCallback } override fun allowAdvance(): Boolean { - // TODO Caused by: kotlin.TypeCastException: null cannot be cast to non-null type android.app.Activity - return UtilHelper.isOnline(context as Activity) + return context?.let { UtilHelper.isOnline(it) }!! } } ) diff --git a/app/src/main/java/com/tangem/util/UtilHelper.kt b/app/src/main/java/com/tangem/util/UtilHelper.kt index 9b144c074e..63daab7ea5 100644 --- a/app/src/main/java/com/tangem/util/UtilHelper.kt +++ b/app/src/main/java/com/tangem/util/UtilHelper.kt @@ -37,7 +37,7 @@ object UtilHelper { return bmp } - fun isOnline(context: Activity): Boolean { + fun isOnline(context: Context): Boolean { return try { val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val netInfo: NetworkInfo? diff --git a/app/src/main/res/layout/activity_sign_transaction.xml b/app/src/main/res/layout/activity_sign_transaction.xml index 5907caa999..cbdec0e682 100644 --- a/app/src/main/res/layout/activity_sign_transaction.xml +++ b/app/src/main/res/layout/activity_sign_transaction.xml @@ -1,15 +1,31 @@ - + + + android:orientation="vertical" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.75"> - \ No newline at end of file + \ No newline at end of file