mirror of
https://github.com/T8RIN/ImageToolbox.git
synced 2025-07-04 16:58:05 +08:00
improve context
This commit is contained in:
@ -64,3 +64,13 @@ suspend inline fun <T, R> T.runSuspendCatching(block: T.() -> R): Result<R> {
|
||||
inline fun <T : Any> KClass<T>.simpleName() = simpleName!!
|
||||
|
||||
inline fun <T> Boolean.then(value: T): T? = if (this) value else null
|
||||
|
||||
inline fun tryAll(
|
||||
vararg actions: () -> Unit
|
||||
): Boolean {
|
||||
for (action in actions) {
|
||||
runCatching { action() }.onSuccess { return true }
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
@ -32,8 +32,10 @@ import android.net.ConnectivityManager
|
||||
import android.net.NetworkCapabilities
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.provider.Settings
|
||||
import android.webkit.MimeTypeMap
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.compose.runtime.Composable
|
||||
@ -50,6 +52,7 @@ import androidx.core.content.pm.ShortcutInfoCompat
|
||||
import androidx.core.content.pm.ShortcutManagerCompat
|
||||
import androidx.core.graphics.drawable.IconCompat
|
||||
import androidx.core.graphics.toColorInt
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import com.t8rin.imagetoolbox.core.domain.model.PerformanceClass
|
||||
@ -495,4 +498,19 @@ object ContextUtils {
|
||||
override val fontScale: Float
|
||||
get() = resources.configuration.fontScale
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
fun manageAllFilesIntent() = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
fun Context.manageAppAllFilesIntent(): Intent {
|
||||
return Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
|
||||
.setData("package:${packageName}".toUri())
|
||||
}
|
||||
|
||||
fun Context.appSettingsIntent(): Intent {
|
||||
return Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||
.setData("package:${packageName}".toUri())
|
||||
}
|
||||
|
||||
}
|
@ -18,10 +18,8 @@
|
||||
package com.t8rin.imagetoolbox.feature.media_picker.presentation.components
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Environment
|
||||
import android.provider.Settings
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.compose.animation.AnimatedContent
|
||||
@ -55,9 +53,13 @@ import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.core.app.ActivityCompat
|
||||
import com.t8rin.imagetoolbox.core.domain.utils.tryAll
|
||||
import com.t8rin.imagetoolbox.core.resources.R
|
||||
import com.t8rin.imagetoolbox.core.resources.icons.BrokenImageAlt
|
||||
import com.t8rin.imagetoolbox.core.ui.utils.helper.ContextUtils.appSettingsIntent
|
||||
import com.t8rin.imagetoolbox.core.ui.utils.helper.ContextUtils.isInstalledFromPlayStore
|
||||
import com.t8rin.imagetoolbox.core.ui.utils.helper.ContextUtils.manageAllFilesIntent
|
||||
import com.t8rin.imagetoolbox.core.ui.utils.helper.ContextUtils.manageAppAllFilesIntent
|
||||
import com.t8rin.imagetoolbox.core.ui.utils.permission.PermissionUtils.hasPermissionAllowed
|
||||
import com.t8rin.imagetoolbox.core.ui.utils.provider.LocalComponentActivity
|
||||
import com.t8rin.imagetoolbox.core.ui.utils.provider.rememberCurrentLifecycleEvent
|
||||
@ -95,7 +97,11 @@ internal fun MediaPickerRootContentImpl(
|
||||
|
||||
val requestManagePermission = {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
launcher.launch(Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION))
|
||||
tryAll(
|
||||
{ launcher.launch(context.manageAppAllFilesIntent()) },
|
||||
{ launcher.launch(manageAllFilesIntent()) },
|
||||
{ launcher.launch(context.appSettingsIntent()) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user