Merge "Revoke the uri permission when the file is deleted" into pi-dev am: 2b52397d56 am: 9095b67c84

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12455472

Change-Id: Ic42474e16756dbd77c3a343ba1f7cbf95b2c10c8
This commit is contained in:
TreeHugger Robot
2020-12-03 06:11:17 +00:00
committed by Automerger Merge Worker
2 changed files with 17 additions and 0 deletions

View File

@@ -108,6 +108,14 @@ public abstract class FileSystemProvider extends DocumentsProvider {
// Default is no-op // Default is no-op
} }
/**
* Callback indicating that the given document has been deleted or moved. This gives
* the provider a hook to revoke the uri permissions.
*/
protected void onDocIdDeleted(String docId) {
// Default is no-op
}
@Override @Override
public boolean onCreate() { public boolean onCreate() {
throw new UnsupportedOperationException( throw new UnsupportedOperationException(
@@ -278,6 +286,7 @@ public abstract class FileSystemProvider extends DocumentsProvider {
final String afterDocId = getDocIdForFile(after); final String afterDocId = getDocIdForFile(after);
onDocIdChanged(docId); onDocIdChanged(docId);
onDocIdDeleted(docId);
onDocIdChanged(afterDocId); onDocIdChanged(afterDocId);
final File afterVisibleFile = getFileForDocId(afterDocId, true); final File afterVisibleFile = getFileForDocId(afterDocId, true);
@@ -307,6 +316,7 @@ public abstract class FileSystemProvider extends DocumentsProvider {
final String docId = getDocIdForFile(after); final String docId = getDocIdForFile(after);
onDocIdChanged(sourceDocumentId); onDocIdChanged(sourceDocumentId);
onDocIdDeleted(sourceDocumentId);
onDocIdChanged(docId); onDocIdChanged(docId);
moveInMediaStore(visibleFileBefore, getFileForDocId(docId, true)); moveInMediaStore(visibleFileBefore, getFileForDocId(docId, true));
@@ -336,6 +346,7 @@ public abstract class FileSystemProvider extends DocumentsProvider {
} }
onDocIdChanged(docId); onDocIdChanged(docId);
onDocIdDeleted(docId);
removeFromMediaStore(visibleFile, isDirectory); removeFromMediaStore(visibleFile, isDirectory);
} }

View File

@@ -434,6 +434,12 @@ public class ExternalStorageProvider extends FileSystemProvider {
} }
} }
@Override
protected void onDocIdDeleted(String docId) {
Uri uri = DocumentsContract.buildDocumentUri(AUTHORITY, docId);
getContext().revokeUriPermission(uri, ~0);
}
@Override @Override
public Cursor queryRoots(String[] projection) throws FileNotFoundException { public Cursor queryRoots(String[] projection) throws FileNotFoundException {
final MatrixCursor result = new MatrixCursor(resolveRootProjection(projection)); final MatrixCursor result = new MatrixCursor(resolveRootProjection(projection));