Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4bc5bdeb authored by Mill Chen's avatar Mill Chen
Browse files

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
parent de8ea692
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -36,13 +36,15 @@
        <com.google.android.material.appbar.CollapsingToolbarLayout
        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_width="match_parent"
            android:layout_height="@dimen/toolbar_one_line_height"
            android:layout_height="@dimen/settingslib_toolbar_layout_height"
            android:clipToPadding="false"
            android:clipToPadding="false"
            app:forceApplySystemWindowInsetTop="true"
            app:extraMultilineHeightEnabled="true"
            app:contentScrim="?androidprv:attr/colorSurfaceHeader"
            app:contentScrim="?androidprv:attr/colorSurfaceHeader"
            app:maxLines="3"
            app:maxLines="3"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
            app:scrimAnimationDuration="50"
            app:scrimAnimationDuration="50"
            app:scrimVisibleHeightTrigger="@dimen/scrim_visible_height_trigger"
            app:scrimVisibleHeightTrigger="@dimen/settingslib_scrim_visible_height_trigger"
            app:statusBarScrim="@null"
            app:statusBarScrim="@null"
            app:titleCollapseMode="fade"
            app:titleCollapseMode="fade"
            app:collapsedTitleTextAppearance="@style/CollapsingToolbarTitle.Collapsed"
            app:collapsedTitleTextAppearance="@style/CollapsingToolbarTitle.Collapsed"
+2 −6
Original line number Original line Diff line number Diff line
@@ -16,12 +16,8 @@
-->
-->
<resources>
<resources>
    <!-- Collapsing toolbar layout dimensions -->
    <!-- Collapsing toolbar layout dimensions -->
    <dimen name="toolbar_one_line_height">216dp</dimen>
    <dimen name="settingslib_toolbar_layout_height">179dp</dimen>
    <dimen name="toolbar_two_lines_height">260dp</dimen>
    <dimen name="settingslib_scrim_visible_height_trigger">137dp</dimen>
    <dimen name="toolbar_three_lines_height">304dp</dimen>
    <dimen name="scrim_visible_height_trigger">174dp</dimen>
    <dimen name="scrim_visible_height_trigger_two_lines">218dp</dimen>
    <dimen name="scrim_visible_height_trigger_three_lines">262dp</dimen>
    <dimen name="expanded_title_margin_start">24dp</dimen>
    <dimen name="expanded_title_margin_start">24dp</dimen>
    <dimen name="expanded_title_margin_end">24dp</dimen>
    <dimen name="expanded_title_margin_end">24dp</dimen>
</resources>
</resources>
 No newline at end of file
+3 −69
Original line number Original line Diff line number Diff line
@@ -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
 * A base Activity that has a collapsing toolbar layout is used for the activities intending to
 * enable the collapsing toolbar function.
 * enable the collapsing toolbar function.
 */
 */
public class CollapsingToolbarBaseActivity extends FragmentActivity implements
public class CollapsingToolbarBaseActivity extends FragmentActivity {
        AppBarLayout.OnOffsetChangedListener {


    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 float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f;
    private static final String KEY_IS_TOOLBAR_COLLAPSED = "is_toolbar_collapsed";


    @Nullable
    @Nullable
    private CollapsingToolbarLayout mCollapsingToolbarLayout;
    private CollapsingToolbarLayout mCollapsingToolbarLayout;
    @Nullable
    @Nullable
    private AppBarLayout mAppBarLayout;
    private AppBarLayout mAppBarLayout;
    private boolean mIsToolbarCollapsed;


    @Override
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
    protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -58,14 +53,9 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity implements
        super.setContentView(R.layout.collapsing_toolbar_base_layout);
        super.setContentView(R.layout.collapsing_toolbar_base_layout);
        mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar);
        mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar);
        mAppBarLayout = findViewById(R.id.app_bar);
        mAppBarLayout = findViewById(R.id.app_bar);
        if (mAppBarLayout != null) {
        if (mCollapsingToolbarLayout != null) {
            mAppBarLayout.addOnOffsetChangedListener(this);
            mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER);
        }
        if (savedInstanceState != null) {
            mIsToolbarCollapsed = savedInstanceState.getBoolean(KEY_IS_TOOLBAR_COLLAPSED);
        }
        }

        initCollapsingToolbar();
        disableCollapsingToolbarLayoutScrollingBehavior();
        disableCollapsingToolbarLayoutScrollingBehavior();


        final Toolbar toolbar = findViewById(R.id.action_bar);
        final Toolbar toolbar = findViewById(R.id.action_bar);
@@ -125,23 +115,6 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity implements
        return true;
        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.
     * Returns an instance of collapsing toolbar.
     */
     */
@@ -174,43 +147,4 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity implements
                });
                });
        params.setBehavior(behavior);
        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);
                }
            }
        });
    }
}
}
+4 −64
Original line number Original line Diff line number Diff line
@@ -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.
 * A base fragment that has a collapsing toolbar layout for enabling the collapsing toolbar design.
 */
 */
public abstract class CollapsingToolbarBaseFragment extends Fragment implements
public abstract class CollapsingToolbarBaseFragment extends Fragment {
        AppBarLayout.OnOffsetChangedListener {


    private static final int TOOLBAR_MAX_LINE_NUMBER = 2;
    private static final float TOOLBAR_LINE_SPACING_MULTIPLIER = 1.1f;
    private static final int FULLY_EXPANDED_OFFSET = 0;
    private static final String KEY_IS_TOOLBAR_COLLAPSED = "is_toolbar_collapsed";


    @Nullable
    @Nullable
    private CoordinatorLayout mCoordinatorLayout;
    private CoordinatorLayout mCoordinatorLayout;
@@ -51,7 +48,6 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements
    private Toolbar mToolbar;
    private Toolbar mToolbar;
    @NonNull
    @NonNull
    private FrameLayout mContentFrameLayout;
    private FrameLayout mContentFrameLayout;
    private boolean mIsToolbarCollapsed;


    @Nullable
    @Nullable
    @Override
    @Override
@@ -62,13 +58,9 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements
        mCoordinatorLayout = view.findViewById(R.id.content_parent);
        mCoordinatorLayout = view.findViewById(R.id.content_parent);
        mCollapsingToolbarLayout = view.findViewById(R.id.collapsing_toolbar);
        mCollapsingToolbarLayout = view.findViewById(R.id.collapsing_toolbar);
        mAppBarLayout = view.findViewById(R.id.app_bar);
        mAppBarLayout = view.findViewById(R.id.app_bar);
        if (mAppBarLayout != null) {
        if (mCollapsingToolbarLayout != null) {
            mAppBarLayout.addOnOffsetChangedListener(this);
            mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER);
        }
        }
        if (savedInstanceState != null) {
            mIsToolbarCollapsed = savedInstanceState.getBoolean(KEY_IS_TOOLBAR_COLLAPSED);
        }
        initCollapsingToolbar();
        disableCollapsingToolbarLayoutScrollingBehavior();
        disableCollapsingToolbarLayoutScrollingBehavior();
        mToolbar = view.findViewById(R.id.action_bar);
        mToolbar = view.findViewById(R.id.action_bar);
        mContentFrameLayout = view.findViewById(R.id.content_frame);
        mContentFrameLayout = view.findViewById(R.id.content_frame);
@@ -82,23 +74,6 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements
        requireActivity().setActionBar(mToolbar);
        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.
     * Return an instance of CoordinatorLayout.
     */
     */
@@ -147,39 +122,4 @@ public abstract class CollapsingToolbarBaseFragment extends Fragment implements
                });
                });
        params.setBehavior(behavior);
        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);
                }
            }
        });
    }
}
}