Merge "Fix Storage Settings summary jank"
diff --git a/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java b/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java
index 61e5c84..e682783 100644
--- a/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/TopLevelStoragePreferenceController.java
@@ -17,6 +17,7 @@
 package com.android.settings.deviceinfo;
 
 import android.content.Context;
+import android.os.UserManager;
 import android.os.storage.StorageManager;
 import android.text.format.Formatter;
 
@@ -24,7 +25,9 @@
 import androidx.preference.Preference;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.deviceinfo.storage.StorageCacheHelper;
 import com.android.settingslib.deviceinfo.PrivateStorageInfo;
 import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
 import com.android.settingslib.utils.ThreadUtils;
@@ -59,23 +62,36 @@
 
     @VisibleForTesting
     protected Future refreshSummaryThread(Preference preference) {
+        int userId = Utils.getCurrentUserId(mContext.getSystemService(UserManager.class),
+                /* isWorkProfile */ false);
+        final StorageCacheHelper storageCacheHelper = new StorageCacheHelper(mContext, userId);
+        long cachedUsedSize = storageCacheHelper.retrieveUsedSize();
+        long cachedTotalSize = storageCacheHelper.retrieveCachedSize().totalSize;
+        if (cachedUsedSize != 0 && cachedTotalSize != 0) {
+            preference.setSummary(getSummary(cachedUsedSize, cachedTotalSize));
+        }
+
         return ThreadUtils.postOnBackgroundThread(() -> {
-            final NumberFormat percentageFormat = NumberFormat.getPercentInstance();
             final PrivateStorageInfo info = PrivateStorageInfo.getPrivateStorageInfo(
                     getStorageManagerVolumeProvider());
-            final double privateUsedBytes = info.totalBytes - info.freeBytes;
-
+            storageCacheHelper.cacheUsedSize(info.totalBytes - info.freeBytes);
             ThreadUtils.postOnMainThread(() -> {
-                preference.setSummary(mContext.getString(R.string.storage_summary,
-                        percentageFormat.format(privateUsedBytes / info.totalBytes),
-                        Formatter.formatFileSize(mContext, info.freeBytes)));
+                preference.setSummary(
+                        getSummary(info.totalBytes - info.freeBytes, info.totalBytes));
             });
         });
     }
 
-
     @VisibleForTesting
     protected StorageManagerVolumeProvider getStorageManagerVolumeProvider() {
         return mStorageManagerVolumeProvider;
     }
+
+    private String getSummary(long usedBytes, long totalBytes) {
+        NumberFormat percentageFormat = NumberFormat.getPercentInstance();
+
+        return mContext.getString(R.string.storage_summary,
+                totalBytes == 0L ? "0" : percentageFormat.format(((double) usedBytes) / totalBytes),
+                Formatter.formatFileSize(mContext, totalBytes - usedBytes));
+    }
 }