From 11d3b19c513b3bef0afa197856626737cd268fbe Mon Sep 17 00:00:00 2001 From: Jason Chiu Date: Fri, 10 Dec 2021 22:37:22 +0800 Subject: [PATCH] Fix the highlight error after unfolding the device Unfolding a device generates mutiple lifecycle events and resets the highlight key. Check if there's only one activity in the task and then perform the reset. Fix: 209016927 Test: manual Change-Id: I49988fa913270d35a04436777433b7669afb72df --- .../homepage/SettingsHomepageActivity.java | 2 +- .../settings/homepage/TopLevelSettings.java | 20 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java index 9076053ff65..183a2fbf5f5 100644 --- a/src/com/android/settings/homepage/SettingsHomepageActivity.java +++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java @@ -311,7 +311,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements } private void launchDeepLinkIntentToRight() { - if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) { + if (!mIsEmbeddingActivityEnabled) { return; } diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java index f2e5a3528f7..f76a3de85d7 100644 --- a/src/com/android/settings/homepage/TopLevelSettings.java +++ b/src/com/android/settings/homepage/TopLevelSettings.java @@ -19,12 +19,14 @@ package com.android.settings.homepage; import static com.android.settings.search.actionbar.SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR; import static com.android.settingslib.search.SearchIndexable.MOBILE; +import android.app.ActivityManager; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.TextUtils; +import android.util.Log; import androidx.fragment.app.Fragment; import androidx.preference.Preference; @@ -53,6 +55,7 @@ public class TopLevelSettings extends DashboardFragment implements private static final String SAVED_HIGHLIGHT_MIXIN = "highlight_mixin"; private static final String PREF_KEY_SUPPORT = "top_level_support"; + private boolean mIsEmbeddingActivityEnabled; private TopLevelHighlightMixin mHighlightMixin; private boolean mFirstStarted = true; @@ -122,7 +125,9 @@ public class TopLevelSettings extends DashboardFragment implements @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); - if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext())) { + mIsEmbeddingActivityEnabled = + ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext()); + if (!mIsEmbeddingActivityEnabled) { return; } @@ -138,15 +143,23 @@ public class TopLevelSettings extends DashboardFragment implements public void onStart() { if (mFirstStarted) { mFirstStarted = false; - } else if (!ActivityEmbeddingUtils.isTwoPaneResolution(getActivity())) { + } else if (mIsEmbeddingActivityEnabled && isOnlyOneActivityInTask() + && !ActivityEmbeddingUtils.isTwoPaneResolution(getActivity())) { // Set default highlight menu key for 1-pane homepage since it will show the placeholder // page once changing back to 2-pane. + Log.i(TAG, "Set default menu key"); setHighlightMenuKey(getString(SettingsHomepageActivity.DEFAULT_HIGHLIGHT_MENU_KEY), /* scrollNeeded= */ false); } super.onStart(); } + private boolean isOnlyOneActivityInTask() { + final ActivityManager.RunningTaskInfo taskInfo = getSystemService(ActivityManager.class) + .getRunningTasks(1).get(0); + return taskInfo.numActivities == 1; + } + @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -225,8 +238,7 @@ public class TopLevelSettings extends DashboardFragment implements @Override protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) { - if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext()) - || !(getActivity() instanceof SettingsHomepageActivity)) { + if (!mIsEmbeddingActivityEnabled || !(getActivity() instanceof SettingsHomepageActivity)) { return super.onCreateAdapter(preferenceScreen); } return mHighlightMixin.onCreateAdapter(this, preferenceScreen);