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

Commit 7bdddc9c authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix theme differences between left/right pane problem" into main

parents 696c8ff6 9669cf5d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -74,6 +74,7 @@ android_library {
        "androidx.preference_preference",
        "androidx.recyclerview_recyclerview",
        "androidx.window_window",
        "androidx.window_window-java",
        "com.google.android.material_material",
        "setupcompat",
        "setupdesign",
+56 −9
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ import android.widget.Toolbar;

import androidx.annotation.VisibleForTesting;
import androidx.core.graphics.Insets;
import androidx.core.util.Consumer;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsCompat;
@@ -57,7 +58,10 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.window.embedding.SplitController;
import androidx.window.embedding.SplitInfo;
import androidx.window.embedding.SplitRule;
import androidx.window.java.embedding.SplitControllerCallbackAdapter;

import com.android.settings.R;
import com.android.settings.Settings;
@@ -77,6 +81,7 @@ import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
import com.google.android.setupcompat.util.WizardManagerHelper;

import java.net.URISyntaxException;
import java.util.List;
import java.util.Set;

/** Settings homepage activity */
@@ -112,6 +117,9 @@ public class SettingsHomepageActivity extends FragmentActivity implements
    // A regular layout shows icons on homepage, whereas a simplified layout doesn't.
    private boolean mIsRegularLayout = true;

    private SplitControllerCallbackAdapter mSplitControllerAdapter;
    private SplitInfoCallback mCallback;

    /** A listener receiving homepage loaded events. */
    public interface HomepageLoadedListener {
        /** Called when the homepage is loaded. */
@@ -259,6 +267,22 @@ public class SettingsHomepageActivity extends FragmentActivity implements
    protected void onStart() {
        ((SettingsApplication) getApplication()).setHomeActivity(this);
        super.onStart();
        if (mIsEmbeddingActivityEnabled) {
            final SplitController splitController = SplitController.getInstance(this);
            mSplitControllerAdapter = new SplitControllerCallbackAdapter(splitController);
            mCallback = new SplitInfoCallback(this);
            mSplitControllerAdapter.addSplitListener(this, Runnable::run, mCallback);
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        if (mSplitControllerAdapter != null && mCallback != null) {
            mSplitControllerAdapter.removeSplitListener(mCallback);
            mCallback = null;
            mSplitControllerAdapter = null;
        }
    }

    @Override
@@ -281,21 +305,13 @@ public class SettingsHomepageActivity extends FragmentActivity implements
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        final boolean newTwoPaneState = ActivityEmbeddingUtils.isAlreadyEmbedded(this);
        if (mIsTwoPane != newTwoPaneState) {
            mIsTwoPane = newTwoPaneState;
            updateHomepageAppBar();
            updateHomepageBackground();
            updateHomepagePaddings();
        }
        updateSplitLayout();
        updateHomepageUI();
    }

    private void updateSplitLayout() {
        if (!mIsEmbeddingActivityEnabled) {
            return;
        }

        if (mIsTwoPane) {
            if (mIsRegularLayout == ActivityEmbeddingUtils.isRegularHomepageLayout(this)) {
                // Layout unchanged
@@ -365,6 +381,17 @@ public class SettingsHomepageActivity extends FragmentActivity implements
        }
    }

    private void updateHomepageUI() {
        final boolean newTwoPaneState = ActivityEmbeddingUtils.isAlreadyEmbedded(this);
        if (mIsTwoPane != newTwoPaneState) {
            mIsTwoPane = newTwoPaneState;
            updateHomepageAppBar();
            updateHomepageBackground();
            updateHomepagePaddings();
        }
        updateSplitLayout();
    }

    private void updateHomepageBackground() {
        if (!mIsEmbeddingActivityEnabled) {
            return;
@@ -733,4 +760,24 @@ public class SettingsHomepageActivity extends FragmentActivity implements
            }
        }
    }

    /** The callback invoked while AE splitting. */
    private static class SplitInfoCallback implements Consumer<List<SplitInfo>> {
        private final SettingsHomepageActivity mActivity;

        private boolean mIsSplitUpdatedUI = false;

        SplitInfoCallback(SettingsHomepageActivity activity) {
            mActivity = activity;
        }

        @Override
        public void accept(List<SplitInfo> splitInfoList) {
            if (!splitInfoList.isEmpty() && !mIsSplitUpdatedUI && !mActivity.isFinishing()
                    && ActivityEmbeddingUtils.isAlreadyEmbedded(mActivity)) {
                mIsSplitUpdatedUI = true;
                mActivity.updateHomepageUI();
            }
        }
    }
}