* Create `PushRequest` in push history DB: this will be used to store requests for push notifications, either pending or completed ones. * Rename `WorkManagerRequest` to `WorkManagerRequestBuilder`: make its `build` method return a list of `WorkManagerRequestWrapper`, which can be used to enqueue normal or unique workers. * Rename `PerformDatabaseVacuumRequestBuilder` and adapt it to the new API. * Adjust other components using `WorkManagerRequest`. * Replace `SyncNotificationWorkManagerRequestBuilder` with `SyncPendingNotificationsRequestBuilder` and `FetchNotificationsWorker` with `FetchPendingNotificationsWorker`: this new pair of request builder and worker allow enqueuing requests for a session id and, once the worker runs, retrieve all the pending request data and use it to fetch the associated events. This simplifies quite a bit how this data had to be passed or grouped, since it's no longer necessary to do so * Add new methods to `PushHistoryService` to modify the `PushDatabase`: - insertOrUpdatePushRequest - insertOrUpdatePushRequests - getPendingPushRequests - removeOldPushRequests * Make `PushHandler` just handle incoming pushes: those will be inserted into the pending push request table in DB, then handled by the new worker. Once the process finished, a new `NotificationResultProcessor` will handle the results and what needs to be done with them (call ringing, displaying notifications, etc.) * Add `requestType` optional parameter to `WorkManagerScheduler.cancel` so we can decide to only cancel some kinds of requests. * Add migration to remove existing work manager requests for fetching notifications, since the previous worker class no longer exists.
104 lines
3.9 KiB
Kotlin
104 lines
3.9 KiB
Kotlin
import extension.setupDependencyInjection
|
|
import extension.testCommonDependencies
|
|
|
|
/*
|
|
* Copyright (c) 2025 Element Creations Ltd.
|
|
* Copyright 2023, 2024 New Vector Ltd.
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
|
* Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
plugins {
|
|
id("io.element.android-compose-library")
|
|
alias(libs.plugins.kotlin.serialization)
|
|
alias(libs.plugins.sqldelight)
|
|
}
|
|
|
|
android {
|
|
namespace = "io.element.android.libraries.push.impl"
|
|
|
|
testOptions {
|
|
unitTests {
|
|
isIncludeAndroidResources = true
|
|
}
|
|
}
|
|
}
|
|
|
|
setupDependencyInjection()
|
|
|
|
dependencies {
|
|
implementation(libs.androidx.corektx)
|
|
implementation(libs.androidx.datastore.preferences)
|
|
implementation(platform(libs.network.retrofit.bom))
|
|
implementation(libs.network.retrofit)
|
|
implementation(libs.serialization.json)
|
|
implementation(libs.coil)
|
|
|
|
implementation(libs.sqldelight.driver.android)
|
|
implementation(libs.sqlcipher)
|
|
implementation(libs.sqlite)
|
|
implementation(libs.sqldelight.coroutines)
|
|
implementation(projects.libraries.encryptedDb)
|
|
|
|
implementation(projects.appconfig)
|
|
implementation(projects.libraries.architecture)
|
|
implementation(projects.libraries.core)
|
|
implementation(projects.libraries.dateformatter.api)
|
|
implementation(projects.libraries.designsystem)
|
|
implementation(projects.libraries.di)
|
|
implementation(projects.libraries.androidutils)
|
|
implementation(projects.libraries.network)
|
|
implementation(projects.libraries.matrix.api)
|
|
implementation(projects.libraries.matrixui)
|
|
implementation(projects.libraries.matrixmedia.api)
|
|
implementation(projects.features.networkmonitor.api)
|
|
implementation(projects.libraries.preferences.api)
|
|
implementation(projects.libraries.sessionStorage.api)
|
|
implementation(projects.libraries.uiStrings)
|
|
implementation(projects.libraries.troubleshoot.api)
|
|
implementation(projects.libraries.workmanager.api)
|
|
implementation(projects.features.call.api)
|
|
implementation(projects.features.enterprise.api)
|
|
implementation(projects.features.lockscreen.api)
|
|
implementation(projects.libraries.featureflag.api)
|
|
api(projects.libraries.pushproviders.api)
|
|
api(projects.libraries.pushstore.api)
|
|
api(projects.libraries.push.api)
|
|
|
|
implementation(projects.services.analytics.api)
|
|
implementation(projects.services.appnavstate.api)
|
|
implementation(projects.services.toolbox.api)
|
|
|
|
testCommonDependencies(libs)
|
|
testImplementation(libs.coil.test)
|
|
testImplementation(projects.libraries.matrix.test)
|
|
testImplementation(projects.libraries.matrixmedia.test)
|
|
testImplementation(projects.libraries.preferences.test)
|
|
testImplementation(projects.libraries.sessionStorage.test)
|
|
testImplementation(projects.libraries.push.test)
|
|
testImplementation(projects.libraries.pushproviders.test)
|
|
testImplementation(projects.libraries.pushstore.test)
|
|
testImplementation(projects.libraries.troubleshoot.test)
|
|
testImplementation(projects.libraries.workmanager.test)
|
|
testImplementation(projects.features.call.test)
|
|
testImplementation(projects.features.enterprise.test)
|
|
testImplementation(projects.features.lockscreen.test)
|
|
testImplementation(projects.features.networkmonitor.test)
|
|
testImplementation(projects.services.appnavstate.impl)
|
|
testImplementation(projects.services.appnavstate.test)
|
|
testImplementation(projects.services.analytics.test)
|
|
testImplementation(projects.services.toolbox.impl)
|
|
testImplementation(projects.services.toolbox.test)
|
|
testImplementation(projects.libraries.featureflag.test)
|
|
testImplementation(libs.kotlinx.collections.immutable)
|
|
}
|
|
|
|
sqldelight {
|
|
databases {
|
|
create("PushDatabase") {
|
|
schemaOutputDirectory = File("src/main/sqldelight/databases")
|
|
verifyMigrations = true
|
|
}
|
|
}
|
|
}
|