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