Merge change 23835 into eclair
* changes: When encountering a .nomedia file, notify the MediaScannerClient, so that it can erase the data column for entries that are in the folder containing the .nomedia file. This prevents us from deleting (via a delete trigger) files when somebody adds a .nomedia file after the fact.
This commit is contained in:
@@ -59,16 +59,17 @@ private:
|
||||
class MediaScannerClient
|
||||
{
|
||||
public:
|
||||
MediaScannerClient();
|
||||
virtual ~MediaScannerClient();
|
||||
void setLocale(const char* locale);
|
||||
void beginFile();
|
||||
bool addStringTag(const char* name, const char* value);
|
||||
void endFile();
|
||||
|
||||
virtual bool scanFile(const char* path, long long lastModified, long long fileSize) = 0;
|
||||
virtual bool handleStringTag(const char* name, const char* value) = 0;
|
||||
virtual bool setMimeType(const char* mimeType) = 0;
|
||||
MediaScannerClient();
|
||||
virtual ~MediaScannerClient();
|
||||
void setLocale(const char* locale);
|
||||
void beginFile();
|
||||
bool addStringTag(const char* name, const char* value);
|
||||
void endFile();
|
||||
|
||||
virtual bool scanFile(const char* path, long long lastModified, long long fileSize) = 0;
|
||||
virtual bool handleStringTag(const char* name, const char* value) = 0;
|
||||
virtual bool setMimeType(const char* mimeType) = 0;
|
||||
virtual bool addNoMediaFolder(const char* path) = 0;
|
||||
|
||||
protected:
|
||||
void convertValues(uint32_t encoding);
|
||||
|
||||
@@ -825,6 +825,22 @@ public class MediaScanner
|
||||
}
|
||||
}
|
||||
|
||||
public void addNoMediaFolder(String path) {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(MediaStore.Images.ImageColumns.DATA, "");
|
||||
String [] pathSpec = new String[] {path + '%'};
|
||||
try {
|
||||
mMediaProvider.update(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values,
|
||||
MediaStore.Images.ImageColumns.DATA + " LIKE ?", pathSpec);
|
||||
mMediaProvider.update(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values,
|
||||
MediaStore.Images.ImageColumns.DATA + " LIKE ?", pathSpec);
|
||||
mMediaProvider.update(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values,
|
||||
MediaStore.Images.ImageColumns.DATA + " LIKE ?", pathSpec);
|
||||
} catch (RemoteException e) {
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
}; // end of anonymous MediaScannerClient instance
|
||||
|
||||
private void prescan(String filePath) throws RemoteException {
|
||||
|
||||
@@ -25,11 +25,13 @@ public interface MediaScannerClient
|
||||
|
||||
public void scanFile(String path, String mimeType, long lastModified, long fileSize);
|
||||
|
||||
public void addNoMediaFolder(String path);
|
||||
|
||||
/**
|
||||
* Called by native code to return metadata extracted from media files.
|
||||
*/
|
||||
public void handleStringTag(String name, String value);
|
||||
|
||||
|
||||
/**
|
||||
* Called by native code to return mime type extracted from DRM content.
|
||||
*/
|
||||
|
||||
@@ -65,6 +65,8 @@ public:
|
||||
"(Ljava/lang/String;Ljava/lang/String;)V");
|
||||
mSetMimeTypeMethodID = env->GetMethodID(mediaScannerClientInterface, "setMimeType",
|
||||
"(Ljava/lang/String;)V");
|
||||
mAddNoMediaFolderMethodID = env->GetMethodID(mediaScannerClientInterface, "addNoMediaFolder",
|
||||
"(Ljava/lang/String;)V");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,12 +113,26 @@ public:
|
||||
return (!mEnv->ExceptionCheck());
|
||||
}
|
||||
|
||||
// returns true if it succeeded, false if an exception occured in the Java code
|
||||
virtual bool addNoMediaFolder(const char* path)
|
||||
{
|
||||
jstring pathStr;
|
||||
if ((pathStr = mEnv->NewStringUTF(path)) == NULL) return false;
|
||||
|
||||
mEnv->CallVoidMethod(mClient, mAddNoMediaFolderMethodID, pathStr);
|
||||
|
||||
mEnv->DeleteLocalRef(pathStr);
|
||||
return (!mEnv->ExceptionCheck());
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
JNIEnv *mEnv;
|
||||
jobject mClient;
|
||||
jmethodID mScanFileMethodID;
|
||||
jmethodID mHandleStringTagMethodID;
|
||||
jmethodID mSetMimeTypeMethodID;
|
||||
jmethodID mAddNoMediaFolderMethodID;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user