diff options
author | Jeff Sharkey <jsharkey@android.com> | 2013-10-17 18:59:01 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2013-10-17 18:59:01 -0700 |
commit | 4aac7ec807d122b9bfa004524612dd40af451d7f (patch) | |
tree | 69af3b0fd92ecbb7fa6a8266776c5f3ab8254949 /src | |
parent | ccb30e4e4bfe3532b2be5a52e47640591a0acfe8 (diff) | |
parent | c68d50954c67d02bbb0dd4ea992ba34f63753c18 (diff) | |
download | android_packages_providers_MediaProvider-4aac7ec807d122b9bfa004524612dd40af451d7f.tar.gz android_packages_providers_MediaProvider-4aac7ec807d122b9bfa004524612dd40af451d7f.tar.bz2 android_packages_providers_MediaProvider-4aac7ec807d122b9bfa004524612dd40af451d7f.zip |
am c68d5095: am 0677854f: Merge changes Ie35da00b,I08b8367a into klp-dev
* commit 'c68d50954c67d02bbb0dd4ea992ba34f63753c18':
Avoid NPE when checking for empty volume.
Get FAT volume ID through vold.
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/providers/media/MediaDocumentsProvider.java | 2 | ||||
-rwxr-xr-x | src/com/android/providers/media/MediaProvider.java | 16 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/com/android/providers/media/MediaDocumentsProvider.java b/src/com/android/providers/media/MediaDocumentsProvider.java index cb8cc2fa..a887a83f 100644 --- a/src/com/android/providers/media/MediaDocumentsProvider.java +++ b/src/com/android/providers/media/MediaDocumentsProvider.java @@ -476,7 +476,7 @@ public class MediaDocumentsProvider extends DocumentsProvider { try { cursor = resolver.query(uri, new String[] { BaseColumns._ID }, null, null, null); - return (cursor.getCount() == 0); + return (cursor == null) || (cursor.getCount() == 0); } finally { IoUtils.closeQuietly(cursor); Binder.restoreCallingIdentity(token); diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java index 769dd851..723e628b 100755 --- a/src/com/android/providers/media/MediaProvider.java +++ b/src/com/android/providers/media/MediaProvider.java @@ -60,7 +60,6 @@ import android.net.Uri; import android.os.Binder; import android.os.Bundle; import android.os.Environment; -import android.os.FileUtils; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; @@ -137,6 +136,8 @@ public class MediaProvider extends ContentProvider { } } + private StorageManager mStorageManager; + // In memory cache of path<->id mappings, to speed up inserts during media scan HashMap<String, Long> mDirectoryCache = new HashMap<String, Long>(); @@ -549,6 +550,8 @@ public class MediaProvider extends ContentProvider { public boolean onCreate() { final Context context = getContext(); + mStorageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE); + sArtistAlbumsMap.put(MediaStore.Audio.Albums._ID, "audio.album_id AS " + MediaStore.Audio.Albums._ID); sArtistAlbumsMap.put(MediaStore.Audio.Albums.ALBUM, "album"); @@ -5239,16 +5242,15 @@ public class MediaProvider extends ContentProvider { false, mObjectRemovedCallback); } else if (EXTERNAL_VOLUME.equals(volume)) { if (Environment.isExternalStorageRemovable()) { - String path = mExternalStoragePaths[0]; - int volumeID = FileUtils.getFatVolumeId(path); - if (LOCAL_LOGV) Log.v(TAG, path + " volume ID: " + volumeID); + final StorageVolume actualVolume = mStorageManager.getPrimaryVolume(); + final int volumeId = actualVolume.getFatVolumeId(); // Must check for failure! // If the volume is not (yet) mounted, this will create a new // external-ffffffff.db database instead of the one we expect. Then, if // android.process.media is later killed and respawned, the real external // database will be attached, containing stale records, or worse, be empty. - if (volumeID == -1) { + if (volumeId == -1) { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { @@ -5267,10 +5269,10 @@ public class MediaProvider extends ContentProvider { } // generate database name based on volume ID - String dbName = "external-" + Integer.toHexString(volumeID) + ".db"; + String dbName = "external-" + Integer.toHexString(volumeId) + ".db"; helper = new DatabaseHelper(context, dbName, false, false, mObjectRemovedCallback); - mVolumeId = volumeID; + mVolumeId = volumeId; } else { // external database name should be EXTERNAL_DATABASE_NAME // however earlier releases used the external-XXXXXXXX.db naming |