Improve the cold start performance
The performance regressed since the previous change that hide the
homepage view from using View.GONE to View.INVISIBLE
This change only initializes the list views in the invisible homepage
view to prevent a scroll flicker when scrolling is needed.
Test: manual
Bug: 206555277
Bug: 205823792
Change-Id: I8f173b135cfa1d27a1362d5fa8e3f338e2428ad2
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index e25e1f5..d5e8235 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -167,10 +167,13 @@
mCategoryMixin = new CategoryMixin(this);
getLifecycle().addObserver(mCategoryMixin);
+ final String highlightMenuKey = getHighlightMenuKey();
// Only allow features on high ram devices.
if (!getSystemService(ActivityManager.class).isLowRamDevice()) {
initAvatarView();
- showSuggestionFragment();
+ final boolean scrollNeeded = mIsEmbeddingActivityEnabled
+ && !TextUtils.equals(getString(DEFAULT_HIGHLIGHT_MENU_KEY), highlightMenuKey);
+ showSuggestionFragment(scrollNeeded);
if (FeatureFlagUtils.isEnabled(this, FeatureFlags.CONTEXTUAL_HOME)) {
showFragment(() -> new ContextualCardsFragment(), R.id.contextual_cards_content);
}
@@ -178,7 +181,7 @@
mMainFragment = showFragment(() -> {
final TopLevelSettings fragment = new TopLevelSettings();
fragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
- getHighlightMenuKey());
+ highlightMenuKey);
return fragment;
}, R.id.main_content);
@@ -265,7 +268,7 @@
findViewById(R.id.settings_homepage_container).setBackgroundColor(color);
}
- private void showSuggestionFragment() {
+ private void showSuggestionFragment(boolean scrollNeeded) {
final Class<? extends Fragment> fragmentClass = FeatureFactory.getFactory(this)
.getSuggestionFeatureProvider(this).getContextualSuggestionFragment();
if (fragmentClass == null) {
@@ -275,8 +278,9 @@
mSuggestionView = findViewById(R.id.suggestion_content);
mTwoPaneSuggestionView = findViewById(R.id.two_pane_suggestion_content);
mHomepageView = findViewById(R.id.settings_homepage_container);
- // Hide the homepage for preparing the suggestion.
- mHomepageView.setVisibility(View.INVISIBLE);
+ // Hide the homepage for preparing the suggestion. If scrolling is needed, the list views
+ // should be initialized in the invisible homepage view to prevent a scroll flicker.
+ mHomepageView.setVisibility(scrollNeeded ? View.INVISIBLE : View.GONE);
// Schedule a timer to show the homepage and hide the suggestion on timeout.
mHomepageView.postDelayed(() -> showHomepageWithSuggestion(false),
HOMEPAGE_LOADING_TIMEOUT_MS);