diff options
author | 2025-03-13 19:37:59 +0000 | |
---|---|---|
committer | 2025-03-14 07:02:14 +0000 | |
commit | 7e207744232a1a9f22ba6edafe26d0e575290090 (patch) | |
tree | 8dca4b6368c105a9036772f5a8e044021c541e97 | |
parent | c766f6ce862efb686e4d9b76a5f3ea425d1088e1 (diff) |
Added button in CollapsingToolbar
Bug: 396972395
Test: manual test
Flag: com.android.settingslib.widget.theme.flags.is_expressive_design_enabled
Change-Id: If288798f8a8e3994eb3d104e1b6461aecb1289df
4 files changed, 108 insertions, 1 deletions
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml index 3db0ac653848..b1e42c0aebff 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml @@ -35,6 +35,7 @@ android:layout_height="@dimen/settingslib_toolbar_layout_height" app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" app:toolbarId="@id/action_bar" + app:maxLines="2" style="@style/SettingsLibCollapsingToolbarLayoutStyle.Expressive"> <Toolbar @@ -44,7 +45,24 @@ android:layout_marginStart="@dimen/settingslib_expressive_space_extrasmall4" android:theme="?android:attr/actionBarTheme" android:transitionName="shared_element_view" - app:layout_collapseMode="pin"/> + app:layout_collapseMode="pin"> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingStart="@dimen/settingslib_expressive_space_extrasmall6" + android:layout_marginEnd="@dimen/settingslib_expressive_space_small4" + android:layout_gravity="end"> + + <com.google.android.material.button.MaterialButton + android:id="@+id/action_button" + android:layout_width="wrap_content" + android:layout_height="match_parent" + style="@style/SettingsLibButtonStyle.Expressive.Filled" + android:visibility="gone"/> + </LinearLayout> + + </Toolbar> </com.google.android.material.appbar.CollapsingToolbarLayout> </com.google.android.material.appbar.AppBarLayout> diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java index feacecbd5d0c..ec1df447995c 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java @@ -24,6 +24,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toolbar; +import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; @@ -132,6 +133,29 @@ public class CollapsingToolbarAppCompatActivity extends AppCompatActivity { setTitle(getText(titleId)); } + /** + * Show/Hide the action button on the Toolbar. + * @param enabled true to show the button, otherwise it's hidden. + */ + public void setActionButtonEnabled(boolean enabled) { + getToolbarDelegate().setActionButtonEnabled(enabled); + } + + /** Set the icon to the action button */ + public void setActionButtonIcon(@DrawableRes int drawableRes) { + getToolbarDelegate().setActionButtonIcon(this, drawableRes); + } + + /** Set the text to the action button */ + public void setActionButtonText(@Nullable CharSequence text) { + getToolbarDelegate().setActionButtonText(text); + } + + /** Set the OnClick listener to the action button */ + public void setActionButtonListener(@Nullable View.OnClickListener listener) { + getToolbarDelegate().setActionButtonOnClickListener(listener); + } + @Override public boolean onSupportNavigateUp() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java index 0f9d94e9cc3d..b1b8c983b033 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java @@ -25,6 +25,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toolbar; +import androidx.annotation.DrawableRes; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentActivity; @@ -124,6 +125,29 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity { setTitle(getText(titleId)); } + /** + * Show/Hide the action button on the Toolbar. + * @param enabled true to show the button, otherwise it's hidden. + */ + public void setActionButtonEnabled(boolean enabled) { + getToolbarDelegate().setActionButtonEnabled(enabled); + } + + /** Set the icon to the action button */ + public void setActionButtonIcon(@DrawableRes int drawableRes) { + getToolbarDelegate().setActionButtonIcon(this, drawableRes); + } + + /** Set the text to the action button */ + public void setActionButtonText(@Nullable CharSequence text) { + getToolbarDelegate().setActionButtonText(text); + } + + /** Set the OnClick listener to the action button */ + public void setActionButtonListener(@Nullable View.OnClickListener listener) { + getToolbarDelegate().setActionButtonOnClickListener(listener); + } + @Override public boolean onNavigateUp() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java index de0d60916b3d..072b36549093 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java @@ -33,6 +33,7 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.Toolbar; +import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; @@ -42,6 +43,7 @@ import com.android.settingslib.widget.SettingsThemeHelper; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; +import com.google.android.material.button.MaterialButton; /** * A delegate that allows to use the collapsing toolbar layout in hosts that doesn't want/need to @@ -80,6 +82,8 @@ public class CollapsingToolbarDelegate { private AppBarLayout mAppBarLayout; @NonNull private Toolbar mToolbar; + @Nullable + private MaterialButton mActionButton; @NonNull private FrameLayout mContentFrameLayout; @NonNull @@ -154,6 +158,7 @@ public class CollapsingToolbarDelegate { } autoSetCollapsingToolbarLayoutScrolling(); mContentFrameLayout = view.findViewById(R.id.content_frame); + mActionButton = view.findViewById(R.id.action_button); if (activity instanceof AppCompatActivity) { Log.d(TAG, "onCreateView: from AppCompatActivity and sub-class."); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { @@ -215,6 +220,42 @@ public class CollapsingToolbarDelegate { } } + /** + * Show/Hide the action button on the Toolbar. + * @param enabled true to show the button, otherwise it's hidden. + */ + public void setActionButtonEnabled(boolean enabled) { + if (mActionButton == null) { + return; + } + int visibility = enabled ? View.VISIBLE : View.GONE; + mActionButton.setVisibility(visibility); + } + + /** Set the icon to the action button */ + public void setActionButtonIcon(@NonNull Context context, @DrawableRes int drawableRes) { + if (mActionButton == null) { + return; + } + mActionButton.setIcon(context.getResources().getDrawable(drawableRes, context.getTheme())); + } + + /** Set the text to the action button */ + public void setActionButtonText(@Nullable CharSequence text) { + if (mActionButton == null) { + return; + } + mActionButton.setText(text); + } + + /** Set the OnClick listener to the action button */ + public void setActionButtonOnClickListener(@Nullable View.OnClickListener listener) { + if (mActionButton == null) { + return; + } + mActionButton.setOnClickListener(listener); + } + /** Return an instance of CoordinatorLayout. */ @Nullable public CoordinatorLayout getCoordinatorLayout() { |