diff --git a/.idea/navEditor.xml b/.idea/navEditor.xml
index 18a4c9b1d1..16f8dca67c 100644
--- a/.idea/navEditor.xml
+++ b/.idea/navEditor.xml
@@ -311,6 +311,15 @@
+
diff --git a/app/src/main/java/com/tangem/App.kt b/app/src/main/java/com/tangem/App.kt
index 64d16a74e3..04bbe17063 100644
--- a/app/src/main/java/com/tangem/App.kt
+++ b/app/src/main/java/com/tangem/App.kt
@@ -4,12 +4,15 @@ import android.app.Application
import androidx.appcompat.app.AppCompatDelegate
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
-import com.tangem.data.local.PendingTransactionsStorage
import com.tangem.card_android.android.data.Firmwares
import com.tangem.card_android.android.data.PINStorage
import com.tangem.card_common.data.Issuer
import com.tangem.data.dp.PrefsManager
-import com.tangem.di.*
+import com.tangem.data.local.PendingTransactionsStorage
+import com.tangem.di.DaggerNetworkComponent
+import com.tangem.di.DaggerToastHelperComponent
+import com.tangem.di.NetworkComponent
+import com.tangem.di.ToastHelperComponent
import com.tangem.server_android.data.LocalStorage
import com.tangem.wallet.BuildConfig
import java.io.InputStreamReader
@@ -26,7 +29,6 @@ class App : Application() {
}
lateinit var networkComponent: NetworkComponent
- lateinit var navigatorComponent: NavigatorComponent
lateinit var toastHelperComponent: ToastHelperComponent
lateinit var firmwaresStorage: Firmwares
@@ -41,7 +43,6 @@ class App : Application() {
instance = this
networkComponent = DaggerNetworkComponent.create()
- navigatorComponent = buildNavigatorComponent()
toastHelperComponent = buildToastHelperComponent()
PrefsManager.getInstance().init(this)
@@ -76,11 +77,6 @@ class App : Application() {
}
}
- private fun buildNavigatorComponent(): NavigatorComponent {
- return DaggerNavigatorComponent.builder()
- .build()
- }
-
private fun buildToastHelperComponent(): ToastHelperComponent {
return DaggerToastHelperComponent.builder()
.build()
diff --git a/app/src/main/java/com/tangem/di/Navigator.kt b/app/src/main/java/com/tangem/di/Navigator.kt
deleted file mode 100644
index a1204b9470..0000000000
--- a/app/src/main/java/com/tangem/di/Navigator.kt
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.tangem.di
-
-import android.app.Activity
-import android.nfc.Tag
-import com.tangem.Constant
-import com.tangem.wallet.TangemContext
-import com.tangem.ui.PrepareTransactionActivity
-import com.tangem.ui.activity.*
-import com.tangem.wallet.BuildConfig
-
-class Navigator {
-
- fun showSettings(context: Activity) {
- context.startActivity(SettingsActivity.callingIntent(context))
- }
-
- fun showMain(context: Activity) {
- context.startActivity(MainActivity.callingIntent(context))
- }
-
- fun showLogo(context: Activity, autoHide: Boolean) {
- context.startActivity(LogoActivity.callingIntent(context, autoHide))
- }
-
- fun showPinSave(context: Activity, hasPin2: Boolean) {
- context.startActivity(PinSaveActivity.callingIntent(context, hasPin2))
- }
-
- fun showPinRequest(context: Activity, mode: String) {
- context.startActivityForResult(PinRequestActivity.callingIntent(context, mode), Constant.REQUEST_CODE_ENTER_PIN_ACTIVITY)
- }
-
- fun showQrScanActivity(context: Activity, requestCode: Int) {
- context.startActivityForResult(QrScanActivity.callingIntent(context), requestCode)
- }
-
- fun showPinRequestRequestPin(context: Activity, mode: String, ctx: TangemContext, newPin: String) {
- context.startActivityForResult(PinRequestActivity.callingIntentRequestPin(context, mode, ctx, newPin), Constant.REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN)
- }
-
- fun showPinRequestRequestPin2(context: Activity, mode: String, ctx: TangemContext, newPin2: String) {
- context.startActivityForResult(PinRequestActivity.callingIntentRequestPin2(context, mode, ctx, newPin2), Constant.REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN)
- }
-
- fun showPinRequestRequestPin2(context: Activity, mode: String, ctx: TangemContext) {
- context.startActivityForResult(PinRequestActivity.callingIntentRequestPin2(context, mode, ctx), Constant.REQUEST_CODE_REQUEST_PIN2_FOR_SWAP_PIN)
- }
-
- fun showPinRequestConfirmNewPin(context: Activity, mode: String, newPin: String) {
- context.startActivityForResult(PinRequestActivity.callingIntentConfirmPin(context, mode, newPin), Constant.REQUEST_CODE_ENTER_NEW_PIN)
- }
-
- fun showPinRequestConfirmNewPin2(context: Activity, mode: String, newPin2: String) {
- context.startActivityForResult(PinRequestActivity.callingIntentConfirmPin2(context, mode, newPin2), Constant.REQUEST_CODE_ENTER_NEW_PIN2)
- }
-
- fun showLoadedWallet(context: Activity, lastTag: Tag, ctx: TangemContext) {
- context.startActivityForResult(LoadedWalletActivity.callingIntent(context, lastTag, ctx), Constant.REQUEST_CODE_SHOW_CARD_ACTIVITY)
- }
-
- fun showEmptyWallet(context: Activity, ctx: TangemContext) {
- context.startActivity(EmptyWalletActivity.callingIntent(context, ctx))
- }
-
- fun showVerifyCard(context: Activity, ctx: TangemContext) {
- context.startActivityForResult(VerifyCardActivity.callingIntent(context, ctx), Constant.REQUEST_CODE_VERIFY_CARD)
- }
-
- fun showPinSwap(context: Activity, newPIN: String, newPIN2: String) {
- context.startActivityForResult(PinSwapActivity.callingIntent(context, newPIN, newPIN2), Constant.REQUEST_CODE_SWAP_PIN)
- }
-
- fun showPurge(context: Activity, ctx: TangemContext) {
- context.startActivityForResult(PurgeActivity.callingIntent(context, ctx), Constant.REQUEST_CODE_PURGE)
- }
-
- fun showPrepareTransaction(context: Activity, ctx: TangemContext) {
- when (BuildConfig.FLAVOR) {
- Constant.FLAVOR_TANGEM_CARDANO -> {
- context.startActivity(PrepareTransactionActivity.callingIntent(context, ctx))
- }
- else -> {
- context.startActivityForResult(PrepareTransactionActivity.callingIntent(context, ctx), Constant.REQUEST_CODE_SEND_TRANSACTION)
- }
- }
- }
-
- fun showCreateNewWallet(context: Activity, ctx: TangemContext) {
- context.startActivityForResult(CreateNewWalletActivity.callingIntent(context, ctx), Constant.REQUEST_CODE_CREATE_NEW_WALLET_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
deleted file mode 100644
index 25990b46a1..0000000000
--- a/app/src/main/java/com/tangem/di/NavigatorComponent.kt
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.tangem.di
-
-import com.tangem.ui.activity.EmptyWalletActivity
-import com.tangem.ui.activity.LoadedWalletActivity
-import com.tangem.ui.activity.LogoActivity
-import com.tangem.ui.activity.MainActivity
-import com.tangem.ui.activity.PrepareCryptonitOtherApiWithdrawalActivity
-import com.tangem.ui.activity.PrepareKrakenWithdrawalActivity
-import com.tangem.ui.PrepareTransactionActivity
-import com.tangem.ui.activity.PurgeActivity
-import com.tangem.ui.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.kt b/app/src/main/java/com/tangem/di/NavigatorModule.kt
index 0028345e74..b0bfb00afc 100644
--- a/app/src/main/java/com/tangem/di/NavigatorModule.kt
+++ b/app/src/main/java/com/tangem/di/NavigatorModule.kt
@@ -1,21 +1,13 @@
package com.tangem.di
import com.tangem.ui.dialog.WaitSecurityDelayDialogNew
-
-import javax.inject.Singleton
-
import dagger.Module
import dagger.Provides
+import javax.inject.Singleton
@Module
internal class NavigatorModule {
- @Singleton
- @Provides
- fun provideNavigator(): Navigator {
- return Navigator()
- }
-
@Singleton
@Provides
fun provideToastHelper(): ToastHelper {
diff --git a/app/src/main/java/com/tangem/di/ToastHelperComponent.kt b/app/src/main/java/com/tangem/di/ToastHelperComponent.kt
index 24d5165c5e..b98d944333 100644
--- a/app/src/main/java/com/tangem/di/ToastHelperComponent.kt
+++ b/app/src/main/java/com/tangem/di/ToastHelperComponent.kt
@@ -1,9 +1,5 @@
package com.tangem.di
-import com.tangem.ui.ConfirmTransactionActivity
-import com.tangem.ui.PrepareTransactionActivity
-import com.tangem.ui.activity.EmptyWalletActivity
-import com.tangem.ui.activity.LoadedWalletActivity
import com.tangem.ui.activity.MainActivity
import dagger.Component
import javax.inject.Singleton
@@ -14,12 +10,4 @@ interface ToastHelperComponent {
fun inject(activity: MainActivity)
- fun inject(activity: LoadedWalletActivity)
-
- fun inject(activity: ConfirmTransactionActivity)
-
- fun inject(activity: PrepareTransactionActivity)
-
- fun inject(activity: EmptyWalletActivity)
-
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/ui/activity/GlobalViewModel.kt b/app/src/main/java/com/tangem/ui/activity/GlobalViewModel.kt
new file mode 100644
index 0000000000..639a9ac7d4
--- /dev/null
+++ b/app/src/main/java/com/tangem/ui/activity/GlobalViewModel.kt
@@ -0,0 +1,8 @@
+package com.tangem.ui.activity
+
+import androidx.lifecycle.ViewModel
+import com.tangem.ui.navigation.NavigationResult
+
+class GlobalViewModel : ViewModel() {
+ var navigationResult: NavigationResult? = null
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/ui/activity/MainActivity.kt b/app/src/main/java/com/tangem/ui/activity/MainActivity.kt
index 075ff25409..71be563abc 100644
--- a/app/src/main/java/com/tangem/ui/activity/MainActivity.kt
+++ b/app/src/main/java/com/tangem/ui/activity/MainActivity.kt
@@ -13,31 +13,29 @@ import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
-import androidx.navigation.NavController
-import androidx.navigation.Navigation
+import androidx.lifecycle.ViewModelProviders
import com.scottyab.rootbeer.RootBeer
import com.tangem.App
import com.tangem.Constant
+import com.tangem.card_android.android.nfc.NfcLifecycleObserver
import com.tangem.card_android.android.reader.NfcManager
-import com.tangem.di.Navigator
import com.tangem.di.ToastHelper
import com.tangem.ui.dialog.RootFoundDialog
import com.tangem.wallet.BuildConfig
import com.tangem.wallet.R
import javax.inject.Inject
-class MainActivity : AppCompatActivity() {
+class MainActivity : AppCompatActivity(), NfcAdapter.ReaderCallback {
companion object {
val TAG: String = MainActivity::class.java.simpleName
fun callingIntent(context: Context) = Intent(context, MainActivity::class.java)
}
- lateinit var navController: NavController
- @Inject
- internal lateinit var navigator: Navigator
@Inject
internal lateinit var toastHelper: ToastHelper
+ lateinit var viewModel: GlobalViewModel
+ lateinit var nfcManager: NfcManager
// private var onNfcReaderCallback: NfcAdapter.ReaderCallback? = null
@@ -54,15 +52,17 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
- navController = Navigation.findNavController(this, R.id.nav_host_fragment)
+ viewModel = ViewModelProviders.of(this).get(GlobalViewModel::class.java)
- App.navigatorComponent.inject(this)
App.toastHelperComponent.inject(this)
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
verifyPermissions()
+ nfcManager = NfcManager(this, this)
+ lifecycle.addObserver(NfcLifecycleObserver(nfcManager))
+
// // NFC
// val intent = intent
// if (intent != null && (NfcAdapter.ACTION_TECH_DISCOVERED == intent.action || NfcAdapter.ACTION_NDEF_DISCOVERED == intent.action)) {
@@ -85,4 +85,14 @@ class MainActivity : AppCompatActivity() {
}
}
+ override fun onTagDiscovered(tag: Tag) {
+ val activeFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment)
+ ?.childFragmentManager?.primaryNavigationFragment
+ if (activeFragment is NfcAdapter.ReaderCallback) {
+ activeFragment.onTagDiscovered(tag)
+ } else {
+ nfcManager.ignoreTag(tag)
+ }
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/ui/fragment/BaseFragment.kt b/app/src/main/java/com/tangem/ui/fragment/BaseFragment.kt
new file mode 100644
index 0000000000..7004f6e794
--- /dev/null
+++ b/app/src/main/java/com/tangem/ui/fragment/BaseFragment.kt
@@ -0,0 +1,96 @@
+package com.tangem.ui.fragment
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.annotation.IdRes
+import androidx.fragment.app.Fragment
+import androidx.navigation.fragment.NavHostFragment.findNavController
+import com.tangem.ui.activity.MainActivity
+import com.tangem.ui.navigation.NavigationResult
+import com.tangem.ui.navigation.NavigationResultListener
+
+abstract class BaseFragment : Fragment() {
+
+ protected val requestCode: String
+ get() = arguments?.getString(ARGUMENT_NAVIGATION_REQUEST_CODE, REQUEST_CODE_NOT_SET)
+ ?: REQUEST_CODE_NOT_SET
+ protected val navigatedBack: Boolean
+ get() = (activity as? MainActivity)?.viewModel?.navigationResult != null
+
+ protected abstract val layoutId: Int
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ Log.d("LIFECYCLE", "onCreate: ${this::class.java.simpleName}")
+ }
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ return inflater.inflate(layoutId, container, false)
+ }
+
+ override fun onStart() {
+ super.onStart()
+ Log.d("LIFECYCLE", "onStart: ${this::class.java.simpleName}")
+ if (this is NavigationResultListener) {
+ val navigationResult = (activity as? MainActivity)?.viewModel?.navigationResult
+ navigationResult?.run {
+ onNavigationResult(this.requestCode, this.resultCode, this.data)
+ (activity as? MainActivity)?.viewModel?.navigationResult = null
+ }
+ }
+ }
+
+ override fun onPause() {
+ super.onPause()
+ Log.d("LIFECYCLE", "onPause: ${this::class.java.simpleName}")
+ }
+
+ override fun onStop() {
+ super.onStop()
+ Log.d("LIFECYCLE", "onStop: ${this::class.java.simpleName}")
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ Log.d("LIFECYCLE", "onDestroy: ${this::class.java.simpleName}")
+ }
+
+ protected fun navigateUp(@IdRes destination: Int = DESTINATION_NOT_SET): Boolean {
+ return if (destination == DESTINATION_NOT_SET) {
+ findNavController(this).popBackStack()
+ } else {
+ findNavController(this).popBackStack(destination, true)
+ }
+ }
+
+ protected fun navigateForResult(requestCode: String, @IdRes destination: Int, data: Bundle? = null) {
+ val argumentsWithRequestCode = (data ?: Bundle()).apply {
+ putString(ARGUMENT_NAVIGATION_REQUEST_CODE, requestCode)
+ }
+ navigateToDestination(destination, argumentsWithRequestCode)
+ }
+
+ protected fun navigateToDestination(@IdRes destination: Int, data: Bundle? = null) {
+ try {
+ findNavController(this).navigate(destination, data)
+ } catch (e: IllegalArgumentException) {
+ Log.w(this::class.java.simpleName, e.message)
+ }
+ }
+
+ protected fun navigateBackWithResult(resultCode: Int, data: Bundle? = null,
+ @IdRes destination: Int = DESTINATION_NOT_SET): Boolean {
+ (requireActivity() as MainActivity).viewModel.navigationResult =
+ NavigationResult(requestCode, resultCode, data)
+ return navigateUp(destination)
+ }
+
+ companion object {
+ private const val ARGUMENT_NAVIGATION_REQUEST_CODE = "NAVIGATION_REQUEST_CODE"
+ private const val DESTINATION_NOT_SET = -1
+ private const val REQUEST_CODE_NOT_SET = "REQUEST_CODE_NOT_SET"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/ui/navigation/NavigationResult.kt b/app/src/main/java/com/tangem/ui/navigation/NavigationResult.kt
new file mode 100644
index 0000000000..ffa42a3976
--- /dev/null
+++ b/app/src/main/java/com/tangem/ui/navigation/NavigationResult.kt
@@ -0,0 +1,5 @@
+package com.tangem.ui.navigation
+
+import android.os.Bundle
+
+data class NavigationResult(val requestCode: String, val resultCode: Int, val data: Bundle? = null)
\ No newline at end of file
diff --git a/app/src/main/java/com/tangem/ui/navigation/NavigationResultListener.kt b/app/src/main/java/com/tangem/ui/navigation/NavigationResultListener.kt
new file mode 100644
index 0000000000..f0e1681864
--- /dev/null
+++ b/app/src/main/java/com/tangem/ui/navigation/NavigationResultListener.kt
@@ -0,0 +1,7 @@
+package com.tangem.ui.navigation
+
+import android.os.Bundle
+
+interface NavigationResultListener {
+ fun onNavigationResult(requestCode: String, resultCode: Int, data: Bundle? = null)
+}
\ No newline at end of file