Merge changes Id59f345b,I82224b01 into rvc-dev
* changes:
Allow audio files to be inserted into Audiobooks/
Add missing default dirs to MediaProvider
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index 172aa41..c29e344 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -583,6 +583,8 @@
Environment.DIRECTORY_MOVIES,
Environment.DIRECTORY_DOWNLOADS,
Environment.DIRECTORY_DCIM,
+ Environment.DIRECTORY_AUDIOBOOKS,
+ Environment.DIRECTORY_DOCUMENTS,
};
private static boolean isDefaultDirectoryName(@Nullable String dirName) {
@@ -1909,6 +1911,7 @@
defaultPrimary = Environment.DIRECTORY_MUSIC;
allowedPrimary = Arrays.asList(
Environment.DIRECTORY_ALARMS,
+ Environment.DIRECTORY_AUDIOBOOKS,
Environment.DIRECTORY_MUSIC,
Environment.DIRECTORY_NOTIFICATIONS,
Environment.DIRECTORY_PODCASTS,
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 a17e7b9..a6c8ef7 100644
--- a/tests/jni/FuseDaemonTest/src/com/android/tests/fused/FilePathAccessTest.java
+++ b/tests/jni/FuseDaemonTest/src/com/android/tests/fused/FilePathAccessTest.java
@@ -27,7 +27,6 @@
import static com.android.tests.fused.lib.RedactionTestHelper.getExifMetadataFromRawResource;
import static com.android.tests.fused.lib.TestUtils.assertCanRenameFile;
import static com.android.tests.fused.lib.TestUtils.assertCanRenameDirectory;
-import static com.android.tests.fused.lib.TestUtils.adoptShellPermissionIdentity;
import static com.android.tests.fused.lib.TestUtils.allowAppOpsToUid;
import static com.android.tests.fused.lib.TestUtils.assertCantRenameDirectory;
import static com.android.tests.fused.lib.TestUtils.assertCantRenameFile;
@@ -38,7 +37,6 @@
import static com.android.tests.fused.lib.TestUtils.deleteRecursively;
import static com.android.tests.fused.lib.TestUtils.deleteWithMediaProvider;
import static com.android.tests.fused.lib.TestUtils.denyAppOpsToUid;
-import static com.android.tests.fused.lib.TestUtils.dropShellPermissionIdentity;
import static com.android.tests.fused.lib.TestUtils.executeShellCommand;
import static com.android.tests.fused.lib.TestUtils.getContentResolver;
import static com.android.tests.fused.lib.TestUtils.getFileMimeTypeFromDatabase;
@@ -104,13 +102,22 @@
static final File EXTERNAL_STORAGE_DIR = Environment.getExternalStorageDirectory();
+ // Default top-level directories
+ static final File ALARMS_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_ALARMS);
+ static final File AUDIOBOOKS_DIR = new File(EXTERNAL_STORAGE_DIR,
+ Environment.DIRECTORY_AUDIOBOOKS);
static final File DCIM_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_DCIM);
- static final File PICTURES_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_PICTURES);
- static final File MUSIC_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_MUSIC);
- static final File MOVIES_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_MOVIES);
+ static final File DOCUMENTS_DIR = new File(EXTERNAL_STORAGE_DIR,
+ Environment.DIRECTORY_DOCUMENTS);
static final File DOWNLOAD_DIR = new File(EXTERNAL_STORAGE_DIR,
Environment.DIRECTORY_DOWNLOADS);
+ static final File MUSIC_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_MUSIC);
+ static final File MOVIES_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_MOVIES);
+ static final File NOTIFICATIONS_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_NOTIFICATIONS);
+ static final File PICTURES_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_PICTURES);
static final File PODCASTS_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_PODCASTS);
+ static final File RINGTONES_DIR = new File(EXTERNAL_STORAGE_DIR, Environment.DIRECTORY_RINGTONES);
+
static final File ANDROID_DATA_DIR = new File(EXTERNAL_STORAGE_DIR, "Android/data");
static final File ANDROID_MEDIA_DIR = new File(EXTERNAL_STORAGE_DIR, "Android/media");
static final String TEST_DIRECTORY_NAME = "FilePathAccessTestDirectory";
@@ -118,7 +125,7 @@
static final File EXTERNAL_FILES_DIR = getContext().getExternalFilesDir(null);
static final File EXTERNAL_MEDIA_DIR = getContext().getExternalMediaDirs()[0];
- static final String MUSIC_FILE_NAME = "FilePathAccessTest_file.mp3";
+ static final String AUDIO_FILE_NAME = "FilePathAccessTest_file.mp3";
static final String VIDEO_FILE_NAME = "FilePathAccessTest_file.mp4";
static final String IMAGE_FILE_NAME = "FilePathAccessTest_file.jpg";
static final String NONMEDIA_FILE_NAME = "FilePathAccessTest_file.pdf";
@@ -154,7 +161,7 @@
*/
@Test
public void testTypePathConformity() throws Exception {
- // Only music files can be created in Music
+ // Only audio files can be created in Music
assertThrows(IOException.class, "Operation not permitted", () -> {
new File(MUSIC_DIR, NONMEDIA_FILE_NAME).createNewFile();
});
@@ -169,7 +176,7 @@
new File(MOVIES_DIR, NONMEDIA_FILE_NAME).createNewFile();
});
assertThrows(IOException.class, "Operation not permitted", () -> {
- new File(MOVIES_DIR, MUSIC_FILE_NAME).createNewFile();
+ new File(MOVIES_DIR, AUDIO_FILE_NAME).createNewFile();
});
assertThrows(IOException.class, "Operation not permitted", () -> {
new File(MOVIES_DIR, IMAGE_FILE_NAME).createNewFile();
@@ -179,28 +186,42 @@
new File(DCIM_DIR, NONMEDIA_FILE_NAME).createNewFile();
});
assertThrows(IOException.class, "Operation not permitted", () -> {
- new File(DCIM_DIR, MUSIC_FILE_NAME).createNewFile();
+ new File(DCIM_DIR, AUDIO_FILE_NAME).createNewFile();
});
// Only image and video files can be created in Pictures
assertThrows(IOException.class, "Operation not permitted", () -> {
new File(PICTURES_DIR, NONMEDIA_FILE_NAME).createNewFile();
});
assertThrows(IOException.class, "Operation not permitted", () -> {
- new File(PICTURES_DIR, MUSIC_FILE_NAME).createNewFile();
+ new File(PICTURES_DIR, AUDIO_FILE_NAME).createNewFile();
});
+ assertCanCreateFile(new File(ALARMS_DIR, AUDIO_FILE_NAME));
+ assertCanCreateFile(new File(AUDIOBOOKS_DIR, AUDIO_FILE_NAME));
assertCanCreateFile(new File(DCIM_DIR, IMAGE_FILE_NAME));
- assertCanCreateFile(new File(MUSIC_DIR, MUSIC_FILE_NAME));
- assertCanCreateFile(new File(MOVIES_DIR, VIDEO_FILE_NAME));
+ assertCanCreateFile(new File(DCIM_DIR, VIDEO_FILE_NAME));
+ assertCanCreateFile(new File(DOCUMENTS_DIR, AUDIO_FILE_NAME));
+ assertCanCreateFile(new File(DOCUMENTS_DIR, IMAGE_FILE_NAME));
+ assertCanCreateFile(new File(DOCUMENTS_DIR, NONMEDIA_FILE_NAME));
+ assertCanCreateFile(new File(DOCUMENTS_DIR, VIDEO_FILE_NAME));
+ assertCanCreateFile(new File(DOWNLOAD_DIR, AUDIO_FILE_NAME));
+ assertCanCreateFile(new File(DOWNLOAD_DIR, IMAGE_FILE_NAME));
assertCanCreateFile(new File(DOWNLOAD_DIR, NONMEDIA_FILE_NAME));
+ assertCanCreateFile(new File(DOWNLOAD_DIR, VIDEO_FILE_NAME));
+ assertCanCreateFile(new File(MOVIES_DIR, VIDEO_FILE_NAME));
+ assertCanCreateFile(new File(MUSIC_DIR, AUDIO_FILE_NAME));
+ assertCanCreateFile(new File(NOTIFICATIONS_DIR, AUDIO_FILE_NAME));
+ assertCanCreateFile(new File(PICTURES_DIR, IMAGE_FILE_NAME));
assertCanCreateFile(new File(PICTURES_DIR, VIDEO_FILE_NAME));
+ assertCanCreateFile(new File(PODCASTS_DIR, AUDIO_FILE_NAME));
+ assertCanCreateFile(new File(RINGTONES_DIR, AUDIO_FILE_NAME));
// No file whatsoever can be created in the top level directory
assertThrows(IOException.class, "Operation not permitted", () -> {
new File(EXTERNAL_STORAGE_DIR, NONMEDIA_FILE_NAME).createNewFile();
});
assertThrows(IOException.class, "Operation not permitted", () -> {
- new File(EXTERNAL_STORAGE_DIR, MUSIC_FILE_NAME).createNewFile();
+ new File(EXTERNAL_STORAGE_DIR, AUDIO_FILE_NAME).createNewFile();
});
assertThrows(IOException.class, "Operation not permitted", () -> {
new File(EXTERNAL_STORAGE_DIR, IMAGE_FILE_NAME).createNewFile();
@@ -931,9 +952,9 @@
@Test
public void testSystemGalleryAppHasNoFullAccessToAudio() throws Exception {
- final File otherAppAudioFile = new File(MUSIC_DIR, "other_" + MUSIC_FILE_NAME);
- final File topLevelAudioFile = new File(EXTERNAL_STORAGE_DIR, MUSIC_FILE_NAME);
- final File audioInAnObviouslyWrongPlace = new File(PICTURES_DIR, MUSIC_FILE_NAME);
+ final File otherAppAudioFile = new File(MUSIC_DIR, "other_" + AUDIO_FILE_NAME);
+ final File topLevelAudioFile = new File(EXTERNAL_STORAGE_DIR, AUDIO_FILE_NAME);
+ final File audioInAnObviouslyWrongPlace = new File(PICTURES_DIR, AUDIO_FILE_NAME);
try {
installApp(TEST_APP_A, false);
@@ -980,7 +1001,7 @@
final File imageFile = new File(PICTURES_DIR, IMAGE_FILE_NAME);
final File videoFile = new File(PICTURES_DIR, VIDEO_FILE_NAME);
final File topLevelVideoFile = new File(EXTERNAL_STORAGE_DIR, VIDEO_FILE_NAME);
- final File musicFile = new File(MUSIC_DIR, MUSIC_FILE_NAME);
+ final File musicFile = new File(MUSIC_DIR, AUDIO_FILE_NAME);
try {
installApp(TEST_APP_A, false);
allowAppOpsToUid(Process.myUid(), SYSTEM_GALERY_APPOPS);
@@ -1262,7 +1283,7 @@
@Test
public void testManageExternalStorageCanCreateFilesAnywhere() throws Exception {
final File topLevelPdf = new File(EXTERNAL_STORAGE_DIR, NONMEDIA_FILE_NAME);
- final File musicFileInMovies = new File(MOVIES_DIR, MUSIC_FILE_NAME);
+ final File musicFileInMovies = new File(MOVIES_DIR, AUDIO_FILE_NAME);
final File imageFileInDcim = new File(DCIM_DIR, IMAGE_FILE_NAME);
try {
allowAppOpsToUid(Process.myUid(), OPSTR_MANAGE_EXTERNAL_STORAGE);
@@ -1304,7 +1325,7 @@
public void testManageExternalStorageCanDeleteOtherAppsContents() throws Exception {
final File otherAppPdf = new File(DOWNLOAD_DIR, "other" + NONMEDIA_FILE_NAME);
final File otherAppImage = new File(DCIM_DIR, "other" + IMAGE_FILE_NAME);
- final File otherAppMusic = new File(MUSIC_DIR, "other" + MUSIC_FILE_NAME);
+ final File otherAppMusic = new File(MUSIC_DIR, "other" + AUDIO_FILE_NAME);
try {
installApp(TEST_APP_A, false);
@@ -1339,7 +1360,7 @@
final File pdf = new File(DOWNLOAD_DIR, NONMEDIA_FILE_NAME);
final File pdfInObviouslyWrongPlace = new File(PICTURES_DIR, NONMEDIA_FILE_NAME);
final File topLevelPdf = new File(EXTERNAL_STORAGE_DIR, NONMEDIA_FILE_NAME);
- final File musicFile = new File(MUSIC_DIR, MUSIC_FILE_NAME);
+ final File musicFile = new File(MUSIC_DIR, AUDIO_FILE_NAME);
try {
installApp(TEST_APP_A, false);
@@ -1398,7 +1419,7 @@
public void testManageExternalStorageQueryOtherAppsFile() throws Exception {
final File otherAppPdf = new File(DOWNLOAD_DIR, "other" + NONMEDIA_FILE_NAME);
final File otherAppImg = new File(DCIM_DIR, "other" + IMAGE_FILE_NAME);
- final File otherAppMusic = new File(MUSIC_DIR, "other" + MUSIC_FILE_NAME);
+ final File otherAppMusic = new File(MUSIC_DIR, "other" + AUDIO_FILE_NAME);
try {
installApp(TEST_APP_A, false);
assertCreateFilesAs(TEST_APP_A, otherAppImg, otherAppMusic, otherAppPdf);
@@ -1421,7 +1442,7 @@
public void testQueryOtherAppsFiles() throws Exception {
final File otherAppPdf = new File(DOWNLOAD_DIR, "other" + NONMEDIA_FILE_NAME);
final File otherAppImg = new File(DCIM_DIR, "other" + IMAGE_FILE_NAME);
- final File otherAppMusic = new File(MUSIC_DIR, "other" + MUSIC_FILE_NAME);
+ final File otherAppMusic = new File(MUSIC_DIR, "other" + AUDIO_FILE_NAME);
try {
installApp(TEST_APP_A, false);
assertCreateFilesAs(TEST_APP_A, otherAppImg, otherAppMusic, otherAppPdf);
@@ -1441,7 +1462,7 @@
public void testSystemGalleryQueryOtherAppsFiles() throws Exception {
final File otherAppPdf = new File(DOWNLOAD_DIR, "other" + NONMEDIA_FILE_NAME);
final File otherAppImg = new File(DCIM_DIR, "other" + IMAGE_FILE_NAME);
- final File otherAppMusic = new File(MUSIC_DIR, "other" + MUSIC_FILE_NAME);
+ final File otherAppMusic = new File(MUSIC_DIR, "other" + AUDIO_FILE_NAME);
try {
installApp(TEST_APP_A, false);
assertCreateFilesAs(TEST_APP_A, otherAppImg, otherAppMusic, otherAppPdf);