From 320d60f0ad275d555e0b68d15160f12c166b3a8e Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 20 Mar 2017 17:32:32 -0700 Subject: [PATCH] Fix some animation janks during code start. - Create a   summary placeholder for preferences with summary. - Create a totally empty summary for prefernces without summary. - For all dynamic prefs that has *no* SummaryLoader, add meta to set their summary to empty. - Other dynamic perfs has   as initial summary. By doing this, all dynamic pref's height is fixed and will not change as we update summaries, thus eliminating jank during cold start in each page. Also removed DashboardAlias for notification preference and default apps as a side fix. Change-Id: Iec98b7ffef4e920bf573b2244ad04124c1c5d154 Fix: 36414481 Test: make RunSettingsRoboTests --- AndroidManifest.xml | 62 +++++++++---------- res/values/strings.xml | 6 +- res/xml/network_and_internet.xml | 17 ++--- res/xml/sound_settings.xml | 6 +- .../DashboardFeatureProviderImpl.java | 7 ++- .../DashboardFeatureProviderImplTest.java | 27 ++++++++ 6 files changed, 79 insertions(+), 46 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index a6d066ba6e6..7b5ea52f035 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -564,11 +564,13 @@ + android:value="com.android.settings.category.ia.system"/> + + android:value="com.android.settings.language.LanguageAndInputSettings"/> + android:value="true"/> + + + + + + + + android:exported="true" + android:label="@string/app_default_dashboard_title" + android:icon="@drawable/ic_adb"> + + + + + + android:value="true" /> @@ -2921,6 +2943,8 @@ + @@ -3001,34 +3025,6 @@ android:resource="@string/support_summary"/> - - - - - - - - - - - - - - - - - - Display Sound - -   + +   + + Volumes diff --git a/res/xml/network_and_internet.xml b/res/xml/network_and_internet.xml index d7a6355f908..7feffcaa32c 100644 --- a/res/xml/network_and_internet.xml +++ b/res/xml/network_and_internet.xml @@ -23,6 +23,7 @@ android:fragment="com.android.settings.wifi.WifiSettings" android:key="toggle_wifi" android:title="@string/wifi_settings" + android:summary="@string/summary_placeholder" android:icon="@drawable/ic_settings_wireless" android:order="-30"> - - @@ -67,6 +62,7 @@ android:title="@string/vpn_settings_title" android:icon="@drawable/ic_vpn_key" android:order="0" + android:summary="@string/summary_placeholder" settings:userRestriction="no_config_vpn" settings:useAdminDisabledSummary="true"/> @@ -77,6 +73,13 @@ settings:userRestriction="no_config_mobile_networks" settings:useAdminDisabledSummary="true"/> + + @@ -75,7 +75,7 @@ android:key="notification_ringtone" android:title="@string/notification_ringtone_title" android:dialogTitle="@string/notification_ringtone_title" - android:summary="@string/ringtone_summary" + android:summary="@string/summary_placeholder" android:ringtoneType="notification" /> @@ -83,7 +83,7 @@ android:key="alarm_ringtone" android:title="@string/alarm_ringtone_title" android:dialogTitle="@string/alarm_ringtone_title" - android:summary="@string/ringtone_summary" + android:summary="@string/summary_placeholder" android:persistent="false" android:ringtoneType="alarm" /> diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 722f9e112c0..78d612236e9 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -28,6 +28,7 @@ import android.text.TextUtils; import android.util.Log; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.overlay.FeatureFactory; @@ -124,7 +125,11 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { } else { pref.setKey(getDashboardKeyForTile(tile)); } - pref.setSummary(tile.summary); + if (tile.summary != null) { + pref.setSummary(tile.summary); + } else { + pref.setSummary(R.string.summary_placeholder); + } if (tile.icon != null) { pref.setIcon(tile.icon.loadDrawable(activity)); } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java index 4eea05e7117..28bed3e2fb6 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java @@ -28,6 +28,7 @@ import android.os.UserManager; import android.support.v7.preference.Preference; import com.android.internal.logging.nano.MetricsProto; +import com.android.settings.R; import com.android.settings.SettingsActivity; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; @@ -216,6 +217,32 @@ public class DashboardFeatureProviderImplTest { assertThat(preference.getOrder()).isEqualTo(Preference.DEFAULT_ORDER); } + @Test + public void bindPreference_noSummary_shouldSetSummaryToPlaceholder() { + final Preference preference = new Preference(RuntimeEnvironment.application); + final Tile tile = new Tile(); + tile.intent = new Intent(); + tile.intent.setComponent(new ComponentName("pkg", "class")); + mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN, + preference, tile, null /*key */, Preference.DEFAULT_ORDER); + + assertThat(preference.getSummary()) + .isEqualTo(RuntimeEnvironment.application.getString(R.string.summary_placeholder)); + } + + @Test + public void bindPreference_hasSummary_shouldSetSummary() { + final Preference preference = new Preference(RuntimeEnvironment.application); + final Tile tile = new Tile(); + tile.summary = "test"; + tile.intent = new Intent(); + tile.intent.setComponent(new ComponentName("pkg", "class")); + mImpl.bindPreferenceToTile(mActivity, MetricsProto.MetricsEvent.VIEW_UNKNOWN, + preference, tile, null /*key */, Preference.DEFAULT_ORDER); + + assertThat(preference.getSummary()).isEqualTo(tile.summary); + } + @Test public void bindPreference_withNullKeyTileKey_shouldUseTileKey() { final Preference preference = new Preference(RuntimeEnvironment.application);