Correct used size of Storage Settings.
Since StorageManager rounded the totalBytes of device storage but
they don't do that rounding for freeBytes.
So in some cases the freeBytes can be greater than totalBytes.
We propose to get totalBytes of device storage directly to calculate
correct privateUsedBytes.
Test: robotest
Bug: 281955532
Change-Id: I4f137c20e7c2f54f4e037d50e81b3176edc1a83a
(cherry picked from commit e52320e755
)
This commit is contained in:
@@ -63,6 +63,7 @@ import android.os.BatteryManager;
|
|||||||
import android.os.Binder;
|
import android.os.Binder;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Environment;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.INetworkManagementService;
|
import android.os.INetworkManagementService;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
@@ -97,7 +98,6 @@ import android.widget.TabWidget;
|
|||||||
import androidx.annotation.ColorInt;
|
import androidx.annotation.ColorInt;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.StringRes;
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.core.graphics.drawable.IconCompat;
|
import androidx.core.graphics.drawable.IconCompat;
|
||||||
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
|
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
|
||||||
@@ -1295,4 +1295,15 @@ public final class Utils extends com.android.settingslib.Utils {
|
|||||||
com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser);
|
com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser);
|
||||||
return dreamsSupported && (!dreamsOnlyEnabledForDockUser || canCurrentUserDream(context));
|
return dreamsSupported && (!dreamsOnlyEnabledForDockUser || canCurrentUserDream(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get private total size directly.
|
||||||
|
* Referred from StorageManager
|
||||||
|
*/
|
||||||
|
public static long getPrimaryStorageSize() {
|
||||||
|
// TODO(b/288103116): remove this method once support by StorageManager.
|
||||||
|
return Environment.getDataDirectory().getTotalSpace()
|
||||||
|
+ Environment.getRootDirectory().getTotalSpace();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -211,7 +211,9 @@ public class StorageCategoryFragment extends DashboardFragment
|
|||||||
|
|
||||||
setLoading(false /* loading */, false /* animate */);
|
setLoading(false /* loading */, false /* animate */);
|
||||||
|
|
||||||
final long privateUsedBytes = mStorageInfo.totalBytes - mStorageInfo.freeBytes;
|
// TODO(b/288103116): replace with new API to get TotalBytes before rounding
|
||||||
|
// once support by StorageManager.
|
||||||
|
final long privateUsedBytes = Utils.getPrimaryStorageSize() - mStorageInfo.freeBytes;
|
||||||
mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo());
|
mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo());
|
||||||
mPreferenceController.setUsedSize(privateUsedBytes);
|
mPreferenceController.setUsedSize(privateUsedBytes);
|
||||||
mPreferenceController.setTotalSize(mStorageInfo.totalBytes);
|
mPreferenceController.setTotalSize(mStorageInfo.totalBytes);
|
||||||
|
@@ -387,7 +387,9 @@ public class StorageDashboardFragment extends DashboardFragment
|
|||||||
|
|
||||||
setLoading(false /* loading */, false /* animate */);
|
setLoading(false /* loading */, false /* animate */);
|
||||||
|
|
||||||
final long privateUsedBytes = mStorageInfo.totalBytes - mStorageInfo.freeBytes;
|
// TODO(b/288103116): replace with new API to get TotalBytes before rounding
|
||||||
|
// once support by StorageManager.
|
||||||
|
final long privateUsedBytes = Utils.getPrimaryStorageSize() - mStorageInfo.freeBytes;
|
||||||
mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo());
|
mPreferenceController.setVolume(mSelectedStorageEntry.getVolumeInfo());
|
||||||
mPreferenceController.setUsedSize(privateUsedBytes);
|
mPreferenceController.setUsedSize(privateUsedBytes);
|
||||||
mPreferenceController.setTotalSize(mStorageInfo.totalBytes);
|
mPreferenceController.setTotalSize(mStorageInfo.totalBytes);
|
||||||
|
@@ -74,10 +74,14 @@ public class TopLevelStoragePreferenceController extends BasePreferenceControlle
|
|||||||
return ThreadUtils.postOnBackgroundThread(() -> {
|
return ThreadUtils.postOnBackgroundThread(() -> {
|
||||||
final PrivateStorageInfo info = PrivateStorageInfo.getPrivateStorageInfo(
|
final PrivateStorageInfo info = PrivateStorageInfo.getPrivateStorageInfo(
|
||||||
getStorageManagerVolumeProvider());
|
getStorageManagerVolumeProvider());
|
||||||
storageCacheHelper.cacheUsedSize(info.totalBytes - info.freeBytes);
|
|
||||||
|
// TODO(b/288103116): replace with new API to get TotalBytes before rounding
|
||||||
|
// once support by StorageManager.
|
||||||
|
long usedBytes = Utils.getPrimaryStorageSize() - info.freeBytes;
|
||||||
|
storageCacheHelper.cacheUsedSize(usedBytes);
|
||||||
ThreadUtils.postOnMainThread(() -> {
|
ThreadUtils.postOnMainThread(() -> {
|
||||||
preference.setSummary(
|
preference.setSummary(
|
||||||
getSummary(info.totalBytes - info.freeBytes, info.totalBytes));
|
getSummary(usedBytes, info.totalBytes));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,7 @@ import androidx.preference.Preference;
|
|||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settingslib.utils.ThreadUtils;
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
import com.android.settingslib.widget.UsageProgressBarPreference;
|
import com.android.settingslib.widget.UsageProgressBarPreference;
|
||||||
@@ -92,7 +93,9 @@ public class StorageUsageProgressBarPreferenceController extends BasePreferenceC
|
|||||||
if (mStorageEntry.isPrivate()) {
|
if (mStorageEntry.isPrivate()) {
|
||||||
// StorageStatsManager can only query private storages.
|
// StorageStatsManager can only query private storages.
|
||||||
mTotalBytes = mStorageStatsManager.getTotalBytes(mStorageEntry.getFsUuid());
|
mTotalBytes = mStorageStatsManager.getTotalBytes(mStorageEntry.getFsUuid());
|
||||||
mUsedBytes = mTotalBytes
|
// TODO(b/288103116): replace with new API to get TotalBytes before rounding
|
||||||
|
// once support by StorageManager.
|
||||||
|
mUsedBytes = Utils.getPrimaryStorageSize()
|
||||||
- mStorageStatsManager.getFreeBytes(mStorageEntry.getFsUuid());
|
- mStorageStatsManager.getFreeBytes(mStorageEntry.getFsUuid());
|
||||||
} else {
|
} else {
|
||||||
final File rootFile = mStorageEntry.getPath();
|
final File rootFile = mStorageEntry.getPath();
|
||||||
|
Reference in New Issue
Block a user