diff --git a/app/src/main/java/com/aurora/store/view/ui/onboarding/AppLinksFragment.kt b/app/src/main/java/com/aurora/store/view/ui/onboarding/AppLinksFragment.kt index cacab1379..312d0e959 100644 --- a/app/src/main/java/com/aurora/store/view/ui/onboarding/AppLinksFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/onboarding/AppLinksFragment.kt @@ -20,10 +20,17 @@ class AppLinksFragment : Fragment(R.layout.fragment_app_links) { private val binding get() = _binding!! private val playStoreDomain = "play.google.com" + private val marketDomain = "market.android.com" + + // AppLink buttons + private var buttons = mapOf( + playStoreDomain to binding.playStoreButton, + marketDomain to binding.marketButton + ) private val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { - if (isSAndAbove() && playStoreDomainVerified()) { + if (isSAndAbove() && buttons.keys.any { domainVerified(it) }) { toast(R.string.app_link_enabled) } updateButtonState() @@ -35,38 +42,45 @@ class AppLinksFragment : Fragment(R.layout.fragment_app_links) { updateButtonState() if (isSAndAbove()) { - binding.btnAction.setOnClickListener { - val intent = Intent( - ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, - Uri.parse("package:${view.context.packageName}") - ) - startForResult.launch(intent) + buttons.values.forEach { + it.setOnClickListener { + val intent = Intent( + ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, + Uri.parse("package:${view.context.packageName}") + ) + startForResult.launch(intent) + } } } } override fun onDestroyView() { + buttons = emptyMap() _binding = null super.onDestroyView() } private fun updateButtonState() { if (isSAndAbove()) { - if (playStoreDomainVerified()) { - binding.btnAction.apply { + buttons.forEach { (domain, button) -> + if (domainVerified(domain)) { + button.apply { + text = getString(R.string.action_enabled) + isEnabled = false + } + } + } + } else { + buttons.forEach { (_, button) -> + button.apply { text = getString(R.string.action_enabled) isEnabled = false } } - } else { - binding.btnAction.apply { - text = getString(R.string.action_enabled) - isEnabled = false - } } } - private fun playStoreDomainVerified(): Boolean { + private fun domainVerified(domain: String): Boolean { return if (isSAndAbove()) { val domainVerificationManager = requireContext().getSystemService( DomainVerificationManager::class.java @@ -75,8 +89,8 @@ class AppLinksFragment : Fragment(R.layout.fragment_app_links) { requireContext().packageName ) - val playStoreDomain = userState?.hostToStateMap?.filterKeys { it == playStoreDomain } - playStoreDomain?.values?.first() == DomainVerificationUserState.DOMAIN_STATE_SELECTED + val domainMap = userState?.hostToStateMap?.filterKeys { it == domain } + domainMap?.values?.first() == DomainVerificationUserState.DOMAIN_STATE_SELECTED } else { true } diff --git a/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt b/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt index e8c5c437c..0f3ce65e5 100644 --- a/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/splash/SplashFragment.kt @@ -90,7 +90,7 @@ class SplashFragment : BaseFragment(R.layout.fragment_splash) { } AuthState.Valid -> { - val packageName = requireArguments().getString("packageName") ?: "" + val packageName = getPackageName() if (packageName.isBlank()) { navigateToDefaultTab() } else { @@ -110,7 +110,7 @@ class SplashFragment : BaseFragment(R.layout.fragment_splash) { } AuthState.SignedIn -> { - val packageName = requireArguments().getString("packageName") ?: "" + val packageName = getPackageName() if (packageName.isBlank()) { navigateToDefaultTab() } else { @@ -216,4 +216,13 @@ class SplashFragment : BaseFragment(R.layout.fragment_splash) { } findNavController().navigate(directions) } + + private fun getPackageName(): String { + // Navigation component cannot handle market scheme as its missing a valid host + return if (activity?.intent != null && activity?.intent?.scheme == "market") { + requireActivity().intent.data!!.getQueryParameter("id") ?: "" + } else { + requireArguments().getString("packageName") ?: "" + } + } } diff --git a/app/src/main/res/layout/fragment_app_links.xml b/app/src/main/res/layout/fragment_app_links.xml index 99be965b9..f771869d5 100644 --- a/app/src/main/res/layout/fragment_app_links.xml +++ b/app/src/main/res/layout/fragment_app_links.xml @@ -37,6 +37,7 @@ app:layout_constraintTop_toBottomOf="@+id/appCompatTextView2" /> + + + + + + + + diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index ace963c6b..f07ea06f9 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -315,6 +315,14 @@ android:name="packageName" android:defaultValue="" app:argType="string" /> + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9b82e74ed..1c8ac194f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -378,4 +378,6 @@ App link enabled! play.google.com Google Play, also known as the Google Play Store and formerly Android Market. - \ No newline at end of file + market.android.com + Android Market was an online store offering software applications designed for Android devices, retired in 2017. +