1
0
Fork 0

For #1718: Sets accessibility users to top toolbar by default (#7486)

master
Sawyer Blatz 2020-01-09 09:15:02 -08:00 committed by GitHub
parent b23ee38082
commit 718c211a86
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 6 deletions

View File

@ -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

View File

@ -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)
}

View File

@ -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)

View File

@ -4,11 +4,9 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<org.mozilla.fenix.settings.RadioButtonPreference
android:defaultValue="false"
android:key="@string/pref_key_toolbar_top"
android:title="@string/preference_top_toolbar" />
<org.mozilla.fenix.settings.RadioButtonPreference
android:defaultValue="true"
android:key="@string/pref_key_toolbar_bottom"
android:title="@string/preference_bottom_toolbar" />
</PreferenceScreen>