From b5d800edc2d7e5f5c154ea54153b66b12b324d7e Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Tue, 9 Feb 2021 15:28:35 +0900 Subject: [PATCH] safer activity request to get volume access --- .../deckers/thibault/aves/utils/PermissionManager.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/utils/PermissionManager.kt b/android/app/src/main/kotlin/deckers/thibault/aves/utils/PermissionManager.kt index 7ecf9a3b5..bb737b892 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/utils/PermissionManager.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/utils/PermissionManager.kt @@ -7,7 +7,6 @@ import android.net.Uri import android.os.Build import android.os.storage.StorageManager import android.util.Log -import androidx.core.app.ActivityCompat import deckers.thibault.aves.utils.StorageUtils.PathSegments import java.io.File import java.util.* @@ -23,7 +22,6 @@ object PermissionManager { fun requestVolumeAccess(activity: Activity, path: String, onGranted: () -> Unit, onDenied: () -> Unit) { Log.i(LOG_TAG, "request user to select and grant access permission to volume=$path") - pendingPermissionMap[VOLUME_ACCESS_REQUEST_CODE] = PendingPermissionHandler(path, onGranted, onDenied) var intent: Intent? = null if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { @@ -36,7 +34,13 @@ object PermissionManager { intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE) } - ActivityCompat.startActivityForResult(activity, intent, VOLUME_ACCESS_REQUEST_CODE, null) + if (intent.resolveActivity(activity.packageManager) != null) { + pendingPermissionMap[VOLUME_ACCESS_REQUEST_CODE] = PendingPermissionHandler(path, onGranted, onDenied) + activity.startActivityForResult(intent, VOLUME_ACCESS_REQUEST_CODE, null) + } else { + Log.e(LOG_TAG, "failed to resolve activity for intent=$intent") + onDenied() + } } fun onPermissionResult(requestCode: Int, treeUri: Uri?) {