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
This commit is contained in:
Jason Chiu
2021-12-10 22:37:22 +08:00
parent 0f0e27cf6a
commit 11d3b19c51
2 changed files with 17 additions and 5 deletions

View File

@@ -311,7 +311,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements
} }
private void launchDeepLinkIntentToRight() { private void launchDeepLinkIntentToRight() {
if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) { if (!mIsEmbeddingActivityEnabled) {
return; return;
} }

View File

@@ -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.settings.search.actionbar.SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR;
import static com.android.settingslib.search.SearchIndexable.MOBILE; import static com.android.settingslib.search.SearchIndexable.MOBILE;
import android.app.ActivityManager;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.preference.Preference; 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 SAVED_HIGHLIGHT_MIXIN = "highlight_mixin";
private static final String PREF_KEY_SUPPORT = "top_level_support"; private static final String PREF_KEY_SUPPORT = "top_level_support";
private boolean mIsEmbeddingActivityEnabled;
private TopLevelHighlightMixin mHighlightMixin; private TopLevelHighlightMixin mHighlightMixin;
private boolean mFirstStarted = true; private boolean mFirstStarted = true;
@@ -122,7 +125,9 @@ public class TopLevelSettings extends DashboardFragment implements
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext())) { mIsEmbeddingActivityEnabled =
ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext());
if (!mIsEmbeddingActivityEnabled) {
return; return;
} }
@@ -138,15 +143,23 @@ public class TopLevelSettings extends DashboardFragment implements
public void onStart() { public void onStart() {
if (mFirstStarted) { if (mFirstStarted) {
mFirstStarted = false; 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 // Set default highlight menu key for 1-pane homepage since it will show the placeholder
// page once changing back to 2-pane. // page once changing back to 2-pane.
Log.i(TAG, "Set default menu key");
setHighlightMenuKey(getString(SettingsHomepageActivity.DEFAULT_HIGHLIGHT_MENU_KEY), setHighlightMenuKey(getString(SettingsHomepageActivity.DEFAULT_HIGHLIGHT_MENU_KEY),
/* scrollNeeded= */ false); /* scrollNeeded= */ false);
} }
super.onStart(); super.onStart();
} }
private boolean isOnlyOneActivityInTask() {
final ActivityManager.RunningTaskInfo taskInfo = getSystemService(ActivityManager.class)
.getRunningTasks(1).get(0);
return taskInfo.numActivities == 1;
}
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
@@ -225,8 +238,7 @@ public class TopLevelSettings extends DashboardFragment implements
@Override @Override
protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) { protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext()) if (!mIsEmbeddingActivityEnabled || !(getActivity() instanceof SettingsHomepageActivity)) {
|| !(getActivity() instanceof SettingsHomepageActivity)) {
return super.onCreateAdapter(preferenceScreen); return super.onCreateAdapter(preferenceScreen);
} }
return mHighlightMixin.onCreateAdapter(this, preferenceScreen); return mHighlightMixin.onCreateAdapter(this, preferenceScreen);