Prevent scrolling after the homepage recreating
- Only apply the layout transition when contextual home is enabled
- Do not scroll for highlighting when the homepage is recreated and
never scrolled
Fix: 222238012
Bug: 222473415
Test: robotest, manual
Change-Id: I490c3f8dbca63a5250bae01555592b7795c90af2
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 73c473a..3ed305e 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -182,6 +182,8 @@
showSuggestionFragment(scrollNeeded);
if (FeatureFlagUtils.isEnabled(this, FeatureFlags.CONTEXTUAL_HOME)) {
showFragment(() -> new ContextualCardsFragment(), R.id.contextual_cards_content);
+ ((FrameLayout) findViewById(R.id.main_content))
+ .getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
}
}
mMainFragment = showFragment(() -> {
@@ -191,9 +193,6 @@
return fragment;
}, R.id.main_content);
- ((FrameLayout) findViewById(R.id.main_content))
- .getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
-
// Launch the intent from deep link for large screen devices.
launchDeepLinkIntentToRight();
}
diff --git a/src/com/android/settings/homepage/TopLevelHighlightMixin.java b/src/com/android/settings/homepage/TopLevelHighlightMixin.java
index ebfe7f2..c473e87 100644
--- a/src/com/android/settings/homepage/TopLevelHighlightMixin.java
+++ b/src/com/android/settings/homepage/TopLevelHighlightMixin.java
@@ -23,7 +23,6 @@
import android.text.TextUtils;
import android.util.Log;
-import androidx.fragment.app.FragmentActivity;
import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView;
@@ -43,14 +42,17 @@
private String mHiddenKey;
private DialogInterface mDialog;
private HighlightableTopLevelPreferenceAdapter mTopLevelAdapter;
+ private boolean mActivityEmbedded;
- public TopLevelHighlightMixin() {
+ public TopLevelHighlightMixin(boolean activityEmbedded) {
+ mActivityEmbedded = activityEmbedded;
}
public TopLevelHighlightMixin(Parcel source) {
mCurrentKey = source.readString();
mPreviousKey = source.readString();
mHiddenKey = source.readString();
+ mActivityEmbedded = source.readBoolean();
}
@Override
@@ -58,6 +60,7 @@
dest.writeString(mCurrentKey);
dest.writeString(mPreviousKey);
dest.writeString(mHiddenKey);
+ dest.writeBoolean(mActivityEmbedded);
}
@Override
@@ -96,8 +99,16 @@
}
}
+ void setActivityEmbedded(boolean activityEmbedded) {
+ mActivityEmbedded = activityEmbedded;
+ }
+
+ boolean isActivityEmbedded() {
+ return mActivityEmbedded;
+ }
+
RecyclerView.Adapter onCreateAdapter(TopLevelSettings topLevelSettings,
- PreferenceScreen preferenceScreen) {
+ PreferenceScreen preferenceScreen, boolean scrollNeeded) {
if (TextUtils.isEmpty(mCurrentKey)) {
mCurrentKey = getHighlightPrefKeyFromArguments(topLevelSettings.getArguments());
}
@@ -105,7 +116,7 @@
Log.d(TAG, "onCreateAdapter, pref key: " + mCurrentKey);
mTopLevelAdapter = new HighlightableTopLevelPreferenceAdapter(
(SettingsHomepageActivity) topLevelSettings.getActivity(), preferenceScreen,
- topLevelSettings.getListView(), mCurrentKey);
+ topLevelSettings.getListView(), mCurrentKey, scrollNeeded);
return mTopLevelAdapter;
}
@@ -129,7 +140,7 @@
}
}
- void highlightPreferenceIfNeeded(FragmentActivity activity) {
+ void highlightPreferenceIfNeeded() {
if (mTopLevelAdapter != null) {
mTopLevelAdapter.requestHighlight();
}
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index 734e079..26fa4ed 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -58,6 +58,7 @@
private boolean mIsEmbeddingActivityEnabled;
private TopLevelHighlightMixin mHighlightMixin;
+ private boolean mScrollNeeded = true;
private boolean mFirstStarted = true;
public TopLevelSettings() {
@@ -133,11 +134,14 @@
return;
}
+ boolean activityEmbedded = SplitController.getInstance().isActivityEmbedded(getActivity());
if (icicle != null) {
mHighlightMixin = icicle.getParcelable(SAVED_HIGHLIGHT_MIXIN);
+ mScrollNeeded = !mHighlightMixin.isActivityEmbedded() && activityEmbedded;
+ mHighlightMixin.setActivityEmbedded(activityEmbedded);
}
if (mHighlightMixin == null) {
- mHighlightMixin = new TopLevelHighlightMixin();
+ mHighlightMixin = new TopLevelHighlightMixin(activityEmbedded);
}
}
@@ -201,7 +205,7 @@
@Override
public void highlightPreferenceIfNeeded() {
if (mHighlightMixin != null) {
- mHighlightMixin.highlightPreferenceIfNeeded(getActivity());
+ mHighlightMixin.highlightPreferenceIfNeeded();
}
}
@@ -243,7 +247,7 @@
if (!mIsEmbeddingActivityEnabled || !(getActivity() instanceof SettingsHomepageActivity)) {
return super.onCreateAdapter(preferenceScreen);
}
- return mHighlightMixin.onCreateAdapter(this, preferenceScreen);
+ return mHighlightMixin.onCreateAdapter(this, preferenceScreen, mScrollNeeded);
}
@Override
diff --git a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
index ddd57f3..911aabb 100644
--- a/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
+++ b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
@@ -67,10 +67,12 @@
private SparseArray<PreferenceViewHolder> mViewHolders;
public HighlightableTopLevelPreferenceAdapter(SettingsHomepageActivity homepageActivity,
- PreferenceGroup preferenceGroup, RecyclerView recyclerView, String key) {
+ PreferenceGroup preferenceGroup, RecyclerView recyclerView, String key,
+ boolean scrollNeeded) {
super(preferenceGroup);
mRecyclerView = recyclerView;
mHighlightKey = key;
+ mScrolled = !scrollNeeded;
mViewHolders = new SparseArray<>();
mContext = preferenceGroup.getContext();
mHomepageActivity = homepageActivity;