Updated on 2026-08-14

This commit is contained in:
Tangem 2024-06-19 11:46:38 +03:00
commit 3efdb25a4e
33 changed files with 452 additions and 26 deletions

View file

@ -96,17 +96,17 @@ object PreferencesKeys {
fun getStart2CoinTOSAcceptedKey(region: String?) = booleanPreferencesKey(name = "start2Coin_tos_accepted_$region")
// region Permission
fun getShouldShowPermission(permission: Int) = booleanPreferencesKey("shouldShowPushPermission_$permission")
fun getShouldShowPermission(permission: String) = booleanPreferencesKey("shouldShowPushPermission_$permission")
fun getShouldShowInitialPermissionScreen(permission: Int) =
fun getShouldShowInitialPermissionScreen(permission: String) =
booleanPreferencesKey("shouldShowInitialPushPermissionScreen_$permission")
fun getIsFirstTimeAskingPermission(permission: Int) =
fun getIsFirstTimeAskingPermission(permission: String) =
booleanPreferencesKey("shouldAskInitialPushPermission_$permission")
fun getPermissionLaunchCount(permission: Int) = intPreferencesKey("pushPermissionLaunchCount_$permission")
fun getPermissionLaunchCount(permission: String) = intPreferencesKey("pushPermissionLaunchCount_$permission")
fun getPermissionDaysCount(permission: Int) = longPreferencesKey("pushPermissionDaysCount_$permission")
fun getPermissionDaysCount(permission: String) = longPreferencesKey("pushPermissionDaysCount_$permission")
// endregion
}

View file

@ -42,5 +42,9 @@
{
"name": "DETAILS_REDESIGN_ENABLED",
"version": "undefined"
},
{
"name": "PUSH_NOTIFICATIONS_ENABLED",
"version": "undefined"
}
]

View file

@ -0,0 +1,5 @@
package com.tangem.core.navigation.settings
class DummySettingsManager : SettingsManager {
override fun openSettings() { /* no-op */ }
}

View file

@ -0,0 +1,5 @@
package com.tangem.core.navigation.settings
interface SettingsManager {
fun openSettings()
}

View file

@ -43,6 +43,7 @@ dependencies {
/** Other libraries */
implementation(deps.compose.accompanist.systemUiController)
implementation(deps.compose.accompanist.permission)
implementation(deps.material)
implementation(deps.compose.shimmer)
implementation(deps.kotlin.immutable.collections)

View file

@ -0,0 +1,55 @@
package com.tangem.core.ui.utils
import android.Manifest
import android.os.Build
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState
import com.google.accompanist.permissions.shouldShowRationale
/**
* Returns push permission requester.
* Handles granting permission from app settings.
*/
@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun requestPushPermission(
isFirstTimeAsking: Boolean,
isClicked: MutableState<Boolean>,
onAllow: () -> Unit,
onDeny: () -> Unit,
onOpenSettings: () -> Unit,
): () -> Unit {
val permissionState = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
val permission = Manifest.permission.POST_NOTIFICATIONS
val tempPermissionState = rememberPermissionState(permission = permission)
rememberPermissionState(permission = permission) {
when {
it -> onAllow()
!tempPermissionState.status.shouldShowRationale && !isFirstTimeAsking -> onOpenSettings()
else -> onDeny()
}
}
} else {
null
}
// Check if user granted permission and close bottom sheet
LaunchedEffect(key1 = permissionState?.status, isClicked) {
if (!isClicked.value) return@LaunchedEffect
if (permissionState?.status?.isGranted == true) {
onAllow()
} else {
onDeny()
}
}
return if (permissionState == null) {
onOpenSettings
} else {
permissionState::launchPermissionRequest
}
}