From 4bc5bdeb783eac126cb8db89c919821bf2c9cfa6 Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Fri, 2 Jul 2021 20:46:30 +0800 Subject: [PATCH] Update dynamic height adjusting The current dynamic height adjusting workaround might cause that a flicker problem happens in the collapsing toolbar and it might cause that the collapsing toolbar has different background colors in some setting pages. The new Material library has already supported the dynamic height adjusting for multi-line titles, so we will use the new mechanism instead. Fix: 191038325 Fix: 189896657 Test: visual verified 1) Navigate to permission pages 2) Observe the title and check if it has different background color and is overlapping with the back arrow Change-Id: Ib928ab628cb7838460264f704bebf5c7a2aa9a47 --- .../collapsing_toolbar_base_layout.xml | 6 +- .../res/values/dimens.xml | 8 +-- .../CollapsingToolbarBaseActivity.java | 72 +------------------ .../CollapsingToolbarBaseFragment.java | 68 ++---------------- 4 files changed, 13 insertions(+), 141 deletions(-) diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v31/collapsing_toolbar_base_layout.xml b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v31/collapsing_toolbar_base_layout.xml index 6acd9ff079650..59506564400b6 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v31/collapsing_toolbar_base_layout.xml +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/res/layout-v31/collapsing_toolbar_base_layout.xml @@ -36,13 +36,15 @@ - 216dp - 260dp - 304dp - 174dp - 218dp - 262dp + 179dp + 137dp 24dp 24dp \ No newline at end of file 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 8b1e397c2199c..a1cd37189b510 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseActivity.java @@ -36,19 +36,14 @@ import com.google.android.material.resources.TextAppearanceConfig; * A base Activity that has a collapsing toolbar layout is used for the activities intending to * enable the collapsing toolbar function. */ -public class CollapsingToolbarBaseActivity extends FragmentActivity implements - AppBarLayout.OnOffsetChangedListener { +public class CollapsingToolbarBaseActivity extends FragmentActivity { - private static final int TOOLBAR_MAX_LINE_NUMBER = 2; - private static final int FULLY_EXPANDED_OFFSET = 0; private static final float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f; - private static final String KEY_IS_TOOLBAR_COLLAPSED = "is_toolbar_collapsed"; @Nullable private CollapsingToolbarLayout mCollapsingToolbarLayout; @Nullable private AppBarLayout mAppBarLayout; - private boolean mIsToolbarCollapsed; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -58,14 +53,9 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity implements super.setContentView(R.layout.collapsing_toolbar_base_layout); mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar); mAppBarLayout = findViewById(R.id.app_bar); - if (mAppBarLayout != null) { - mAppBarLayout.addOnOffsetChangedListener(this); + if (mCollapsingToolbarLayout != null) { + mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER); } - if (savedInstanceState != null) { - mIsToolbarCollapsed = savedInstanceState.getBoolean(KEY_IS_TOOLBAR_COLLAPSED); - } - - initCollapsingToolbar(); disableCollapsingToolbarLayoutScrollingBehavior(); final Toolbar toolbar = findViewById(R.id.action_bar); @@ -125,23 +115,6 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity implements return true; } - @Override - public void onOffsetChanged(AppBarLayout appBarLayout, int offset) { - if (offset == FULLY_EXPANDED_OFFSET) { - mIsToolbarCollapsed = false; - } else { - mIsToolbarCollapsed = true; - } - } - - @Override - protected void onSaveInstanceState(@NonNull Bundle outState) { - super.onSaveInstanceState(outState); - if (isChangingConfigurations()) { - outState.putBoolean(KEY_IS_TOOLBAR_COLLAPSED, mIsToolbarCollapsed); - } - } - /** * Returns an instance of collapsing toolbar. */ @@ -174,43 +147,4 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity implements }); params.setBehavior(behavior); } - - @SuppressWarnings("RestrictTo") - private void initCollapsingToolbar() { - if (mCollapsingToolbarLayout == null || mAppBarLayout == null) { - return; - } - mCollapsingToolbarLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, - int oldLeft, int oldTop, int oldRight, int oldBottom) { - v.removeOnLayoutChangeListener(this); - if (mIsToolbarCollapsed) { - return; - } - final int count = mCollapsingToolbarLayout.getLineCount(); - if (count > TOOLBAR_MAX_LINE_NUMBER) { - final ViewGroup.LayoutParams lp = mCollapsingToolbarLayout.getLayoutParams(); - lp.height = getResources() - .getDimensionPixelSize(R.dimen.toolbar_three_lines_height); - mCollapsingToolbarLayout.setScrimVisibleHeightTrigger( - getResources().getDimensionPixelSize( - R.dimen.scrim_visible_height_trigger_three_lines)); - mCollapsingToolbarLayout.setLayoutParams(lp); - mCollapsingToolbarLayout - .setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER); - } else if (count == TOOLBAR_MAX_LINE_NUMBER) { - final ViewGroup.LayoutParams lp = mCollapsingToolbarLayout.getLayoutParams(); - lp.height = getResources() - .getDimensionPixelSize(R.dimen.toolbar_two_lines_height); - mCollapsingToolbarLayout.setScrimVisibleHeightTrigger( - getResources().getDimensionPixelSize( - R.dimen.scrim_visible_height_trigger_two_lines)); - mCollapsingToolbarLayout.setLayoutParams(lp); - mCollapsingToolbarLayout - .setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER); - } - } - }); - } } diff --git a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseFragment.java b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseFragment.java index e7026686d9ff0..cfb12bc30b8a7 100644 --- a/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseFragment.java +++ b/packages/SettingsLib/CollapsingToolbarBaseActivity/src/com/android/settingslib/collapsingtoolbar/CollapsingToolbarBaseFragment.java @@ -34,12 +34,9 @@ import com.google.android.material.appbar.CollapsingToolbarLayout; /** * A base fragment that has a collapsing toolbar layout for enabling the collapsing toolbar design. */ -public abstract class CollapsingToolbarBaseFragment extends Fragment implements - AppBarLayout.OnOffsetChangedListener { +public abstract class CollapsingToolbarBaseFragment extends Fragment { - private static final int TOOLBAR_MAX_LINE_NUMBER = 2; - private static final int FULLY_EXPANDED_OFFSET = 0; - private static final String KEY_IS_TOOLBAR_COLLAPSED = "is_toolbar_collapsed"; + private static final float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f; @Nullable private CoordinatorLayout mCoordinatorLayout; @@ -51,7 +48,6 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements private Toolbar mToolbar; @NonNull private FrameLayout mContentFrameLayout; - private boolean mIsToolbarCollapsed; @Nullable @Override @@ -62,13 +58,9 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements mCoordinatorLayout = view.findViewById(R.id.content_parent); mCollapsingToolbarLayout = view.findViewById(R.id.collapsing_toolbar); mAppBarLayout = view.findViewById(R.id.app_bar); - if (mAppBarLayout != null) { - mAppBarLayout.addOnOffsetChangedListener(this); + if (mCollapsingToolbarLayout != null) { + mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER); } - if (savedInstanceState != null) { - mIsToolbarCollapsed = savedInstanceState.getBoolean(KEY_IS_TOOLBAR_COLLAPSED); - } - initCollapsingToolbar(); disableCollapsingToolbarLayoutScrollingBehavior(); mToolbar = view.findViewById(R.id.action_bar); mContentFrameLayout = view.findViewById(R.id.content_frame); @@ -82,23 +74,6 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements requireActivity().setActionBar(mToolbar); } - @Override - public void onSaveInstanceState(@NonNull Bundle outState) { - super.onSaveInstanceState(outState); - if (getActivity().isChangingConfigurations()) { - outState.putBoolean(KEY_IS_TOOLBAR_COLLAPSED, mIsToolbarCollapsed); - } - } - - @Override - public void onOffsetChanged(AppBarLayout appBarLayout, int offset) { - if (offset == FULLY_EXPANDED_OFFSET) { - mIsToolbarCollapsed = false; - } else { - mIsToolbarCollapsed = true; - } - } - /** * Return an instance of CoordinatorLayout. */ @@ -147,39 +122,4 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements }); params.setBehavior(behavior); } - - @SuppressWarnings("RestrictTo") - private void initCollapsingToolbar() { - if (mCollapsingToolbarLayout == null || mAppBarLayout == null) { - return; - } - mCollapsingToolbarLayout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, - int oldLeft, int oldTop, int oldRight, int oldBottom) { - v.removeOnLayoutChangeListener(this); - if (mIsToolbarCollapsed) { - return; - } - final int count = mCollapsingToolbarLayout.getLineCount(); - if (count > TOOLBAR_MAX_LINE_NUMBER) { - final ViewGroup.LayoutParams lp = mCollapsingToolbarLayout.getLayoutParams(); - lp.height = getResources() - .getDimensionPixelSize(R.dimen.toolbar_three_lines_height); - mCollapsingToolbarLayout.setScrimVisibleHeightTrigger( - getResources().getDimensionPixelSize( - R.dimen.scrim_visible_height_trigger_three_lines)); - mCollapsingToolbarLayout.setLayoutParams(lp); - } else if (count == TOOLBAR_MAX_LINE_NUMBER) { - final ViewGroup.LayoutParams lp = mCollapsingToolbarLayout.getLayoutParams(); - lp.height = getResources() - .getDimensionPixelSize(R.dimen.toolbar_two_lines_height); - mCollapsingToolbarLayout.setScrimVisibleHeightTrigger( - getResources().getDimensionPixelSize( - R.dimen.scrim_visible_height_trigger_two_lines)); - mCollapsingToolbarLayout.setLayoutParams(lp); - } - } - }); - } }