Change handling of Uri and DocumentFile handling for #1080

The Uris from Intent.getData() and DocumentFile.getUri() seems to be different. I think PreferencesUtils should only work with the original Uri as well as the permission handling logic.

IntentUtils.toDocumentFile can be used to convert it to a DocumentFile later on to actually work with.

Adds "No file manager found" message if no activity with OPEN_DOCUMENT_TREE is found. #1095

Removed deprecation of `startActivityForResult`.
This commit is contained in:
Peter Storch
2022-01-09 19:34:19 +01:00
parent f64c1feb1a
commit 1099102e29
6 changed files with 74 additions and 64 deletions
@@ -20,6 +20,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.UriPermission;
import android.net.Uri;
import android.util.Log;
import androidx.documentfile.provider.DocumentFile;
@@ -79,15 +80,27 @@ public class IntentUtils {
context.getContentResolver().takePersistableUriPermission(directoryUri, newFlags);
}
public static void releaseDirectoryAccessPermission(Context context, final DocumentFile documentFile) {
if (documentFile == null) {
public static void releaseDirectoryAccessPermission(Context context, final Uri documentUri) {
if (documentUri == null) {
return;
}
final Uri documentUri = documentFile.getUri();
context.getContentResolver().getPersistedUriPermissions().stream()
.map(UriPermission::getUri)
.filter(documentUri::equals)
.forEach(u -> context.getContentResolver().releasePersistableUriPermission(u, 0));
}
public static DocumentFile toDocumentFile(Context context, Uri directoryUri) {
if (directoryUri == null) {
return null;
}
try {
return DocumentFile.fromTreeUri(context, directoryUri);
} catch (Exception e) {
Log.w(TAG, "Could not decode directory: " + e.getMessage());
}
return null;
}
}