Skip to content

Commit 017664f

Browse files
committed
Ensure that the battery optimization banner is not displayed after an internal clear cache.
1 parent 0a58fb3 commit 017664f

File tree

8 files changed

+47
-1
lines changed

8 files changed

+47
-1
lines changed

features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/tasks/ClearCacheUseCase.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class DefaultClearCacheUseCase @Inject constructor(
5959
seenInvitesStore.clear()
6060
// Ensure any error will be displayed again
6161
pushService.setIgnoreRegistrationError(matrixClient.sessionId, false)
62+
pushService.resetBatteryOptimizationState()
6263
// Ensure the app is restarted
6364
defaultCacheService.onClearedCache(matrixClient.sessionId)
6465
}

features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/tasks/DefaultClearCacheUseCaseTest.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,10 @@ class DefaultClearCacheUseCaseTest {
4646
resetLambda = resetFtueLambda,
4747
)
4848
val setIgnoreRegistrationErrorLambda = lambdaRecorder<SessionId, Boolean, Unit> { _, _ -> }
49+
val resetBatteryOptimizationStateResult = lambdaRecorder<Unit> { }
4950
val pushService = FakePushService(
50-
setIgnoreRegistrationErrorLambda = setIgnoreRegistrationErrorLambda
51+
setIgnoreRegistrationErrorLambda = setIgnoreRegistrationErrorLambda,
52+
resetBatteryOptimizationStateResult = resetBatteryOptimizationStateResult,
5153
)
5254
val seenInvitesStore = InMemorySeenInvitesStore(setOf(A_ROOM_ID))
5355
assertThat(seenInvitesStore.seenRoomIds().first()).isNotEmpty()
@@ -68,6 +70,7 @@ class DefaultClearCacheUseCaseTest {
6870
resetFtueLambda.assertions().isCalledOnce()
6971
setIgnoreRegistrationErrorLambda.assertions().isCalledOnce()
7072
.with(value(matrixClient.sessionId), value(false))
73+
resetBatteryOptimizationStateResult.assertions().isCalledOnce()
7174
assertThat(awaitItem()).isEqualTo(matrixClient.sessionId)
7275
assertThat(seenInvitesStore.seenRoomIds().first()).isEmpty()
7376
assertThat(activeRoomsHolder.getActiveRoom(A_SESSION_ID)).isNull()

libraries/push/api/src/main/kotlin/io/element/android/libraries/push/api/PushService.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,9 @@ interface PushService {
6767
* Reset the push history, including the push counter.
6868
*/
6969
suspend fun resetPushHistory()
70+
71+
/**
72+
* Reset the battery optimization state.
73+
*/
74+
suspend fun resetBatteryOptimizationState()
7075
}

libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/DefaultPushService.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import io.element.android.libraries.matrix.api.core.SessionId
1515
import io.element.android.libraries.push.api.GetCurrentPushProvider
1616
import io.element.android.libraries.push.api.PushService
1717
import io.element.android.libraries.push.api.history.PushHistoryItem
18+
import io.element.android.libraries.push.impl.push.MutableBatteryOptimizationStore
1819
import io.element.android.libraries.push.impl.store.PushDataStore
1920
import io.element.android.libraries.push.impl.test.TestPush
2021
import io.element.android.libraries.pushproviders.api.Distributor
@@ -37,6 +38,7 @@ class DefaultPushService @Inject constructor(
3738
private val sessionObserver: SessionObserver,
3839
private val pushClientSecretStore: PushClientSecretStore,
3940
private val pushDataStore: PushDataStore,
41+
private val mutableBatteryOptimizationStore: MutableBatteryOptimizationStore,
4042
) : PushService, SessionListener {
4143
init {
4244
observeSessions()
@@ -138,4 +140,8 @@ class DefaultPushService @Inject constructor(
138140
override suspend fun resetPushHistory() {
139141
pushDataStore.reset()
140142
}
143+
144+
override suspend fun resetBatteryOptimizationState() {
145+
mutableBatteryOptimizationStore.reset()
146+
}
141147
}

libraries/push/impl/src/main/kotlin/io/element/android/libraries/push/impl/push/MutableBatteryOptimizationStore.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import javax.inject.Inject
1515
interface MutableBatteryOptimizationStore {
1616
suspend fun showBatteryOptimizationBanner()
1717
suspend fun onOptimizationBannerDismissed()
18+
suspend fun reset()
1819
}
1920

2021
@ContributesBinding(AppScope::class)
@@ -28,4 +29,8 @@ class DefaultMutableBatteryOptimizationStore @Inject constructor(
2829
override suspend fun onOptimizationBannerDismissed() {
2930
defaultPushDataStore.setBatteryOptimizationBannerState(DefaultPushDataStore.BATTERY_OPTIMIZATION_BANNER_STATE_DISMISSED)
3031
}
32+
33+
override suspend fun reset() {
34+
defaultPushDataStore.setBatteryOptimizationBannerState(DefaultPushDataStore.BATTERY_OPTIMIZATION_BANNER_STATE_INIT)
35+
}
3136
}

libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/DefaultPushServiceTest.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import io.element.android.libraries.matrix.test.AN_EXCEPTION
1414
import io.element.android.libraries.matrix.test.A_SESSION_ID
1515
import io.element.android.libraries.matrix.test.FakeMatrixClient
1616
import io.element.android.libraries.push.api.GetCurrentPushProvider
17+
import io.element.android.libraries.push.impl.push.FakeMutableBatteryOptimizationStore
18+
import io.element.android.libraries.push.impl.push.MutableBatteryOptimizationStore
1719
import io.element.android.libraries.push.impl.store.InMemoryPushDataStore
1820
import io.element.android.libraries.push.impl.store.PushDataStore
1921
import io.element.android.libraries.push.impl.test.FakeTestPush
@@ -283,6 +285,18 @@ class DefaultPushServiceTest {
283285
assertThat(userPushStore.getPushProviderName()).isEqualTo(aPushProvider.name)
284286
}
285287

288+
@Test
289+
fun `resetBatteryOptimizationState invokes the store method`() = runTest {
290+
val resetResult = lambdaRecorder<Unit> { }
291+
val defaultPushService = createDefaultPushService(
292+
mutableBatteryOptimizationStore = FakeMutableBatteryOptimizationStore(
293+
resetResult = resetResult,
294+
),
295+
)
296+
defaultPushService.resetBatteryOptimizationState()
297+
resetResult.assertions().isCalledOnce()
298+
}
299+
286300
private fun createDefaultPushService(
287301
testPush: TestPush = FakeTestPush(),
288302
userPushStoreFactory: UserPushStoreFactory = FakeUserPushStoreFactory(),
@@ -291,6 +305,7 @@ class DefaultPushServiceTest {
291305
sessionObserver: SessionObserver = NoOpSessionObserver(),
292306
pushClientSecretStore: PushClientSecretStore = InMemoryPushClientSecretStore(),
293307
pushDataStore: PushDataStore = InMemoryPushDataStore(),
308+
mutableBatteryOptimizationStore: MutableBatteryOptimizationStore = FakeMutableBatteryOptimizationStore(),
294309
): DefaultPushService {
295310
return DefaultPushService(
296311
testPush = testPush,
@@ -300,6 +315,7 @@ class DefaultPushServiceTest {
300315
sessionObserver = sessionObserver,
301316
pushClientSecretStore = pushClientSecretStore,
302317
pushDataStore = pushDataStore,
318+
mutableBatteryOptimizationStore = mutableBatteryOptimizationStore,
303319
)
304320
}
305321
}

libraries/push/impl/src/test/kotlin/io/element/android/libraries/push/impl/push/FakeMutableBatteryOptimizationStore.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import io.element.android.tests.testutils.lambda.lambdaError
1212
class FakeMutableBatteryOptimizationStore(
1313
private val showBatteryOptimizationBannerResult: () -> Unit = { lambdaError() },
1414
private val onOptimizationBannerDismissedResult: () -> Unit = { lambdaError() },
15+
private val resetResult: () -> Unit = { lambdaError() },
1516
) : MutableBatteryOptimizationStore {
1617
override suspend fun showBatteryOptimizationBanner() {
1718
showBatteryOptimizationBannerResult()
@@ -20,4 +21,8 @@ class FakeMutableBatteryOptimizationStore(
2021
override suspend fun onOptimizationBannerDismissed() {
2122
onOptimizationBannerDismissedResult()
2223
}
24+
25+
override suspend fun reset() {
26+
resetResult()
27+
}
2328
}

libraries/push/test/src/main/kotlin/io/element/android/libraries/push/test/FakePushService.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class FakePushService(
2828
private val selectPushProviderLambda: suspend (SessionId, PushProvider) -> Unit = { _, _ -> lambdaError() },
2929
private val setIgnoreRegistrationErrorLambda: (SessionId, Boolean) -> Unit = { _, _ -> lambdaError() },
3030
private val resetPushHistoryResult: () -> Unit = { lambdaError() },
31+
private val resetBatteryOptimizationStateResult: () -> Unit = { lambdaError() },
3132
) : PushService {
3233
override suspend fun getCurrentPushProvider(): PushProvider? {
3334
return registeredPushProvider ?: currentPushProvider()
@@ -92,4 +93,8 @@ class FakePushService(
9293
override suspend fun resetPushHistory() = simulateLongTask {
9394
resetPushHistoryResult()
9495
}
96+
97+
override suspend fun resetBatteryOptimizationState() {
98+
resetBatteryOptimizationStateResult()
99+
}
95100
}

0 commit comments

Comments
 (0)