Merge "Fix theme differences between left/right pane problem" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
7bdddc9c34
@@ -74,6 +74,7 @@ android_library {
|
|||||||
"androidx.preference_preference",
|
"androidx.preference_preference",
|
||||||
"androidx.recyclerview_recyclerview",
|
"androidx.recyclerview_recyclerview",
|
||||||
"androidx.window_window",
|
"androidx.window_window",
|
||||||
|
"androidx.window_window-java",
|
||||||
"com.google.android.material_material",
|
"com.google.android.material_material",
|
||||||
"setupcompat",
|
"setupcompat",
|
||||||
"setupdesign",
|
"setupdesign",
|
||||||
|
@@ -50,6 +50,7 @@ import android.widget.Toolbar;
|
|||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.core.graphics.Insets;
|
import androidx.core.graphics.Insets;
|
||||||
|
import androidx.core.util.Consumer;
|
||||||
import androidx.core.view.ViewCompat;
|
import androidx.core.view.ViewCompat;
|
||||||
import androidx.core.view.WindowCompat;
|
import androidx.core.view.WindowCompat;
|
||||||
import androidx.core.view.WindowInsetsCompat;
|
import androidx.core.view.WindowInsetsCompat;
|
||||||
@@ -57,7 +58,10 @@ import androidx.fragment.app.Fragment;
|
|||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
import androidx.fragment.app.FragmentTransaction;
|
import androidx.fragment.app.FragmentTransaction;
|
||||||
|
import androidx.window.embedding.SplitController;
|
||||||
|
import androidx.window.embedding.SplitInfo;
|
||||||
import androidx.window.embedding.SplitRule;
|
import androidx.window.embedding.SplitRule;
|
||||||
|
import androidx.window.java.embedding.SplitControllerCallbackAdapter;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.Settings;
|
import com.android.settings.Settings;
|
||||||
@@ -77,6 +81,7 @@ import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
|
|||||||
import com.google.android.setupcompat.util.WizardManagerHelper;
|
import com.google.android.setupcompat.util.WizardManagerHelper;
|
||||||
|
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/** Settings homepage activity */
|
/** 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.
|
// A regular layout shows icons on homepage, whereas a simplified layout doesn't.
|
||||||
private boolean mIsRegularLayout = true;
|
private boolean mIsRegularLayout = true;
|
||||||
|
|
||||||
|
private SplitControllerCallbackAdapter mSplitControllerAdapter;
|
||||||
|
private SplitInfoCallback mCallback;
|
||||||
|
|
||||||
/** A listener receiving homepage loaded events. */
|
/** A listener receiving homepage loaded events. */
|
||||||
public interface HomepageLoadedListener {
|
public interface HomepageLoadedListener {
|
||||||
/** Called when the homepage is loaded. */
|
/** Called when the homepage is loaded. */
|
||||||
@@ -259,6 +267,22 @@ public class SettingsHomepageActivity extends FragmentActivity implements
|
|||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
((SettingsApplication) getApplication()).setHomeActivity(this);
|
((SettingsApplication) getApplication()).setHomeActivity(this);
|
||||||
super.onStart();
|
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
|
@Override
|
||||||
@@ -281,21 +305,13 @@ public class SettingsHomepageActivity extends FragmentActivity implements
|
|||||||
@Override
|
@Override
|
||||||
public void onConfigurationChanged(Configuration newConfig) {
|
public void onConfigurationChanged(Configuration newConfig) {
|
||||||
super.onConfigurationChanged(newConfig);
|
super.onConfigurationChanged(newConfig);
|
||||||
final boolean newTwoPaneState = ActivityEmbeddingUtils.isAlreadyEmbedded(this);
|
updateHomepageUI();
|
||||||
if (mIsTwoPane != newTwoPaneState) {
|
|
||||||
mIsTwoPane = newTwoPaneState;
|
|
||||||
updateHomepageAppBar();
|
|
||||||
updateHomepageBackground();
|
|
||||||
updateHomepagePaddings();
|
|
||||||
}
|
|
||||||
updateSplitLayout();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSplitLayout() {
|
private void updateSplitLayout() {
|
||||||
if (!mIsEmbeddingActivityEnabled) {
|
if (!mIsEmbeddingActivityEnabled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mIsTwoPane) {
|
if (mIsTwoPane) {
|
||||||
if (mIsRegularLayout == ActivityEmbeddingUtils.isRegularHomepageLayout(this)) {
|
if (mIsRegularLayout == ActivityEmbeddingUtils.isRegularHomepageLayout(this)) {
|
||||||
// Layout unchanged
|
// 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() {
|
private void updateHomepageBackground() {
|
||||||
if (!mIsEmbeddingActivityEnabled) {
|
if (!mIsEmbeddingActivityEnabled) {
|
||||||
return;
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user