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
This commit is contained in:
@@ -182,6 +182,8 @@ public class SettingsHomepageActivity extends FragmentActivity implements
|
|||||||
showSuggestionFragment(scrollNeeded);
|
showSuggestionFragment(scrollNeeded);
|
||||||
if (FeatureFlagUtils.isEnabled(this, FeatureFlags.CONTEXTUAL_HOME)) {
|
if (FeatureFlagUtils.isEnabled(this, FeatureFlags.CONTEXTUAL_HOME)) {
|
||||||
showFragment(() -> new ContextualCardsFragment(), R.id.contextual_cards_content);
|
showFragment(() -> new ContextualCardsFragment(), R.id.contextual_cards_content);
|
||||||
|
((FrameLayout) findViewById(R.id.main_content))
|
||||||
|
.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mMainFragment = showFragment(() -> {
|
mMainFragment = showFragment(() -> {
|
||||||
@@ -191,9 +193,6 @@ public class SettingsHomepageActivity extends FragmentActivity implements
|
|||||||
return fragment;
|
return fragment;
|
||||||
}, R.id.main_content);
|
}, R.id.main_content);
|
||||||
|
|
||||||
((FrameLayout) findViewById(R.id.main_content))
|
|
||||||
.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
|
|
||||||
|
|
||||||
// Launch the intent from deep link for large screen devices.
|
// Launch the intent from deep link for large screen devices.
|
||||||
launchDeepLinkIntentToRight();
|
launchDeepLinkIntentToRight();
|
||||||
}
|
}
|
||||||
|
@@ -23,7 +23,6 @@ import android.os.Parcelable;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.fragment.app.FragmentActivity;
|
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
@@ -43,14 +42,17 @@ public class TopLevelHighlightMixin implements Parcelable, DialogInterface.OnSho
|
|||||||
private String mHiddenKey;
|
private String mHiddenKey;
|
||||||
private DialogInterface mDialog;
|
private DialogInterface mDialog;
|
||||||
private HighlightableTopLevelPreferenceAdapter mTopLevelAdapter;
|
private HighlightableTopLevelPreferenceAdapter mTopLevelAdapter;
|
||||||
|
private boolean mActivityEmbedded;
|
||||||
|
|
||||||
public TopLevelHighlightMixin() {
|
public TopLevelHighlightMixin(boolean activityEmbedded) {
|
||||||
|
mActivityEmbedded = activityEmbedded;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TopLevelHighlightMixin(Parcel source) {
|
public TopLevelHighlightMixin(Parcel source) {
|
||||||
mCurrentKey = source.readString();
|
mCurrentKey = source.readString();
|
||||||
mPreviousKey = source.readString();
|
mPreviousKey = source.readString();
|
||||||
mHiddenKey = source.readString();
|
mHiddenKey = source.readString();
|
||||||
|
mActivityEmbedded = source.readBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -58,6 +60,7 @@ public class TopLevelHighlightMixin implements Parcelable, DialogInterface.OnSho
|
|||||||
dest.writeString(mCurrentKey);
|
dest.writeString(mCurrentKey);
|
||||||
dest.writeString(mPreviousKey);
|
dest.writeString(mPreviousKey);
|
||||||
dest.writeString(mHiddenKey);
|
dest.writeString(mHiddenKey);
|
||||||
|
dest.writeBoolean(mActivityEmbedded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -96,8 +99,16 @@ public class TopLevelHighlightMixin implements Parcelable, DialogInterface.OnSho
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setActivityEmbedded(boolean activityEmbedded) {
|
||||||
|
mActivityEmbedded = activityEmbedded;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isActivityEmbedded() {
|
||||||
|
return mActivityEmbedded;
|
||||||
|
}
|
||||||
|
|
||||||
RecyclerView.Adapter onCreateAdapter(TopLevelSettings topLevelSettings,
|
RecyclerView.Adapter onCreateAdapter(TopLevelSettings topLevelSettings,
|
||||||
PreferenceScreen preferenceScreen) {
|
PreferenceScreen preferenceScreen, boolean scrollNeeded) {
|
||||||
if (TextUtils.isEmpty(mCurrentKey)) {
|
if (TextUtils.isEmpty(mCurrentKey)) {
|
||||||
mCurrentKey = getHighlightPrefKeyFromArguments(topLevelSettings.getArguments());
|
mCurrentKey = getHighlightPrefKeyFromArguments(topLevelSettings.getArguments());
|
||||||
}
|
}
|
||||||
@@ -105,7 +116,7 @@ public class TopLevelHighlightMixin implements Parcelable, DialogInterface.OnSho
|
|||||||
Log.d(TAG, "onCreateAdapter, pref key: " + mCurrentKey);
|
Log.d(TAG, "onCreateAdapter, pref key: " + mCurrentKey);
|
||||||
mTopLevelAdapter = new HighlightableTopLevelPreferenceAdapter(
|
mTopLevelAdapter = new HighlightableTopLevelPreferenceAdapter(
|
||||||
(SettingsHomepageActivity) topLevelSettings.getActivity(), preferenceScreen,
|
(SettingsHomepageActivity) topLevelSettings.getActivity(), preferenceScreen,
|
||||||
topLevelSettings.getListView(), mCurrentKey);
|
topLevelSettings.getListView(), mCurrentKey, scrollNeeded);
|
||||||
return mTopLevelAdapter;
|
return mTopLevelAdapter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +140,7 @@ public class TopLevelHighlightMixin implements Parcelable, DialogInterface.OnSho
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void highlightPreferenceIfNeeded(FragmentActivity activity) {
|
void highlightPreferenceIfNeeded() {
|
||||||
if (mTopLevelAdapter != null) {
|
if (mTopLevelAdapter != null) {
|
||||||
mTopLevelAdapter.requestHighlight();
|
mTopLevelAdapter.requestHighlight();
|
||||||
}
|
}
|
||||||
|
@@ -58,6 +58,7 @@ public class TopLevelSettings extends DashboardFragment implements
|
|||||||
|
|
||||||
private boolean mIsEmbeddingActivityEnabled;
|
private boolean mIsEmbeddingActivityEnabled;
|
||||||
private TopLevelHighlightMixin mHighlightMixin;
|
private TopLevelHighlightMixin mHighlightMixin;
|
||||||
|
private boolean mScrollNeeded = true;
|
||||||
private boolean mFirstStarted = true;
|
private boolean mFirstStarted = true;
|
||||||
|
|
||||||
public TopLevelSettings() {
|
public TopLevelSettings() {
|
||||||
@@ -133,11 +134,14 @@ public class TopLevelSettings extends DashboardFragment implements
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean activityEmbedded = SplitController.getInstance().isActivityEmbedded(getActivity());
|
||||||
if (icicle != null) {
|
if (icicle != null) {
|
||||||
mHighlightMixin = icicle.getParcelable(SAVED_HIGHLIGHT_MIXIN);
|
mHighlightMixin = icicle.getParcelable(SAVED_HIGHLIGHT_MIXIN);
|
||||||
|
mScrollNeeded = !mHighlightMixin.isActivityEmbedded() && activityEmbedded;
|
||||||
|
mHighlightMixin.setActivityEmbedded(activityEmbedded);
|
||||||
}
|
}
|
||||||
if (mHighlightMixin == null) {
|
if (mHighlightMixin == null) {
|
||||||
mHighlightMixin = new TopLevelHighlightMixin();
|
mHighlightMixin = new TopLevelHighlightMixin(activityEmbedded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,7 +205,7 @@ public class TopLevelSettings extends DashboardFragment implements
|
|||||||
@Override
|
@Override
|
||||||
public void highlightPreferenceIfNeeded() {
|
public void highlightPreferenceIfNeeded() {
|
||||||
if (mHighlightMixin != null) {
|
if (mHighlightMixin != null) {
|
||||||
mHighlightMixin.highlightPreferenceIfNeeded(getActivity());
|
mHighlightMixin.highlightPreferenceIfNeeded();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,7 +247,7 @@ public class TopLevelSettings extends DashboardFragment implements
|
|||||||
if (!mIsEmbeddingActivityEnabled || !(getActivity() instanceof SettingsHomepageActivity)) {
|
if (!mIsEmbeddingActivityEnabled || !(getActivity() instanceof SettingsHomepageActivity)) {
|
||||||
return super.onCreateAdapter(preferenceScreen);
|
return super.onCreateAdapter(preferenceScreen);
|
||||||
}
|
}
|
||||||
return mHighlightMixin.onCreateAdapter(this, preferenceScreen);
|
return mHighlightMixin.onCreateAdapter(this, preferenceScreen, mScrollNeeded);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -67,10 +67,12 @@ public class HighlightableTopLevelPreferenceAdapter extends PreferenceGroupAdapt
|
|||||||
private SparseArray<PreferenceViewHolder> mViewHolders;
|
private SparseArray<PreferenceViewHolder> mViewHolders;
|
||||||
|
|
||||||
public HighlightableTopLevelPreferenceAdapter(SettingsHomepageActivity homepageActivity,
|
public HighlightableTopLevelPreferenceAdapter(SettingsHomepageActivity homepageActivity,
|
||||||
PreferenceGroup preferenceGroup, RecyclerView recyclerView, String key) {
|
PreferenceGroup preferenceGroup, RecyclerView recyclerView, String key,
|
||||||
|
boolean scrollNeeded) {
|
||||||
super(preferenceGroup);
|
super(preferenceGroup);
|
||||||
mRecyclerView = recyclerView;
|
mRecyclerView = recyclerView;
|
||||||
mHighlightKey = key;
|
mHighlightKey = key;
|
||||||
|
mScrolled = !scrollNeeded;
|
||||||
mViewHolders = new SparseArray<>();
|
mViewHolders = new SparseArray<>();
|
||||||
mContext = preferenceGroup.getContext();
|
mContext = preferenceGroup.getContext();
|
||||||
mHomepageActivity = homepageActivity;
|
mHomepageActivity = homepageActivity;
|
||||||
|
Reference in New Issue
Block a user