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;