From 5354d5e85e9af15a1c6c20a4cae01cf0f14e0f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geoffrey=20M=C3=A9tais?= Date: Wed, 23 Jan 2019 11:34:59 +0100 Subject: [PATCH] Prpoperly exit headless fragments --- .../vlc/gui/helpers/hf/BaseHeadlessFragment.kt | 1 + .../gui/helpers/hf/StoragePermissionsDelegate.kt | 16 +++++++++------- .../vlc/gui/helpers/hf/WriteExternalDelegate.kt | 9 ++++++--- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/hf/BaseHeadlessFragment.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/hf/BaseHeadlessFragment.kt index 91391f886..59b08667f 100644 --- a/vlc-android/src/org/videolan/vlc/gui/helpers/hf/BaseHeadlessFragment.kt +++ b/vlc-android/src/org/videolan/vlc/gui/helpers/hf/BaseHeadlessFragment.kt @@ -37,6 +37,7 @@ open class BaseHeadlessFragment : Fragment() { } protected fun exit() { + retainInstance = false activity?.run { if (!isFinishing) supportFragmentManager .beginTransaction() diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/hf/StoragePermissionsDelegate.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/hf/StoragePermissionsDelegate.kt index 3eebe2dfb..a1fe03593 100644 --- a/vlc-android/src/org/videolan/vlc/gui/helpers/hf/StoragePermissionsDelegate.kt +++ b/vlc-android/src/org/videolan/vlc/gui/helpers/hf/StoragePermissionsDelegate.kt @@ -72,8 +72,9 @@ class StoragePermissionsDelegate : BaseHeadlessFragment() { } private fun requestStorageAccess(write: Boolean) { - requestPermissions(arrayOf(if (write) Manifest.permission.WRITE_EXTERNAL_STORAGE else Manifest.permission.READ_EXTERNAL_STORAGE), - if (write) Permissions.PERMISSION_WRITE_STORAGE_TAG else Permissions.PERMISSION_STORAGE_TAG) + val code = if (write) Manifest.permission.WRITE_EXTERNAL_STORAGE else Manifest.permission.READ_EXTERNAL_STORAGE + val tag = if (write) Permissions.PERMISSION_WRITE_STORAGE_TAG else Permissions.PERMISSION_STORAGE_TAG + requestPermissions(arrayOf(code), tag) } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { @@ -85,20 +86,21 @@ class StoragePermissionsDelegate : BaseHeadlessFragment() { storageAccessGranted.value = true deferredGrant.complete(true) exit() + return } else { if (shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE)) { Permissions.showStoragePermissionDialog(ctx, false) return - } else { - storageAccessGranted.value = false - deferredGrant.complete(false) - exit() } } storageAccessGranted.value = false deferredGrant.complete(false) + exit() + } + Permissions.PERMISSION_WRITE_STORAGE_TAG -> { + deferredGrant.complete(grantResults.isGranted()) + exit() } - Permissions.PERMISSION_WRITE_STORAGE_TAG -> deferredGrant.complete(grantResults.isGranted()) } } diff --git a/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt b/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt index 68e5a9261..b604d77e7 100644 --- a/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt +++ b/vlc-android/src/org/videolan/vlc/gui/helpers/hf/WriteExternalDelegate.kt @@ -7,10 +7,10 @@ import android.net.Uri import android.os.Build import android.os.Bundle import android.provider.DocumentsContract -import androidx.fragment.app.FragmentActivity -import androidx.documentfile.provider.DocumentFile -import androidx.appcompat.app.AlertDialog import android.text.TextUtils +import androidx.appcompat.app.AlertDialog +import androidx.documentfile.provider.DocumentFile +import androidx.fragment.app.FragmentActivity import kotlinx.coroutines.launch import org.videolan.libvlc.util.AndroidUtil import org.videolan.vlc.R @@ -73,6 +73,7 @@ class WriteExternalDelegate : BaseHeadlessFragment() { if (treeFile?.name == file?.name) { contentResolver.releasePersistableUriPermission(uriPermission.uri, Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION) deferredGrant.complete(false) + exit() return } } @@ -80,10 +81,12 @@ class WriteExternalDelegate : BaseHeadlessFragment() { // else set permission contentResolver.takePersistableUriPermission(treeUri, Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION) deferredGrant.complete(true) + exit() return } } deferredGrant.complete(false) + exit() } companion object {