diff options
author | 2020-05-15 16:19:27 +0000 | |
---|---|---|
committer | 2020-05-15 16:19:27 +0000 | |
commit | 535a6efbf2a9ff54549ce0a78dfca06a9633d435 (patch) | |
tree | 22ccf34a8d6f258bafb59ea7fd941fad21e76c5c | |
parent | e407180fd727318d1aada8f87b314fdb93abb29d (diff) | |
parent | 40f740c760c7b362e096c567a8027f708f88d3e6 (diff) |
Merge "Allow ExternalStorageProvider to access all Android/ dirs" into rvc-dev am: 51f5e20ec1 am: 6a557f65cd am: 77f7ceae07 am: 40f740c760
Change-Id: I1cd41288623e0e09d55cbe413f4d5dfd786254be
-rw-r--r-- | services/core/java/com/android/server/StorageManagerService.java | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index d137e68d09d7..a39b6d937d74 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -121,6 +121,7 @@ import android.os.storage.StorageVolume; import android.os.storage.VolumeInfo; import android.os.storage.VolumeRecord; import android.provider.DeviceConfig; +import android.provider.DocumentsContract; import android.provider.Downloads; import android.provider.MediaStore; import android.provider.Settings; @@ -432,6 +433,8 @@ class StorageManagerService extends IStorageManager.Stub private volatile int mDownloadsAuthorityAppId = -1; + private volatile int mExternalStorageAuthorityAppId = -1; + private volatile int mCurrentUserId = UserHandle.USER_SYSTEM; private final Installer mInstaller; @@ -1924,24 +1927,22 @@ class StorageManagerService extends IStorageManager.Stub mIAppOpsService = IAppOpsService.Stub.asInterface( ServiceManager.getService(Context.APP_OPS_SERVICE)); - ProviderInfo provider = mPmInternal.resolveContentProvider( - MediaStore.AUTHORITY, PackageManager.MATCH_DIRECT_BOOT_AWARE - | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, - UserHandle.getUserId(UserHandle.USER_SYSTEM)); + ProviderInfo provider = getProviderInfo(MediaStore.AUTHORITY); if (provider != null) { mMediaStoreAuthorityAppId = UserHandle.getAppId(provider.applicationInfo.uid); sMediaStoreAuthorityProcessName = provider.applicationInfo.processName; } - provider = mPmInternal.resolveContentProvider( - Downloads.Impl.AUTHORITY, PackageManager.MATCH_DIRECT_BOOT_AWARE - | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, - UserHandle.getUserId(UserHandle.USER_SYSTEM)); - + provider = getProviderInfo(Downloads.Impl.AUTHORITY); if (provider != null) { mDownloadsAuthorityAppId = UserHandle.getAppId(provider.applicationInfo.uid); } + provider = getProviderInfo(DocumentsContract.EXTERNAL_STORAGE_PROVIDER_AUTHORITY); + if (provider != null) { + mExternalStorageAuthorityAppId = UserHandle.getAppId(provider.applicationInfo.uid); + } + if (!mIsFuseEnabled) { try { mIAppOpsService.startWatchingMode(OP_REQUEST_INSTALL_PACKAGES, null, @@ -1952,6 +1953,13 @@ class StorageManagerService extends IStorageManager.Stub } } + private ProviderInfo getProviderInfo(String authority) { + return mPmInternal.resolveContentProvider( + authority, PackageManager.MATCH_DIRECT_BOOT_AWARE + | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, + UserHandle.getUserId(UserHandle.USER_SYSTEM)); + } + private void updateLegacyStorageApps(String packageName, int uid, boolean hasLegacy) { synchronized (mLock) { if (hasLegacy) { @@ -4192,9 +4200,11 @@ class StorageManagerService extends IStorageManager.Stub return Zygote.MOUNT_EXTERNAL_PASS_THROUGH; } - if (mIsFuseEnabled && mDownloadsAuthorityAppId == UserHandle.getAppId(uid)) { + if (mIsFuseEnabled && (mDownloadsAuthorityAppId == UserHandle.getAppId(uid) + || mExternalStorageAuthorityAppId == UserHandle.getAppId(uid))) { // DownloadManager can write in app-private directories on behalf of apps; // give it write access to Android/ + // ExternalStorageProvider can access Android/{data,obb} dirs in managed mode return Zygote.MOUNT_EXTERNAL_ANDROID_WRITABLE; } |