Merge changes from topic "apr29" into rvc-dev
* changes:
Fix bug in permission grant metrics.
Relax restrictions on related/existing items.
Force scans when publishing.
Scan items when changing their paths.
diff --git a/src/com/android/providers/media/MediaProvider.java b/src/com/android/providers/media/MediaProvider.java
index f50c7fd..542e197 100644
--- a/src/com/android/providers/media/MediaProvider.java
+++ b/src/com/android/providers/media/MediaProvider.java
@@ -2081,8 +2081,9 @@
}
private void ensureUniqueFileColumns(int match, @NonNull Uri uri, @NonNull Bundle extras,
- @NonNull ContentValues values) throws VolumeArgumentException {
- ensureFileColumns(match, uri, extras, values, true, null /* currentPath */);
+ @NonNull ContentValues values, @Nullable String currentPath)
+ throws VolumeArgumentException {
+ ensureFileColumns(match, uri, extras, values, true, currentPath);
}
private void ensureNonUniqueFileColumns(int match, @NonNull Uri uri,
@@ -2305,8 +2306,10 @@
// Require that content lives under well-defined directories to help
// keep the user's content organized
- // Start by saying unchanged paths are valid
- boolean validPath = res.getAbsolutePath().equals(currentPath);
+ // Start by saying unchanged directories are valid
+ final String currentDir = (currentPath != null)
+ ? new File(currentPath).getParent() : null;
+ boolean validPath = res.getParent().equals(currentDir);
// Next, consider allowing based on allowed primary directory
final String[] relativePath = values.getAsString(MediaColumns.RELATIVE_PATH).split("/");
@@ -2646,7 +2649,7 @@
// Make sure all file-related columns are defined
try {
- ensureUniqueFileColumns(match, uri, extras, values);
+ ensureUniqueFileColumns(match, uri, extras, values, null);
} catch (VolumeArgumentException e) {
if (getCallingPackageTargetSdkVersion() >= Build.VERSION_CODES.Q) {
throw new IllegalArgumentException(e.getMessage());
@@ -3028,7 +3031,7 @@
MediaStore.Images.Media.getContentUri(resolvedVolumeName), imageId),
extras, true);
- ensureUniqueFileColumns(match, uri, extras, initialValues);
+ ensureUniqueFileColumns(match, uri, extras, initialValues, null);
rowId = qb.insert(helper, initialValues);
if (rowId > 0) {
@@ -3050,7 +3053,7 @@
MediaStore.Video.Media.getContentUri(resolvedVolumeName), videoId),
Bundle.EMPTY, true);
- ensureUniqueFileColumns(match, uri, extras, initialValues);
+ ensureUniqueFileColumns(match, uri, extras, initialValues, null);
rowId = qb.insert(helper, initialValues);
if (rowId > 0) {
@@ -3132,7 +3135,7 @@
throw new UnsupportedOperationException("no internal album art allowed");
}
- ensureUniqueFileColumns(match, uri, extras, initialValues);
+ ensureUniqueFileColumns(match, uri, extras, initialValues, null);
rowId = qb.insert(helper, initialValues);
if (rowId > 0) {
@@ -4700,6 +4703,11 @@
// make sure metadata is updated
if (MediaColumns.IS_PENDING.equals(column)) {
triggerScan = true;
+
+ // Explicitly clear columns used to ignore no-op scans,
+ // since we need to force a scan on publish
+ initialValues.putNull(MediaColumns.DATE_MODIFIED);
+ initialValues.putNull(MediaColumns.SIZE);
}
}
@@ -4817,7 +4825,7 @@
// Now that we've confirmed an actual movement is taking place,
// ensure we have a unique destination
initialValues.remove(MediaColumns.DATA);
- ensureUniqueFileColumns(match, uri, extras, initialValues);
+ ensureUniqueFileColumns(match, uri, extras, initialValues, beforePath);
final String afterPath = initialValues.getAsString(MediaColumns.DATA);
@@ -4845,6 +4853,19 @@
if (initialValues.containsKey(FileColumns.DATA)) {
// If we're changing paths, invalidate any thumbnails
triggerInvalidate = true;
+
+ // If the new file exists, trigger a scan to adjust any metadata
+ // that might be derived from the path
+ final String data = initialValues.getAsString(FileColumns.DATA);
+ if (!TextUtils.isEmpty(data) && new File(data).exists()) {
+ triggerScan = true;
+ }
+ }
+
+ // If we're already doing this update from an internal scan, no need to
+ // kick off another no-op scan
+ if (isCallingPackageSystem()) {
+ triggerScan = false;
}
// Since the update mutation may prevent us from matching items after
diff --git a/src/com/android/providers/media/PermissionActivity.java b/src/com/android/providers/media/PermissionActivity.java
index 0696ef5..3f97464 100644
--- a/src/com/android/providers/media/PermissionActivity.java
+++ b/src/com/android/providers/media/PermissionActivity.java
@@ -182,7 +182,7 @@
protected Void doInBackground(Void... params) {
Log.d(TAG, "User allowed grant for " + uris);
Metrics.logPermissionGranted(volumeName, appInfo.uid,
- getCallingPackage(), 1);
+ getCallingPackage(), uris.size());
try {
switch (getIntent().getAction()) {
case MediaStore.CREATE_WRITE_REQUEST_CALL: {