show a confirmation dialog before redirecting to the device settings

This commit is contained in:
Tibor Kaputa
2021-11-21 22:58:45 +01:00
committed by GitHub
parent 3c8a67349a
commit 3294bc26a7

View File

@@ -1,5 +1,6 @@
package com.simplemobiletools.filemanager.pro.activities package com.simplemobiletools.filemanager.pro.activities
import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.app.SearchManager import android.app.SearchManager
import android.content.ClipData import android.content.ClipData
@@ -16,9 +17,10 @@ import android.provider.Settings
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import androidx.appcompat.widget.SearchView import androidx.appcompat.widget.SearchView
import androidx.core.app.ActivityCompat
import androidx.core.view.MenuItemCompat import androidx.core.view.MenuItemCompat
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.simplemobiletools.commons.dialogs.ConfirmationAdvancedDialog
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.*
@@ -46,7 +48,6 @@ import kotlinx.android.synthetic.main.items_fragment.view.*
import kotlinx.android.synthetic.main.recents_fragment.* import kotlinx.android.synthetic.main.recents_fragment.*
import kotlinx.android.synthetic.main.storage_fragment.* import kotlinx.android.synthetic.main.storage_fragment.*
import java.io.File import java.io.File
import java.lang.Exception
import java.util.* import java.util.*
class MainActivity : SimpleActivity() { class MainActivity : SimpleActivity() {
@@ -306,23 +307,31 @@ class MainActivity : SimpleActivity() {
} }
} }
@SuppressLint("InlinedApi")
private fun handleStoragePermission(callback: (granted: Boolean) -> Unit) { private fun handleStoragePermission(callback: (granted: Boolean) -> Unit) {
actionOnPermission = null actionOnPermission = null
if (hasStoragePermission()) { if (hasStoragePermission()) {
callback(true) callback(true)
} else { } else {
if (isRPlus()) { if (isRPlus()) {
isAskingPermissions = true ConfirmationAdvancedDialog(this, "", R.string.access_storage_prompt, R.string.ok, 0) { success ->
actionOnPermission = callback if (success ) {
try { isAskingPermissions = true
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION) actionOnPermission = callback
intent.addCategory("android.intent.category.DEFAULT") try {
intent.data = Uri.parse("package:$packageName") val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
startActivityForResult(intent, MANAGE_STORAGE_RC) intent.addCategory("android.intent.category.DEFAULT")
} catch (e: Exception) { intent.data = Uri.parse("package:$packageName")
val intent = Intent() startActivityForResult(intent, MANAGE_STORAGE_RC)
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION } catch (e: Exception) {
startActivityForResult(intent, MANAGE_STORAGE_RC) showErrorToast(e)
val intent = Intent()
intent.action = Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
startActivityForResult(intent, MANAGE_STORAGE_RC)
}
} else {
finish()
}
} }
} else { } else {
handlePermission(PERMISSION_WRITE_STORAGE, callback) handlePermission(PERMISSION_WRITE_STORAGE, callback)
@@ -330,10 +339,16 @@ class MainActivity : SimpleActivity() {
} }
} }
@SuppressLint("NewApi")
private fun hasStoragePermission(): Boolean { private fun hasStoragePermission(): Boolean {
return if (isRPlus()) Environment.isExternalStorageManager() else hasPermission(PERMISSION_WRITE_STORAGE) return if (isRPlus()) {
Environment.isExternalStorageManager()
} else {
hasPermission(PERMISSION_WRITE_STORAGE)
}
} }
@SuppressLint("NewApi")
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
super.onActivityResult(requestCode, resultCode, resultData) super.onActivityResult(requestCode, resultCode, resultData)
isAskingPermissions = false isAskingPermissions = false