Updated on 2026-08-14

This commit is contained in:
Tangem 2025-07-30 11:42:17 +03:00
parent 67da274df2
commit b0b416c9c3
5 changed files with 60 additions and 47 deletions

View file

@ -0,0 +1,43 @@
package com.tangem.core.ui.utils
import android.os.Build
import androidx.annotation.ChecksSdkIntAtLeast
import androidx.compose.runtime.Composable
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState
/**
* Returns push permission requester.
* Handles granting permission from app settings.
*/
@Suppress("LongParameterList")
@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun requestPermission(permission: String, onAllow: () -> Unit, onDeny: () -> Unit): () -> Unit {
val permissionState = rememberPermissionState(
permission = permission,
onPermissionResult = { isGranted ->
if (isGranted) {
onAllow()
} else {
onDeny()
}
},
)
return when {
permissionState.status.isGranted == false -> {
if (isRequirePushPermission) {
permissionState::launchPermissionRequest
} else {
onDeny // on versions below Tiramisu call onDeny directly and then open settings
}
}
else -> {
onAllow
}
}
}
@ChecksSdkIntAtLeast(api = Build.VERSION_CODES.TIRAMISU)
private val isRequirePushPermission = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU

View file

@ -1,33 +0,0 @@
package com.tangem.core.ui.utils
import androidx.compose.runtime.Composable
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.rememberPermissionState
/**
* Returns push permission requester.
* Handles granting permission from app settings.
*/
@Suppress("LongParameterList")
@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun requestPushPermission(pushPermission: String?, onAllow: () -> Unit, onDeny: () -> Unit): () -> Unit {
val permissionState = pushPermission?.let { permission ->
rememberPermissionState(
permission = permission,
onPermissionResult = { isGranted ->
if (isGranted) {
onAllow()
} else {
onDeny()
}
},
)
}
return if (permissionState == null) {
{}
} else {
permissionState::launchPermissionRequest
}
}