Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e52320e7 authored by Edgar Wang's avatar Edgar Wang
Browse files

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
parent 0df79b1c
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ import android.os.BatteryManager;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.IBinder;
import android.os.INetworkManagementService;
import android.os.RemoteException;
@@ -97,7 +98,6 @@ import android.widget.TabWidget;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.annotation.VisibleForTesting;
import androidx.core.graphics.drawable.IconCompat;
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
@@ -1309,4 +1309,15 @@ public final class Utils extends com.android.settingslib.Utils {
                com.android.internal.R.bool.config_dreamsOnlyEnabledForDockUser);
        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();
    }

}
+3 −1
Original line number Diff line number Diff line
@@ -211,7 +211,9 @@ public class StorageCategoryFragment extends DashboardFragment

        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.setUsedSize(privateUsedBytes);
        mPreferenceController.setTotalSize(mStorageInfo.totalBytes);
+3 −1
Original line number Diff line number Diff line
@@ -387,7 +387,9 @@ public class StorageDashboardFragment extends DashboardFragment

        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.setUsedSize(privateUsedBytes);
        mPreferenceController.setTotalSize(mStorageInfo.totalBytes);
+6 −2
Original line number Diff line number Diff line
@@ -74,10 +74,14 @@ public class TopLevelStoragePreferenceController extends BasePreferenceControlle
        return ThreadUtils.postOnBackgroundThread(() -> {
            final PrivateStorageInfo info = PrivateStorageInfo.getPrivateStorageInfo(
                    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(() -> {
                preference.setSummary(
                        getSummary(info.totalBytes - info.freeBytes, info.totalBytes));
                        getSummary(usedBytes, info.totalBytes));
            });
        });
    }
+4 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.widget.UsageProgressBarPreference;
@@ -92,7 +93,9 @@ public class StorageUsageProgressBarPreferenceController extends BasePreferenceC
                if (mStorageEntry.isPrivate()) {
                    // StorageStatsManager can only query private storages.
                    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());
                } else {
                    final File rootFile = mStorageEntry.getPath();