Make OP_NO_ISOLATED_STORAGE accessible via public API

If OP_NO_ISOLATED_STORAGE app-op is granted it gives apps
legacy-app's access. Update public API for apps to check the
state of legacy external storage access isExternalStorageLegacy()
to respect OP_NO_ISOLATED_STORAGE appop.

Bug: 172934418
Test: android.scopedstorage.cts.device.ScopedStorageDeviceTest#testDefaultNoIsolateStorageFlag
Test: atest CtsScopedStorageHostTest
Change-Id: I5cc2dfabedac57fe4183a586549c979145abcbfb
This commit is contained in:
Abhijeet Kaur
2021-02-03 14:24:06 +00:00
parent 1afc2cdb46
commit 01b5acc4b3

View File

@@ -1339,8 +1339,17 @@ public class Environment {
}
final AppOpsManager appOps = context.getSystemService(AppOpsManager.class);
return appOps.checkOpNoThrow(AppOpsManager.OP_LEGACY_STORAGE,
uid, context.getOpPackageName()) == AppOpsManager.MODE_ALLOWED;
final String opPackageName = context.getOpPackageName();
if (appOps.noteOpNoThrow(AppOpsManager.OP_LEGACY_STORAGE, uid,
opPackageName) == AppOpsManager.MODE_ALLOWED) {
return true;
}
// Legacy external storage access is granted to instrumentations invoked with
// "--no-isolated-storage" flag.
return appOps.noteOpNoThrow(AppOpsManager.OP_NO_ISOLATED_STORAGE, uid,
opPackageName) == AppOpsManager.MODE_ALLOWED;
}
private static boolean isScopedStorageEnforced(boolean defaultScopedStorage,