Revert "Update database for apps bypassing scoped storage restrictions"
This reverts commit 7448453a6382a49898da03b07811018327a2d0ef.
Reason for revert: b/155320967
Bug: 155320967
Change-Id: Id2084ac6b0f048d972dd2bce256d525b609b1783
(cherry picked from commit 8b26c75eafd4aee344d4c167ae27d611084fdc63)
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index 0188b48..19518d5 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -1745,12 +1745,16 @@
* However, we update database entries for renamed files to keep the database consistent.
*/
private int renameUncheckedForFuse(String oldPath, String newPath) {
- if (new File(oldPath).isFile()) {
- return renameFileUncheckedForFuse(oldPath, newPath);
- } else {
- return renameDirectoryUncheckedForFuse(oldPath, newPath,
- getAllFilesForRenameDirectory(oldPath));
- }
+
+ return renameInLowerFs(oldPath, newPath);
+ // TODO(b/145737191) Legacy apps don't expect FuseDaemon to update database.
+ // Inserting/deleting the database entry might break app functionality.
+ //if (new File(oldPath).isFile()) {
+ // return renameFileUncheckedForFuse(oldPath, newPath);
+ // } else {
+ // return renameDirectoryUncheckedForFuse(oldPath, newPath,
+ // getAllFilesForRenameDirectory(oldPath));
+ // }
}
/**
@@ -6173,9 +6177,11 @@
final String mimeType = MimeUtils.resolveMimeType(new File(path));
if (shouldBypassFuseRestrictions(/*forWrite*/ true, path)) {
+ // TODO(b/145737191) Legacy apps don't expect FuseDaemon to update database.
+ // Inserting/deleting the database entry might break app functionality.
// Ignore insert errors for apps that bypass scoped storage restriction.
- insertFileForFuse(path, Files.getContentUriForPath(path), mimeType,
- /*useData*/ isCallingPackageRequestingLegacy());
+ // insertFileForFuse(path, Files.getContentUriForPath(path), mimeType,
+ // /*useData*/ isCallingPackageRequestingLegacy());
return 0;
}
@@ -6240,11 +6246,14 @@
return OsConstants.ENOENT;
}
- final boolean shouldBypass = shouldBypassFuseRestrictions(/*forWrite*/ true, path);
-
+ if (shouldBypassFuseRestrictions(/*forWrite*/ true, path)) {
+ // TODO(b/145737191) Legacy apps don't expect FuseDaemon to update database.
+ // Inserting/deleting the database entry might break app functionality.
+ return deleteFileUnchecked(path);
+ }
// Legacy apps that made is this far don't have the right storage permission and hence
// are not allowed to access anything other than their external app directory
- if (!shouldBypass && isCallingPackageRequestingLegacy()) {
+ if (isCallingPackageRequestingLegacy()) {
return OsConstants.EPERM;
}
@@ -6258,9 +6267,6 @@
final String[] whereArgs = {sanitizedPath};
if (delete(contentUri, where, whereArgs) == 0) {
- if (shouldBypass) {
- return deleteFileUnchecked(path);
- }
return OsConstants.ENOENT;
} else if (!path.equals(sanitizedPath)) {
// delete() doesn't delete the file in lower file system if sanitized path is
diff --git a/tests/jni/FuseDaemonTest/host/src/com/android/tests/fused/host/FuseDaemonHostTest.java b/tests/jni/FuseDaemonTest/host/src/com/android/tests/fused/host/FuseDaemonHostTest.java
index ef05f13..8177bd0 100644
--- a/tests/jni/FuseDaemonTest/host/src/com/android/tests/fused/host/FuseDaemonHostTest.java
+++ b/tests/jni/FuseDaemonTest/host/src/com/android/tests/fused/host/FuseDaemonHostTest.java
@@ -135,6 +135,7 @@
runDeviceTest("testListFilesFromExternalMediaDirectory");
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testListUnsupportedFileType() throws Exception {
final ITestDevice device = getDevice();
@@ -236,21 +237,25 @@
runDeviceTest("testSystemGalleryAppHasNoFullAccessToAudio");
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testSystemGalleryCanRenameImagesAndVideos() throws Exception {
runDeviceTest("testSystemGalleryCanRenameImagesAndVideos");
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testManageExternalStorageCanCreateFilesAnywhere() throws Exception {
runDeviceTest("testManageExternalStorageCanCreateFilesAnywhere");
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testManageExternalStorageCanDeleteOtherAppsContents() throws Exception {
runDeviceTest("testManageExternalStorageCanDeleteOtherAppsContents");
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testManageExternalStorageCanRenameOtherAppsContents() throws Exception {
runDeviceTest("testManageExternalStorageCanRenameOtherAppsContents");
diff --git a/tests/jni/FuseDaemonTest/host/src/com/android/tests/fused/host/LegacyAccessHostTest.java b/tests/jni/FuseDaemonTest/host/src/com/android/tests/fused/host/LegacyAccessHostTest.java
index fea4362..856b040 100644
--- a/tests/jni/FuseDaemonTest/host/src/com/android/tests/fused/host/LegacyAccessHostTest.java
+++ b/tests/jni/FuseDaemonTest/host/src/com/android/tests/fused/host/LegacyAccessHostTest.java
@@ -164,6 +164,7 @@
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testCanRename_hasRW() throws Exception {
runDeviceTest("testCanRename_hasRW");
@@ -180,6 +181,7 @@
}
}
+
@Test
public void testCantRename_noStoragePermission() throws Exception {
revokePermissions("android.permission.WRITE_EXTERNAL_STORAGE",
@@ -192,11 +194,13 @@
}
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testCanDeleteAllFiles_hasRW() throws Exception {
runDeviceTest("testCanDeleteAllFiles_hasRW");
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testLegacyAppCanOwnAFile_hasW() throws Exception {
runDeviceTest("testLegacyAppCanOwnAFile_hasW");
@@ -212,6 +216,7 @@
runDeviceTest("testRenameDoesntInvalidateUri_hasRW");
}
+
@Test
public void testCanRenameAFileWithNoDBRow_hasRW() throws Exception {
runDeviceTest("testCanRenameAFileWithNoDBRow_hasRW");
diff --git a/tests/jni/FuseDaemonTest/legacy/src/com/android/tests/fused/legacy/LegacyFileAccessTest.java b/tests/jni/FuseDaemonTest/legacy/src/com/android/tests/fused/legacy/LegacyFileAccessTest.java
index 2a5c842..650eba7 100644
--- a/tests/jni/FuseDaemonTest/legacy/src/com/android/tests/fused/legacy/LegacyFileAccessTest.java
+++ b/tests/jni/FuseDaemonTest/legacy/src/com/android/tests/fused/legacy/LegacyFileAccessTest.java
@@ -297,6 +297,7 @@
* Test that rename for legacy app with WRITE_EXTERNAL_STORAGE permission bypasses rename
* restrictions imposed by MediaProvider
*/
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testCanRename_hasRW() throws Exception {
pollForPermission(Manifest.permission.READ_EXTERNAL_STORAGE, /*granted*/ true);
@@ -403,6 +404,7 @@
* Test that legacy app with WRITE_EXTERNAL_STORAGE can delete all files, and corresponding
* database entry is deleted on deleting the file.
*/
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testCanDeleteAllFiles_hasRW() throws Exception {
pollForPermission(Manifest.permission.READ_EXTERNAL_STORAGE, /*granted*/ true);
@@ -440,6 +442,7 @@
* Test that file created by legacy app is inserted to MediaProvider database. And,
* MediaColumns.OWNER_PACKAGE_NAME is updated with calling package's name.
*/
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testLegacyAppCanOwnAFile_hasW() throws Exception {
pollForPermission(Manifest.permission.READ_EXTERNAL_STORAGE, /*granted*/ true);
@@ -498,6 +501,7 @@
} finally {
videoFile.delete();
renamedVideoFile.delete();
+ MediaStore.scanFile(cr, renamedVideoFile);
}
}
@@ -541,6 +545,7 @@
} finally {
imageFile.delete();
temporaryImageFile.delete();
+ MediaStore.scanFile(cr, imageFile);
}
}
@@ -581,6 +586,7 @@
} finally {
imageInNoMediaDir.delete();
renamedImageInDCIM.delete();
+ MediaStore.scanFile(cr, renamedImageInDCIM);
noMediaFile.delete();
}
diff --git a/tests/jni/FuseDaemonTest/src/com/android/tests/fused/FilePathAccessTest.java b/tests/jni/FuseDaemonTest/src/com/android/tests/fused/FilePathAccessTest.java
index 777c78e..01b282f 100644
--- a/tests/jni/FuseDaemonTest/src/com/android/tests/fused/FilePathAccessTest.java
+++ b/tests/jni/FuseDaemonTest/src/com/android/tests/fused/FilePathAccessTest.java
@@ -673,6 +673,7 @@
/**
* Test that app can see files and directories in Android/media.
*/
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testListFilesFromExternalMediaDirectory() throws Exception {
final File videoFile = new File(EXTERNAL_MEDIA_DIR, VIDEO_FILE_NAME);
@@ -705,6 +706,7 @@
/**
* Test that readdir lists unsupported file types in default directories.
*/
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testListUnsupportedFileType() throws Exception {
final File pdfFile = new File(DCIM_DIR, NONMEDIA_FILE_NAME);
@@ -720,8 +722,9 @@
executeShellCommand("touch " + videoFile.getAbsolutePath());
- // We don't insert files to db for files created by shell.
- assertThat(MediaStore.scanFile(getContentResolver(), videoFile)).isNotNull();
+ // ScanFile doesn't insert an empty media file to database. Write some data to ensure
+ // file is inserted into database.
+ executeShellCommand("echo " + STR_DATA1 + " > " + videoFile.getAbsolutePath());
// TEST_APP_A with storage permission should see video file in Music directory.
assertThat(listAs(TEST_APP_A, MUSIC_DIR.getPath())).contains(VIDEO_FILE_NAME);
} finally {
@@ -1244,6 +1247,7 @@
}
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testSystemGalleryCanRenameImagesAndVideos() throws Exception {
final File otherAppVideoFile = new File(DCIM_DIR, "other_" + VIDEO_FILE_NAME);
@@ -1285,7 +1289,7 @@
imageFile.delete();
videoFile.delete();
topLevelVideoFile.delete();
- executeShellCommand("rm " + musicFile.getAbsolutePath());
+ musicFile.delete();
denyAppOpsToUid(Process.myUid(), SYSTEM_GALERY_APPOPS);
}
}
@@ -1530,6 +1534,7 @@
}
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testManageExternalStorageCanCreateFilesAnywhere() throws Exception {
final File topLevelPdf = new File(EXTERNAL_STORAGE_DIR, NONMEDIA_FILE_NAME);
@@ -1570,6 +1575,7 @@
}
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testManageExternalStorageCanDeleteOtherAppsContents() throws Exception {
final File otherAppPdf = new File(DOWNLOAD_DIR, "other" + NONMEDIA_FILE_NAME);
@@ -1602,6 +1608,7 @@
}
}
+ @Ignore("Re-enable as part of b/145737191")
@Test
public void testAccess_file() throws Exception {
pollForPermission(Manifest.permission.READ_EXTERNAL_STORAGE, /*granted*/ true);
@@ -1846,8 +1853,12 @@
executeShellCommand("rm " + otherAppPdfFile2);
otherAppImageFile1.delete();
otherAppImageFile2.delete();
+ MediaStore.scanFile(getContentResolver(), otherAppImageFile1);
+ MediaStore.scanFile(getContentResolver(), otherAppImageFile2);
otherAppVideoFile1.delete();
otherAppVideoFile2.delete();
+ MediaStore.scanFile(getContentResolver(), otherAppVideoFile1);
+ MediaStore.scanFile(getContentResolver(), otherAppVideoFile2);
otherAppPdfFile1.delete();
otherAppPdfFile2.delete();
dirInDcim.delete();