From 0d37c8f2688f4ab312bc36af0596459355f66e90 Mon Sep 17 00:00:00 2001 From: mcarare Date: Mon, 16 Nov 2020 17:09:58 +0200 Subject: [PATCH] For #16420: Make search bar first view focused by a11y services on open. --- .../fenix/search/SearchDialogFragment.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt index 4b7f14066..b670be096 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -11,6 +11,7 @@ import android.content.Context import android.content.DialogInterface import android.content.Intent import android.graphics.Typeface +import android.os.Build import android.os.Bundle import android.os.StrictMode import android.speech.RecognizerIntent @@ -20,6 +21,7 @@ import android.view.View import android.view.ViewGroup import android.view.ViewStub import android.view.WindowManager +import android.view.accessibility.AccessibilityEvent import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatDialogFragment import androidx.appcompat.content.res.AppCompatResources @@ -28,12 +30,14 @@ import androidx.constraintlayout.widget.ConstraintProperties.PARENT_ID import androidx.constraintlayout.widget.ConstraintProperties.TOP import androidx.constraintlayout.widget.ConstraintSet import androidx.core.view.isVisible +import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import kotlinx.android.synthetic.main.fragment_search_dialog.* import kotlinx.android.synthetic.main.fragment_search_dialog.view.* import kotlinx.android.synthetic.main.search_suggestions_hint.view.* import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.launch import mozilla.components.browser.toolbar.BrowserToolbar import mozilla.components.concept.storage.HistoryStorage import mozilla.components.feature.qr.QrFeature @@ -276,6 +280,9 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { } view.search_suggestions_hint.setOnInflateListener((stubListener)) + if (view.context.settings().accessibilityServicesEnabled) { + updateAccessibilityTraversalOrder() + } consumeFrom(store) { val shouldShowAwesomebar = @@ -294,6 +301,19 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { } } + private fun updateAccessibilityTraversalOrder() { + val searchWrapperId = search_wrapper.id + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { + qr_scan_button.accessibilityTraversalAfter = searchWrapperId + search_engines_shortcut_button.accessibilityTraversalAfter = searchWrapperId + fill_link_from_clipboard.accessibilityTraversalAfter = searchWrapperId + } else { + viewLifecycleOwner.lifecycleScope.launch { + search_wrapper.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED) + } + } + } + override fun onResume() { super.onResume() resetFocus()