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

Commit b9feeee5 authored by Arc Wang's avatar Arc Wang Committed by Android (Google) Code Review
Browse files

Merge changes from topic "revert-20517233-Cloned User Storage...

Merge changes from topic "revert-20517233-Cloned User Storage Issue-tm-qpr-dev-XJICGTXJHD" into tm-qpr-dev

* changes:
  Revert "Fixing Storage Volume listing for Cloned User."
  Revert "Fixing Storage Volume(s) Retrieval."
parents 99a763bf 4736afef
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -10003,7 +10003,7 @@ package android.os.storage {
    method @WorkerThread public long getAllocatableBytes(@NonNull java.util.UUID, @RequiresPermission int) throws java.io.IOException;
    method @RequiresPermission(android.Manifest.permission.WRITE_MEDIA_STORAGE) public int getExternalStorageMountMode(int, @NonNull String);
    method public static boolean hasIsolatedStorage();
    method @RequiresPermission(android.Manifest.permission.MANAGE_EXTERNAL_STORAGE) public void updateExternalStorageFileQuotaType(@NonNull java.io.File, int) throws java.io.IOException;
    method public void updateExternalStorageFileQuotaType(@NonNull java.io.File, int) throws java.io.IOException;
    field @RequiresPermission(android.Manifest.permission.ALLOCATE_AGGRESSIVE) public static final int FLAG_ALLOCATE_AGGRESSIVE = 1; // 0x1
    field public static final int MOUNT_MODE_EXTERNAL_ANDROID_WRITABLE = 4; // 0x4
    field public static final int MOUNT_MODE_EXTERNAL_DEFAULT = 1; // 0x1
+2 −7
Original line number Diff line number Diff line
@@ -2552,7 +2552,7 @@ public class StorageManager {
     * called on first creation of a new file on external storage, and whenever the
     * media type of the file is updated later.
     *
     * This API requires MANAGE_EXTERNAL_STORAGE permission and typical implementations
     * This API doesn't require any special permissions, though typical implementations
     * will require being called from an SELinux domain that allows setting file attributes
     * related to quota (eg the GID or project ID).
     *
@@ -2571,16 +2571,11 @@ public class StorageManager {
     * @hide
     */
    @SystemApi
    @RequiresPermission(android.Manifest.permission.MANAGE_EXTERNAL_STORAGE)
    public void updateExternalStorageFileQuotaType(@NonNull File path,
            @QuotaType int quotaType) throws IOException {
        long projectId;
        final String filePath = path.getCanonicalPath();
        // MANAGE_EXTERNAL_STORAGE permission is required as FLAG_INCLUDE_SHARED_PROFILE is being
        // set while querying getVolumeList.
        final StorageVolume[] availableVolumes = getVolumeList(mContext.getUserId(),
                FLAG_REAL_STATE | FLAG_INCLUDE_INVISIBLE | FLAG_INCLUDE_SHARED_PROFILE);
        final StorageVolume volume = getStorageVolume(availableVolumes, path);
        final StorageVolume volume = getStorageVolume(path);
        if (volume == null) {
            Log.w(TAG, "Failed to update quota type for " + filePath);
            return;
+9 −14
Original line number Diff line number Diff line
@@ -3813,13 +3813,6 @@ class StorageManagerService extends IStorageManager.Stub
        final boolean includeSharedProfile =
                (flags & StorageManager.FLAG_INCLUDE_SHARED_PROFILE) != 0;

        // When the caller is the app actually hosting external storage, we
        // should never attempt to augment the actual storage volume state,
        // otherwise we risk confusing it with race conditions as users go
        // through various unlocked states
        final boolean callerIsMediaStore = UserHandle.isSameApp(callingUid,
                mMediaStoreAuthorityAppId);

        // Only Apps with MANAGE_EXTERNAL_STORAGE should call the API with includeSharedProfile
        if (includeSharedProfile) {
            try {
@@ -3832,12 +3825,7 @@ class StorageManagerService extends IStorageManager.Stub
                // Checking first entry in packagesFromUid is enough as using "sharedUserId"
                // mechanism is rare and discouraged. Also, Apps that share same UID share the same
                // permissions.
                // Allowing Media Provider is an exception, Media Provider process should be allowed
                // to query users across profiles, even without MANAGE_EXTERNAL_STORAGE access.
                // Note that ordinarily Media provider process has the above permission, but if they
                // are revoked, Storage Volume(s) should still be returned.
                if (!callerIsMediaStore
                        && !mStorageManagerInternal.hasExternalStorageAccess(callingUid,
                if (!mStorageManagerInternal.hasExternalStorageAccess(callingUid,
                        packagesFromUid[0])) {
                    throw new SecurityException("Only File Manager Apps permitted");
                }
@@ -3851,6 +3839,13 @@ class StorageManagerService extends IStorageManager.Stub
        // point
        final boolean systemUserUnlocked = isSystemUnlocked(UserHandle.USER_SYSTEM);

        // When the caller is the app actually hosting external storage, we
        // should never attempt to augment the actual storage volume state,
        // otherwise we risk confusing it with race conditions as users go
        // through various unlocked states
        final boolean callerIsMediaStore = UserHandle.isSameApp(callingUid,
                mMediaStoreAuthorityAppId);

        final boolean userIsDemo;
        final boolean userKeyUnlocked;
        final boolean storagePermission;