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
|
class MediaScannerClient
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MediaScannerClient();
|
MediaScannerClient();
|
||||||
virtual ~MediaScannerClient();
|
virtual ~MediaScannerClient();
|
||||||
void setLocale(const char* locale);
|
void setLocale(const char* locale);
|
||||||
void beginFile();
|
void beginFile();
|
||||||
bool addStringTag(const char* name, const char* value);
|
bool addStringTag(const char* name, const char* value);
|
||||||
void endFile();
|
void endFile();
|
||||||
|
|
||||||
virtual bool scanFile(const char* path, long long lastModified, long long fileSize) = 0;
|
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 handleStringTag(const char* name, const char* value) = 0;
|
||||||
virtual bool setMimeType(const char* mimeType) = 0;
|
virtual bool setMimeType(const char* mimeType) = 0;
|
||||||
|
virtual bool addNoMediaFolder(const char* path) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void convertValues(uint32_t encoding);
|
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
|
}; // end of anonymous MediaScannerClient instance
|
||||||
|
|
||||||
private void prescan(String filePath) throws RemoteException {
|
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 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.
|
* Called by native code to return metadata extracted from media files.
|
||||||
*/
|
*/
|
||||||
public void handleStringTag(String name, String value);
|
public void handleStringTag(String name, String value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called by native code to return mime type extracted from DRM content.
|
* Called by native code to return mime type extracted from DRM content.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -65,6 +65,8 @@ public:
|
|||||||
"(Ljava/lang/String;Ljava/lang/String;)V");
|
"(Ljava/lang/String;Ljava/lang/String;)V");
|
||||||
mSetMimeTypeMethodID = env->GetMethodID(mediaScannerClientInterface, "setMimeType",
|
mSetMimeTypeMethodID = env->GetMethodID(mediaScannerClientInterface, "setMimeType",
|
||||||
"(Ljava/lang/String;)V");
|
"(Ljava/lang/String;)V");
|
||||||
|
mAddNoMediaFolderMethodID = env->GetMethodID(mediaScannerClientInterface, "addNoMediaFolder",
|
||||||
|
"(Ljava/lang/String;)V");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,12 +113,26 @@ public:
|
|||||||
return (!mEnv->ExceptionCheck());
|
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:
|
private:
|
||||||
JNIEnv *mEnv;
|
JNIEnv *mEnv;
|
||||||
jobject mClient;
|
jobject mClient;
|
||||||
jmethodID mScanFileMethodID;
|
jmethodID mScanFileMethodID;
|
||||||
jmethodID mHandleStringTagMethodID;
|
jmethodID mHandleStringTagMethodID;
|
||||||
jmethodID mSetMimeTypeMethodID;
|
jmethodID mSetMimeTypeMethodID;
|
||||||
|
jmethodID mAddNoMediaFolderMethodID;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user