From 7b39a9589c9097a7f84c1aa024bd80e282d46c46 Mon Sep 17 00:00:00 2001 From: Aiden Shi Date: Thu, 28 Oct 2021 16:47:24 +0200 Subject: [PATCH 1/2] refactor deeplink handling introduction or scan instructions not finished --- .../ctr/verifier/VerifierMainActivity.kt | 20 ++++--------- .../instructions/ScanInstructionsFragment.kt | 4 +-- .../ui/scanner/ScanResultInvalidFragment.kt | 4 +-- .../ui/scanner/VerifierQrScannerFragment.kt | 10 ++++--- .../scanner/models/ScanResultInvalidData.kt | 2 +- .../verifier/ui/scanner/utils/ScannerUtil.kt | 6 ++-- .../navigation/verifier_nav_graph_main.xml | 9 ++++-- .../navigation/verifier_nav_graph_root.xml | 27 +----------------- .../verifier_nav_graph_scan_instructions.xml | 28 ------------------- .../navigation/verifier_nav_graph_scanner.xml | 6 ---- 10 files changed, 26 insertions(+), 90 deletions(-) delete mode 100644 verifier/src/main/res/navigation/verifier_nav_graph_scan_instructions.xml diff --git a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/VerifierMainActivity.kt b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/VerifierMainActivity.kt index 04f38a167..f924e222f 100644 --- a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/VerifierMainActivity.kt +++ b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/VerifierMainActivity.kt @@ -17,7 +17,6 @@ import nl.rijksoverheid.ctr.shared.MobileCoreWrapper import nl.rijksoverheid.ctr.shared.livedata.EventObserver import nl.rijksoverheid.ctr.shared.utils.IntentUtil import nl.rijksoverheid.ctr.verifier.databinding.ActivityMainBinding -import nl.rijksoverheid.ctr.verifier.ui.scanqr.ScanQrViewModel import org.koin.android.ext.android.inject import org.koin.androidx.viewmodel.ext.android.viewModel @@ -32,13 +31,13 @@ class VerifierMainActivity : AppCompatActivity() { private val introductionViewModel: IntroductionViewModel by viewModel() private val appConfigViewModel: AppConfigViewModel by viewModel() - private val scanQrViewModel: ScanQrViewModel by viewModel() private val mobileCoreWrapper: MobileCoreWrapper by inject() private val dialogUtil: DialogUtil by inject() private val intentUtil: IntentUtil by inject() private var isFreshStart: Boolean = true // track if this is a fresh start of the app - private var returnUri: String? = null // return uri to external app given as argument from deeplink + + var returnUri: String? = null // return uri to external app given as argument from deeplink private var hasHandledDeeplink: Boolean = false override fun onCreate(savedInstanceState: Bundle?) { @@ -80,11 +79,11 @@ class VerifierMainActivity : AppCompatActivity() { }) navController.addOnDestinationChangedListener { _, destination, arguments -> - // Persist deeplink return uri in case it's not used immediately because of onboarding if (destination.id == R.id.nav_main) { + // Persist deeplink return uri in case it's not used immediately because of onboarding arguments?.getString("returnUri")?.let { returnUri = it } + navigateDeeplink(navController) } - navigateDeeplink(navController) // verifier can stay active for a long time, so it is not sufficient // to try to refresh the config only every time the app resumes. @@ -99,16 +98,9 @@ class VerifierMainActivity : AppCompatActivity() { private fun navigateDeeplink(navController: NavController) { if (returnUri != null && !hasHandledDeeplink && isIntroductionFinished()) { - hasHandledDeeplink = true - navController.navigate( - // Show scan instructions before scanner when it's not shown before - if (scanQrViewModel.hasSeenScanInstructions()) { - RootNavDirections.actionScanner(returnUri) - } else { - RootNavDirections.actionScanInstructions(returnUri) - } - ) + navController.navigate(RootNavDirections.actionScanner()) } + hasHandledDeeplink = true } private fun isIntroductionFinished() = diff --git a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/instructions/ScanInstructionsFragment.kt b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/instructions/ScanInstructionsFragment.kt index b4e1828ba..17ffd4b32 100644 --- a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/instructions/ScanInstructionsFragment.kt +++ b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/instructions/ScanInstructionsFragment.kt @@ -42,8 +42,6 @@ class ScanInstructionsFragment : Fragment(R.layout.fragment_scan_instructions) { private var _binding: FragmentScanInstructionsBinding? = null private val binding get() = _binding!! - private val args: ScanInstructionsFragmentArgs by navArgs() - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -77,7 +75,7 @@ class ScanInstructionsFragment : Fragment(R.layout.fragment_scan_instructions) { // Instructions have been opened, set as seen scanQrViewModel.setScanInstructionsSeen() findNavController().popBackStack(R.id.nav_scan_qr, false) - scannerUtil.launchScanner(requireActivity(), args.returnUri) + scannerUtil.launchScanner(requireActivity()) } else { binding.viewPager.currentItem = currentItem + 1 } diff --git a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/ScanResultInvalidFragment.kt b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/ScanResultInvalidFragment.kt index 848f9b67d..cb00ac8ff 100644 --- a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/ScanResultInvalidFragment.kt +++ b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/ScanResultInvalidFragment.kt @@ -97,9 +97,7 @@ class ScanResultInvalidFragment : Fragment(R.layout.fragment_scan_result_invalid private fun navigateToScanner() { navigateSafety( R.id.nav_scan_result_invalid, - ScanResultInvalidFragmentDirections.actionNavQrScanner( - returnUri = (args.invalidData as? ScanResultInvalidData.Error)?.returnUri - ) + ScanResultInvalidFragmentDirections.actionNavQrScanner() ) } diff --git a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/VerifierQrScannerFragment.kt b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/VerifierQrScannerFragment.kt index 44b36bcb7..02aa2094e 100644 --- a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/VerifierQrScannerFragment.kt +++ b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/VerifierQrScannerFragment.kt @@ -11,6 +11,7 @@ import nl.rijksoverheid.ctr.qrscanner.QrCodeScannerFragment import nl.rijksoverheid.ctr.shared.livedata.EventObserver import nl.rijksoverheid.ctr.verifier.BuildConfig import nl.rijksoverheid.ctr.verifier.R +import nl.rijksoverheid.ctr.verifier.VerifierMainActivity import nl.rijksoverheid.ctr.verifier.ui.scanner.models.ScanResultInvalidData import nl.rijksoverheid.ctr.verifier.ui.scanner.models.ScanResultValidData import nl.rijksoverheid.ctr.verifier.ui.scanner.models.VerifiedQrResultState @@ -28,12 +29,14 @@ class VerifierQrScannerFragment : QrCodeScannerFragment() { private val scannerViewModel: ScannerViewModel by viewModel() private val dialogUtil: DialogUtil by inject() - private val args: VerifierQrScannerFragmentArgs by navArgs() + + private val returnUri: String? + get() = (activity as? VerifierMainActivity)?.returnUri override fun onQrScanned(content: String) { scannerViewModel.validate( qrContent = content, - returnUri = args.returnUri + returnUri = returnUri ) } @@ -97,8 +100,7 @@ class VerifierQrScannerFragment : QrCodeScannerFragment() { findNavController().navigate( VerifierQrScannerFragmentDirections.actionScanResultInvalid( invalidData = ScanResultInvalidData.Error( - error = qrResultState.error, - returnUri = args.returnUri + error = qrResultState.error ) ) ) diff --git a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/models/ScanResultInvalidData.kt b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/models/ScanResultInvalidData.kt index e52534b29..2b8c581b1 100644 --- a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/models/ScanResultInvalidData.kt +++ b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/models/ScanResultInvalidData.kt @@ -9,6 +9,6 @@ sealed class ScanResultInvalidData : Parcelable { data class Invalid(val verifiedQr: VerificationResult) : ScanResultInvalidData(), Parcelable @Parcelize - data class Error(val error: String, val returnUri: String?) : + data class Error(val error: String) : ScanResultInvalidData(), Parcelable } diff --git a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/utils/ScannerUtil.kt b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/utils/ScannerUtil.kt index 63e2e1476..a8ff49903 100644 --- a/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/utils/ScannerUtil.kt +++ b/verifier/src/main/java/nl/rijksoverheid/ctr/verifier/ui/scanner/utils/ScannerUtil.kt @@ -13,13 +13,13 @@ import nl.rijksoverheid.ctr.verifier.RootNavDirections * */ interface ScannerUtil { - fun launchScanner(activity: Activity, returnUri: String? = null) + fun launchScanner(activity: Activity) } class ScannerUtilImpl : ScannerUtil { - override fun launchScanner(activity: Activity, returnUri: String?) { + override fun launchScanner(activity: Activity) { Navigation.findNavController(activity, R.id.main_nav_host_fragment) - .navigate(RootNavDirections.actionScanner(returnUri)) + .navigate(RootNavDirections.actionScanner()) } } diff --git a/verifier/src/main/res/navigation/verifier_nav_graph_main.xml b/verifier/src/main/res/navigation/verifier_nav_graph_main.xml index a1c0ced61..57d143ae1 100644 --- a/verifier/src/main/res/navigation/verifier_nav_graph_main.xml +++ b/verifier/src/main/res/navigation/verifier_nav_graph_main.xml @@ -20,7 +20,7 @@ - + + diff --git a/verifier/src/main/res/navigation/verifier_nav_graph_root.xml b/verifier/src/main/res/navigation/verifier_nav_graph_root.xml index 50f98fcd9..40eac5f34 100644 --- a/verifier/src/main/res/navigation/verifier_nav_graph_root.xml +++ b/verifier/src/main/res/navigation/verifier_nav_graph_root.xml @@ -68,33 +68,8 @@ app:exitAnim="@anim/fragment_open_exit" app:popEnterAnim="@anim/fragment_close_enter" app:popExitAnim="@anim/fragment_close_exit" - app:popUpTo="@id/nav_scanner"> - - - - - - - - + app:popUpTo="@id/nav_scanner" /> - diff --git a/verifier/src/main/res/navigation/verifier_nav_graph_scan_instructions.xml b/verifier/src/main/res/navigation/verifier_nav_graph_scan_instructions.xml deleted file mode 100644 index 34c303153..000000000 --- a/verifier/src/main/res/navigation/verifier_nav_graph_scan_instructions.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - diff --git a/verifier/src/main/res/navigation/verifier_nav_graph_scanner.xml b/verifier/src/main/res/navigation/verifier_nav_graph_scanner.xml index 6a7677d88..34cd9f7d0 100644 --- a/verifier/src/main/res/navigation/verifier_nav_graph_scanner.xml +++ b/verifier/src/main/res/navigation/verifier_nav_graph_scanner.xml @@ -10,12 +10,6 @@ android:name="nl.rijksoverheid.ctr.verifier.ui.scanner.VerifierQrScannerFragment" tools:layout="@layout/fragment_scanner"> - - Date: Thu, 28 Oct 2021 17:04:55 +0200 Subject: [PATCH 2/2] update test --- .../ctr/verifier/ui/scanner/ScanResultInvalidFragmentTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/verifier/src/test/java/nl/rijksoverheid/ctr/verifier/ui/scanner/ScanResultInvalidFragmentTest.kt b/verifier/src/test/java/nl/rijksoverheid/ctr/verifier/ui/scanner/ScanResultInvalidFragmentTest.kt index b903d887c..5697b3036 100644 --- a/verifier/src/test/java/nl/rijksoverheid/ctr/verifier/ui/scanner/ScanResultInvalidFragmentTest.kt +++ b/verifier/src/test/java/nl/rijksoverheid/ctr/verifier/ui/scanner/ScanResultInvalidFragmentTest.kt @@ -40,7 +40,7 @@ class ScanResultInvalidFragmentTest : AutoCloseKoinTest() { @Test fun `Screen shows correct content`() { - launchScanResultInvalidFragment(data = ScanResultInvalidData.Error("invalid QR code", null)) + launchScanResultInvalidFragment(data = ScanResultInvalidData.Error("invalid QR code")) assertHasBackground(R.id.root, R.color.red) scrollTo(R.id.title) assertDisplayed(R.id.title, R.string.scan_result_invalid_title) @@ -53,7 +53,7 @@ class ScanResultInvalidFragmentTest : AutoCloseKoinTest() { @Test fun `Invalid result on explanation button click opens explanation dialog`() { - launchScanResultInvalidFragment(data = ScanResultInvalidData.Error("invalid QR code", null)) + launchScanResultInvalidFragment(data = ScanResultInvalidData.Error("invalid QR code")) performActionOnView(withId(R.id.secondaryButton), click()) assertContains(R.string.scan_result_invalid_reason_title) }