summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author David Liu <dswliu@google.com> 2025-03-13 19:37:59 +0000
committer David Liu <dswliu@google.com> 2025-03-14 07:02:14 +0000
commit7e207744232a1a9f22ba6edafe26d0e575290090 (patch)
tree8dca4b6368c105a9036772f5a8e044021c541e97
parentc766f6ce862efb686e4d9b76a5f3ea425d1088e1 (diff)
Added button in CollapsingToolbar
Bug: 396972395 Test: manual test Flag: com.android.settingslib.widget.theme.flags.is_expressive_design_enabled Change-Id: If288798f8a8e3994eb3d104e1b6461aecb1289df
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v36/settingslib_expressive_collapsing_toolbar_content_layout.xml20
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java24
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java24
-rw-r--r--packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java41
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() {