Updated on 2026-08-14
This commit is contained in:
parent
fa948bd91a
commit
dd6d478c4f
9 changed files with 27 additions and 26 deletions
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue