diff --git a/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt b/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt index d7be6ba64..08f3e35e3 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/RadioButtonPreference.kt @@ -92,6 +92,11 @@ open class RadioButtonPreference @JvmOverloads constructor( } } + fun setCheckedWithoutClickListener(isChecked: Boolean) { + updateRadioValue(isChecked) + toggleRadioGroups() + } + private fun updateRadioValue(isChecked: Boolean) { persistBoolean(isChecked) radioButton?.isChecked = isChecked diff --git a/app/src/main/java/org/mozilla/fenix/settings/ToolbarSettingsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/ToolbarSettingsFragment.kt index cc155f929..1abc31ceb 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/ToolbarSettingsFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/ToolbarSettingsFragment.kt @@ -10,6 +10,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.getPreferenceKey +import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar /** @@ -45,6 +46,9 @@ class ToolbarSettingsFragment : PreferenceFragmentCompat() { )) } + topPreference.setCheckedWithoutClickListener(!requireContext().settings().shouldUseBottomToolbar) + bottomPreference.setCheckedWithoutClickListener(requireContext().settings().shouldUseBottomToolbar) + topPreference.addToRadioGroup(bottomPreference) bottomPreference.addToRadioGroup(topPreference) } diff --git a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt index 61ed68460..5d74a505a 100644 --- a/app/src/main/java/org/mozilla/fenix/utils/Settings.kt +++ b/app/src/main/java/org/mozilla/fenix/utils/Settings.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.utils +import android.accessibilityservice.AccessibilityServiceInfo.CAPABILITY_CAN_PERFORM_GESTURES import android.app.Application import android.content.Context import android.content.Context.MODE_PRIVATE @@ -205,9 +206,7 @@ class Settings private constructor( val shouldUseFixedTopToolbar: Boolean get() { - val accessibilityManager = - appContext.getSystemService(Context.ACCESSIBILITY_SERVICE) as? AccessibilityManager - return accessibilityManager?.isTouchExplorationEnabled ?: false + return touchExplorationIsEnabled || switchServiceIsEnabled } var shouldDeleteBrowsingDataOnQuit by booleanPreference( @@ -217,9 +216,37 @@ class Settings private constructor( var shouldUseBottomToolbar by booleanPreference( appContext.getPreferenceKey(R.string.pref_key_toolbar_bottom), - default = true + // Default accessibility users to top toolbar + default = !touchExplorationIsEnabled && !switchServiceIsEnabled ) + /** + * Check each active accessibility service to see if it can perform gestures, if any can, + * then it is *likely* a switch service is enabled. We are assuming this to be the case based on #7486 + */ + private val switchServiceIsEnabled: Boolean + get() { + val accessibilityManager = + appContext.getSystemService(Context.ACCESSIBILITY_SERVICE) as? AccessibilityManager + + accessibilityManager?.getEnabledAccessibilityServiceList(0)?.let { activeServices -> + for (service in activeServices) { + if (service.capabilities.and(CAPABILITY_CAN_PERFORM_GESTURES) == 1) { + return true + } + } + } + + return false + } + + private val touchExplorationIsEnabled: Boolean + get() { + val accessibilityManager = + appContext.getSystemService(Context.ACCESSIBILITY_SERVICE) as? AccessibilityManager + return accessibilityManager?.isTouchExplorationEnabled ?: false + } + val toolbarSettingString: String get() = when { shouldUseBottomToolbar -> appContext.getString(R.string.preference_bottom_toolbar) diff --git a/app/src/main/res/xml/toolbar_preferences.xml b/app/src/main/res/xml/toolbar_preferences.xml index 3ddd30cd4..1f1a4db22 100644 --- a/app/src/main/res/xml/toolbar_preferences.xml +++ b/app/src/main/res/xml/toolbar_preferences.xml @@ -4,11 +4,9 @@ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->