diff options
9 files changed, 242 insertions, 4 deletions
diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v35/settingslib_expressive_icon_back.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v35/settingslib_expressive_icon_back.xml new file mode 100644 index 000000000000..ccbe20e1c61f --- /dev/null +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/drawable-v35/settingslib_expressive_icon_back.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2024 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item + android:start="16dp" + android:end="16dp" + android:top="4dp" + android:bottom="4dp"> + <shape> + <size android:width="32dp" android:height="40dp" /> + <solid android:color="@color/settingslib_materialColorSurfaceContainerHighest" /> + <corners + android:radius="100dp" /> + </shape> + </item> + + <item + android:width="24dp" + android:height="24dp" + android:gravity="center" + android:start="16dp" + android:end="16dp" + android:top="4dp" + android:bottom="4dp"> + <vector + android:width="24dp" + android:height="24dp" + android:viewportWidth="960" + android:viewportHeight="960" + android:tint="@color/settingslib_materialColorOnSurfaceVariant" + android:autoMirrored="true"> + <path + android:fillColor="@android:color/white" + android:pathData="M313,520L537,744L480,800L160,480L480,160L537,216L313,440L800,440L800,520L313,520Z"/> + </vector> + </item> +</layer-list>
\ No newline at end of file diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_base_layout.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_base_layout.xml new file mode 100644 index 000000000000..b881c57e2f53 --- /dev/null +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_base_layout.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2024 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<androidx.coordinatorlayout.widget.CoordinatorLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/content_parent" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fitsSystemWindows="true"> + + <include layout="@layout/settingslib_expressive_collapsing_toolbar_content_layout"/> +</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_content_layout.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_content_layout.xml new file mode 100644 index 000000000000..6221659388d1 --- /dev/null +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v35/settingslib_expressive_collapsing_toolbar_content_layout.xml @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2024 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<merge + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <com.google.android.material.appbar.AppBarLayout + android:id="@+id/app_bar" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:fitsSystemWindows="true" + android:outlineAmbientShadowColor="@android:color/transparent" + android:outlineSpotShadowColor="@android:color/transparent" + android:background="@android:color/transparent" + app:expanded="false" + android:theme="@style/SettingsLibTheme.CollapsingToolbar.Expressive"> + + <com.google.android.material.appbar.CollapsingToolbarLayout + android:id="@+id/collapsing_toolbar" + android:layout_width="match_parent" + android:layout_height="@dimen/settingslib_toolbar_layout_height" + app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" + app:toolbarId="@id/action_bar" + style="@style/SettingsLibCollapsingToolbarLayoutStyle.Expressive"> + + <Toolbar + android:id="@+id/action_bar" + android:layout_width="match_parent" + android:layout_height="?attr/actionBarSize" + android:theme="?android:attr/actionBarTheme" + android:transitionName="shared_element_view" + app:layout_collapseMode="pin"/> + + </com.google.android.material.appbar.CollapsingToolbarLayout> + </com.google.android.material.appbar.AppBarLayout> + + <FrameLayout + android:id="@+id/content_frame" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:layout_behavior="@string/appbar_scrolling_view_behavior"/> +</merge>
\ No newline at end of file diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/styles_expressive.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/styles_expressive.xml new file mode 100644 index 000000000000..d58c2c2eeb23 --- /dev/null +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/styles_expressive.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2024 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources> + <style name="SettingsLibCollapsingToolbarLayoutStyle"> + <item name="expandedTitleTextAppearance">@style/SettingsLibCollapsingToolbarTitle.Expanded</item> + <item name="collapsedTitleTextAppearance">@style/SettingsLibCollapsingToolbarTitle.Collapsed</item> + <item name="expandedTitleMarginStart">@dimen/settingslib_expressive_space_small4</item> + <item name="expandedTitleMarginEnd">@dimen/settingslib_expressive_space_small4</item> + <item name="expandedTitleMarginBottom">@dimen/settingslib_expressive_space_medium1</item> + <item name="maxLines">3</item> + <item name="scrimVisibleHeightTrigger">@dimen/settingslib_scrim_visible_height_trigger</item> + <item name="contentScrim">@color/settingslib_materialColorSurfaceVariant</item> + <item name="statusBarScrim">@null</item> + <item name="scrimAnimationDuration">50</item> + <item name="collapsedTitleTextColor">@color/settingslib_materialColorOnSurface</item> + <item name="expandedTitleTextColor">@color/settingslib_materialColorOnSurface</item> + </style> + <style name="SettingsLibCollapsingToolbarLayoutStyle.Expressive"> + <item name="contentScrim">@color/settingslib_materialColorSurfaceContainer</item> + </style> + + <style name="SettingsLibCollapsingToolbarTitle.Collapsed" parent="@android:style/TextAppearance.DeviceDefault.Headline"> + <!--set dp because we don't want size adjust when font size change--> + <item name="android:textSize">20dp</item> + </style> + + <style name="SettingsLibCollapsingToolbarTitle.Expanded" parent="CollapsingToolbarTitle.Collapsed"> + <item name="android:textSize">36dp</item> + </style> +</resources>
\ No newline at end of file diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/themes_expressive.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/themes_expressive.xml new file mode 100644 index 000000000000..ca1904a15b2f --- /dev/null +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/values-v35/themes_expressive.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright (C) 2024 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<resources> + <style name="SettingsLibTheme.CollapsingToolbar.Expressive" parent="@style/Theme.MaterialComponents.DayNight"/> +</resources>
\ No newline at end of file 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 f46f110e65b8..feacecbd5d0c 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarAppCompatActivity.java @@ -27,6 +27,8 @@ import android.widget.Toolbar; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +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.color.DynamicColors; @@ -69,7 +71,10 @@ public class CollapsingToolbarAppCompatActivity extends AppCompatActivity { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { DynamicColors.applyToActivityIfAvailable(this); } - setTheme(com.android.settingslib.widget.theme.R.style.Theme_SubSettingsBase); + int resId = SettingsThemeHelper.isExpressiveTheme(this) + ? com.android.settingslib.widget.theme.R.style.Theme_SubSettingsBase_Expressive + : com.android.settingslib.widget.theme.R.style.Theme_SubSettingsBase; + setTheme(resId); if (mCustomizeLayoutResId > 0 && Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { super.setContentView(mCustomizeLayoutResId); 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 16ed5a8079fc..0f9d94e9cc3d 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java @@ -28,6 +28,8 @@ import android.widget.Toolbar; import androidx.annotation.Nullable; import androidx.fragment.app.FragmentActivity; +import com.android.settingslib.widget.SettingsThemeHelper; + import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; @@ -59,6 +61,11 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity { protected void onCreate(@Nullable Bundle savedInstanceState) { EdgeToEdgeUtils.enable(this); super.onCreate(savedInstanceState); + + if (SettingsThemeHelper.isExpressiveTheme(this)) { + setTheme(com.android.settingslib.widget.theme.R.style.Theme_SubSettingsBase_Expressive); + } + // for backward compatibility on R devices or wearable devices due to small device size. if (mCustomizeLayoutResId > 0 && (Build.VERSION.SDK_INT < Build.VERSION_CODES.S || isWatch())) { @@ -66,7 +73,7 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity { return; } - View view = getToolbarDelegate().onCreateView(getLayoutInflater(), null); + View view = getToolbarDelegate().onCreateView(getLayoutInflater(), null, this); super.setContentView(view); } 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 2ab2abd03c87..01ecb66fed1a 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarDelegate.java @@ -20,6 +20,7 @@ import static android.text.Layout.HYPHENATION_FREQUENCY_NORMAL_FAST; import android.app.ActionBar; import android.app.Activity; +import android.content.Context; import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; @@ -37,6 +38,8 @@ import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.coordinatorlayout.widget.CoordinatorLayout; +import com.android.settingslib.widget.SettingsThemeHelper; + import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; @@ -84,6 +87,8 @@ public class CollapsingToolbarDelegate { private boolean mUseCollapsingToolbar; + private boolean mIsExpressiveTheme; + public CollapsingToolbarDelegate(@NonNull HostCallback hostCallback, boolean useCollapsingToolbar) { mHostCallback = hostCallback; @@ -103,11 +108,16 @@ public class CollapsingToolbarDelegate { int layoutId; boolean useCollapsingToolbar = mUseCollapsingToolbar || Build.VERSION.SDK_INT < Build.VERSION_CODES.S; + Context context = (activity != null) ? activity : inflater.getContext(); + mIsExpressiveTheme = SettingsThemeHelper.isExpressiveTheme(context); if (useCollapsingToolbar) { - layoutId = R.layout.collapsing_toolbar_base_layout; + layoutId = mIsExpressiveTheme + ? R.layout.settingslib_expressive_collapsing_toolbar_base_layout + : R.layout.collapsing_toolbar_base_layout; } else { layoutId = R.layout.non_collapsing_toolbar_base_layout; } + final View view = inflater.inflate(layoutId, container, false); if (view instanceof CoordinatorLayout) { mCoordinatorLayout = (CoordinatorLayout) view; @@ -155,6 +165,9 @@ public class CollapsingToolbarDelegate { if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); + if (mIsExpressiveTheme) { + actionBar.setHomeAsUpIndicator(R.drawable.settingslib_expressive_icon_back); + } actionBar.setDisplayShowTitleEnabled(true); } } @@ -174,6 +187,9 @@ public class CollapsingToolbarDelegate { if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); + if (mIsExpressiveTheme) { + actionBar.setHomeAsUpIndicator(R.drawable.settingslib_expressive_icon_back); + } actionBar.setDisplayShowTitleEnabled(true); } } @@ -188,6 +204,9 @@ public class CollapsingToolbarDelegate { if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); + if (mIsExpressiveTheme) { + actionBar.setHomeAsUpIndicator(R.drawable.settingslib_expressive_icon_back); + } actionBar.setDisplayShowTitleEnabled(true); } } diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java index f70add9cc62d..51d7504f136d 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/widget/CollapsingCoordinatorLayout.java @@ -39,6 +39,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.coordinatorlayout.widget.CoordinatorLayout; import com.android.settingslib.collapsingtoolbar.R; +import com.android.settingslib.widget.SettingsThemeHelper; import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; @@ -105,7 +106,10 @@ public class CollapsingCoordinatorLayout extends CoordinatorLayout { } private void init() { - inflate(getContext(), R.layout.collapsing_toolbar_content_layout, this); + int resId = SettingsThemeHelper.isExpressiveTheme(getContext()) + ? R.layout.settingslib_expressive_collapsing_toolbar_content_layout + : R.layout.collapsing_toolbar_content_layout; + inflate(getContext(), resId, this); mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar); mAppBarLayout = findViewById(R.id.app_bar); if (mCollapsingToolbarLayout != null) { @@ -172,6 +176,9 @@ public class CollapsingCoordinatorLayout extends CoordinatorLayout { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayShowTitleEnabled(true); + if (SettingsThemeHelper.isExpressiveTheme(getContext())) { + actionBar.setHomeAsUpIndicator(R.drawable.settingslib_expressive_icon_back); + } } } @@ -202,6 +209,9 @@ public class CollapsingCoordinatorLayout extends CoordinatorLayout { actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); actionBar.setDisplayShowTitleEnabled(true); + if (SettingsThemeHelper.isExpressiveTheme(getContext())) { + actionBar.setHomeAsUpIndicator(R.drawable.settingslib_expressive_icon_back); + } } } |