diff options
author | Jeff Sharkey <jsharkey@android.com> | 2015-08-19 14:18:19 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2015-08-19 15:27:28 -0700 |
commit | 72613f7b12d1991d1e8e99a6621b6317132cfdc7 (patch) | |
tree | 4c7092d376dfd10bf9a4a2b18a7116a4480a31ef /src/com/android/providers | |
parent | cba15caa4ee3f5948140d6fde91518f3f263f5b4 (diff) | |
download | android_packages_providers_MediaProvider-72613f7b12d1991d1e8e99a6621b6317132cfdc7.tar.gz android_packages_providers_MediaProvider-72613f7b12d1991d1e8e99a6621b6317132cfdc7.tar.bz2 android_packages_providers_MediaProvider-72613f7b12d1991d1e8e99a6621b6317132cfdc7.zip |
Create default directories on all storage devices.
Previously, MediaProvider would only create default directories once
during the lifetime of a device. However, we're now regularly wiping
storage devices when formatted as internal or portable, so we should
create these directories the first time we encounter each device.
Bug: 23329611
Change-Id: I71f8e9b47ad28c9883925c61f31ae61a070cc9b4
Diffstat (limited to 'src/com/android/providers')
-rwxr-xr-x | src/com/android/providers/media/MediaProvider.java | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java index 271aa807..180fbef0 100755 --- a/src/com/android/providers/media/MediaProvider.java +++ b/src/com/android/providers/media/MediaProvider.java @@ -539,25 +539,33 @@ public class MediaProvider extends ContentProvider { Environment.DIRECTORY_DCIM, }; - // creates default folders (Music, Downloads, etc) - private void createDefaultFolders(DatabaseHelper helper, SQLiteDatabase db) { - // Use a SharedPreference to ensure we only do this once. - // We don't want to annoy the user by recreating the directories - // after she has deleted them. - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - if (prefs.getInt("created_default_folders", 0) == 0) { + /** + * Ensure that default folders are created on mounted primary storage + * devices. We only do this once per volume so we don't annoy the user if + * deleted manually. + */ + private void ensureDefaultFolders(DatabaseHelper helper, SQLiteDatabase db) { + final StorageVolume vol = mStorageManager.getPrimaryVolume(); + final String key; + if (VolumeInfo.ID_EMULATED_INTERNAL.equals(vol.getId())) { + key = "created_default_folders"; + } else { + key = "created_default_folders_" + vol.getUuid(); + } + + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + if (prefs.getInt(key, 0) == 0) { for (String folderName : sDefaultFolderNames) { - File file = Environment.getExternalStoragePublicDirectory(folderName); - if (!file.exists()) { - file.mkdirs(); - insertDirectory(helper, db, file.getAbsolutePath()); + final File folder = new File(vol.getPathFile(), folderName); + if (!folder.exists()) { + folder.mkdirs(); + insertDirectory(helper, db, folder.getAbsolutePath()); } } - SharedPreferences.Editor e = prefs.edit(); - e.clear(); - e.putInt("created_default_folders", 1); - e.commit(); + SharedPreferences.Editor editor = prefs.edit(); + editor.putInt(key, 1); + editor.commit(); } } @@ -5338,13 +5346,17 @@ public class MediaProvider extends ContentProvider { // Update paths to reflect currently mounted volumes updateStoragePaths(); + DatabaseHelper helper = null; synchronized (mDatabases) { - if (mDatabases.get(volume) != null) { // Already attached + helper = mDatabases.get(volume); + if (helper != null) { + if (EXTERNAL_VOLUME.equals(volume)) { + ensureDefaultFolders(helper, helper.getWritableDatabase()); + } return Uri.parse("content://media/" + volume); } Context context = getContext(); - DatabaseHelper helper; if (INTERNAL_VOLUME.equals(volume)) { helper = new DatabaseHelper(context, INTERNAL_DATABASE_NAME, true, false, mObjectRemovedCallback); @@ -5432,9 +5444,6 @@ public class MediaProvider extends ContentProvider { mDatabases.put(volume, helper); if (!helper.mInternal) { - // create default directories (only happens on first boot) - createDefaultFolders(helper, helper.getWritableDatabase()); - // clean up stray album art files: delete every file not in the database File[] files = new File(mExternalStoragePaths[0], ALBUM_THUMB_FOLDER).listFiles(); HashSet<String> fileSet = new HashSet(); @@ -5462,6 +5471,9 @@ public class MediaProvider extends ContentProvider { } if (LOCAL_LOGV) Log.v(TAG, "Attached volume: " + volume); + if (EXTERNAL_VOLUME.equals(volume)) { + ensureDefaultFolders(helper, helper.getWritableDatabase()); + } return Uri.parse("content://media/" + volume); } |