Merge changes Ie35da00b,I08b8367a into klp-dev
* changes:
Avoid NPE when checking for empty volume.
Get FAT volume ID through vold.
diff --git a/src/com/android/providers/media/MediaDocumentsProvider.java b/src/com/android/providers/media/MediaDocumentsProvider.java
index cb8cc2f..a887a83 100644
--- a/src/com/android/providers/media/MediaDocumentsProvider.java
+++ b/src/com/android/providers/media/MediaDocumentsProvider.java
@@ -476,7 +476,7 @@
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 3e03ae6..1cac381 100755
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -60,7 +60,6 @@
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 @@
}
}
+ 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>();
@@ -546,6 +547,8 @@
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");
@@ -5225,16 +5228,15 @@
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)) {
@@ -5253,10 +5255,10 @@
}
// 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