[fenix] For https://github.com/mozilla-mobile/fenix/issues/16894: Handle adding voice search button depending on state.

pull/600/head
mcarare 4 years ago committed by Mihai Adrian Carare
parent 9c15fe3321
commit 6727d044c1

@ -73,6 +73,7 @@ typealias SearchDialogFragmentStore = SearchFragmentStore
@SuppressWarnings("LargeClass", "TooManyFunctions") @SuppressWarnings("LargeClass", "TooManyFunctions")
class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
private var voiceSearchButtonAlreadyAdded: Boolean = false
private lateinit var interactor: SearchDialogInteractor private lateinit var interactor: SearchDialogInteractor
private lateinit var store: SearchDialogFragmentStore private lateinit var store: SearchDialogFragmentStore
private lateinit var toolbarView: ToolbarView private lateinit var toolbarView: ToolbarView
@ -160,7 +161,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
isPrivate, isPrivate,
view.toolbar, view.toolbar,
requireComponents.core.engine requireComponents.core.engine
).also(::addSearchButton) )
awesomeBarView = AwesomeBarView( awesomeBarView = AwesomeBarView(
activity, activity,
@ -316,6 +317,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
toolbarView.update(it) toolbarView.update(it)
awesomeBarView.update(it) awesomeBarView.update(it)
firstUpdate = false firstUpdate = false
addVoiceSearchButton(it)
} }
} }
@ -475,21 +477,26 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
} }
} }
private fun addSearchButton(toolbarView: ToolbarView) { private fun addVoiceSearchButton(searchFragmentState: SearchFragmentState) {
val searchEngine = store.state.searchEngineSource.searchEngine if (voiceSearchButtonAlreadyAdded) return
val searchEngine = searchFragmentState.searchEngineSource.searchEngine
toolbarView.view.addEditAction(
BrowserToolbar.Button( val isVisible =
AppCompatResources.getDrawable(requireContext(), R.drawable.ic_microphone)!!, searchEngine?.id?.contains("google") == true &&
requireContext().getString(R.string.voice_search_content_description), isSpeechAvailable() &&
visible = { requireContext().settings().shouldShowVoiceSearch
searchEngine?.id?.contains("google") == true &&
isSpeechAvailable() && if (isVisible) {
requireContext().settings().shouldShowVoiceSearch toolbarView.view.addEditAction(
}, BrowserToolbar.Button(
listener = ::launchVoiceSearch AppCompatResources.getDrawable(requireContext(), R.drawable.ic_microphone)!!,
requireContext().getString(R.string.voice_search_content_description),
visible = { true },
listener = ::launchVoiceSearch
)
) )
) voiceSearchButtonAlreadyAdded = true
}
} }
private fun launchVoiceSearch() { private fun launchVoiceSearch() {

Loading…
Cancel
Save