forked from upstream-mirrors/OpenTracks
fix persistable directory permissions
This commit is contained in:
+3
-3
@@ -8,7 +8,6 @@ import android.os.Bundle;
|
|||||||
import android.provider.DocumentsContract;
|
import android.provider.DocumentsContract;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.documentfile.provider.DocumentFile;
|
import androidx.documentfile.provider.DocumentFile;
|
||||||
|
|
||||||
@@ -110,14 +109,15 @@ public abstract class DirectoryChooserActivity extends AppCompatActivity {
|
|||||||
if (requestCode == DIRECTORY_PICKER_REQUEST_CODE) {
|
if (requestCode == DIRECTORY_PICKER_REQUEST_CODE) {
|
||||||
switch (resultCode) {
|
switch (resultCode) {
|
||||||
case RESULT_OK:
|
case RESULT_OK:
|
||||||
Uri directoryUri = resultData.getData();
|
IntentUtils.releaseDirectoryAccessPermission(getApplicationContext(), PreferencesUtils.getDefaultExportDirectoryUri(this));
|
||||||
|
|
||||||
|
Uri directoryUri = resultData.getData();
|
||||||
PreferencesUtils.setDefaultExportDirectoryUri(directoryUri);
|
PreferencesUtils.setDefaultExportDirectoryUri(directoryUri);
|
||||||
IntentUtils.persistDirectoryAccessPermission(getApplicationContext(), directoryUri, resultData.getFlags());
|
IntentUtils.persistDirectoryAccessPermission(getApplicationContext(), directoryUri, resultData.getFlags());
|
||||||
break;
|
break;
|
||||||
case RESULT_CANCELED:
|
case RESULT_CANCELED:
|
||||||
|
IntentUtils.releaseDirectoryAccessPermission(getApplicationContext(), PreferencesUtils.getDefaultExportDirectoryUri(this));
|
||||||
PreferencesUtils.setDefaultExportDirectoryUri(null);
|
PreferencesUtils.setDefaultExportDirectoryUri(null);
|
||||||
//TODO Remove stored permission contentResolver.releasePersistableUriPermission
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package de.dennisguse.opentracks.util;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.UriPermission;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -25,12 +26,14 @@ import android.util.Pair;
|
|||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.content.FileProvider;
|
import androidx.core.content.FileProvider;
|
||||||
|
import androidx.documentfile.provider.DocumentFile;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
import de.dennisguse.opentracks.content.DescriptionGenerator;
|
import de.dennisguse.opentracks.content.DescriptionGenerator;
|
||||||
@@ -205,7 +208,22 @@ public class IntentUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void persistDirectoryAccessPermission(Context context, Uri directoryUri, int existingFlags) {
|
public static void persistDirectoryAccessPermission(Context context, Uri directoryUri, int existingFlags) {
|
||||||
int newFlags = existingFlags | (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
int newFlags = existingFlags & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
|
||||||
context.getContentResolver().takePersistableUriPermission(directoryUri, newFlags);
|
context.getContentResolver().takePersistableUriPermission(directoryUri, newFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void releaseDirectoryAccessPermission(Context context, final DocumentFile documentFile) {
|
||||||
|
if (documentFile == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final Uri documentUri = documentFile.getUri();
|
||||||
|
final List<UriPermission> persistedUriPermissions = context.getContentResolver().getPersistedUriPermissions();
|
||||||
|
for (final UriPermission permission : persistedUriPermissions) {
|
||||||
|
final Uri uri = permission.getUri();
|
||||||
|
if (uri.equals(documentUri)) {
|
||||||
|
context.getContentResolver().releasePersistableUriPermission(uri, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user