Updated on 2026-08-14

This commit is contained in:
Tangem 2024-06-17 13:17:08 +05:00
parent fa948bd91a
commit dd6d478c4f
9 changed files with 27 additions and 26 deletions

View file

@ -96,17 +96,17 @@ object PreferencesKeys {
fun getStart2CoinTOSAcceptedKey(region: String?) = booleanPreferencesKey(name = "start2Coin_tos_accepted_$region") fun getStart2CoinTOSAcceptedKey(region: String?) = booleanPreferencesKey(name = "start2Coin_tos_accepted_$region")
// region Permission // 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") booleanPreferencesKey("shouldShowInitialPushPermissionScreen_$permission")
fun getIsFirstTimeAskingPermission(permission: Int) = fun getIsFirstTimeAskingPermission(permission: String) =
booleanPreferencesKey("shouldAskInitialPushPermission_$permission") 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 // endregion
} }

View file

@ -16,26 +16,27 @@ internal class DefaultPermissionRepository(
private val appPreferencesStore: AppPreferencesStore, private val appPreferencesStore: AppPreferencesStore,
) : PermissionRepository { ) : PermissionRepository {
override suspend fun shouldInitiallyShowPermissionScreen(permission: Int): Boolean { override suspend fun shouldInitiallyShowPermissionScreen(permission: String): Boolean {
val key = getShouldShowInitialPermissionScreen(permission) val key = getShouldShowInitialPermissionScreen(permission)
val initialPermissionScreen = appPreferencesStore.getSyncOrDefault(key = key, default = true) val initialPermissionScreen = appPreferencesStore.getSyncOrDefault(key = key, default = true)
if (initialPermissionScreen) appPreferencesStore.store(key = key, value = false) if (initialPermissionScreen) appPreferencesStore.store(key = key, value = false)
return initialPermissionScreen return initialPermissionScreen
} }
override suspend fun isFirstTimeAskingPermission(permission: Int): Boolean = appPreferencesStore.getSyncOrDefault( override suspend fun isFirstTimeAskingPermission(permission: String): Boolean =
key = getIsFirstTimeAskingPermission(permission), appPreferencesStore.getSyncOrDefault(
default = true, key = getIsFirstTimeAskingPermission(permission),
) default = true,
)
override suspend fun setFirstTimeAskingPermission(permission: Int, value: Boolean) { override suspend fun setFirstTimeAskingPermission(permission: String, value: Boolean) {
appPreferencesStore.store( appPreferencesStore.store(
key = getIsFirstTimeAskingPermission(permission), key = getIsFirstTimeAskingPermission(permission),
value = value, value = value,
) )
} }
override suspend fun shouldAskPermission(permission: Int): Boolean { override suspend fun shouldAskPermission(permission: String): Boolean {
val shouldAskPermission = appPreferencesStore.getSyncOrDefault(getShouldShowPermission(permission), true) val shouldAskPermission = appPreferencesStore.getSyncOrDefault(getShouldShowPermission(permission), true)
val delayedLaunches = appPreferencesStore.getSyncOrDefault(getPermissionLaunchCount(permission), 0) val delayedLaunches = appPreferencesStore.getSyncOrDefault(getPermissionLaunchCount(permission), 0)
val delayedDays = appPreferencesStore.getSyncOrDefault(getPermissionDaysCount(permission), 0) val delayedDays = appPreferencesStore.getSyncOrDefault(getPermissionDaysCount(permission), 0)
@ -47,11 +48,11 @@ internal class DefaultPermissionRepository(
return shouldAskPermission && isDaysDelayed && isLaunchesDelayed return shouldAskPermission && isDaysDelayed && isLaunchesDelayed
} }
override suspend fun neverAskPermission(permission: Int) { override suspend fun neverAskPermission(permission: String) {
appPreferencesStore.store(key = getShouldShowPermission(permission), value = false) appPreferencesStore.store(key = getShouldShowPermission(permission), value = false)
} }
override suspend fun delayPermissionAsking(permission: Int) { override suspend fun delayPermissionAsking(permission: String) {
appPreferencesStore.editData { appPreferencesStore.editData {
val appLaunchCounter = it.getOrDefault(PreferencesKeys.APP_LAUNCH_COUNT_KEY, 0) val appLaunchCounter = it.getOrDefault(PreferencesKeys.APP_LAUNCH_COUNT_KEY, 0)
val nowMillis = SystemClock.elapsedRealtime() val nowMillis = SystemClock.elapsedRealtime()

View file

@ -7,7 +7,7 @@ class DelayPermissionRequestUseCase(
private val repository: PermissionRepository, private val repository: PermissionRepository,
) { ) {
suspend operator fun invoke(permission: Int): Either<Throwable, Unit> = Either.catch { suspend operator fun invoke(permission: String): Either<Throwable, Unit> = Either.catch {
repository.delayPermissionAsking(permission) repository.delayPermissionAsking(permission)
} }
} }

View file

@ -5,7 +5,7 @@ import com.tangem.domain.settings.repositories.PermissionRepository
class IsFirstTimeAskingPermissionUseCase(private val repository: PermissionRepository) { class IsFirstTimeAskingPermissionUseCase(private val repository: PermissionRepository) {
suspend operator fun invoke(permission: Int): Either<Throwable, Boolean> = Either.catch { suspend operator fun invoke(permission: String): Either<Throwable, Boolean> = Either.catch {
repository.isFirstTimeAskingPermission(permission) repository.isFirstTimeAskingPermission(permission)
} }
} }

View file

@ -7,7 +7,7 @@ class NeverRequestPermissionUseCase(
private val repository: PermissionRepository, private val repository: PermissionRepository,
) { ) {
suspend operator fun invoke(permission: Int): Either<Throwable, Unit> = Either.catch { suspend operator fun invoke(permission: String): Either<Throwable, Unit> = Either.catch {
repository.neverAskPermission(permission) repository.neverAskPermission(permission)
} }
} }

View file

@ -5,7 +5,7 @@ import com.tangem.domain.settings.repositories.PermissionRepository
class SetFirstTimeAskingPermissionUseCase(private val repository: PermissionRepository) { class SetFirstTimeAskingPermissionUseCase(private val repository: PermissionRepository) {
suspend operator fun invoke(permission: Int): Either<Throwable, Unit> = Either.catch { suspend operator fun invoke(permission: String): Either<Throwable, Unit> = Either.catch {
repository.setFirstTimeAskingPermission(permission, false) repository.setFirstTimeAskingPermission(permission, false)
} }
} }

View file

@ -6,5 +6,5 @@ class ShouldAskPermissionUseCase(
private val repository: PermissionRepository, private val repository: PermissionRepository,
) { ) {
suspend operator fun invoke(permission: Int): Boolean = repository.shouldAskPermission(permission) suspend operator fun invoke(permission: String): Boolean = repository.shouldAskPermission(permission)
} }

View file

@ -5,7 +5,7 @@ import com.tangem.domain.settings.repositories.PermissionRepository
class ShouldInitiallyAskPermissionUseCase(private val repository: PermissionRepository) { class ShouldInitiallyAskPermissionUseCase(private val repository: PermissionRepository) {
suspend operator fun invoke(permission: Int): Either<Throwable, Boolean> = Either.catch { suspend operator fun invoke(permission: String): Either<Throwable, Boolean> = Either.catch {
repository.shouldInitiallyShowPermissionScreen(permission) repository.shouldInitiallyShowPermissionScreen(permission)
} }
} }

View file

@ -6,34 +6,34 @@ interface PermissionRepository {
* Return true if should display screen ONCE asking to allow [permission]. * Return true if should display screen ONCE asking to allow [permission].
* False otherwise or screen already was displayed * False otherwise or screen already was displayed
*/ */
suspend fun shouldInitiallyShowPermissionScreen(permission: Int): Boolean suspend fun shouldInitiallyShowPermissionScreen(permission: String): Boolean
/** /**
* Indicates which time [permission] was asked via platform dialog. * Indicates which time [permission] was asked via platform dialog.
* NOTE: Use this method to indicate either reroute to settings or display platform dialog. * NOTE: Use this method to indicate either reroute to settings or display platform dialog.
*/ */
suspend fun isFirstTimeAskingPermission(permission: Int): Boolean suspend fun isFirstTimeAskingPermission(permission: String): Boolean
/** /**
* Sets value indicating that [permission] was asked via platform dialog. * Sets value indicating that [permission] was asked via platform dialog.
* NOTE: Use this method to indicate either reroute to settings or display platform dialog. * NOTE: Use this method to indicate either reroute to settings or display platform dialog.
*/ */
suspend fun setFirstTimeAskingPermission(permission: Int, value: Boolean) suspend fun setFirstTimeAskingPermission(permission: String, value: Boolean)
/** /**
* Is clear to ask [permission]. * Is clear to ask [permission].
* User could already granted or permanently denied permission * User could already granted or permanently denied permission
* Or there is an active delay before next request * Or there is an active delay before next request
*/ */
suspend fun shouldAskPermission(permission: Int): Boolean suspend fun shouldAskPermission(permission: String): Boolean
/** /**
* Permanently deny [permission] and never request again * Permanently deny [permission] and never request again
*/ */
suspend fun neverAskPermission(permission: Int) suspend fun neverAskPermission(permission: String)
/** /**
* Delay next [permission] request for some time or active sessions * Delay next [permission] request for some time or active sessions
*/ */
suspend fun delayPermissionAsking(permission: Int) suspend fun delayPermissionAsking(permission: String)
} }