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

Commit 373d0176 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Add queryStatsForPackage() API.

This gives developers a way to collect package-level stats, even if
it means we have to use manual calculation for sharedUserId apps.

Also round size of storage devices to nice power-of-two values so we
do a better job of matching retail packaging.

Test: builds, boots
Bug: 35294241
Change-Id: I24946c443bb9dc4b0411a8149a0656702ac1fd24
parent 53d64fc8
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -6882,6 +6882,7 @@ package android.app.usage {
    method public long getFreeBytes(java.lang.String);
    method public long getTotalBytes(java.lang.String);
    method public android.app.usage.ExternalStorageStats queryExternalStatsForUser(java.lang.String, android.os.UserHandle);
    method public android.app.usage.StorageStats queryStatsForPackage(java.lang.String, java.lang.String, android.os.UserHandle);
    method public android.app.usage.StorageStats queryStatsForUid(java.lang.String, int);
    method public android.app.usage.StorageStats queryStatsForUser(java.lang.String, android.os.UserHandle);
  }
+1 −0
Original line number Diff line number Diff line
@@ -7304,6 +7304,7 @@ package android.app.usage {
    method public long getFreeBytes(java.lang.String);
    method public long getTotalBytes(java.lang.String);
    method public android.app.usage.ExternalStorageStats queryExternalStatsForUser(java.lang.String, android.os.UserHandle);
    method public android.app.usage.StorageStats queryStatsForPackage(java.lang.String, java.lang.String, android.os.UserHandle);
    method public android.app.usage.StorageStats queryStatsForUid(java.lang.String, int);
    method public android.app.usage.StorageStats queryStatsForUser(java.lang.String, android.os.UserHandle);
  }
+1 −0
Original line number Diff line number Diff line
@@ -6908,6 +6908,7 @@ package android.app.usage {
    method public long getFreeBytes(java.lang.String);
    method public long getTotalBytes(java.lang.String);
    method public android.app.usage.ExternalStorageStats queryExternalStatsForUser(java.lang.String, android.os.UserHandle);
    method public android.app.usage.StorageStats queryStatsForPackage(java.lang.String, java.lang.String, android.os.UserHandle);
    method public android.app.usage.StorageStats queryStatsForUid(java.lang.String, int);
    method public android.app.usage.StorageStats queryStatsForUser(java.lang.String, android.os.UserHandle);
  }
+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ interface IStorageStatsManager {
    boolean isQuotaSupported(String volumeUuid, String callingPackage);
    long getTotalBytes(String volumeUuid, String callingPackage);
    long getFreeBytes(String volumeUuid, String callingPackage);
    StorageStats queryStatsForPackage(String volumeUuid, String packageName, int userId, String callingPackage);
    StorageStats queryStatsForUid(String volumeUuid, int uid, String callingPackage);
    StorageStats queryStatsForUser(String volumeUuid, int userId, String callingPackage);
    ExternalStorageStats queryExternalStatsForUser(String volumeUuid, int userId, String callingPackage);
+32 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.app.usage;
import android.annotation.WorkerThread;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.os.RemoteException;
import android.os.UserHandle;

@@ -99,6 +100,37 @@ public class StorageStatsManager {
        }
    }

    /**
     * Return storage statistics for a specific package on the requested storage
     * volume.
     * <p>
     * This method may take several seconds to calculate the requested values,
     * so it should only be called from a worker thread.
     * <p class="note">
     * Note: if the requested package uses the {@code android:sharedUserId}
     * manifest feature, this call will be forced into a slower manual
     * calculation path. If possible, consider always using
     * {@link #queryStatsForUid(String, int)}, which is typically faster.
     * </p>
     *
     * @param volumeUuid the UUID of the storage volume you're interested in, or
     *            {@code null} to specify the default internal storage.
     * @param packageName the package name you're interested in.
     * @param user the user you're interested in.
     * @see ApplicationInfo#volumeUuid
     * @see PackageInfo#packageName
     */
    @WorkerThread
    public StorageStats queryStatsForPackage(String volumeUuid, String packageName,
            UserHandle user) {
        try {
            return mService.queryStatsForPackage(volumeUuid, packageName, user.getIdentifier(),
                    mContext.getOpPackageName());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Return storage statistics for a specific UID on the requested storage
     * volume.
Loading