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

Commit bb98530b authored by Mill Chen's avatar Mill Chen Committed by Android (Google) Code Review
Browse files

Merge "Collapse toolbar when hosting multiple fragments" into main

parents 5eb36cfc e0bf8cb0
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -76,6 +76,9 @@ public class CollapsingToolbarAppCompatActivity extends AppCompatActivity implem
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        EdgeToEdgeUtils.enable(this);
        super.onCreate(savedInstanceState);

        getToolbarDelegate().registerToolbarCollapseBehavior(this);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            DynamicColors.applyToActivityIfAvailable(this);
        }
+2 −0
Original line number Diff line number Diff line
@@ -70,6 +70,8 @@ public class CollapsingToolbarBaseActivity extends FragmentActivity implements
        EdgeToEdgeUtils.enable(this);
        super.onCreate(savedInstanceState);

        getToolbarDelegate().registerToolbarCollapseBehavior(this);

        if (SettingsThemeHelper.isExpressiveTheme(this)) {
            setTheme(com.android.settingslib.widget.theme.R.style.Theme_SubSettingsBase_Expressive);
        }
+35 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.graphics.text.LineBreakConfig;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -38,6 +39,9 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;

import com.android.settingslib.collapsingtoolbar.widget.ScrollableToolbarItemLayout;
import com.android.settingslib.widget.SettingsThemeHelper;
@@ -513,6 +517,37 @@ public class CollapsingToolbarDelegate {
        mActionButton.setContentDescription(contentDescription);
    }

    /**
     * Set the state of CollapsingToolbar to collapsed when multiple fragments share a single
     * FragmentManager within an activity.
     */
    public void registerToolbarCollapseBehavior(@NonNull Activity activity) {
        if (!(activity instanceof FragmentActivity)) {
            return;
        }
        FragmentManager fragmentManager = ((FragmentActivity) activity).getSupportFragmentManager();
        fragmentManager.registerFragmentLifecycleCallbacks(
            new FragmentManager.FragmentLifecycleCallbacks() {
                @Override
                public void onFragmentViewCreated(@NonNull FragmentManager fm, @NonNull Fragment f,
                        @NonNull View v, @Nullable Bundle savedInstanceState) {
                    super.onFragmentViewCreated(fm, f, v, savedInstanceState);
                    if (!SettingsThemeHelper.isExpressiveTheme(activity)) {
                        return;
                    }
                    // Check if multiple fragments use the same activity
                    if (fm.getBackStackEntryCount() > 0) {
                        AppBarLayout appBarLayout = getAppBarLayout();
                        if (appBarLayout != null) {
                            appBarLayout.post(() -> appBarLayout.setExpanded(false, true));
                        } else {
                            Log.e(TAG, "AppBarLayout is null, can't collapse toolbar.");
                        }
                    }
                }
            }, false);
    }

    private void autoSetCollapsingToolbarLayoutScrolling(AppBarLayout appBarLayout) {
        if (appBarLayout == null) {
            return;