From 1c35d07acc67ec79a7b1fcee321157953e116dcd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Feb 2020 14:46:42 +0100 Subject: [PATCH] PushRuleService.getPushRules() now returns a RuleSet. Use getAllRules() on this object to get all the rules. --- CHANGES.md | 2 +- .../matrix/android/api/pushrules/PushRuleService.kt | 4 ++-- .../matrix/android/api/pushrules/rest/RuleSet.kt | 9 +++++++-- .../session/notification/DefaultPushRuleService.kt | 12 +++++++++--- .../internal/session/sync/SyncResponseHandler.kt | 2 +- .../VectorSettingsNotificationPreferenceFragment.kt | 4 ++-- .../features/settings/push/PushRulesViewModel.kt | 2 +- .../settings/troubleshoot/TestAccountSettings.kt | 2 +- .../settings/troubleshoot/TestBingRulesSettings.kt | 2 +- 9 files changed, 25 insertions(+), 14 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4f8838deb6..20c2e5b266 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,7 +14,7 @@ Translations 🗣: - SDK API changes ⚠️: - - + - PushRuleService.getPushRules() now returns a RuleSet. Use getAllRules() on this object to get all the rules. Build 🧱: - diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/PushRuleService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/PushRuleService.kt index 0ef70eb99b..94c2121695 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/PushRuleService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/PushRuleService.kt @@ -17,6 +17,7 @@ package im.vector.matrix.android.api.pushrules import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.pushrules.rest.PushRule +import im.vector.matrix.android.api.pushrules.rest.RuleSet import im.vector.matrix.android.api.session.events.model.Event import im.vector.matrix.android.api.util.Cancelable @@ -27,8 +28,7 @@ interface PushRuleService { */ fun fetchPushRules(scope: String = RuleScope.GLOBAL) - // TODO get push rule set - fun getPushRules(scope: String = RuleScope.GLOBAL): List + fun getPushRules(scope: String = RuleScope.GLOBAL): RuleSet // TODO update rule diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/RuleSet.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/RuleSet.kt index 82aa5da716..43b2599b52 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/RuleSet.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/RuleSet.kt @@ -22,7 +22,7 @@ import com.squareup.moshi.JsonClass * Ref: https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-pushrules */ @JsonClass(generateAdapter = true) -internal data class RuleSet( +data class RuleSet( @Json(name = "content") val content: List? = null, @Json(name = "override") @@ -33,4 +33,9 @@ internal data class RuleSet( val sender: List? = null, @Json(name = "underride") val underride: List? = null -) +) { + fun getAllRules(): List { + // Ref. for the order: https://matrix.org/docs/spec/client_server/latest#push-rules + return override.orEmpty() + content.orEmpty() + room.orEmpty() + sender.orEmpty() + underride.orEmpty() + } +} diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/notification/DefaultPushRuleService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/notification/DefaultPushRuleService.kt index 7e8dc1eb30..e6e45735e9 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/notification/DefaultPushRuleService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/notification/DefaultPushRuleService.kt @@ -22,6 +22,7 @@ import im.vector.matrix.android.api.pushrules.RuleKind import im.vector.matrix.android.api.pushrules.RuleSetKey import im.vector.matrix.android.api.pushrules.getActions import im.vector.matrix.android.api.pushrules.rest.PushRule +import im.vector.matrix.android.api.pushrules.rest.RuleSet import im.vector.matrix.android.api.session.events.model.Event import im.vector.matrix.android.api.util.Cancelable import im.vector.matrix.android.internal.database.mapper.PushRulesMapper @@ -55,7 +56,7 @@ internal class DefaultPushRuleService @Inject constructor( .executeBy(taskExecutor) } - override fun getPushRules(scope: String): List { + override fun getPushRules(scope: String): RuleSet { var contentRules: List = emptyList() var overrideRules: List = emptyList() var roomRules: List = emptyList() @@ -90,8 +91,13 @@ internal class DefaultPushRuleService @Inject constructor( } } - // Ref. for the order: https://matrix.org/docs/spec/client_server/latest#push-rules - return overrideRules + contentRules + roomRules + senderRules + underrideRules + return RuleSet( + content = contentRules, + override = overrideRules, + room = roomRules, + sender = senderRules, + underride = underrideRules + ) } override fun updatePushRuleEnableStatus(kind: RuleKind, pushRule: PushRule, enabled: Boolean, callback: MatrixCallback): Cancelable { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/SyncResponseHandler.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/SyncResponseHandler.kt index 1454fdae7d..4ae42b273d 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/SyncResponseHandler.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/sync/SyncResponseHandler.kt @@ -120,7 +120,7 @@ internal class SyncResponseHandler @Inject constructor(private val monarchy: Mon return } // nothing on initial sync - val rules = pushRuleService.getPushRules(RuleScope.GLOBAL) + val rules = pushRuleService.getPushRules(RuleScope.GLOBAL).getAllRules() processEventForPushTask.execute(ProcessEventForPushTask.Params(roomsSyncResponse, rules)) Timber.v("[PushRules] <-- Push task scheduled") } diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsNotificationPreferenceFragment.kt index 5e7bc9d95b..65f68bb3b7 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsNotificationPreferenceFragment.kt @@ -42,7 +42,7 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( override fun bindPref() { findPreference(VectorPreferences.SETTINGS_ENABLE_ALL_NOTIF_PREFERENCE_KEY)!!.let { pref -> val pushRuleService = session - val mRuleMaster = pushRuleService.getPushRules() + val mRuleMaster = pushRuleService.getPushRules().getAllRules() .find { it.ruleId == RuleIds.RULE_ID_DISABLE_ALL } if (mRuleMaster == null) { @@ -105,7 +105,7 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( private fun updateEnabledForAccount(preference: Preference?) { val pushRuleService = session val switchPref = preference as SwitchPreference - pushRuleService.getPushRules() + pushRuleService.getPushRules().getAllRules() .find { it.ruleId == RuleIds.RULE_ID_DISABLE_ALL } ?.let { // Trick, we must enable this room to disable notifications diff --git a/vector/src/main/java/im/vector/riotx/features/settings/push/PushRulesViewModel.kt b/vector/src/main/java/im/vector/riotx/features/settings/push/PushRulesViewModel.kt index 3c71238b33..43854af666 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/push/PushRulesViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/push/PushRulesViewModel.kt @@ -35,7 +35,7 @@ class PushRulesViewModel(initialState: PushRulesViewState) override fun initialState(viewModelContext: ViewModelContext): PushRulesViewState? { val session = (viewModelContext.activity as HasScreenInjector).injector().activeSessionHolder().getActiveSession() - val rules = session.getPushRules() + val rules = session.getPushRules().getAllRules() return PushRulesViewState(rules) } } diff --git a/vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/TestAccountSettings.kt b/vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/TestAccountSettings.kt index feea3e40d0..d89bd15e14 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/TestAccountSettings.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/TestAccountSettings.kt @@ -32,7 +32,7 @@ class TestAccountSettings @Inject constructor(private val stringProvider: String override fun perform() { val session = activeSessionHolder.getSafeActiveSession() ?: return - val defaultRule = session.getPushRules() + val defaultRule = session.getPushRules().getAllRules() .find { it.ruleId == RuleIds.RULE_ID_DISABLE_ALL } if (defaultRule != null) { diff --git a/vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/TestBingRulesSettings.kt b/vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/TestBingRulesSettings.kt index 4847587d56..52c1ceb07c 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/TestBingRulesSettings.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/TestBingRulesSettings.kt @@ -40,7 +40,7 @@ class TestBingRulesSettings @Inject constructor(private val activeSessionHolder: override fun perform() { val session = activeSessionHolder.getSafeActiveSession() ?: return - val pushRules = session.getPushRules() + val pushRules = session.getPushRules().getAllRules() var oneOrMoreRuleIsOff = false var oneOrMoreRuleAreSilent = false testedRules.forEach { ruleId ->