1
0
Fork 0

For #7059 - Allow search engines to scroll

master
David Walsh 2020-03-30 11:31:29 -05:00 committed by Emily Kager
parent d989616f62
commit e1187ebf31
4 changed files with 132 additions and 113 deletions

View File

@ -30,6 +30,7 @@ import mozilla.components.feature.qr.QrFeature
import mozilla.components.lib.state.ext.consumeFrom import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.support.base.feature.UserInteractionHandler import mozilla.components.support.base.feature.UserInteractionHandler
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import mozilla.components.support.ktx.android.content.getColorFromAttr
import mozilla.components.support.ktx.android.content.hasCamera import mozilla.components.support.ktx.android.content.hasCamera
import mozilla.components.support.ktx.android.content.isPermissionGranted import mozilla.components.support.ktx.android.content.isPermissionGranted
import mozilla.components.ui.autocomplete.InlineAutocompleteEditText import mozilla.components.ui.autocomplete.InlineAutocompleteEditText
@ -116,7 +117,7 @@ class SearchFragment : Fragment(), UserInteractionHandler {
searchController searchController
) )
awesomeBarView = AwesomeBarView(view.search_layout, searchInteractor) awesomeBarView = AwesomeBarView(view.scrollable_area, searchInteractor)
toolbarView = ToolbarView( toolbarView = ToolbarView(
view.toolbar_component_wrapper, view.toolbar_component_wrapper,
@ -194,6 +195,10 @@ class SearchFragment : Fragment(), UserInteractionHandler {
qrFeature.get()?.scan(R.id.container) qrFeature.get()?.scan(R.id.container)
} }
view.search_shortcuts_button.setOnClickListener {
searchInteractor.onSearchShortcutsButtonClicked()
}
val stubListener = ViewStub.OnInflateListener { _, inflated -> val stubListener = ViewStub.OnInflateListener { _, inflated ->
inflated.learn_more.setOnClickListener { inflated.learn_more.setOnClickListener {
(activity as HomeActivity) (activity as HomeActivity)
@ -243,6 +248,7 @@ class SearchFragment : Fragment(), UserInteractionHandler {
consumeFrom(searchStore) { consumeFrom(searchStore) {
awesomeBarView.update(it) awesomeBarView.update(it)
updateSearchShortcutsIcon(it)
toolbarView.update(it) toolbarView.update(it)
updateSearchWithLabel(it) updateSearchWithLabel(it)
updateClipboardSuggestion(it, requireContext().components.clipboardHandler.url) updateClipboardSuggestion(it, requireContext().components.clipboardHandler.url)
@ -351,6 +357,18 @@ class SearchFragment : Fragment(), UserInteractionHandler {
} }
} }
private fun updateSearchShortcutsIcon(searchState: SearchFragmentState) {
view?.apply {
val showShortcuts = searchState.showSearchShortcuts
search_shortcuts_button.isChecked = showShortcuts
val color = if (showShortcuts) R.attr.contrastText else R.attr.primaryText
search_shortcuts_button.compoundDrawables[0]?.setTint(
requireContext().getColorFromAttr(color)
)
}
}
companion object { companion object {
private const val SHARED_TRANSITION_MS = 250L private const val SHARED_TRANSITION_MS = 250L
private const val REQUEST_CODE_CAMERA_PERMISSIONS = 1 private const val REQUEST_CODE_CAMERA_PERMISSIONS = 1

View File

@ -192,9 +192,6 @@ class AwesomeBarView(
) )
searchSuggestionProviderMap = HashMap() searchSuggestionProviderMap = HashMap()
search_shortcuts_button.setOnClickListener {
interactor.onSearchShortcutsButtonClicked()
}
val recyclerListener = object : RecyclerView.OnScrollListener() { val recyclerListener = object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
@ -215,7 +212,6 @@ class AwesomeBarView(
} }
fun update(state: SearchFragmentState) { fun update(state: SearchFragmentState) {
updateSearchShortcutsIcon(state)
updateSuggestionProvidersVisibility(state) updateSuggestionProvidersVisibility(state)
// Do not make suggestions based on user's current URL unless it's a search shortcut // Do not make suggestions based on user's current URL unless it's a search shortcut
@ -226,17 +222,6 @@ class AwesomeBarView(
view.onInputChanged(state.query) view.onInputChanged(state.query)
} }
private fun updateSearchShortcutsIcon(searchState: SearchFragmentState) {
with(container.context) {
val showShortcuts = searchState.showSearchShortcuts
search_shortcuts_button?.isChecked = showShortcuts
val color = if (showShortcuts) R.attr.contrastText else R.attr.primaryText
search_shortcuts_button.compoundDrawables[0]?.setTint(getColorFromAttr(color))
}
}
private fun updateSuggestionProvidersVisibility(state: SearchFragmentState) { private fun updateSuggestionProvidersVisibility(state: SearchFragmentState) {
if (state.showSearchShortcuts) { if (state.showSearchShortcuts) {
handleDisplayShortcutsProviders() handleDisplayShortcutsProviders()

View File

@ -7,13 +7,13 @@
xmlns:mozac="http://schemas.android.com/apk/res-auto" xmlns:mozac="http://schemas.android.com/apk/res-auto"
android:id="@+id/awesomeBar" android:id="@+id/awesomeBar"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="wrap_content"
android:fadingEdge="horizontal" android:fadingEdge="horizontal"
android:fadingEdgeLength="40dp" android:fadingEdgeLength="40dp"
android:nestedScrollingEnabled="false"
android:requiresFadingEdge="vertical" android:requiresFadingEdge="vertical"
app:layout_constraintBottom_toTopOf="@id/pill_wrapper" app:layout_constraintTop_toTopOf="@id/awesomeBar_barrier"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/search_with_shortcuts"
mozac:awesomeBarDescriptionTextColor="?secondaryText" mozac:awesomeBarDescriptionTextColor="?secondaryText"
mozac:awesomeBarTitleTextColor="?primaryText" /> mozac:awesomeBarTitleTextColor="?primaryText" />

View File

@ -11,27 +11,6 @@
android:background="?foundation" android:background="?foundation"
tools:context=".search.SearchFragment"> tools:context=".search.SearchFragment">
<ViewStub
android:id="@+id/search_suggestions_onboarding"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inflatedId="@+id/search_suggestions_onboarding"
android:layout="@layout/search_suggestions_onboarding"
app:layout_constraintBottom_toTopOf="@id/awesomeBar_barrier"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar_wrapper" />
<View
android:id="@+id/search_suggestions_onboarding_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?neutralFaded"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/search_suggestions_onboarding"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/toolbar_wrapper" android:id="@+id/toolbar_wrapper"
android:layout_width="0dp" android:layout_width="0dp"
@ -53,87 +32,124 @@
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.core.widget.NestedScrollView
android:id="@+id/fill_link_from_clipboard"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="@dimen/search_fragment_clipboard_item_height" android:layout_height="0dp"
android:layout_marginStart="@dimen/search_fragment_clipboard_item_horizontal_margin" app:layout_constraintBottom_toBottomOf="@id/search_divider"
android:layout_marginTop="@dimen/search_fragment_clipboard_item_vertical_margin" app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="@dimen/search_fragment_clipboard_item_horizontal_margin"
android:background="?selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/awesomeBar_barrier"
app:layout_constraintEnd_toEndOf="@id/toolbar_wrapper"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar_wrapper"> app:layout_constraintTop_toBottomOf="@id/toolbar_wrapper">
<ImageView <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/link_icon" android:id="@+id/scrollable_area"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:importantForAccessibility="no"
android:tint="?primaryText"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_link" />
<TextView <ViewStub
android:id="@+id/clipboard_title" android:id="@+id/search_suggestions_onboarding"
style="@style/SearchClipboardTitleStyle" android:layout_width="match_parent"
android:layout_width="0dp" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:inflatedId="@+id/search_suggestions_onboarding"
android:layout_marginStart="@dimen/search_fragment_clipboard_item_title_margin_start" android:layout="@layout/search_suggestions_onboarding"
android:text="@string/awesomebar_clipboard_title" app:layout_constraintBottom_toTopOf="@id/awesomeBar_barrier"
app:layout_constraintBottom_toTopOf="@id/clipboard_url" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintStart_toEndOf="@id/link_icon" app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView <View
android:id="@+id/clipboard_url" android:id="@+id/search_suggestions_onboarding_divider"
style="@style/SearchClipboardUrlStyle" android:layout_width="match_parent"
android:layout_width="0dp" android:layout_height="1dp"
android:layout_height="wrap_content" android:background="?neutralFaded"
app:layout_constraintBottom_toBottomOf="parent" android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="@id/search_suggestions_onboarding"
app:layout_constraintStart_toStartOf="@id/clipboard_title" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/clipboard_title" app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintVertical_chainStyle="packed" />
</androidx.constraintlayout.widget.ConstraintLayout>
<View <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/divider_line" android:id="@+id/fill_link_from_clipboard"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="1.5dp" android:layout_height="@dimen/search_fragment_clipboard_item_height"
android:background="?neutralFaded" android:layout_marginStart="@dimen/search_fragment_clipboard_item_horizontal_margin"
app:layout_constraintEnd_toEndOf="@id/fill_link_from_clipboard" android:layout_marginTop="@dimen/search_fragment_clipboard_item_vertical_margin"
app:layout_constraintStart_toStartOf="@id/fill_link_from_clipboard" android:layout_marginEnd="@dimen/search_fragment_clipboard_item_horizontal_margin"
app:layout_constraintTop_toBottomOf="@id/fill_link_from_clipboard" /> android:background="?selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/scrollable_area"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/scrollable_area">
<TextView <ImageView
android:id="@+id/search_with_shortcuts" android:id="@+id/link_icon"
style="@style/SearchShortcutsLabelStyle" android:layout_width="wrap_content"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:importantForAccessibility="no"
android:layout_marginStart="@dimen/search_fragment_shortcuts_label_margin_horizontal" app:tint="?primaryText"
android:layout_marginTop="@dimen/search_fragment_shortcuts_label_margin_vertical" app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginEnd="@dimen/search_fragment_shortcuts_label_margin_horizontal" app:layout_constraintStart_toStartOf="parent"
android:visibility="gone" app:layout_constraintTop_toTopOf="parent"
android:text="@string/search_shortcuts_search_with_2" app:srcCompat="@drawable/ic_link" />
app:layout_constraintStart_toStartOf="@id/toolbar_wrapper"
app:layout_constraintTop_toBottomOf="@id/awesomeBar_barrier"
tools:text="This time, search with:" />
<androidx.constraintlayout.widget.Barrier <TextView
android:id="@+id/awesomeBar_barrier" android:id="@+id/clipboard_title"
android:layout_width="wrap_content" style="@style/SearchClipboardTitleStyle"
android:layout_height="wrap_content" android:layout_width="0dp"
app:barrierDirection="bottom" android:layout_height="wrap_content"
app:constraint_referenced_ids="fill_link_from_clipboard,search_suggestions_onboarding" /> android:layout_marginStart="@dimen/search_fragment_clipboard_item_title_margin_start"
android:text="@string/awesomebar_clipboard_title"
app:layout_constraintBottom_toTopOf="@id/clipboard_url"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/link_icon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:id="@+id/clipboard_url"
style="@style/SearchClipboardUrlStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/clipboard_title"
app:layout_constraintTop_toBottomOf="@id/clipboard_title"
app:layout_constraintVertical_chainStyle="packed" />
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:id="@+id/divider_line"
android:layout_width="match_parent"
android:layout_height="1.5dp"
android:background="?neutralFaded"
app:layout_constraintEnd_toEndOf="@id/fill_link_from_clipboard"
app:layout_constraintStart_toStartOf="@id/fill_link_from_clipboard"
app:layout_constraintTop_toBottomOf="@id/fill_link_from_clipboard" />
<TextView
android:id="@+id/search_with_shortcuts"
style="@style/SearchShortcutsLabelStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/search_fragment_shortcuts_label_margin_horizontal"
android:layout_marginTop="@dimen/search_fragment_shortcuts_label_margin_vertical"
android:layout_marginEnd="@dimen/search_fragment_shortcuts_label_margin_horizontal"
android:visibility="gone"
android:text="@string/search_shortcuts_search_with_2"
app:layout_constraintStart_toStartOf="@id/scrollable_area"
app:layout_constraintTop_toBottomOf="@id/divider_line"
tools:text="This time, search with:" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/awesomeBar_barrier"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:barrierDirection="bottom"
app:constraint_referenced_ids="fill_link_from_clipboard,search_with_shortcuts,search_suggestions_onboarding" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<View <View
android:id="@+id/search_divider" android:id="@+id/search_divider"