Merge "Fixing Storage Volume(s) Retrieval." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
7527f61d86
@@ -3813,6 +3813,13 @@ 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 {
|
||||
@@ -3825,8 +3832,13 @@ 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.
|
||||
if (!mStorageManagerInternal.hasExternalStorageAccess(callingUid,
|
||||
packagesFromUid[0])) {
|
||||
// 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,
|
||||
packagesFromUid[0])) {
|
||||
throw new SecurityException("Only File Manager Apps permitted");
|
||||
}
|
||||
} catch (RemoteException re) {
|
||||
@@ -3839,13 +3851,6 @@ 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;
|
||||
|
||||
Reference in New Issue
Block a user