From 1388156953568fff83590e630806e6c0cceb5552 Mon Sep 17 00:00:00 2001 From: Mihai Adrian <48995920+mcarare@users.noreply.github.com> Date: Sat, 9 Nov 2019 00:36:39 +0200 Subject: [PATCH] For #1211 Hide the keyboard when scrolling through engine suggestions (#6474) --- .../org/mozilla/fenix/search/SearchFragment.kt | 6 +++++- .../fenix/search/awesomebar/AwesomeBarView.kt | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt index ae9eb4364..5899bd611 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt @@ -229,15 +229,19 @@ class SearchFragment : Fragment(), BackHandler { override fun onPause() { super.onPause() toolbarView.view.clearFocus() + // clearing focus makes keyboard hidden after activity is resumed + awesomeBarView.isKeyboardDismissedProgrammatically = true } override fun onBackPressed(): Boolean { return when { qrFeature.onBackPressed() -> { view?.searchScanButton?.isChecked = false + // set to true because keyboard is being dismissed when returning from qr scan + awesomeBarView.isKeyboardDismissedProgrammatically = true toolbarView.view.requestFocus() - true } + !awesomeBarView.isKeyboardDismissedProgrammatically -> true else -> false } } diff --git a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt index 0ff88e6e9..8d9032a55 100644 --- a/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt +++ b/app/src/main/java/org/mozilla/fenix/search/awesomebar/AwesomeBarView.kt @@ -10,6 +10,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.graphics.drawable.toBitmap +import androidx.recyclerview.widget.RecyclerView import kotlinx.android.extensions.LayoutContainer import kotlinx.android.synthetic.main.fragment_search.* import mozilla.components.browser.awesomebar.BrowserAwesomeBar @@ -24,6 +25,7 @@ import mozilla.components.feature.awesomebar.provider.SessionSuggestionProvider import mozilla.components.feature.search.SearchUseCases import mozilla.components.feature.session.SessionUseCases import mozilla.components.feature.tabs.TabsUseCases +import mozilla.components.support.ktx.android.view.hideKeyboard import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.asActivity @@ -93,6 +95,7 @@ class AwesomeBarView( private val defaultSearchSuggestionProvider: SearchSuggestionProvider private val searchSuggestionProviderMap: MutableMap private var providersInUse = mutableSetOf() + internal var isKeyboardDismissedProgrammatically: Boolean = false private val loadUrlUseCase = object : SessionUseCases.LoadUrlUseCase { override fun invoke(url: String, flags: EngineSession.LoadUrlFlags) { @@ -176,6 +179,20 @@ class AwesomeBarView( searchShortcutsButton.setOnClickListener { interactor.onSearchShortcutsButtonClicked() } + + val recyclerListener = object : RecyclerView.OnScrollListener() { + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + when (newState) { + RecyclerView.SCROLL_STATE_DRAGGING -> + if (!isKeyboardDismissedProgrammatically) { + view.hideKeyboard() + isKeyboardDismissedProgrammatically = true + } + RecyclerView.SCROLL_STATE_IDLE -> isKeyboardDismissedProgrammatically = false + } + } + } + view.addOnScrollListener(recyclerListener) } fun update(state: SearchFragmentState) {