Introduce PushHistoryService to store data about the received push (#4573)
* Introduce PushHistoryService to store data about the received push Add a push database. * Update screenshots * Improve preview. * Update screenshots * Add missing test. * Add test for PushHistoryView * Fix configuration issue. Was: w: /libraries/troubleshoot/impl/src/test/kotlin/io/element/android/libraries/troubleshoot/impl/history/PushHistoryPresenterTest.kt:35:27 Cannot access class 'PushProvider' in the expression type. While it may work, this case indicates a configuration mistake and can lead to avoidable compilation errors, so it may be forbidden soon. Check your module classpath for missing or conflicting dependencies. --------- Co-authored-by: ElementBot <android@element.io>
This commit is contained in:
parent
a0b619007a
commit
a1d8322738
60 changed files with 1656 additions and 214 deletions
|
|
@ -15,10 +15,10 @@ android {
|
|||
|
||||
dependencies {
|
||||
api(projects.libraries.push.api)
|
||||
api(projects.libraries.pushproviders.api)
|
||||
implementation(projects.libraries.push.impl)
|
||||
implementation(projects.libraries.matrix.api)
|
||||
implementation(projects.libraries.matrixui)
|
||||
implementation(projects.libraries.pushproviders.api)
|
||||
implementation(projects.tests.testutils)
|
||||
implementation(libs.androidx.core)
|
||||
implementation(libs.coil.compose)
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ package io.element.android.libraries.push.test
|
|||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.core.SessionId
|
||||
import io.element.android.libraries.push.api.PushService
|
||||
import io.element.android.libraries.push.api.history.PushHistoryItem
|
||||
import io.element.android.libraries.pushproviders.api.Distributor
|
||||
import io.element.android.libraries.pushproviders.api.PushProvider
|
||||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
|
|
@ -26,6 +27,7 @@ class FakePushService(
|
|||
private val currentPushProvider: () -> PushProvider? = { availablePushProviders.firstOrNull() },
|
||||
private val selectPushProviderLambda: suspend (SessionId, PushProvider) -> Unit = { _, _ -> lambdaError() },
|
||||
private val setIgnoreRegistrationErrorLambda: (SessionId, Boolean) -> Unit = { _, _ -> lambdaError() },
|
||||
private val resetPushHistoryResult: () -> Unit = { lambdaError() },
|
||||
) : PushService {
|
||||
override suspend fun getCurrentPushProvider(): PushProvider? {
|
||||
return registeredPushProvider ?: currentPushProvider()
|
||||
|
|
@ -68,4 +70,26 @@ class FakePushService(
|
|||
override suspend fun testPush(): Boolean = simulateLongTask {
|
||||
testPushBlock()
|
||||
}
|
||||
|
||||
private val pushHistoryItemsFlow = MutableStateFlow<List<PushHistoryItem>>(emptyList())
|
||||
|
||||
override fun getPushHistoryItemsFlow(): Flow<List<PushHistoryItem>> {
|
||||
return pushHistoryItemsFlow
|
||||
}
|
||||
|
||||
fun emitPushHistoryItems(items: List<PushHistoryItem>) {
|
||||
pushHistoryItemsFlow.value = items
|
||||
}
|
||||
|
||||
private val pushCounterFlow = MutableStateFlow(0)
|
||||
|
||||
override val pushCounter: Flow<Int> = pushCounterFlow
|
||||
|
||||
fun emitPushCounter(counter: Int) {
|
||||
pushCounterFlow.value = counter
|
||||
}
|
||||
|
||||
override suspend fun resetPushHistory() {
|
||||
resetPushHistoryResult()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,11 +11,14 @@ import io.element.android.libraries.matrix.api.core.SessionId
|
|||
import io.element.android.libraries.matrix.api.notification.NotificationData
|
||||
import io.element.android.libraries.push.impl.notifications.CallNotificationEventResolver
|
||||
import io.element.android.libraries.push.impl.notifications.model.NotifiableEvent
|
||||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
|
||||
class FakeCallNotificationEventResolver(
|
||||
var resolveEventLambda: (sessionId: SessionId, notificationData: NotificationData, forceNotify: Boolean) -> NotifiableEvent? = { _, _, _ -> null },
|
||||
var resolveEventLambda: (sessionId: SessionId, notificationData: NotificationData, forceNotify: Boolean) -> Result<NotifiableEvent> = { _, _, _ ->
|
||||
lambdaError()
|
||||
},
|
||||
) : CallNotificationEventResolver {
|
||||
override fun resolveEvent(sessionId: SessionId, notificationData: NotificationData, forceNotify: Boolean): NotifiableEvent? {
|
||||
override fun resolveEvent(sessionId: SessionId, notificationData: NotificationData, forceNotify: Boolean): Result<NotifiableEvent> {
|
||||
return resolveEventLambda(sessionId, notificationData, forceNotify)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,9 +12,14 @@ import io.element.android.libraries.pushproviders.api.PushHandler
|
|||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
|
||||
class FakePushHandler(
|
||||
private val handleResult: (PushData) -> Unit = { lambdaError() }
|
||||
private val handleResult: (PushData, String) -> Unit = { _, _ -> lambdaError() },
|
||||
private val handleInvalidResult: (String) -> Unit = { lambdaError() },
|
||||
) : PushHandler {
|
||||
override suspend fun handle(pushData: PushData) {
|
||||
handleResult(pushData)
|
||||
override suspend fun handle(pushData: PushData, providerInfo: String) {
|
||||
handleResult(pushData, providerInfo)
|
||||
}
|
||||
|
||||
override suspend fun handleInvalid(providerInfo: String) {
|
||||
handleInvalidResult(providerInfo)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue