Adding use case to check support for new enabled field support
This commit is contained in:
parent
38fe556978
commit
1acb42f61d
|
@ -70,6 +70,11 @@ data class HomeServerCapabilities(
|
||||||
* True if the home server supports threaded read receipts and unread notifications.
|
* True if the home server supports threaded read receipts and unread notifications.
|
||||||
*/
|
*/
|
||||||
val canUseThreadReadReceiptsAndNotifications: Boolean = false,
|
val canUseThreadReadReceiptsAndNotifications: Boolean = false,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True if the home server supports remote toggle of Pusher for a given device.
|
||||||
|
*/
|
||||||
|
val canRemotelyTogglePushNotificationsOfDevices: Boolean = false,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
enum class RoomCapabilitySupport {
|
enum class RoomCapabilitySupport {
|
||||||
|
|
|
@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.auth.version
|
||||||
|
|
||||||
import com.squareup.moshi.Json
|
import com.squareup.moshi.Json
|
||||||
import com.squareup.moshi.JsonClass
|
import com.squareup.moshi.JsonClass
|
||||||
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Model for https://matrix.org/docs/spec/client_server/latest#get-matrix-client-versions.
|
* Model for https://matrix.org/docs/spec/client_server/latest#get-matrix-client-versions.
|
||||||
|
@ -56,6 +57,7 @@ private const val FEATURE_THREADS_MSC3440_STABLE = "org.matrix.msc3440.stable"
|
||||||
private const val FEATURE_QR_CODE_LOGIN = "org.matrix.msc3882"
|
private const val FEATURE_QR_CODE_LOGIN = "org.matrix.msc3882"
|
||||||
private const val FEATURE_THREADS_MSC3771 = "org.matrix.msc3771"
|
private const val FEATURE_THREADS_MSC3771 = "org.matrix.msc3771"
|
||||||
private const val FEATURE_THREADS_MSC3773 = "org.matrix.msc3773"
|
private const val FEATURE_THREADS_MSC3773 = "org.matrix.msc3773"
|
||||||
|
private const val FEATURE_PUSH_NOTIFICATIONS_MSC3881 = "org.matrix.msc3881"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the SDK supports this homeserver version.
|
* Return true if the SDK supports this homeserver version.
|
||||||
|
@ -142,3 +144,12 @@ private fun Versions.getMaxVersion(): HomeServerVersion {
|
||||||
?.maxOrNull()
|
?.maxOrNull()
|
||||||
?: HomeServerVersion.r0_0_0
|
?: HomeServerVersion.r0_0_0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicate if the server supports MSC3881: https://github.com/matrix-org/matrix-spec-proposals/pull/3881.
|
||||||
|
*
|
||||||
|
* @return true if remote toggle of push notifications is supported
|
||||||
|
*/
|
||||||
|
internal fun Versions.doesServerSupportRemoteToggleOfPushNotifications(): Boolean {
|
||||||
|
return unstableFeatures?.get(FEATURE_PUSH_NOTIFICATIONS_MSC3881).orFalse()
|
||||||
|
}
|
||||||
|
|
|
@ -58,6 +58,7 @@ import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo038
|
||||||
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo039
|
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo039
|
||||||
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo040
|
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo040
|
||||||
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo041
|
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo041
|
||||||
|
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo042
|
||||||
import org.matrix.android.sdk.internal.util.Normalizer
|
import org.matrix.android.sdk.internal.util.Normalizer
|
||||||
import org.matrix.android.sdk.internal.util.database.MatrixRealmMigration
|
import org.matrix.android.sdk.internal.util.database.MatrixRealmMigration
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
@ -66,7 +67,7 @@ internal class RealmSessionStoreMigration @Inject constructor(
|
||||||
private val normalizer: Normalizer
|
private val normalizer: Normalizer
|
||||||
) : MatrixRealmMigration(
|
) : MatrixRealmMigration(
|
||||||
dbName = "Session",
|
dbName = "Session",
|
||||||
schemaVersion = 41L,
|
schemaVersion = 42L,
|
||||||
) {
|
) {
|
||||||
/**
|
/**
|
||||||
* Forces all RealmSessionStoreMigration instances to be equal.
|
* Forces all RealmSessionStoreMigration instances to be equal.
|
||||||
|
@ -117,5 +118,6 @@ internal class RealmSessionStoreMigration @Inject constructor(
|
||||||
if (oldVersion < 39) MigrateSessionTo039(realm).perform()
|
if (oldVersion < 39) MigrateSessionTo039(realm).perform()
|
||||||
if (oldVersion < 40) MigrateSessionTo040(realm).perform()
|
if (oldVersion < 40) MigrateSessionTo040(realm).perform()
|
||||||
if (oldVersion < 41) MigrateSessionTo041(realm).perform()
|
if (oldVersion < 41) MigrateSessionTo041(realm).perform()
|
||||||
|
if (oldVersion < 42) MigrateSessionTo042(realm).perform()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,8 @@ internal object HomeServerCapabilitiesMapper {
|
||||||
canUseThreading = entity.canUseThreading,
|
canUseThreading = entity.canUseThreading,
|
||||||
canControlLogoutDevices = entity.canControlLogoutDevices,
|
canControlLogoutDevices = entity.canControlLogoutDevices,
|
||||||
canLoginWithQrCode = entity.canLoginWithQrCode,
|
canLoginWithQrCode = entity.canLoginWithQrCode,
|
||||||
canUseThreadReadReceiptsAndNotifications = entity.canUseThreadReadReceiptsAndNotifications
|
canUseThreadReadReceiptsAndNotifications = entity.canUseThreadReadReceiptsAndNotifications,
|
||||||
|
canRemotelyTogglePushNotificationsOfDevices = entity.canRemotelyTogglePushNotificationsOfDevices,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 The Matrix.org Foundation C.I.C.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.matrix.android.sdk.internal.database.migration
|
||||||
|
|
||||||
|
import io.realm.DynamicRealm
|
||||||
|
import org.matrix.android.sdk.internal.database.model.HomeServerCapabilitiesEntityFields
|
||||||
|
import org.matrix.android.sdk.internal.extensions.forceRefreshOfHomeServerCapabilities
|
||||||
|
import org.matrix.android.sdk.internal.util.database.RealmMigrator
|
||||||
|
|
||||||
|
internal class MigrateSessionTo042(realm: DynamicRealm) : RealmMigrator(realm, 42) {
|
||||||
|
|
||||||
|
override fun doMigrate(realm: DynamicRealm) {
|
||||||
|
realm.schema.get("HomeServerCapabilitiesEntity")
|
||||||
|
?.addField(HomeServerCapabilitiesEntityFields.CAN_REMOTELY_TOGGLE_PUSH_NOTIFICATIONS_OF_DEVICES, Boolean::class.java)
|
||||||
|
?.forceRefreshOfHomeServerCapabilities()
|
||||||
|
}
|
||||||
|
}
|
|
@ -33,6 +33,7 @@ internal open class HomeServerCapabilitiesEntity(
|
||||||
var canControlLogoutDevices: Boolean = false,
|
var canControlLogoutDevices: Boolean = false,
|
||||||
var canLoginWithQrCode: Boolean = false,
|
var canLoginWithQrCode: Boolean = false,
|
||||||
var canUseThreadReadReceiptsAndNotifications: Boolean = false,
|
var canUseThreadReadReceiptsAndNotifications: Boolean = false,
|
||||||
|
var canRemotelyTogglePushNotificationsOfDevices: Boolean = false,
|
||||||
) : RealmObject() {
|
) : RealmObject() {
|
||||||
|
|
||||||
companion object
|
companion object
|
||||||
|
|
|
@ -25,6 +25,7 @@ import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilities
|
||||||
import org.matrix.android.sdk.internal.auth.version.Versions
|
import org.matrix.android.sdk.internal.auth.version.Versions
|
||||||
import org.matrix.android.sdk.internal.auth.version.doesServerSupportLogoutDevices
|
import org.matrix.android.sdk.internal.auth.version.doesServerSupportLogoutDevices
|
||||||
import org.matrix.android.sdk.internal.auth.version.doesServerSupportQrCodeLogin
|
import org.matrix.android.sdk.internal.auth.version.doesServerSupportQrCodeLogin
|
||||||
|
import org.matrix.android.sdk.internal.auth.version.doesServerSupportRemoteToggleOfPushNotifications
|
||||||
import org.matrix.android.sdk.internal.auth.version.doesServerSupportThreadUnreadNotifications
|
import org.matrix.android.sdk.internal.auth.version.doesServerSupportThreadUnreadNotifications
|
||||||
import org.matrix.android.sdk.internal.auth.version.doesServerSupportThreads
|
import org.matrix.android.sdk.internal.auth.version.doesServerSupportThreads
|
||||||
import org.matrix.android.sdk.internal.auth.version.isLoginAndRegistrationSupportedBySdk
|
import org.matrix.android.sdk.internal.auth.version.isLoginAndRegistrationSupportedBySdk
|
||||||
|
@ -141,13 +142,18 @@ internal class DefaultGetHomeServerCapabilitiesTask @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getVersionResult != null) {
|
if (getVersionResult != null) {
|
||||||
homeServerCapabilitiesEntity.lastVersionIdentityServerSupported = getVersionResult.isLoginAndRegistrationSupportedBySdk()
|
homeServerCapabilitiesEntity.lastVersionIdentityServerSupported =
|
||||||
homeServerCapabilitiesEntity.canControlLogoutDevices = getVersionResult.doesServerSupportLogoutDevices()
|
getVersionResult.isLoginAndRegistrationSupportedBySdk()
|
||||||
|
homeServerCapabilitiesEntity.canControlLogoutDevices =
|
||||||
|
getVersionResult.doesServerSupportLogoutDevices()
|
||||||
homeServerCapabilitiesEntity.canUseThreading = /* capabilities?.threads?.enabled.orFalse() || */
|
homeServerCapabilitiesEntity.canUseThreading = /* capabilities?.threads?.enabled.orFalse() || */
|
||||||
getVersionResult.doesServerSupportThreads()
|
getVersionResult.doesServerSupportThreads()
|
||||||
homeServerCapabilitiesEntity.canUseThreadReadReceiptsAndNotifications =
|
homeServerCapabilitiesEntity.canUseThreadReadReceiptsAndNotifications =
|
||||||
getVersionResult.doesServerSupportThreadUnreadNotifications()
|
getVersionResult.doesServerSupportThreadUnreadNotifications()
|
||||||
homeServerCapabilitiesEntity.canLoginWithQrCode = getVersionResult.doesServerSupportQrCodeLogin()
|
homeServerCapabilitiesEntity.canLoginWithQrCode =
|
||||||
|
getVersionResult.doesServerSupportQrCodeLogin()
|
||||||
|
homeServerCapabilitiesEntity.canRemotelyTogglePushNotificationsOfDevices =
|
||||||
|
getVersionResult.doesServerSupportRemoteToggleOfPushNotifications()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getWellknownResult != null && getWellknownResult is WellknownResult.Prompt) {
|
if (getWellknownResult != null && getWellknownResult is WellknownResult.Prompt) {
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.settings.devices.v2.notification
|
||||||
|
|
||||||
|
import im.vector.app.core.di.ActiveSessionHolder
|
||||||
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class CheckIfCanTogglePushNotificationsViaPusherUseCase @Inject constructor(
|
||||||
|
private val activeSessionHolder: ActiveSessionHolder,
|
||||||
|
) {
|
||||||
|
|
||||||
|
fun execute(): Boolean {
|
||||||
|
return activeSessionHolder
|
||||||
|
.getSafeActiveSession()
|
||||||
|
?.homeServerCapabilitiesService()
|
||||||
|
?.getHomeServerCapabilities()
|
||||||
|
?.canRemotelyTogglePushNotificationsOfDevices
|
||||||
|
.orFalse()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package im.vector.app.features.settings.devices.v2.notification
|
||||||
|
|
||||||
|
import im.vector.app.test.fakes.FakeActiveSessionHolder
|
||||||
|
import im.vector.app.test.fixtures.aHomeServerCapabilities
|
||||||
|
import org.amshove.kluent.shouldBeEqualTo
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
private val A_HOMESERVER_CAPABILITIES = aHomeServerCapabilities(canRemotelyTogglePushNotificationsOfDevices = true)
|
||||||
|
|
||||||
|
class CheckIfCanTogglePushNotificationsViaPusherUseCaseTest {
|
||||||
|
|
||||||
|
private val fakeActiveSessionHolder = FakeActiveSessionHolder()
|
||||||
|
|
||||||
|
private val checkIfCanTogglePushNotificationsViaPusherUseCase =
|
||||||
|
CheckIfCanTogglePushNotificationsViaPusherUseCase(
|
||||||
|
activeSessionHolder = fakeActiveSessionHolder.instance,
|
||||||
|
)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given current session when execute then toggle capability is returned`() {
|
||||||
|
// Given
|
||||||
|
fakeActiveSessionHolder
|
||||||
|
.fakeSession
|
||||||
|
.fakeHomeServerCapabilitiesService
|
||||||
|
.givenCapabilities(A_HOMESERVER_CAPABILITIES)
|
||||||
|
|
||||||
|
// When
|
||||||
|
val result = checkIfCanTogglePushNotificationsViaPusherUseCase.execute()
|
||||||
|
|
||||||
|
// Then
|
||||||
|
result shouldBeEqualTo A_HOMESERVER_CAPABILITIES.canRemotelyTogglePushNotificationsOfDevices
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given no current session when execute then false is returned`() {
|
||||||
|
// Given
|
||||||
|
fakeActiveSessionHolder.givenGetSafeActiveSessionReturns(null)
|
||||||
|
|
||||||
|
// When
|
||||||
|
val result = checkIfCanTogglePushNotificationsViaPusherUseCase.execute()
|
||||||
|
|
||||||
|
// Then
|
||||||
|
result shouldBeEqualTo false
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,14 +27,16 @@ fun aHomeServerCapabilities(
|
||||||
maxUploadFileSize: Long = 100L,
|
maxUploadFileSize: Long = 100L,
|
||||||
lastVersionIdentityServerSupported: Boolean = false,
|
lastVersionIdentityServerSupported: Boolean = false,
|
||||||
defaultIdentityServerUrl: String? = null,
|
defaultIdentityServerUrl: String? = null,
|
||||||
roomVersions: RoomVersionCapabilities? = null
|
roomVersions: RoomVersionCapabilities? = null,
|
||||||
|
canRemotelyTogglePushNotificationsOfDevices: Boolean = true,
|
||||||
) = HomeServerCapabilities(
|
) = HomeServerCapabilities(
|
||||||
canChangePassword,
|
canChangePassword = canChangePassword,
|
||||||
canChangeDisplayName,
|
canChangeDisplayName = canChangeDisplayName,
|
||||||
canChangeAvatar,
|
canChangeAvatar = canChangeAvatar,
|
||||||
canChange3pid,
|
canChange3pid = canChange3pid,
|
||||||
maxUploadFileSize,
|
maxUploadFileSize = maxUploadFileSize,
|
||||||
lastVersionIdentityServerSupported,
|
lastVersionIdentityServerSupported = lastVersionIdentityServerSupported,
|
||||||
defaultIdentityServerUrl,
|
defaultIdentityServerUrl = defaultIdentityServerUrl,
|
||||||
roomVersions
|
roomVersions = roomVersions,
|
||||||
|
canRemotelyTogglePushNotificationsOfDevices = canRemotelyTogglePushNotificationsOfDevices,
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue