Skip to content

Commit

Permalink
For mozilla-mobile#16894: Handle adding voice search button depending…
Browse files Browse the repository at this point in the history
… on state.
  • Loading branch information
mcarare committed Dec 9, 2020
1 parent 0a77f4b commit a2ad9f7
Showing 1 changed file with 22 additions and 15 deletions.
37 changes: 22 additions & 15 deletions app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ typealias SearchDialogFragmentStore = SearchFragmentStore

@SuppressWarnings("LargeClass", "TooManyFunctions")
class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
private var voiceSearchButtonAlreadyAdded: Boolean = false
private lateinit var interactor: SearchDialogInteractor
private lateinit var store: SearchDialogFragmentStore
private lateinit var toolbarView: ToolbarView
Expand Down Expand Up @@ -160,7 +161,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
isPrivate,
view.toolbar,
requireComponents.core.engine
).also(::addSearchButton)
)

awesomeBarView = AwesomeBarView(
activity,
Expand Down Expand Up @@ -316,6 +317,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
toolbarView.update(it)
awesomeBarView.update(it)
firstUpdate = false
addVoiceSearchButton(it)
}
}

Expand Down Expand Up @@ -475,21 +477,26 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
}
}

private fun addSearchButton(toolbarView: ToolbarView) {
val searchEngine = store.state.searchEngineSource.searchEngine

toolbarView.view.addEditAction(
BrowserToolbar.Button(
AppCompatResources.getDrawable(requireContext(), R.drawable.ic_microphone)!!,
requireContext().getString(R.string.voice_search_content_description),
visible = {
searchEngine?.id?.contains("google") == true &&
isSpeechAvailable() &&
requireContext().settings().shouldShowVoiceSearch
},
listener = ::launchVoiceSearch
private fun addVoiceSearchButton(searchFragmentState: SearchFragmentState) {
if (voiceSearchButtonAlreadyAdded) return
val searchEngine = searchFragmentState.searchEngineSource.searchEngine

val isVisible =
searchEngine?.id?.contains("google") == true &&
isSpeechAvailable() &&
requireContext().settings().shouldShowVoiceSearch

if (isVisible) {
toolbarView.view.addEditAction(
BrowserToolbar.Button(
AppCompatResources.getDrawable(requireContext(), R.drawable.ic_microphone)!!,
requireContext().getString(R.string.voice_search_content_description),
visible = { true },
listener = ::launchVoiceSearch
)
)
)
voiceSearchButtonAlreadyAdded = true
}
}

private fun launchVoiceSearch() {
Expand Down

0 comments on commit a2ad9f7

Please sign in to comment.