From 4fdb7c9f2660bf039036535ca8bc2b211a080615 Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Wed, 14 Jul 2021 04:00:11 +0800 Subject: Support customize layout in CollapsingToolbarBaseActivity We introduced the collapsing toolbar on S. To enable this feature needs to correspondingly adjust the theme that the activity uses. However these changes might cause some mainline module apps get crashed when running on R. A customize layout is allowed to use for some cases that need to roll back to the layout used in R. Bug: 192395187 Test: visual verified Change-Id: I9b409842198a2d52a6440cdd9ad68268293681f2 --- .../CollapsingToolbarBaseActivity/Android.bp | 1 + .../CollapsingToolbarBaseActivity.java | 26 ++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp b/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp index e50019680deb..2f911c4e6546 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/Android.bp @@ -18,6 +18,7 @@ android_library { "androidx.core_core", "com.google.android.material_material", "SettingsLibSettingsTransition", + "SettingsLibUtils", ], sdk_version: "system_current", min_sdk_version: "29", 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 a1cd37189b51..84a6b36e3d7c 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 androidx.annotation.Nullable; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.fragment.app.FragmentActivity; +import com.android.settingslib.utils.BuildCompatUtils; + import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.appbar.CollapsingToolbarLayout; import com.google.android.material.resources.TextAppearanceConfig; @@ -44,10 +46,15 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity { private CollapsingToolbarLayout mCollapsingToolbarLayout; @Nullable private AppBarLayout mAppBarLayout; + private int mCustomizeLayoutResId = 0; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (mCustomizeLayoutResId > 0 && !BuildCompatUtils.isAtLeastS()) { + super.setContentView(mCustomizeLayoutResId); + return; + } // Force loading font synchronously for collapsing toolbar layout TextAppearanceConfig.setShouldLoadFontSynchronously(true); super.setContentView(R.layout.collapsing_toolbar_base_layout); @@ -81,12 +88,27 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity { @Override public void setContentView(View view) { - ((ViewGroup) findViewById(R.id.content_frame)).addView(view); + final ViewGroup parent = findViewById(R.id.content_frame); + if (parent != null) { + parent.addView(view); + } } @Override public void setContentView(View view, ViewGroup.LayoutParams params) { - ((ViewGroup) findViewById(R.id.content_frame)).addView(view, params); + final ViewGroup parent = findViewById(R.id.content_frame); + if (parent != null) { + parent.addView(view, params); + } + } + + /** + * This method allows an activity to replace the default layout with a customize layout. Notice + * that it will no longer apply the features being provided by this class when this method + * gets called. + */ + protected void setCustomizeContentView(int layoutResId) { + mCustomizeLayoutResId = layoutResId; } @Override -- cgit v1.2.3-59-g8ed1b