Merge "Cache summary text to avoid flickering" into tm-dev
diff --git a/src/com/android/settings/location/TopLevelLocationPreferenceController.java b/src/com/android/settings/location/TopLevelLocationPreferenceController.java
index ec58a34..5effe6c 100644
--- a/src/com/android/settings/location/TopLevelLocationPreferenceController.java
+++ b/src/com/android/settings/location/TopLevelLocationPreferenceController.java
@@ -31,9 +31,9 @@
private static final IntentFilter INTENT_FILTER_LOCATION_MODE_CHANGED =
new IntentFilter(LocationManager.MODE_CHANGED_ACTION);
private final LocationManager mLocationManager;
- /** Total number of apps that has location permission. */
- private int mNumTotal = -1;
private int mNumTotalLoading = 0;
+ /** Summary text. */
+ private static String sSummary = null;
private BroadcastReceiver mReceiver;
private Preference mPreference;
private AtomicInteger loadingInProgress = new AtomicInteger(0);
@@ -51,12 +51,11 @@
@Override
public CharSequence getSummary() {
if (mLocationManager.isLocationEnabled()) {
- if (mNumTotal == -1) {
- return mContext.getString(R.string.location_settings_loading_app_permission_stats);
+ if (sSummary == null) {
+ sSummary = mContext.getString(
+ R.string.location_settings_loading_app_permission_stats);
}
- return mContext.getResources().getQuantityString(
- R.plurals.location_settings_summary_location_on,
- mNumTotal, mNumTotal);
+ return sSummary;
} else {
return mContext.getString(R.string.location_settings_summary_location_off);
}
@@ -64,7 +63,8 @@
@VisibleForTesting
void setLocationAppCount(int numApps) {
- mNumTotal = numApps;
+ sSummary = mContext.getResources().getQuantityString(
+ R.plurals.location_settings_summary_location_on, numApps, numApps);
refreshSummary(mPreference);
}
diff --git a/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java
index 68e7f88..f0bc705 100644
--- a/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/TopLevelLocationPreferenceControllerTest.java
@@ -56,31 +56,41 @@
}
@Test
- public void getSummary_whenLocationIsOn_shouldShowLoadingString() {
+ public void getSummary_whenLocationIsOn_shouldPreservePreviousText() {
+ final int locationAppCount = 5;
+ // Retrieve summary text once.
+ mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
+ mController.setLocationAppCount(locationAppCount);
+ mController.getSummary();
+ // Turn off location.
+ mLocationManager.setLocationEnabledForUser(false, android.os.Process.myUserHandle());
+ // Turn on location again and check if the previous summary text is still cached.
mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
assertThat(mController.getSummary()).isEqualTo(
- mContext.getString(R.string.location_settings_loading_app_permission_stats));
+ mContext.getResources().getQuantityString(
+ R.plurals.location_settings_summary_location_on, locationAppCount,
+ locationAppCount));
}
@Test
public void getSummary_whenLocationAppCountIsOne_shouldShowSingularString() {
- final int LOCATION_APP_COUNT = 1;
+ final int locationAppCount = 1;
mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
- mController.setLocationAppCount(LOCATION_APP_COUNT);
+ mController.setLocationAppCount(locationAppCount);
assertThat(mController.getSummary()).isEqualTo(
mContext.getResources().getQuantityString(
R.plurals.location_settings_summary_location_on,
- LOCATION_APP_COUNT, LOCATION_APP_COUNT));
+ locationAppCount, locationAppCount));
}
@Test
public void getSummary_whenLocationAppCountIsGreaterThanOne_shouldShowPluralString() {
- final int LOCATION_APP_COUNT = 5;
+ final int locationAppCount = 5;
mLocationManager.setLocationEnabledForUser(true, android.os.Process.myUserHandle());
- mController.setLocationAppCount(LOCATION_APP_COUNT);
+ mController.setLocationAppCount(locationAppCount);
assertThat(mController.getSummary()).isEqualTo(
mContext.getResources().getQuantityString(
R.plurals.location_settings_summary_location_on,
- LOCATION_APP_COUNT, LOCATION_APP_COUNT));
+ locationAppCount, locationAppCount));
}
}
\ No newline at end of file