diff options
Diffstat (limited to 'media/java/android/media/MediaScanner.java')
-rw-r--r-- | media/java/android/media/MediaScanner.java | 50 |
1 files changed, 29 insertions, 21 deletions
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 7768a61..619e71c 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -303,6 +303,7 @@ public class MediaScanner private int mNativeContext; private Context mContext; + private String mPackageName; private IContentProvider mMediaProvider; private Uri mAudioUri; private Uri mVideoUri; @@ -388,6 +389,7 @@ public class MediaScanner public MediaScanner(Context c) { native_setup(); mContext = c; + mPackageName = c.getPackageName(); mBitmapOptions.inSampleSize = 1; mBitmapOptions.inJustDecodeBounds = true; @@ -961,7 +963,7 @@ public class MediaScanner if (inserter != null) { inserter.flushAll(); } - result = mMediaProvider.insert(tableUri, values); + result = mMediaProvider.insert(mPackageName, tableUri, values); } else if (entry.mFormat == MtpConstants.FORMAT_ASSOCIATION) { inserter.insertwithPriority(tableUri, values); } else { @@ -993,7 +995,7 @@ public class MediaScanner } values.put(FileColumns.MEDIA_TYPE, mediaType); } - mMediaProvider.update(result, values, null, null); + mMediaProvider.update(mPackageName, result, values, null, null); } if(needToSetSettings) { @@ -1082,7 +1084,8 @@ public class MediaScanner // filesystem is mounted and unmounted while the scanner is running). Uri.Builder builder = mFilesUri.buildUpon(); builder.appendQueryParameter(MediaStore.PARAM_DELETE_DATA, "false"); - MediaBulkDeleter deleter = new MediaBulkDeleter(mMediaProvider, builder.build()); + MediaBulkDeleter deleter = new MediaBulkDeleter(mMediaProvider, mPackageName, + builder.build()); // Build the list of files from the content provider try { @@ -1101,7 +1104,7 @@ public class MediaScanner c.close(); c = null; } - c = mMediaProvider.query(limitUri, FILES_PRESCAN_PROJECTION, + c = mMediaProvider.query(mPackageName, limitUri, FILES_PRESCAN_PROJECTION, where, selectionArgs, MediaStore.Files.FileColumns._ID, null); if (c == null) { break; @@ -1142,7 +1145,8 @@ public class MediaScanner if (path.toLowerCase(Locale.US).endsWith("/.nomedia")) { deleter.flush(); String parent = new File(path).getParent(); - mMediaProvider.call(MediaStore.UNHIDE_CALL, parent, null); + mMediaProvider.call(mPackageName, MediaStore.UNHIDE_CALL, + parent, null); } } } @@ -1160,7 +1164,7 @@ public class MediaScanner // compute original size of images mOriginalCount = 0; - c = mMediaProvider.query(mImagesUri, ID_PROJECTION, null, null, null, null); + c = mMediaProvider.query(mPackageName, mImagesUri, ID_PROJECTION, null, null, null, null); if (c != null) { mOriginalCount = c.getCount(); c.close(); @@ -1191,6 +1195,7 @@ public class MediaScanner try { Cursor c = mMediaProvider.query( + mPackageName, mThumbsUri, new String [] { "_data" }, null, @@ -1225,11 +1230,13 @@ public class MediaScanner static class MediaBulkDeleter { StringBuilder whereClause = new StringBuilder(); ArrayList<String> whereArgs = new ArrayList<String>(100); - IContentProvider mProvider; - Uri mBaseUri; + final IContentProvider mProvider; + final String mPackageName; + final Uri mBaseUri; - public MediaBulkDeleter(IContentProvider provider, Uri baseUri) { + public MediaBulkDeleter(IContentProvider provider, String packageName, Uri baseUri) { mProvider = provider; + mPackageName = packageName; mBaseUri = baseUri; } @@ -1248,7 +1255,8 @@ public class MediaScanner if (size > 0) { String [] foo = new String [size]; foo = whereArgs.toArray(foo); - int numrows = mProvider.delete(mBaseUri, MediaStore.MediaColumns._ID + " IN (" + + int numrows = mProvider.delete(mPackageName, mBaseUri, + MediaStore.MediaColumns._ID + " IN (" + whereClause.toString() + ")", foo); //Log.i("@@@@@@@@@", "rows deleted: " + numrows); whereClause.setLength(0); @@ -1301,7 +1309,7 @@ public class MediaScanner if (ENABLE_BULK_INSERTS) { // create MediaInserter for bulk inserts - mMediaInserter = new MediaInserter(mMediaProvider, 500); + mMediaInserter = new MediaInserter(mMediaProvider, mPackageName, 500); } for (int i = 0; i < directories.length; i++) { @@ -1433,8 +1441,8 @@ public class MediaScanner values.put(Files.FileColumns.DATE_MODIFIED, lastModifiedSeconds); try { String[] whereArgs = new String[] { Integer.toString(objectHandle) }; - mMediaProvider.update(Files.getMtpObjectsUri(volumeName), values, "_id=?", - whereArgs); + mMediaProvider.update(mPackageName, Files.getMtpObjectsUri(volumeName), values, + "_id=?", whereArgs); } catch (RemoteException e) { Log.e(TAG, "RemoteException in scanMtpFile", e); } @@ -1450,8 +1458,8 @@ public class MediaScanner FileEntry entry = makeEntryFor(path); if (entry != null) { - fileList = mMediaProvider.query(mFilesUri, FILES_PRESCAN_PROJECTION, - null, null, null, null); + fileList = mMediaProvider.query(mPackageName, mFilesUri, + FILES_PRESCAN_PROJECTION, null, null, null, null); processPlayList(entry, fileList); } } else { @@ -1480,7 +1488,7 @@ public class MediaScanner try { where = Files.FileColumns.DATA + "=?"; selectionArgs = new String[] { path }; - c = mMediaProvider.query(mFilesUriNoNotify, FILES_PRESCAN_PROJECTION, + c = mMediaProvider.query(mPackageName, mFilesUriNoNotify, FILES_PRESCAN_PROJECTION, where, selectionArgs, null, null); if (c.moveToFirst()) { long rowId = c.getLong(FILES_PRESCAN_ID_COLUMN_INDEX); @@ -1592,7 +1600,7 @@ public class MediaScanner values.clear(); values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(index)); values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, Long.valueOf(entry.bestmatchid)); - mMediaProvider.insert(playlistUri, values); + mMediaProvider.insert(mPackageName, playlistUri, values); index++; } catch (RemoteException e) { Log.e(TAG, "RemoteException in MediaScanner.processCachedPlaylist()", e); @@ -1757,16 +1765,16 @@ public class MediaScanner if (rowId == 0) { values.put(MediaStore.Audio.Playlists.DATA, path); - uri = mMediaProvider.insert(mPlaylistsUri, values); + uri = mMediaProvider.insert(mPackageName, mPlaylistsUri, values); rowId = ContentUris.parseId(uri); membersUri = Uri.withAppendedPath(uri, Playlists.Members.CONTENT_DIRECTORY); } else { uri = ContentUris.withAppendedId(mPlaylistsUri, rowId); - mMediaProvider.update(uri, values, null, null); + mMediaProvider.update(mPackageName, uri, values, null, null); // delete members of existing playlist membersUri = Uri.withAppendedPath(uri, Playlists.Members.CONTENT_DIRECTORY); - mMediaProvider.delete(membersUri, null, null); + mMediaProvider.delete(mPackageName, membersUri, null, null); } String playListDirectory = path.substring(0, lastSlash + 1); @@ -1788,7 +1796,7 @@ public class MediaScanner try { // use the files uri and projection because we need the format column, // but restrict the query to just audio files - fileList = mMediaProvider.query(mFilesUri, FILES_PRESCAN_PROJECTION, + fileList = mMediaProvider.query(mPackageName, mFilesUri, FILES_PRESCAN_PROJECTION, "media_type=2", null, null, null); while (iterator.hasNext()) { FileEntry entry = iterator.next(); |