Implement handling RecoverableSecurityException needed for updating files in MediaStore
This commit is contained in:
parent
40d203a8bb
commit
e955f96751
2 changed files with 23 additions and 1 deletions
|
@ -3,6 +3,7 @@ package com.simplemobiletools.commons.activities
|
|||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.app.ActivityManager
|
||||
import android.app.RecoverableSecurityException
|
||||
import android.app.role.RoleManager
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.content.Context
|
||||
|
@ -53,10 +54,12 @@ abstract class BaseSimpleActivity : AppCompatActivity() {
|
|||
|
||||
private val GENERIC_PERM_HANDLER = 100
|
||||
private val DELETE_FILE_SDK_30_HANDLER = 300
|
||||
private val RECOVERABLE_SECURITY_HANDLER = 301
|
||||
|
||||
companion object {
|
||||
var funAfterSAFPermission: ((success: Boolean) -> Unit)? = null
|
||||
var funAfterDelete30File: ((success: Boolean) -> Unit)? = null
|
||||
var funRecoverableSecurity: ((success: Boolean) -> Unit)? = null
|
||||
}
|
||||
|
||||
abstract fun getAppIconIDs(): ArrayList<Int>
|
||||
|
@ -274,6 +277,9 @@ abstract class BaseSimpleActivity : AppCompatActivity() {
|
|||
exportSettingsTo(outputStream, configItemsToExport)
|
||||
} else if (requestCode == DELETE_FILE_SDK_30_HANDLER) {
|
||||
funAfterDelete30File?.invoke(resultCode == Activity.RESULT_OK)
|
||||
} else if (requestCode == RECOVERABLE_SECURITY_HANDLER) {
|
||||
funRecoverableSecurity?.invoke(resultCode == Activity.RESULT_OK)
|
||||
funRecoverableSecurity = null
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -396,6 +402,22 @@ abstract class BaseSimpleActivity : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
fun handleRecoverableSecurityException(callback: (success: Boolean) -> Unit) {
|
||||
try {
|
||||
callback.invoke(true)
|
||||
} catch (securityException: SecurityException) {
|
||||
if (isQPlus()) {
|
||||
funRecoverableSecurity = callback
|
||||
val recoverableSecurityException = securityException as? RecoverableSecurityException ?: throw securityException
|
||||
val intentSender = recoverableSecurityException.userAction.actionIntent.intentSender
|
||||
startIntentSenderForResult(intentSender, RECOVERABLE_SECURITY_HANDLER, null, 0, 0, 0)
|
||||
} else {
|
||||
callback(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun copyMoveFilesTo(
|
||||
fileDirItems: ArrayList<FileDirItem>, source: String, destination: String, isCopyOperation: Boolean, copyPhotoVideoOnly: Boolean,
|
||||
copyHidden: Boolean, callback: (destinationPath: String) -> Unit
|
||||
|
|
|
@ -1194,7 +1194,7 @@ fun AppCompatActivity.showSideloadingDialog() {
|
|||
}
|
||||
|
||||
fun BaseSimpleActivity.getTempFile(folderName: String, fileName: String): File? {
|
||||
val folder = File(cacheDir, fileName)
|
||||
val folder = File(cacheDir, folderName)
|
||||
if (!folder.exists()) {
|
||||
if (!folder.mkdir()) {
|
||||
toast(R.string.unknown_error_occurred)
|
||||
|
|
Loading…
Reference in a new issue