Progress on new search experience with Toolbar and Awesomebar placeholders (#13314)
* For #13272 - Adds the ToolbarView to the SearchDialogFragment * For #13273 - Replaces container dependency with context in AwesomebarView * For #13276 - Hacks together the awesomebar and toolbar in the new search experiencemaster
parent
f319b457bf
commit
6492773fc7
|
@ -141,7 +141,7 @@ class SearchFragment : Fragment(), UserInteractionHandler {
|
|||
searchController
|
||||
)
|
||||
|
||||
awesomeBarView = AwesomeBarView(view.scrollable_area, searchInteractor,
|
||||
awesomeBarView = AwesomeBarView(requireContext(), searchInteractor,
|
||||
view.findViewById(R.id.awesomeBar))
|
||||
setShortcutsChangedListener(CustomSearchEngineStore.PREF_FILE_SEARCH_ENGINES)
|
||||
setShortcutsChangedListener(FenixSearchEngineProvider.PREF_FILE_SEARCH_ENGINES)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
package org.mozilla.fenix.search.awesomebar
|
||||
|
||||
import android.view.ViewGroup
|
||||
import android.content.Context
|
||||
import androidx.appcompat.content.res.AppCompatResources.getDrawable
|
||||
import androidx.core.graphics.BlendModeColorFilterCompat.createBlendModeColorFilterCompat
|
||||
import androidx.core.graphics.BlendModeCompat.SRC_IN
|
||||
|
@ -34,11 +34,10 @@ import org.mozilla.fenix.search.SearchFragmentState
|
|||
* View that contains and configures the BrowserAwesomeBar
|
||||
*/
|
||||
class AwesomeBarView(
|
||||
private val container: ViewGroup,
|
||||
private val context: Context,
|
||||
val interactor: AwesomeBarInteractor,
|
||||
val view: BrowserAwesomeBar
|
||||
) {
|
||||
|
||||
private val sessionProvider: SessionSuggestionProvider
|
||||
private val historyStorageProvider: HistoryStorageSuggestionProvider
|
||||
private val shortcutsEnginePickerProvider: ShortcutsSuggestionProvider
|
||||
|
@ -91,7 +90,6 @@ class AwesomeBarView(
|
|||
init {
|
||||
view.itemAnimator = null
|
||||
|
||||
val context = container.context
|
||||
val components = context.components
|
||||
val primaryTextColor = context.getColorFromAttr(R.attr.primaryText)
|
||||
|
||||
|
@ -255,7 +253,7 @@ class AwesomeBarView(
|
|||
}
|
||||
|
||||
private fun isBrowsingModePrivate(): Boolean {
|
||||
return (container.context.asActivity() as? HomeActivity)?.browsingModeManager?.mode?.isPrivate
|
||||
return (context.asActivity() as? HomeActivity)?.browsingModeManager?.mode?.isPrivate
|
||||
?: false
|
||||
}
|
||||
|
||||
|
@ -280,7 +278,6 @@ class AwesomeBarView(
|
|||
|
||||
private fun getSuggestionProviderForEngine(engine: SearchEngine): List<AwesomeBar.SuggestionProvider> {
|
||||
return searchSuggestionProviderMap.getOrPut(engine) {
|
||||
val context = container.context
|
||||
val components = context.components
|
||||
val primaryTextColor = context.getColorFromAttr(R.attr.primaryText)
|
||||
|
||||
|
|
|
@ -9,12 +9,116 @@ import android.view.LayoutInflater
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.app.AppCompatDialogFragment
|
||||
import kotlinx.android.synthetic.main.fragment_search.view.*
|
||||
import mozilla.components.browser.search.SearchEngine
|
||||
import mozilla.components.browser.session.Session
|
||||
import org.mozilla.fenix.R
|
||||
import org.mozilla.fenix.ext.logDebug
|
||||
import org.mozilla.fenix.ext.requireComponents
|
||||
import org.mozilla.fenix.search.SearchEngineSource
|
||||
import org.mozilla.fenix.search.SearchFragmentState
|
||||
import org.mozilla.fenix.search.awesomebar.AwesomeBarInteractor
|
||||
import org.mozilla.fenix.search.awesomebar.AwesomeBarView
|
||||
import org.mozilla.fenix.search.toolbar.ToolbarInteractor
|
||||
import org.mozilla.fenix.search.toolbar.ToolbarView
|
||||
|
||||
class TempSearchInteractor(val onTextChangedCallback: (String) -> Unit) : ToolbarInteractor, AwesomeBarInteractor {
|
||||
override fun onUrlCommitted(url: String) {
|
||||
logDebug("boek", "onUrlCommitted $url")
|
||||
}
|
||||
|
||||
override fun onEditingCanceled() {
|
||||
logDebug("boek", "onEditingCanceled")
|
||||
}
|
||||
|
||||
override fun onTextChanged(text: String) {
|
||||
onTextChangedCallback.invoke(text)
|
||||
}
|
||||
|
||||
override fun onUrlTapped(url: String) {
|
||||
logDebug("boek", "onEditingCanceled")
|
||||
}
|
||||
|
||||
override fun onSearchTermsTapped(searchTerms: String) {
|
||||
logDebug("boek", "onEditingCanceled")
|
||||
}
|
||||
|
||||
override fun onSearchShortcutEngineSelected(searchEngine: SearchEngine) {
|
||||
logDebug("boek", "onEditingCanceled")
|
||||
}
|
||||
|
||||
override fun onClickSearchEngineSettings() {
|
||||
logDebug("boek", "onEditingCanceled")
|
||||
}
|
||||
|
||||
override fun onExistingSessionSelected(session: Session) {
|
||||
logDebug("boek", "onEditingCanceled")
|
||||
}
|
||||
|
||||
override fun onExistingSessionSelected(tabId: String) {
|
||||
logDebug("boek", "onEditingCanceled")
|
||||
}
|
||||
|
||||
override fun onSearchShortcutsButtonClicked() {
|
||||
logDebug("boek", "onEditingCanceled")
|
||||
}
|
||||
}
|
||||
|
||||
class SearchDialogFragment : AppCompatDialogFragment() {
|
||||
|
||||
private lateinit var toolbarView: ToolbarView
|
||||
private lateinit var awesomeBarView: AwesomeBarView
|
||||
private val tempInteractor = TempSearchInteractor {
|
||||
view?.awesomeBar?.visibility = if (it.isEmpty()) View.INVISIBLE else View.VISIBLE
|
||||
|
||||
awesomeBarView.update(
|
||||
SearchFragmentState(
|
||||
query = it,
|
||||
url = "",
|
||||
searchTerms = "",
|
||||
searchEngineSource = SearchEngineSource.Default(requireComponents.search.provider.getDefaultEngine(requireContext())),
|
||||
defaultEngineSource = SearchEngineSource.Default(requireComponents.search.provider.getDefaultEngine(requireContext())),
|
||||
showSearchSuggestions = true,
|
||||
showSearchSuggestionsHint = false,
|
||||
showSearchShortcuts = false,
|
||||
areShortcutsAvailable = false,
|
||||
showClipboardSuggestions = true,
|
||||
showHistorySuggestions = true,
|
||||
showBookmarkSuggestions = true,
|
||||
tabId = null,
|
||||
pastedText = null,
|
||||
searchAccessPoint = null
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setStyle(STYLE_NO_TITLE, R.style.SearchDialogStyle)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View? = inflater.inflate(R.layout.fragment_search_dialog, container, false)
|
||||
): View? {
|
||||
val view = inflater.inflate(R.layout.fragment_search_dialog, container, false)
|
||||
|
||||
toolbarView = ToolbarView(
|
||||
requireContext(),
|
||||
tempInteractor,
|
||||
null,
|
||||
false,
|
||||
view.toolbar,
|
||||
requireComponents.core.engine
|
||||
)
|
||||
|
||||
awesomeBarView = AwesomeBarView(
|
||||
requireContext(),
|
||||
tempInteractor,
|
||||
view.awesomeBar
|
||||
)
|
||||
|
||||
return view
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,14 +5,49 @@
|
|||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
<mozilla.components.browser.toolbar.BrowserToolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="@dimen/browser_toolbar_height"
|
||||
android:background="@drawable/toolbar_background_top"
|
||||
android:clickable="true"
|
||||
android:focusable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
app:layout_scrollFlags="scroll|enterAlways|snap|exitUntilCollapsed"
|
||||
app:browserToolbarClearColor="?primaryText"
|
||||
app:browserToolbarInsecureColor="?primaryText"
|
||||
app:browserToolbarMenuColor="?primaryText"
|
||||
app:browserToolbarProgressBarGravity="bottom"
|
||||
app:browserToolbarSecureColor="?primaryText"
|
||||
app:browserToolbarTrackingProtectionAndSecurityIndicatorSeparatorColor="?toolbarDivider"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:text="Hello World"
|
||||
/>
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
<androidx.core.widget.NestedScrollView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
android:id="@+id/scrollView"
|
||||
android:background="?attr/scrimBackground"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/toolbar"
|
||||
android:scrollbars="vertical">
|
||||
<mozilla.components.browser.awesomebar.BrowserAwesomeBar
|
||||
xmlns:mozac="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/awesomeBar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:fadingEdge="horizontal"
|
||||
android:fadingEdgeLength="40dp"
|
||||
android:nestedScrollingEnabled="false"
|
||||
android:requiresFadingEdge="vertical"
|
||||
android:background="?attr/foundation"
|
||||
android:visibility="invisible"
|
||||
mozac:awesomeBarChipBackgroundColor="@color/photonGreen50"
|
||||
mozac:awesomeBarDescriptionTextColor="?secondaryText"
|
||||
mozac:awesomeBarTitleTextColor="?primaryText" />
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
|
|
@ -614,4 +614,9 @@
|
|||
<item name="elevation">90dp</item>
|
||||
<item name="android:stateListAnimator">@null</item>
|
||||
</style>
|
||||
|
||||
<style name="SearchDialogStyle" parent="DialogStyleBase">
|
||||
<item name="android:windowIsFloating">false</item>
|
||||
<item name="android:windowAnimationStyle">@null</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
|
Loading…
Reference in New Issue