summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2013-10-17 18:59:01 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-10-17 18:59:01 -0700
commit4aac7ec807d122b9bfa004524612dd40af451d7f (patch)
tree69af3b0fd92ecbb7fa6a8266776c5f3ab8254949 /src
parentccb30e4e4bfe3532b2be5a52e47640591a0acfe8 (diff)
parentc68d50954c67d02bbb0dd4ea992ba34f63753c18 (diff)
downloadandroid_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.java2
-rwxr-xr-xsrc/com/android/providers/media/MediaProvider.java16
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