Skip to content

Commit

Permalink
[Search] Added support to pass toolbar style.
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 519876161
  • Loading branch information
raajkumars authored and pekingme committed Mar 28, 2023
1 parent cab7269 commit cdda1fc
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 39 deletions.
26 changes: 22 additions & 4 deletions lib/java/com/google/android/material/search/SearchBar.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import com.google.android.material.R;

import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP;
import static com.google.android.material.theme.overlay.MaterialThemeOverlay.wrap;

import android.animation.AnimatorListenerAdapter;
Expand Down Expand Up @@ -47,11 +48,14 @@
import android.widget.ImageButton;
import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.DimenRes;
import androidx.annotation.Dimension;
import androidx.annotation.DrawableRes;
import androidx.annotation.MenuRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.annotation.RestrictTo;
import androidx.annotation.StringRes;
import androidx.annotation.StyleRes;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
Expand Down Expand Up @@ -159,7 +163,7 @@ public SearchBar(@NonNull Context context, @Nullable AttributeSet attrs, int def
validateAttributes(attrs);

defaultNavigationIcon =
AppCompatResources.getDrawable(context, R.drawable.ic_search_black_24);
AppCompatResources.getDrawable(context, getDefaultNavigationIconResource());
searchBarAnimationHelper = new SearchBarAnimationHelper();

TypedArray a =
Expand Down Expand Up @@ -195,7 +199,7 @@ public SearchBar(@NonNull Context context, @Nullable AttributeSet attrs, int def
LayoutInflater.from(context).inflate(R.layout.mtrl_search_bar, this);
layoutInflated = true;

textView = findViewById(R.id.search_bar_text_view);
textView = findViewById(R.id.open_search_bar_text_view);

ViewCompat.setElevation(this, elevation);
initTextView(textAppearanceResId, text, hint);
Expand Down Expand Up @@ -463,7 +467,7 @@ private void setDefaultMargins() {
Resources resources = getResources();
int marginHorizontal =
resources.getDimensionPixelSize(R.dimen.m3_searchbar_margin_horizontal);
int marginVertical = resources.getDimensionPixelSize(R.dimen.m3_searchbar_margin_vertical);
int marginVertical = resources.getDimensionPixelSize(getDefaultMarginVerticalResource());
MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams();
lp.leftMargin = defaultIfZero(lp.leftMargin, marginHorizontal);
lp.topMargin = defaultIfZero(lp.topMargin, marginVertical);
Expand All @@ -472,6 +476,20 @@ private void setDefaultMargins() {
}
}

/** @hide */
@DimenRes
@RestrictTo(LIBRARY_GROUP)
protected int getDefaultMarginVerticalResource() {
return R.dimen.m3_searchbar_margin_vertical;
}

/** @hide */
@DrawableRes
@RestrictTo(LIBRARY_GROUP)
protected int getDefaultNavigationIconResource() {
return R.drawable.ic_search_black_24;
}

private int defaultIfZero(int value, int defValue) {
return value == 0 ? defValue : value;
}
Expand Down Expand Up @@ -545,7 +563,7 @@ public TextView getTextView() {
}

/** Returns the text of main {@link TextView}, which usually represents the search text. */
@Nullable
@NonNull // TextView.getText() never returns null after initialization.
public CharSequence getText() {
return textView.getText();
}
Expand Down
42 changes: 27 additions & 15 deletions lib/java/com/google/android/material/search/SearchView.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.TextView;
import androidx.annotation.DrawableRes;
import androidx.annotation.MenuRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
Expand Down Expand Up @@ -186,19 +187,19 @@ public SearchView(@NonNull Context context, @Nullable AttributeSet attrs, int de
LayoutInflater.from(context).inflate(R.layout.mtrl_search_view, this);
layoutInflated = true;

scrim = findViewById(R.id.search_view_scrim);
rootView = findViewById(R.id.search_view_root);
backgroundView = findViewById(R.id.search_view_background);
statusBarSpacer = findViewById(R.id.search_view_status_bar_spacer);
headerContainer = findViewById(R.id.search_view_header_container);
toolbarContainer = findViewById(R.id.search_view_toolbar_container);
toolbar = findViewById(R.id.search_view_toolbar);
dummyToolbar = findViewById(R.id.search_view_dummy_toolbar);
searchPrefix = findViewById(R.id.search_view_search_prefix);
editText = findViewById(R.id.search_view_edit_text);
clearButton = findViewById(R.id.search_view_clear_button);
divider = findViewById(R.id.search_view_divider);
contentContainer = findViewById(R.id.search_view_content_container);
scrim = findViewById(R.id.open_search_view_scrim);
rootView = findViewById(R.id.open_search_view_root);
backgroundView = findViewById(R.id.open_search_view_background);
statusBarSpacer = findViewById(R.id.open_search_view_status_bar_spacer);
headerContainer = findViewById(R.id.open_search_view_header_container);
toolbarContainer = findViewById(R.id.open_search_view_toolbar_container);
toolbar = findViewById(R.id.open_search_view_toolbar);
dummyToolbar = findViewById(R.id.open_search_view_dummy_toolbar);
searchPrefix = findViewById(R.id.open_search_view_search_prefix);
editText = findViewById(R.id.open_search_view_edit_text);
clearButton = findViewById(R.id.open_search_view_clear_button);
divider = findViewById(R.id.open_search_view_divider);
contentContainer = findViewById(R.id.open_search_view_content_container);

searchViewAnimationHelper = new SearchViewAnimationHelper(this);
elevationOverlayProvider = new ElevationOverlayProvider(context);
Expand Down Expand Up @@ -380,7 +381,7 @@ private void updateNavigationIconIfNeeded() {
return;
}

int navigationIcon = R.drawable.ic_arrow_back_black_24;
int navigationIcon = getDefaultNavigationIconResource();
if (searchBar == null) {
toolbar.setNavigationIcon(navigationIcon);
} else {
Expand Down Expand Up @@ -623,7 +624,7 @@ public EditText getEditText() {

/** Returns the text of main {@link EditText}, which usually represents the search text. */
@SuppressLint("KotlinPropertyAccess") // Editable extends CharSequence.
@Nullable
@NonNull // EditText never returns null after initialization.
public Editable getText() {
return editText.getText();
}
Expand Down Expand Up @@ -883,6 +884,17 @@ private void updateChildImportantForAccessibility(ViewGroup parent, boolean isSe
}
}

/**
* Provides the resource identifier for the back arrow icon.
*
* @hide
*/
@DrawableRes
@RestrictTo(LIBRARY_GROUP)
protected int getDefaultNavigationIconResource() {
return R.drawable.ic_arrow_back_black_24;
}

/** Behavior that sets up an {@link SearchView} with an {@link SearchBar}. */
public static class Behavior extends CoordinatorLayout.Behavior<SearchView> {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<!-- This text view isn't exposed to accessibility because its attributes are mirrored on the
parent container to more closely resemble the behavior of an EditText. -->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/search_bar_text_view"
android:id="@+id/open_search_bar_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,75 +19,75 @@
xmlns:tools="http://schemas.android.com/tools">

<View
android:id="@+id/search_view_scrim"
android:id="@+id/open_search_view_scrim"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0"
android:background="?attr/scrimBackground"/>

<com.google.android.material.internal.ClippableRoundedCornerLayout
android:id="@+id/search_view_root"
android:id="@+id/open_search_view_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:visibility="gone">

<LinearLayout
android:id="@+id/search_view_background"
android:id="@+id/open_search_view_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<View
android:id="@+id/search_view_status_bar_spacer"
android:id="@+id/open_search_view_status_bar_spacer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>

<FrameLayout
android:id="@+id/search_view_header_container"
android:id="@+id/open_search_view_header_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"/>

<FrameLayout
android:id="@+id/search_view_toolbar_container"
android:id="@+id/open_search_view_toolbar_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/search_view_dummy_toolbar"
style="@style/Widget.Material3.SearchView.Toolbar"
android:id="@+id/open_search_view_dummy_toolbar"
style="?attr/materialSearchViewToolbarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:visibility="gone"/>
android:visibility="gone"
app:navigationIcon="@empty"/>

<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/search_view_toolbar"
style="@style/Widget.Material3.SearchView.Toolbar"
android:id="@+id/open_search_view_toolbar"
style="?attr/materialSearchViewToolbarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
app:navigationContentDescription="@string/searchview_navigation_content_description"
app:navigationIcon="@drawable/ic_arrow_back_black_24">
app:navigationContentDescription="@string/searchview_navigation_content_description">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/m3_searchview_height"
android:layout_height="?attr/materialSearchViewToolbarHeight"
android:gravity="center_vertical"
android:orientation="horizontal">

<TextView
android:id="@+id/search_view_search_prefix"
android:id="@+id/open_search_view_search_prefix"
style="?attr/materialSearchViewPrefixStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"/>

<EditText
android:id="@+id/search_view_edit_text"
android:id="@+id/open_search_view_edit_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
Expand All @@ -99,7 +99,7 @@
tools:ignore="LabelFor"/>

<ImageButton
android:id="@+id/search_view_clear_button"
android:id="@+id/open_search_view_clear_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
Expand All @@ -112,13 +112,13 @@
</FrameLayout>

<View
android:id="@+id/search_view_divider"
android:id="@+id/open_search_view_divider"
android:layout_width="match_parent"
android:layout_height="@dimen/m3_searchview_divider_size"
android:background="@macro/m3_comp_search_view_divider_color"/>

<com.google.android.material.internal.TouchObserverFrameLayout
android:id="@+id/search_view_content_container"
android:id="@+id/open_search_view_content_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@
<attr name="materialSearchViewStyle" format="reference"/>
<!-- Style to use for SearchView prefixes in this theme. -->
<attr name="materialSearchViewPrefixStyle" format="reference"/>
<!-- Style to use for SearchView Toolbar in this theme. -->
<attr name="materialSearchViewToolbarStyle" format="reference"/>
<!-- Attribute to use for hiding the navigation icon in search bar and search view. -->
<attr name="hideNavigationIcon" format="boolean"/>
<!-- Attribute to use for setting the search toolbar height. -->
<attr name="materialSearchViewToolbarHeight" format="dimension"/>

<declare-styleable name="SearchBar">
<!-- Text appearance for the main search TextView. -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
<item name="android:paddingRight">0dp</item>
<item name="android:paddingEnd">0dp</item>
<item name="contentInsetStartWithNavigation">0dp</item>
<item name="navigationIcon">@drawable/ic_arrow_back_black_24</item>
<item name="navigationIconTint">?attr/colorOnSurface</item>
<item name="android:minHeight">@dimen/m3_searchview_height</item>
<item name="maxButtonHeight">@dimen/m3_searchview_height</item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,8 @@
<item name="navigationViewStyle">@style/Widget.Material3.NavigationView</item>
<item name="materialSearchBarStyle">@style/Widget.Material3.SearchBar</item>
<item name="materialSearchViewStyle">@style/Widget.Material3.SearchView</item>
<item name="materialSearchViewToolbarHeight">@dimen/m3_searchview_height</item>
<item name="materialSearchViewToolbarStyle">@style/Widget.Material3.SearchView.Toolbar</item>
<item name="radioButtonStyle">@style/Widget.Material3.CompoundButton.RadioButton</item>
<item name="sliderStyle">@style/Widget.Material3.Slider</item>
<item name="snackbarStyle">@style/Widget.Material3.Snackbar</item>
Expand Down Expand Up @@ -422,6 +424,8 @@
<item name="navigationViewStyle">@style/Widget.Material3.NavigationView</item>
<item name="materialSearchBarStyle">@style/Widget.Material3.SearchBar</item>
<item name="materialSearchViewStyle">@style/Widget.Material3.SearchView</item>
<item name="materialSearchViewToolbarHeight">@dimen/m3_searchview_height</item>
<item name="materialSearchViewToolbarStyle">@style/Widget.Material3.SearchView.Toolbar</item>
<item name="radioButtonStyle">@style/Widget.Material3.CompoundButton.RadioButton</item>
<item name="sliderStyle">@style/Widget.Material3.Slider</item>
<item name="snackbarStyle">@style/Widget.Material3.Snackbar</item>
Expand Down

0 comments on commit cdda1fc

Please sign in to comment.