Merge "Allow volume paths from both users when verifying file columns." into sc-dev
diff --git a/apex/Android.bp b/apex/Android.bp
index a5e9942..cb6da5f 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -17,7 +17,7 @@
apex_defaults {
name: "com.android.mediaprovider-defaults",
- java_libs: ["framework-mediaprovider"],
+ bootclasspath_fragments: ["com.android.mediaprovider-bootclasspath-fragment"],
key: "com.android.mediaprovider.key",
certificate: ":com.android.mediaprovider.certificate",
file_contexts: ":com.android.mediaprovider-file_contexts",
@@ -45,3 +45,10 @@
"framework-mediaprovider",
],
}
+
+// Encapsulate the contributions made by the com.android.mediaprovider to the bootclasspath.
+bootclasspath_fragment {
+ name: "com.android.mediaprovider-bootclasspath-fragment",
+ contents: ["framework-mediaprovider"],
+ apex_available: ["com.android.mediaprovider"],
+}
diff --git a/apex/apex_manifest.json b/apex/apex_manifest.json
index 6d8da53..d87ce8d 100644
--- a/apex/apex_manifest.json
+++ b/apex/apex_manifest.json
@@ -1,4 +1,4 @@
{
"name": "com.android.mediaprovider",
- "version": 309999900
+ "version": 309999910
}
diff --git a/jni/FuseDaemon.cpp b/jni/FuseDaemon.cpp
index a482e01..833e9c6 100755
--- a/jni/FuseDaemon.cpp
+++ b/jni/FuseDaemon.cpp
@@ -749,13 +749,8 @@
ATRACE_CALL();
struct fuse* fuse = get_fuse(req);
- if (mode) {
- fuse_reply_err(req, EOPNOTSUPP);
- return;
- }
-
handle* h = reinterpret_cast<handle*>(fi->fh);
- auto err = posix_fallocate(h->fd, offset, length);
+ auto err = fallocate(h->fd, mode, offset, length);
fuse_reply_err(req, err);
}
diff --git a/src/com/android/providers/media/DatabaseHelper.java b/src/com/android/providers/media/DatabaseHelper.java
index f853150..7bcdf62 100644
--- a/src/com/android/providers/media/DatabaseHelper.java
+++ b/src/com/android/providers/media/DatabaseHelper.java
@@ -26,7 +26,6 @@
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
@@ -62,7 +61,6 @@
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
-import com.android.modules.utils.build.SdkLevel;
import com.android.providers.media.playlist.Playlist;
import com.android.providers.media.util.BackgroundThread;
import com.android.providers.media.util.DatabaseUtils;
@@ -106,8 +104,6 @@
*/
public static final String CURRENT_GENERATION_CLAUSE = "SELECT generation FROM local_metadata";
- static final String PREF_DB_FROM_VERSION = "db_from_version";
-
private static final int NOTIFY_BATCH_SIZE = 256;
final Context mContext;
@@ -359,8 +355,6 @@
updateDatabase(db, oldV, newV);
} finally {
mSchemaLock.writeLock().unlock();
- SharedPreferences prefs = mContext.getSharedPreferences(TAG, Context.MODE_PRIVATE);
- prefs.edit().putInt(PREF_DB_FROM_VERSION, oldV).commit();
}
}
@@ -1412,7 +1406,8 @@
private static void updateAddRecording(SQLiteDatabase db, boolean internal) {
db.execSQL("ALTER TABLE files ADD COLUMN is_recording INTEGER DEFAULT 0;");
- updateRecordingForSUpdate(db, internal);
+ // We add the column is_recording, rescan all music files
+ db.execSQL("UPDATE files SET date_modified=0 WHERE is_music=1;");
}
private static void updateAddRedactedUriId(SQLiteDatabase db) {
@@ -1567,7 +1562,6 @@
UserHandle.myUserId()));
}
-
private static void recomputeDataValues(SQLiteDatabase db, boolean internal) {
try (Cursor c = db.query("files", new String[] { FileColumns._ID, FileColumns.DATA },
null, null, null, null, null, null)) {
@@ -1619,13 +1613,6 @@
}
}
- static void updateRecordingForSUpdate(SQLiteDatabase db, boolean internal) {
- if (SdkLevel.isAtLeastS()) {
- // Rescan all music files to update is_recording type
- db.execSQL("UPDATE files SET date_modified=0 WHERE is_music=1;");
- }
- }
-
static final int VERSION_J = 509;
static final int VERSION_K = 700;
static final int VERSION_L = 700;
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index 283d5a1..c369257 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -1312,28 +1312,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;
}
@@ -3070,6 +3056,7 @@
Environment.DIRECTORY_MUSIC,
Environment.DIRECTORY_NOTIFICATIONS,
Environment.DIRECTORY_PODCASTS,
+ FileUtils.DIRECTORY_RECORDINGS,
Environment.DIRECTORY_RINGTONES);
}
break;
diff --git a/src/com/android/providers/media/MediaUpgradeReceiver.java b/src/com/android/providers/media/MediaUpgradeReceiver.java
index 320e1c2..abb326a 100644
--- a/src/com/android/providers/media/MediaUpgradeReceiver.java
+++ b/src/com/android/providers/media/MediaUpgradeReceiver.java
@@ -24,7 +24,6 @@
import android.util.Log;
import com.android.providers.media.util.ForegroundThread;
-import com.android.providers.media.util.Logging;
import com.android.providers.media.util.Metrics;
import java.io.File;
@@ -43,8 +42,6 @@
static final String TAG = "MediaUpgradeReceiver";
static final String PREF_DB_VERSION = "db_version";
- private static final int UPDATE_RECORDING_VERSION = 1205;
-
@Override
public void onReceive(Context context, Intent intent) {
// We are now running with the system up, but no apps started,
@@ -67,10 +64,6 @@
prefs.edit().putInt(PREF_DB_VERSION, dbVersion).commit();
try {
- // Lookup the last from_version when upgrade database
- prefs = context.getSharedPreferences(Logging.TAG, Context.MODE_PRIVATE);
- final int fromVersion = prefs.getInt(DatabaseHelper.PREF_DB_FROM_VERSION, 0);
-
File dbDir = context.getDatabasePath("foo").getParentFile();
String[] files = dbDir.list();
if (files == null) return;
@@ -86,13 +79,7 @@
MediaProvider.MIGRATION_LISTENER, null);
helper.runWithTransaction((db) -> {
// Perform just enough to force database upgrade
- final int version = db.getVersion();
- // update the is_recording column for R OS upgraded to S OS
- if (fromVersion >= UPDATE_RECORDING_VERSION
- && prefVersion < DatabaseHelper.VERSION_S) {
- helper.updateRecordingForSUpdate(db, helper.mInternal);
- }
- return version;
+ return db.getVersion();
});
helper.close();
} catch (Throwable t) {
diff --git a/src/com/android/providers/media/TranscodeHelper.java b/src/com/android/providers/media/TranscodeHelper.java
index e1ffbca..9a74ddc 100644
--- a/src/com/android/providers/media/TranscodeHelper.java
+++ b/src/com/android/providers/media/TranscodeHelper.java
@@ -437,8 +437,8 @@
CountDownLatch latch = null;
long startTime = SystemClock.elapsedRealtime();
boolean result = false;
- int errorCode = TranscodingSession.ERROR_NONE;
- int failureReason = TRANSCODING_DATA__FAILURE_CAUSE__CAUSE_UNKNOWN;
+ int errorCode = TranscodingSession.ERROR_SERVICE_DIED;
+ int failureReason = TRANSCODING_DATA__FAILURE_CAUSE__TRANSCODING_SERVICE_ERROR;
try {
synchronized (mLock) {
@@ -481,6 +481,16 @@
transcodingSession.cancel();
}
} finally {
+ if (storageSession == null) {
+ Log.w(TAG, "Failed to create a StorageTranscodingSession");
+ // We were unable to even queue the request. Which means the media service is
+ // in a very bad state
+ reportTranscodingResult(uid, result, errorCode, failureReason,
+ SystemClock.elapsedRealtime() - startTime, reason,
+ src, dst, false /* hasAnr */);
+ return false;
+ }
+
storageSession.notifyFinished(failureReason, errorCode);
if (errorCode == TranscodingSession.ERROR_DROPPED_BY_SERVICE) {
// If the transcoding service drops a request for a uid the uid will be denied
diff --git a/src/com/android/providers/media/scan/ModernMediaScanner.java b/src/com/android/providers/media/scan/ModernMediaScanner.java
index 9a38945..8927bfa 100644
--- a/src/com/android/providers/media/scan/ModernMediaScanner.java
+++ b/src/com/android/providers/media/scan/ModernMediaScanner.java
@@ -1226,6 +1226,8 @@
sAudioTypes.put(Environment.DIRECTORY_MUSIC, AudioColumns.IS_MUSIC);
if (SdkLevel.isAtLeastS()) {
sAudioTypes.put(Environment.DIRECTORY_RECORDINGS, AudioColumns.IS_RECORDING);
+ } else {
+ sAudioTypes.put(FileUtils.DIRECTORY_RECORDINGS, AudioColumns.IS_RECORDING);
}
}
diff --git a/src/com/android/providers/media/util/FileUtils.java b/src/com/android/providers/media/util/FileUtils.java
index cf7c23a..47e1559 100644
--- a/src/com/android/providers/media/util/FileUtils.java
+++ b/src/com/android/providers/media/util/FileUtils.java
@@ -964,6 +964,12 @@
public static final Pattern PATTERN_OBB_OR_CHILD_PATH = Pattern.compile(
"(?i)^/storage/[^/]+/(?:[0-9]+/)?Android/(?:obb)(/?.*)");
+ /**
+ * The recordings directory. This is used for R OS. For S OS or later,
+ * we use {@link Environment#DIRECTORY_RECORDINGS} directly.
+ */
+ public static final String DIRECTORY_RECORDINGS = "Recordings";
+
@VisibleForTesting
public static final String[] DEFAULT_FOLDER_NAMES;
static {
@@ -995,6 +1001,7 @@
Environment.DIRECTORY_DCIM,
Environment.DIRECTORY_DOCUMENTS,
Environment.DIRECTORY_AUDIOBOOKS,
+ DIRECTORY_RECORDINGS,
};
}
}
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,