Skip to content

Commit 4a87c46

Browse files
committed
Consolidate trial-state evaluation into a single method
Inline observeTrialExpiry latch into evaluateTrialState, route hasActiveTrial and evaluateUiState through the single computation. Halves prefs reads on write-gate checks.
1 parent 0f5ec1b commit 4a87c46

2 files changed

Lines changed: 8 additions & 15 deletions

File tree

presentation/src/main/java/org/cryptomator/presentation/licensing/LicenseEnforcer.kt

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,27 +64,19 @@ class LicenseEnforcer @Inject constructor(private val sharedPreferencesHandler:
6464
sharedPreferencesHandler.setTrialExpirationDate(trialExpiration)
6565
}
6666

67-
private fun observeTrialExpiry() {
68-
val trialExpiration = sharedPreferencesHandler.trialExpirationDate()
69-
val now = System.currentTimeMillis()
70-
if (trialExpiration > 0 && trialExpiration <= now && !sharedPreferencesHandler.isTrialExpired()) {
71-
sharedPreferencesHandler.setTrialExpired(true)
72-
}
73-
}
74-
7567
fun hasActiveTrial(): Boolean {
76-
observeTrialExpiry()
77-
val trialExpiration = sharedPreferencesHandler.trialExpirationDate()
78-
return trialExpiration > 0 && trialExpiration > System.currentTimeMillis() && !sharedPreferencesHandler.isTrialExpired()
68+
return evaluateTrialState().isActive
7969
}
8070

8171
fun evaluateTrialState(): TrialState {
82-
observeTrialExpiry()
8372
val trialExpiration = sharedPreferencesHandler.trialExpirationDate()
8473
val now = System.currentTimeMillis()
8574
val sticky = sharedPreferencesHandler.isTrialExpired()
8675
val active = trialExpiration > 0 && trialExpiration > now && !sticky
8776
val expired = trialExpiration > 0 && (trialExpiration <= now || sticky)
77+
if (expired && !sticky) {
78+
sharedPreferencesHandler.setTrialExpired(true)
79+
}
8880
val formattedDate = if (active || expired) {
8981
DateFormat.getDateInstance().format(Date(trialExpiration))
9082
} else null
@@ -102,12 +94,13 @@ class LicenseEnforcer @Inject constructor(private val sharedPreferencesHandler:
10294

10395
fun evaluateUiState(context: Context): LicenseUiState {
10496
val trialState = evaluateTrialState()
97+
val paidLicense = hasPaidLicense()
10598
val expirationText = if (trialState.isActive || trialState.isExpired) {
10699
context.getString(R.string.screen_license_check_trial_expiration, trialState.formattedExpirationDate)
107100
} else null
108101
return LicenseUiState(
109-
hasWriteAccess = hasWriteAccess(),
110-
hasPaidLicense = hasPaidLicense(),
102+
hasWriteAccess = paidLicense || trialState.isActive,
103+
hasPaidLicense = paidLicense,
111104
trialState = trialState,
112105
trialExpirationText = expirationText
113106
)

presentation/src/test/java/org/cryptomator/presentation/licensing/LicenseEnforcerTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ class LicenseEnforcerTest {
403403
}
404404

405405
@Test
406-
fun `observeTrialExpiry idempotent once flag is set`() {
406+
fun `evaluateTrialState is idempotent once sticky flag is set`() {
407407
`when`(sharedPreferencesHandler.trialExpirationDate()).thenReturn(System.currentTimeMillis() - 1000L)
408408
`when`(sharedPreferencesHandler.isTrialExpired()).thenReturn(true)
409409

0 commit comments

Comments
 (0)