Merge "Handle media transcoding enqueue failures" into sc-dev
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index e13d874..5fd69ed 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -1300,28 +1300,14 @@
UserHandle user1 = UserHandle.of(userId1);
UserHandle user2 = UserHandle.of(userId2);
- // Need to create system package context here as the clone profile user doesn't run
- // a MediaProvider instance of its own, and hence we can't use
- // createContextAsUser which uses the current MediaProvider module package.
- final Context userContext1 = getContext().createPackageContextAsUser("system", 0,
- user1);
- boolean isMediaSharedWithParent1 = userContext1.getSystemService(
- UserManager.class).isMediaSharedWithParent();
- final Context userContext2 = getContext().createPackageContextAsUser("system", 0,
- user2);
- boolean isMediaSharedWithParent2 = userContext2.getSystemService(
- UserManager.class).isMediaSharedWithParent();
-
- // Clone profiles share media with the parent user
- if (SdkLevel.isAtLeastS() && (isMediaSharedWithParent1
- || isMediaSharedWithParent2)) {
- return mUserManager.isSameProfileGroup(user1, user2);
+ if (SdkLevel.isAtLeastS() && (mUserCache.userSharesMediaWithParent(user1)
+ || mUserCache.userSharesMediaWithParent(user2))) {
+ return true;
}
Method isAppCloneUserPair = StorageManager.class.getMethod("isAppCloneUserPair",
int.class, int.class);
return (Boolean) isAppCloneUserPair.invoke(mStorageManager, userId1, userId2);
- } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException |
- NameNotFoundException e) {
+ } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
Log.w(TAG, "isAppCloneUserPair failed. Users: " + userId1 + " and " + userId2);
return false;
}
diff --git a/tests/src/com/android/providers/media/util/PermissionUtilsTest.java b/tests/src/com/android/providers/media/util/PermissionUtilsTest.java
index 7facf05..c434bd2 100644
--- a/tests/src/com/android/providers/media/util/PermissionUtilsTest.java
+++ b/tests/src/com/android/providers/media/util/PermissionUtilsTest.java
@@ -89,14 +89,9 @@
private static final TestApp LEGACY_TEST_APP = new TestApp("LegacyTestApp",
"com.android.providers.media.testapp.legacy", 1, false,
"LegacyMediaProviderTestApp.apk");
- private static final Map<String, Integer> pidMap = new HashMap<>();
- @BeforeClass
- public static void startTestApps() throws Exception {
- startTestApp(TEST_APP_WITH_STORAGE_PERMS);
- startTestApp(TEST_APP_WITHOUT_PERMS);
- startTestApp(LEGACY_TEST_APP);
- }
+ // Permission checks are based on uid, so we can pass -1 pid and avoid starting the test apps.
+ private static final int TEST_APP_PID = -1;
@Test
public void testConstructor() {
@@ -149,25 +144,24 @@
public void testDefaultPermissionsOnTestAppWithStoragePerms() throws Exception {
String packageName = TEST_APP_WITH_STORAGE_PERMS.getPackageName();
int testAppUid = getContext().getPackageManager().getPackageUid(packageName, 0);
- int testAppPid = pidMap.get(packageName);
adoptShellPermission(UPDATE_APP_OPS_STATS);
try {
- assertThat(checkPermissionSelf(getContext(), testAppPid, testAppUid)).isFalse();
- assertThat(checkPermissionShell(getContext(), testAppPid, testAppUid)).isFalse();
+ assertThat(checkPermissionSelf(getContext(), TEST_APP_PID, testAppUid)).isFalse();
+ assertThat(checkPermissionShell(getContext(), TEST_APP_PID, testAppUid)).isFalse();
assertThat(
checkIsLegacyStorageGranted(getContext(), testAppUid, packageName,
null)).isFalse();
assertThat(
- checkPermissionInstallPackages(getContext(), testAppPid, testAppUid,
+ checkPermissionInstallPackages(getContext(), TEST_APP_PID, testAppUid,
packageName, null)).isFalse();
assertThat(
- checkPermissionAccessMtp(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionAccessMtp(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
assertThat(
- checkPermissionWriteStorage(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionWriteStorage(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isTrue();
- checkReadPermissions(testAppPid, testAppUid, packageName, true);
+ checkReadPermissions(TEST_APP_PID, testAppUid, packageName, true);
} finally {
dropShellPermission();
}
@@ -177,36 +171,37 @@
public void testDefaultPermissionsOnTestAppWithoutPerms() throws Exception {
String packageName = TEST_APP_WITHOUT_PERMS.getPackageName();
int testAppUid = getContext().getPackageManager().getPackageUid(packageName, 0);
- int testAppPid = pidMap.get(packageName);
adoptShellPermission(UPDATE_APP_OPS_STATS);
try {
- assertThat(checkPermissionSelf(getContext(), testAppPid, testAppUid)).isFalse();
- assertThat(checkPermissionShell(getContext(), testAppPid, testAppUid)).isFalse();
+ assertThat(checkPermissionSelf(getContext(), TEST_APP_PID, testAppUid)).isFalse();
+ assertThat(checkPermissionShell(getContext(), TEST_APP_PID, testAppUid)).isFalse();
assertThat(
- checkPermissionManager(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionManager(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
- assertThat(checkPermissionManageMedia(getContext(), testAppPid, testAppUid, packageName,
- null)).isFalse();
+ assertThat(
+ checkPermissionManageMedia(
+ getContext(), TEST_APP_PID, testAppUid, packageName, null))
+ .isFalse();
- assertThat(checkPermissionAccessMediaLocation(getContext(), testAppPid, testAppUid,
+ assertThat(checkPermissionAccessMediaLocation(getContext(), TEST_APP_PID, testAppUid,
packageName, null)).isFalse();
assertThat(
checkIsLegacyStorageGranted(getContext(), testAppUid, packageName,
null)).isFalse();
assertThat(
- checkPermissionInstallPackages(getContext(), testAppPid, testAppUid,
+ checkPermissionInstallPackages(getContext(), TEST_APP_PID, testAppUid,
packageName,
null)).isFalse();
assertThat(
- checkPermissionAccessMtp(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionAccessMtp(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
assertThat(
- checkPermissionWriteStorage(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionWriteStorage(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
- checkReadPermissions(testAppPid, testAppUid, packageName, false);
+ checkReadPermissions(TEST_APP_PID, testAppUid, packageName, false);
} finally {
dropShellPermission();
}
@@ -216,35 +211,36 @@
public void testDefaultPermissionsOnLegacyTestApp() throws Exception {
String packageName = LEGACY_TEST_APP.getPackageName();
int testAppUid = getContext().getPackageManager().getPackageUid(packageName, 0);
- int testAppPid = pidMap.get(packageName);
adoptShellPermission(UPDATE_APP_OPS_STATS);
try {
- assertThat(checkPermissionSelf(getContext(), testAppPid, testAppUid)).isFalse();
- assertThat(checkPermissionShell(getContext(), testAppPid, testAppUid)).isFalse();
+ assertThat(checkPermissionSelf(getContext(), TEST_APP_PID, testAppUid)).isFalse();
+ assertThat(checkPermissionShell(getContext(), TEST_APP_PID, testAppUid)).isFalse();
assertThat(
- checkPermissionManager(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionManager(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
- assertThat(checkPermissionManageMedia(getContext(), testAppPid, testAppUid, packageName,
- null)).isFalse();
+ assertThat(
+ checkPermissionManageMedia(
+ getContext(), TEST_APP_PID, testAppUid, packageName, null))
+ .isFalse();
- assertThat(checkPermissionAccessMediaLocation(getContext(), testAppPid, testAppUid,
+ assertThat(checkPermissionAccessMediaLocation(getContext(), TEST_APP_PID, testAppUid,
packageName, null)).isTrue();
assertThat(
checkIsLegacyStorageGranted(getContext(), testAppUid, packageName,
null)).isTrue();
assertThat(
- checkPermissionInstallPackages(getContext(), testAppPid, testAppUid,
+ checkPermissionInstallPackages(getContext(), TEST_APP_PID, testAppUid,
packageName, null)).isFalse();
assertThat(
- checkPermissionAccessMtp(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionAccessMtp(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
assertThat(
- checkPermissionWriteStorage(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionWriteStorage(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
- checkReadPermissions(testAppPid, testAppUid, packageName, true);
+ checkReadPermissions(TEST_APP_PID, testAppUid, packageName, true);
} finally {
dropShellPermission();
}
@@ -254,19 +250,18 @@
public void testManageExternalStoragePermissionsOnTestApp() throws Exception {
final String packageName = TEST_APP_WITH_STORAGE_PERMS.getPackageName();
final int testAppUid = getContext().getPackageManager().getPackageUid(packageName, 0);
- final int testAppPid = pidMap.get(packageName);
final String op = AppOpsManager.permissionToOp(MANAGE_EXTERNAL_STORAGE);
adoptShellPermission(UPDATE_APP_OPS_STATS, MANAGE_APP_OPS_MODES);
try {
modifyAppOp(testAppUid, op, AppOpsManager.MODE_ERRORED);
- assertThat(checkPermissionManager(getContext(), testAppPid, testAppUid, packageName,
+ assertThat(checkPermissionManager(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
modifyAppOp(testAppUid, op, AppOpsManager.MODE_ALLOWED);
- assertThat(checkPermissionManager(getContext(), testAppPid, testAppUid, packageName,
+ assertThat(checkPermissionManager(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isTrue();
} finally {
dropShellPermission();
@@ -278,20 +273,23 @@
public void testManageMediaPermissionsOnTestApp() throws Exception {
final String packageName = TEST_APP_WITH_STORAGE_PERMS.getPackageName();
final int testAppUid = getContext().getPackageManager().getPackageUid(packageName, 0);
- final int testAppPid = pidMap.get(packageName);
final String op = AppOpsManager.permissionToOp(MANAGE_MEDIA);
adoptShellPermission(UPDATE_APP_OPS_STATS, MANAGE_APP_OPS_MODES);
try {
modifyAppOp(testAppUid, op, AppOpsManager.MODE_ERRORED);
- assertThat(checkPermissionManageMedia(getContext(), testAppPid, testAppUid, packageName,
- null)).isFalse();
+ assertThat(
+ checkPermissionManageMedia(
+ getContext(), TEST_APP_PID, testAppUid, packageName, null))
+ .isFalse();
modifyAppOp(testAppUid, op, AppOpsManager.MODE_ALLOWED);
- assertThat(checkPermissionManageMedia(getContext(), testAppPid, testAppUid, packageName,
- null)).isTrue();
+ assertThat(
+ checkPermissionManageMedia(
+ getContext(), TEST_APP_PID, testAppUid, packageName, null))
+ .isTrue();
} finally {
dropShellPermission();
}
@@ -301,23 +299,22 @@
public void testSystemGalleryPermissionsOnTestApp() throws Exception {
String packageName = TEST_APP_WITH_STORAGE_PERMS.getPackageName();
int testAppUid = getContext().getPackageManager().getPackageUid(packageName, 0);
- int testAppPid = pidMap.get(packageName);
adoptShellPermission(UPDATE_APP_OPS_STATS, MANAGE_APP_OPS_MODES);
try {
- checkPermissionsForGallery(testAppUid, testAppPid, packageName, false);
+ checkPermissionsForGallery(testAppUid, TEST_APP_PID, packageName, false);
final String[] SYSTEM_GALERY_APPOPS =
{OPSTR_WRITE_MEDIA_IMAGES, OPSTR_WRITE_MEDIA_VIDEO};
for (String op : SYSTEM_GALERY_APPOPS) {
modifyAppOp(testAppUid, op, AppOpsManager.MODE_ALLOWED);
}
- checkPermissionsForGallery(testAppUid, testAppPid, packageName, true);
+ checkPermissionsForGallery(testAppUid, TEST_APP_PID, packageName, true);
for (String op : SYSTEM_GALERY_APPOPS) {
modifyAppOp(testAppUid, op, AppOpsManager.MODE_ERRORED);
}
- checkPermissionsForGallery(testAppUid, testAppPid, packageName, false);
+ checkPermissionsForGallery(testAppUid, TEST_APP_PID, packageName, false);
} finally {
dropShellPermission();
}
@@ -353,22 +350,21 @@
final String packageName = TEST_APP_WITH_STORAGE_PERMS.getPackageName();
int testAppUid = getContext().getPackageManager().getPackageUid(
packageName, 0);
- int testAppPid = pidMap.get(packageName);
adoptShellPermission(UPDATE_APP_OPS_STATS, MANAGE_APP_OPS_MODES);
try {
assertThat(
- checkPermissionReadVideo(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionReadVideo(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isTrue();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_VIDEO, AppOpsManager.MODE_ERRORED);
assertThat(
- checkPermissionReadVideo(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionReadVideo(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_VIDEO, AppOpsManager.MODE_ALLOWED);
assertThat(
- checkPermissionReadVideo(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionReadVideo(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isTrue();
} finally {
dropShellPermission();
@@ -380,22 +376,21 @@
final String packageName = TEST_APP_WITH_STORAGE_PERMS.getPackageName();
int testAppUid = getContext().getPackageManager().getPackageUid(
packageName, 0);
- int testAppPid = pidMap.get(packageName);
adoptShellPermission(UPDATE_APP_OPS_STATS, MANAGE_APP_OPS_MODES);
try {
assertThat(
- checkPermissionWriteAudio(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionWriteAudio(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
modifyAppOp(testAppUid, OPSTR_WRITE_MEDIA_AUDIO, AppOpsManager.MODE_ALLOWED);
assertThat(
- checkPermissionWriteAudio(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionWriteAudio(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isTrue();
modifyAppOp(testAppUid, OPSTR_WRITE_MEDIA_AUDIO, AppOpsManager.MODE_ERRORED);
assertThat(
- checkPermissionWriteAudio(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionWriteAudio(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
} finally {
dropShellPermission();
@@ -407,22 +402,21 @@
final String packageName = TEST_APP_WITH_STORAGE_PERMS.getPackageName();
int testAppUid = getContext().getPackageManager().getPackageUid(
packageName, 0);
- int testAppPid = pidMap.get(packageName);
adoptShellPermission(UPDATE_APP_OPS_STATS, MANAGE_APP_OPS_MODES);
try {
assertThat(
- checkPermissionReadAudio(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionReadAudio(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isTrue();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_AUDIO, AppOpsManager.MODE_ERRORED);
assertThat(
- checkPermissionReadAudio(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionReadAudio(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_AUDIO, AppOpsManager.MODE_ALLOWED);
assertThat(
- checkPermissionReadAudio(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionReadAudio(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isTrue();
} finally {
dropShellPermission();
@@ -433,22 +427,21 @@
public void testReadImagesOnTestApp() throws Exception {
final String packageName = TEST_APP_WITH_STORAGE_PERMS.getPackageName();
int testAppUid = getContext().getPackageManager().getPackageUid(packageName, 0);
- int testAppPid = pidMap.get(packageName);
adoptShellPermission(UPDATE_APP_OPS_STATS, MANAGE_APP_OPS_MODES);
try {
assertThat(
- checkPermissionReadImages(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionReadImages(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isTrue();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_IMAGES, AppOpsManager.MODE_ERRORED);
assertThat(
- checkPermissionReadImages(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionReadImages(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isFalse();
modifyAppOp(testAppUid, OPSTR_READ_MEDIA_IMAGES, AppOpsManager.MODE_ALLOWED);
assertThat(
- checkPermissionReadImages(getContext(), testAppPid, testAppUid, packageName,
+ checkPermissionReadImages(getContext(), TEST_APP_PID, testAppUid, packageName,
null)).isTrue();
} finally {
dropShellPermission();
@@ -477,23 +470,10 @@
checkAppOpRequestInstallPackagesForSharedUid(getContext(), testAppUid,
packageName, null)).isFalse();
} finally {
- // App gets killed when we try to give it OPSTR_REQUEST_INSTALL_PACKAGES. Restart the
- // app so it doesn't affect other tests.
- startTestApp(TEST_APP_WITH_STORAGE_PERMS);
dropShellPermission();
}
}
- static private void startTestApp(TestApp testApp) throws Exception {
- Intent intent = new Intent(Intent.ACTION_MAIN);
- intent.setPackage(testApp.getPackageName());
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addCategory(Intent.CATEGORY_LAUNCHER);
- intent.putExtra(QUERY_TYPE, RUN_INFINITE_ACTIVITY);
- getContext().startActivity(intent);
- pidMap.put(testApp.getPackageName(), getPid(testApp.getPackageName()));
- }
-
static private void modifyAppOp(int uid, String op, int mode) {
getContext().getSystemService(AppOpsManager.class).setUidMode(op, uid, mode);
}
@@ -506,7 +486,9 @@
checkPermissionWriteImages(getContext(), pid, uid, packageName, null));
assertEquals(expected,
checkPermissionWriteVideo(getContext(), pid, uid, packageName, null));
- assertThat(checkPermissionWriteAudio(getContext(), pid, uid, packageName, null)).isFalse();
+ assertThat(
+ checkPermissionWriteAudio(getContext(), pid, uid, packageName, null))
+ .isFalse();
}
static private void checkReadPermissions(int pid, int uid, String packageName,