From dd09ba64c4d13ccd1a3ade639a16321f6c04a988 Mon Sep 17 00:00:00 2001 From: yichiehc <48332564+yichiehc@users.noreply.github.com> Date: Sat, 27 Mar 2021 00:25:56 +0800 Subject: [PATCH] For #18594: Highlight the "Default browser" system setting on Android >= N Although not public APIs we can use specific extras in the Intent used to open system settings such that the "Default browser" setting is highlighted to provide a better UX for users looking to set Fenix as default. --- .../fenix/home/intent/DeepLinkIntentProcessor.kt | 10 ++++++++++ .../org/mozilla/fenix/settings/SettingsFragment.kt | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessor.kt b/app/src/main/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessor.kt index 5d1893db5c..64775d9722 100644 --- a/app/src/main/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/intent/DeepLinkIntentProcessor.kt @@ -10,6 +10,7 @@ import android.net.Uri import android.os.Build import android.os.Build.VERSION.SDK_INT import android.provider.Settings +import androidx.core.os.bundleOf import androidx.navigation.NavController import mozilla.components.concept.engine.EngineSession import mozilla.components.support.base.log.logger.Logger @@ -88,6 +89,9 @@ class DeepLinkIntentProcessor( "make_default_browser" -> { if (SDK_INT >= Build.VERSION_CODES.N) { val settingsIntent = Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS) + settingsIntent.putExtra(SETTINGS_SELECT_OPTION_KEY, DEFAULT_BROWSER_APP_OPTION) + settingsIntent.putExtra(SETTINGS_SHOW_FRAGMENT_ARGS, + bundleOf(SETTINGS_SELECT_OPTION_KEY to DEFAULT_BROWSER_APP_OPTION)) activity.startActivity(settingsIntent) } } @@ -150,4 +154,10 @@ class DeepLinkIntentProcessor( */ fun verifyDeepLink(deepLink: Uri): Boolean } + + companion object { + private const val SETTINGS_SELECT_OPTION_KEY = ":settings:fragment_args_key" + private const val SETTINGS_SHOW_FRAGMENT_ARGS = ":settings:show_fragment_args" + private const val DEFAULT_BROWSER_APP_OPTION = "default_browser" + } } diff --git a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt index ce2c8ebb07..f9cf5b8226 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/SettingsFragment.kt @@ -19,6 +19,7 @@ import android.view.LayoutInflater import android.widget.Toast import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AlertDialog +import androidx.core.os.bundleOf import androidx.lifecycle.lifecycleScope import androidx.navigation.NavDirections import androidx.navigation.findNavController @@ -501,6 +502,9 @@ class SettingsFragment : PreferenceFragmentCompat() { private fun navigateUserToDefaultAppsSettings() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val intent = Intent(android.provider.Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS) + intent.putExtra(SETTINGS_SELECT_OPTION_KEY, DEFAULT_BROWSER_APP_OPTION) + intent.putExtra(SETTINGS_SHOW_FRAGMENT_ARGS, + bundleOf(SETTINGS_SELECT_OPTION_KEY to DEFAULT_BROWSER_APP_OPTION)) startActivity(intent) } } @@ -572,5 +576,8 @@ class SettingsFragment : PreferenceFragmentCompat() { private const val SCROLL_INDICATOR_DELAY = 10L private const val FXA_SYNC_OVERRIDE_EXIT_DELAY = 2000L private const val AMO_COLLECTION_OVERRIDE_EXIT_DELAY = 3000L + private const val SETTINGS_SELECT_OPTION_KEY = ":settings:fragment_args_key" + private const val SETTINGS_SHOW_FRAGMENT_ARGS = ":settings:show_fragment_args" + private const val DEFAULT_BROWSER_APP_OPTION = "default_browser" } }