improve context

This commit is contained in:
T8RIN
2025-06-30 05:23:40 +03:00
parent a6fb280d95
commit 546b7b2b6b
3 changed files with 38 additions and 4 deletions

View File

@ -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
}

View File

@ -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())
}
}

View File

@ -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()) }
)
}
}