From 039924436f3fbf67217102fb5ea3a4a605f164e5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Feb 2020 14:14:06 +0100 Subject: [PATCH 01/15] Json parsing --- .../api/pushrules/rest/GetPushRulesResponse.kt | 5 +++-- .../android/api/pushrules/rest/PushCondition.kt | 9 ++++++++- .../matrix/android/api/pushrules/rest/PushRule.kt | 11 ++++++++++- .../api/pushrules/rest/{Ruleset.kt => RuleSet.kt} | 11 ++++++++++- 4 files changed, 31 insertions(+), 5 deletions(-) rename matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/{Ruleset.kt => RuleSet.kt} (74%) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/GetPushRulesResponse.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/GetPushRulesResponse.kt index c5f03aed41..2ce6c8364a 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/GetPushRulesResponse.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/GetPushRulesResponse.kt @@ -20,6 +20,7 @@ import com.squareup.moshi.JsonClass /** * All push rulesets for a user. + * Ref: https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-pushrules */ @JsonClass(generateAdapter = true) internal data class GetPushRulesResponse( @@ -27,11 +28,11 @@ internal data class GetPushRulesResponse( * Global rules, account level applying to all devices */ @Json(name = "global") - val global: Ruleset, + val global: RuleSet, /** * Device specific rules, apply only to current device */ @Json(name = "device") - val device: Ruleset? = null + val device: RuleSet? = null ) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushCondition.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushCondition.kt index cc19e6a7d1..edfb56e019 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushCondition.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushCondition.kt @@ -24,21 +24,27 @@ import im.vector.matrix.android.api.pushrules.RoomMemberCountCondition import im.vector.matrix.android.api.pushrules.SenderNotificationPermissionCondition import timber.log.Timber +/** + * Ref: https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-pushrules + */ @JsonClass(generateAdapter = true) data class PushCondition( /** * Required. The kind of condition to apply. */ + @Json(name = "kind") val kind: String, /** * Required for event_match conditions. The dot- separated field of the event to match. */ + @Json(name = "key") val key: String? = null, /** * Required for event_match conditions. */ + @Json(name = "pattern") val pattern: String? = null, /** @@ -47,7 +53,8 @@ data class PushCondition( * A prefix of < matches rooms where the member count is strictly less than the given number and so forth. * If no prefix is present, this parameter defaults to ==. */ - @Json(name = "is") val iz: String? = null + @Json(name = "is") + val iz: String? = null ) { fun asExecutableCondition(): Condition? { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt index e9423d7c40..d746aed5d8 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt @@ -19,30 +19,39 @@ package im.vector.matrix.android.api.pushrules.rest import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +/** + * Ref: https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-pushrules + */ @JsonClass(generateAdapter = true) data class PushRule( /** * Required. The actions to perform when this rule is matched. */ + @Json(name = "actions") val actions: List, /** * Required. Whether this is a default rule, or has been set explicitly. */ + @Json(name = "default") val default: Boolean? = false, /** * Required. Whether the push rule is enabled or not. */ + @Json(name = "enabled") val enabled: Boolean, /** * Required. The ID of this rule. */ - @Json(name = "rule_id") val ruleId: String, + @Json(name = "rule_id") + val ruleId: String, /** * The conditions that must hold true for an event in order for a rule to be applied to an event */ + @Json(name = "conditions") val conditions: List? = null, /** * The glob-style pattern to match against. Only applicable to content rules. */ + @Json(name = "pattern") val pattern: String? = null ) 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 similarity index 74% rename from matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/Ruleset.kt rename to matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/RuleSet.kt index a7093731b5..82aa5da716 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 @@ -15,13 +15,22 @@ */ package im.vector.matrix.android.api.pushrules.rest +import com.squareup.moshi.Json 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( +internal data class RuleSet( + @Json(name = "content") val content: List? = null, + @Json(name = "override") val override: List? = null, + @Json(name = "room") val room: List? = null, + @Json(name = "sender") val sender: List? = null, + @Json(name = "underride") val underride: List? = null ) From 1c35d07acc67ec79a7b1fcee321157953e116dcd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Feb 2020 14:46:42 +0100 Subject: [PATCH 02/15] 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 -> From 3013e311a46988418643dfab327d340c8201818c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Feb 2020 16:45:46 +0100 Subject: [PATCH 03/15] Restore push rule settings - WIP --- .../android/api/pushrules/rest/PushRule.kt | 115 ++++++++++++- .../android/api/pushrules/rest/RuleSet.kt | 40 +++++ .../core/preference/BingRulePreference.kt | 160 +++++++----------- ...sAdvancedNotificationPreferenceFragment.kt | 27 +-- vector/src/main/res/values/strings_riotX.xml | 2 +- ...ings_notification_advanced_preferences.xml | 49 +++--- .../res/xml/vector_settings_notifications.xml | 4 +- 7 files changed, 262 insertions(+), 135 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt index d746aed5d8..d60fe2e9c4 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt @@ -18,6 +18,9 @@ package im.vector.matrix.android.api.pushrules.rest import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import im.vector.matrix.android.api.pushrules.Action +import im.vector.matrix.android.api.pushrules.getActions +import im.vector.matrix.android.api.pushrules.toJson /** * Ref: https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-pushrules @@ -54,4 +57,114 @@ data class PushRule( */ @Json(name = "pattern") val pattern: String? = null -) +) { + /** + * Add the default notification sound. + */ + fun setNotificationSound(): PushRule { + return setNotificationSound(ACTION_VALUE_DEFAULT) + } + + fun getNotificationSound(): String? { + return (getActions().firstOrNull { it is Action.Sound } as? Action.Sound)?.sound + } + + /** + * Set the notification sound + * + * @param sound notification sound + */ + fun setNotificationSound(sound: String): PushRule { + return copy( + actions = (getActions().filter { it !is Action.Sound } + Action.Sound(sound)).toJson() + ) + } + + /** + * Remove the notification sound + */ + fun removeNotificationSound(): PushRule { + return copy( + actions = (getActions().filter { it !is Action.Sound }).toJson() + ) + } + + /** + * Set the highlight status. + * + * @param highlight the highlight status + */ + fun setHighlight(highlight: Boolean): PushRule { + return copy( + actions = (getActions().filter { it !is Action.Highlight } + Action.Highlight(highlight)).toJson() + ) + } + + /** + * Set the notification status. + * + * @param notify true to notify + */ + fun setNotify(notify: Boolean): PushRule { + val mutableActions = actions.toMutableList() + + mutableActions.remove(ACTION_DONT_NOTIFY) + mutableActions.remove(ACTION_NOTIFY) + + if (notify) { + mutableActions.add(ACTION_NOTIFY) + } else { + mutableActions.add(ACTION_DONT_NOTIFY) + } + + return copy(actions = mutableActions) + } + + /** + * Return true if the rule should highlight the event. + * + * @return true if the rule should play sound + */ + fun shouldNotify() = actions.contains(ACTION_NOTIFY) + + /** + * Return true if the rule should not highlight the event. + * + * @return true if the rule should not play sound + */ + fun shouldNotNotify() = actions.contains(ACTION_DONT_NOTIFY) + + companion object { + /* ========================================================================================== + * Rule id + * ========================================================================================== */ + + const val RULE_ID_DISABLE_ALL = ".m.rule.master" + const val RULE_ID_CONTAIN_USER_NAME = ".m.rule.contains_user_name" + const val RULE_ID_CONTAIN_DISPLAY_NAME = ".m.rule.contains_display_name" + const val RULE_ID_ONE_TO_ONE_ROOM = ".m.rule.room_one_to_one" + const val RULE_ID_INVITE_ME = ".m.rule.invite_for_me" + const val RULE_ID_PEOPLE_JOIN_LEAVE = ".m.rule.member_event" + const val RULE_ID_CALL = ".m.rule.call" + const val RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS = ".m.rule.suppress_notices" + const val RULE_ID_ALL_OTHER_MESSAGES_ROOMS = ".m.rule.message" + const val RULE_ID_FALLBACK = ".m.rule.fallback" + + /* ========================================================================================== + * Actions + * ========================================================================================== */ + + const val ACTION_NOTIFY = "notify" + const val ACTION_DONT_NOTIFY = "dont_notify" + const val ACTION_COALESCE = "coalesce" + + const val ACTION_SET_TWEAK_SOUND_VALUE = "sound" + const val ACTION_SET_TWEAK_HIGHLIGHT_VALUE = "highlight" + + const val ACTION_PARAMETER_SET_TWEAK = "set_tweak" + const val ACTION_PARAMETER_VALUE = "value" + + const val ACTION_VALUE_DEFAULT = "default" + const val ACTION_VALUE_RING = "ring" + } +} 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 43b2599b52..28f680b12b 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 @@ -17,6 +17,7 @@ package im.vector.matrix.android.api.pushrules.rest import com.squareup.moshi.Json import com.squareup.moshi.JsonClass +import im.vector.matrix.android.api.pushrules.RuleSetKey /** * Ref: https://matrix.org/docs/spec/client_server/latest#get-matrix-client-r0-pushrules @@ -38,4 +39,43 @@ data class RuleSet( // 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() } + + /** + * Find a rule from its ruleID. + * + * @param ruleId a RULE_ID_XX value + * @return the matched bing rule or null it doesn't exist. + */ + fun findDefaultRule(ruleId: String?): PushRuleAndKind? { + var result: PushRuleAndKind? = null + // sanity check + if (null != ruleId) { + if (PushRule.RULE_ID_CONTAIN_USER_NAME == ruleId) { + result = findRule(content, ruleId)?.let { PushRuleAndKind(it, RuleSetKey.CONTENT) } + } else { + // assume that the ruleId is unique. + result = findRule(override, ruleId)?.let { PushRuleAndKind(it, RuleSetKey.OVERRIDE) } + if (null == result) { + result = findRule(underride, ruleId)?.let { PushRuleAndKind(it, RuleSetKey.UNDERRIDE) } + } + } + } + return result + } + + /** + * Find a rule from its rule Id. + * + * @param rules the rules list. + * @param ruleId the rule Id. + * @return the bing rule if it exists, else null. + */ + private fun findRule(rules: List?, ruleId: String): PushRule? { + return rules?.firstOrNull { it.ruleId == ruleId } + } } + +data class PushRuleAndKind( + val pushRule: PushRule, + val kind: RuleSetKey +) diff --git a/vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt b/vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt index 76df61dd33..2cb363621f 100755 --- a/vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt +++ b/vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt @@ -22,49 +22,17 @@ import android.view.View import android.widget.RadioGroup import android.widget.TextView import androidx.preference.PreferenceViewHolder +import im.vector.matrix.android.api.pushrules.RuleSetKey +import im.vector.matrix.android.api.pushrules.rest.PushRule +import im.vector.matrix.android.api.pushrules.rest.PushRuleAndKind import im.vector.riotx.R -// TODO Replace by real Bingrule class, then delete -@Suppress("UNUSED_PARAMETER") -class BingRule(rule: BingRule) { - fun shouldNotNotify() = false - fun shouldNotify() = false - fun setNotify(b: Boolean) { - } - - fun setHighlight(b: Boolean) { - } - - fun removeNotificationSound() { - } - - val ruleId: CharSequence? = null - var isEnabled = false - var notificationSound: String? = null - val kind: CharSequence? = null - - companion object { - const val RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS = "TODO" - const val ACTION_VALUE_DEFAULT = "TODO" - const val KIND_UNDERRIDE = "TODO" - const val RULE_ID_INVITE_ME = "TODO" - const val RULE_ID_CALL = "TODO" - const val ACTION_VALUE_RING = "TODO" - const val RULE_ID_DISABLE_ALL = "TODO" - const val ACTION_DONT_NOTIFY = "TODO" - const val RULE_ID_CONTAIN_DISPLAY_NAME = "TODO" - const val RULE_ID_CONTAIN_USER_NAME = "TODO" - const val RULE_ID_ONE_TO_ONE_ROOM = "TODO" - const val RULE_ID_ALL_OTHER_MESSAGES_ROOMS = "TODO" - } -} - class BingRulePreference : VectorPreference { /** - * @return the selected bing rule + * @return the selected push rule and its kind */ - var rule: BingRule? = null + var ruleAndKind: PushRuleAndKind? = null private set constructor(context: Context) : super(context) @@ -80,29 +48,29 @@ class BingRulePreference : VectorPreference { /** * @return the bing rule status index */ - val ruleStatusIndex: Int + private val ruleStatusIndex: Int get() { - if (null != rule) { - if (rule!!.ruleId == BingRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS) { - if (rule!!.shouldNotNotify()) { - return if (rule!!.isEnabled) { - NOTIFICATION_OFF_INDEX - } else { - NOTIFICATION_SILENT_INDEX - } - } else if (rule!!.shouldNotify()) { - return NOTIFICATION_NOISY_INDEX - } - } + val safeRule = ruleAndKind?.pushRule ?: return NOTIFICATION_OFF_INDEX - if (rule!!.isEnabled) { - return if (rule!!.shouldNotNotify()) { + if (safeRule.ruleId == PushRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS) { + if (safeRule.shouldNotNotify()) { + return if (safeRule.enabled) { NOTIFICATION_OFF_INDEX - } else if (null != rule!!.notificationSound) { - NOTIFICATION_NOISY_INDEX } else { NOTIFICATION_SILENT_INDEX } + } else if (safeRule.shouldNotify()) { + return NOTIFICATION_NOISY_INDEX + } + } + + if (safeRule.enabled) { + return if (safeRule.shouldNotNotify()) { + NOTIFICATION_OFF_INDEX + } else if (null != safeRule.getNotificationSound()) { + NOTIFICATION_NOISY_INDEX + } else { + NOTIFICATION_SILENT_INDEX } } @@ -110,12 +78,12 @@ class BingRulePreference : VectorPreference { } /** - * Update the bing rule. + * Update the push rule. * - * @param aBingRule + * @param pushRule */ - fun setBingRule(aBingRule: BingRule) { - rule = aBingRule + fun setPushRule(pushRuleAndKind: PushRuleAndKind?) { + ruleAndKind = pushRuleAndKind refreshSummary() } @@ -131,63 +99,63 @@ class BingRulePreference : VectorPreference { } /** - * Create a bing rule with the updated required at index. + * Create a push rule with the updated required at index. * * @param index index - * @return a bing rule with the updated flags / null if there is no update + * @return a push rule with the updated flags / null if there is no update */ - fun createRule(index: Int): BingRule? { - var rule: BingRule? = null + fun createRule(index: Int): PushRule? { + val safeRule = ruleAndKind?.pushRule ?: return null + val safeKind = ruleAndKind?.kind ?: return null - if (null != this.rule && index != ruleStatusIndex) { - rule = BingRule(this.rule!!) - - if (rule.ruleId == BingRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS) { + return if (index != ruleStatusIndex) { + if (safeRule.ruleId == PushRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS) { when (index) { NOTIFICATION_OFF_INDEX -> { - rule.isEnabled = true - rule.setNotify(false) + safeRule.copy(enabled = true) + .setNotify(false) } NOTIFICATION_SILENT_INDEX -> { - rule.isEnabled = false - rule.setNotify(false) + safeRule.copy(enabled = false) + .setNotify(false) } NOTIFICATION_NOISY_INDEX -> { - rule.isEnabled = true - rule.setNotify(true) - rule.notificationSound = BingRule.ACTION_VALUE_DEFAULT + safeRule.copy(enabled = true) + .setNotify(true) + .setNotificationSound() } - } - - return rule - } - - if (NOTIFICATION_OFF_INDEX == index) { - if (this.rule!!.kind == BingRule.KIND_UNDERRIDE - || rule.ruleId == BingRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS) { - rule.setNotify(false) - } else { - rule.isEnabled = false + else -> safeRule } } else { - rule.isEnabled = true - rule.setNotify(true) - rule.setHighlight(this.rule!!.kind != BingRule.KIND_UNDERRIDE - && rule.ruleId != BingRule.RULE_ID_INVITE_ME - && NOTIFICATION_NOISY_INDEX == index) - if (NOTIFICATION_NOISY_INDEX == index) { - rule.notificationSound = if (rule.ruleId == BingRule.RULE_ID_CALL) { - BingRule.ACTION_VALUE_RING + if (NOTIFICATION_OFF_INDEX == index) { + if (safeKind == RuleSetKey.UNDERRIDE || safeRule.ruleId == PushRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS) { + safeRule.setNotify(false) } else { - BingRule.ACTION_VALUE_DEFAULT + safeRule.copy(enabled = false) } } else { - rule.removeNotificationSound() + val newRule = safeRule.copy(enabled = true) + .setNotify(true) + .setHighlight(safeKind != RuleSetKey.UNDERRIDE + && safeRule.ruleId != PushRule.RULE_ID_INVITE_ME + && NOTIFICATION_NOISY_INDEX == index) + + if (NOTIFICATION_NOISY_INDEX == index) { + newRule.setNotificationSound( + if (safeRule.ruleId == PushRule.RULE_ID_CALL) { + PushRule.ACTION_VALUE_RING + } else { + PushRule.ACTION_VALUE_DEFAULT + } + ) + } else { + newRule.removeNotificationSound() + } } } + } else { + safeRule } - - return rule } override fun onBindViewHolder(holder: PreferenceViewHolder) { diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt index a8328fae52..3ecd08953c 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt @@ -23,8 +23,9 @@ import android.os.Parcelable import androidx.core.content.edit import androidx.preference.Preference import androidx.preference.PreferenceManager +import im.vector.matrix.android.api.pushrules.rest.PushRule +import im.vector.matrix.android.api.pushrules.rest.PushRuleAndKind import im.vector.riotx.R -import im.vector.riotx.core.preference.BingRule import im.vector.riotx.core.preference.BingRulePreference import im.vector.riotx.core.preference.VectorPreference import im.vector.riotx.features.notifications.NotificationUtils @@ -102,14 +103,14 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( val preference = findPreference(preferenceKey) if (preference is BingRulePreference) { // preference.isEnabled = null != rules && isConnected && pushManager.areDeviceNotificationsAllowed() - val rule: BingRule? = null // TODO session.dataHandler.pushRules()?.findDefaultRule(mPrefKeyToBingRuleId[preferenceKey]) + val ruleAndKind: PushRuleAndKind? = session.getPushRules().findDefaultRule(mPrefKeyToBingRuleId[preferenceKey]) - if (rule == null) { + if (ruleAndKind == null) { // The rule is not defined, hide the preference preference.isVisible = false } else { preference.isVisible = true - preference.setBingRule(rule) + preference.setPushRule(ruleAndKind) preference.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> val rule2 = preference.createRule(newValue as Int) if (null != rule2) { @@ -181,7 +182,7 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( val rule = it.findDefaultRule(ruleId) var isEnabled = null != rule && rule.isEnabled - if (TextUtils.equals(ruleId, BingRule.RULE_ID_DISABLE_ALL) || TextUtils.equals(ruleId, BingRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS)) { + if (TextUtils.equals(ruleId, PushRule.RULE_ID_DISABLE_ALL) || TextUtils.equals(ruleId, PushRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS)) { isEnabled = !isEnabled } else if (isEnabled) { val domainActions = rule!!.domainActions @@ -191,7 +192,7 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( isEnabled = false } else if (1 == domainActions.size) { try { - isEnabled = !TextUtils.equals(domainActions[0] as String, BingRule.ACTION_DONT_NOTIFY) + isEnabled = !TextUtils.equals(domainActions[0] as String, PushRule.ACTION_DONT_NOTIFY) } catch (e: Exception) { Timber.e(e, "## refreshPreferences failed") } @@ -216,13 +217,13 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( // preference name <-> rule Id private var mPrefKeyToBingRuleId = mapOf( - VectorPreferences.SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY to BingRule.RULE_ID_CONTAIN_DISPLAY_NAME, - VectorPreferences.SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY to BingRule.RULE_ID_CONTAIN_USER_NAME, - VectorPreferences.SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY to BingRule.RULE_ID_ONE_TO_ONE_ROOM, - VectorPreferences.SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY to BingRule.RULE_ID_ALL_OTHER_MESSAGES_ROOMS, - VectorPreferences.SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY to BingRule.RULE_ID_INVITE_ME, - VectorPreferences.SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY to BingRule.RULE_ID_CALL, - VectorPreferences.SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY to BingRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS + VectorPreferences.SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY to PushRule.RULE_ID_CONTAIN_DISPLAY_NAME, + VectorPreferences.SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY to PushRule.RULE_ID_CONTAIN_USER_NAME, + VectorPreferences.SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY to PushRule.RULE_ID_ONE_TO_ONE_ROOM, + VectorPreferences.SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY to PushRule.RULE_ID_ALL_OTHER_MESSAGES_ROOMS, + VectorPreferences.SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY to PushRule.RULE_ID_INVITE_ME, + VectorPreferences.SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY to PushRule.RULE_ID_CALL, + VectorPreferences.SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY to PushRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS ) } } diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index 00bf65e121..2d1ed60505 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -11,7 +11,7 @@ - + Notifications configuration diff --git a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml index b5f01d98f6..8882a434eb 100644 --- a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml +++ b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml @@ -36,29 +36,36 @@ - - - - - + android:title="@string/settings_notification_configuration"> - + + - + + + + + + + + diff --git a/vector/src/main/res/xml/vector_settings_notifications.xml b/vector/src/main/res/xml/vector_settings_notifications.xml index 2114dba373..82c9cde759 100644 --- a/vector/src/main/res/xml/vector_settings_notifications.xml +++ b/vector/src/main/res/xml/vector_settings_notifications.xml @@ -24,13 +24,11 @@ + app:fragment="im.vector.riotx.features.settings.VectorSettingsAdvancedNotificationPreferenceFragment" /> Date: Fri, 28 Feb 2020 18:35:51 +0100 Subject: [PATCH 04/15] Restore push rule settings - fix issues --- .../android/api/pushrules/PushRuleService.kt | 5 +- .../notification/DefaultPushRuleService.kt | 10 ++++ .../internal/session/pushers/PushRulesApi.kt | 1 + .../internal/session/pushers/PushersModule.kt | 3 + .../pushers/UpdatePushRuleActionsTask.kt | 55 +++++++++++++++++++ .../core/preference/BingRulePreference.kt | 5 +- ...sAdvancedNotificationPreferenceFragment.kt | 42 +++++++------- .../settings/VectorSettingsBaseFragment.kt | 3 + ...rSettingsNotificationPreferenceFragment.kt | 2 +- 9 files changed, 99 insertions(+), 27 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/UpdatePushRuleActionsTask.kt 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 94c2121695..1c1c2f266c 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 @@ -22,7 +22,6 @@ import im.vector.matrix.android.api.session.events.model.Event import im.vector.matrix.android.api.util.Cancelable interface PushRuleService { - /** * Fetch the push rules from the server */ @@ -30,12 +29,12 @@ interface PushRuleService { fun getPushRules(scope: String = RuleScope.GLOBAL): RuleSet - // TODO update rule - fun updatePushRuleEnableStatus(kind: RuleKind, pushRule: PushRule, enabled: Boolean, callback: MatrixCallback): Cancelable fun addPushRule(kind: RuleKind, pushRule: PushRule, callback: MatrixCallback): Cancelable + fun updatePushRuleActions(kind: RuleKind, oldPushRule: PushRule, newPushRule: PushRule, callback: MatrixCallback): Cancelable + fun removePushRule(kind: RuleKind, pushRule: PushRule, callback: MatrixCallback): Cancelable fun addPushRuleListener(listener: PushRuleListener) 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 e6e45735e9..f01b86fbdd 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 @@ -32,6 +32,7 @@ import im.vector.matrix.android.internal.session.SessionScope import im.vector.matrix.android.internal.session.pushers.AddPushRuleTask import im.vector.matrix.android.internal.session.pushers.GetPushRulesTask import im.vector.matrix.android.internal.session.pushers.RemovePushRuleTask +import im.vector.matrix.android.internal.session.pushers.UpdatePushRuleActionsTask import im.vector.matrix.android.internal.session.pushers.UpdatePushRuleEnableStatusTask import im.vector.matrix.android.internal.task.TaskExecutor import im.vector.matrix.android.internal.task.configureWith @@ -43,6 +44,7 @@ internal class DefaultPushRuleService @Inject constructor( private val getPushRulesTask: GetPushRulesTask, private val updatePushRuleEnableStatusTask: UpdatePushRuleEnableStatusTask, private val addPushRuleTask: AddPushRuleTask, + private val updatePushRuleActionsTask: UpdatePushRuleActionsTask, private val removePushRuleTask: RemovePushRuleTask, private val taskExecutor: TaskExecutor, private val monarchy: Monarchy @@ -117,6 +119,14 @@ internal class DefaultPushRuleService @Inject constructor( .executeBy(taskExecutor) } + override fun updatePushRuleActions(kind: RuleKind, oldPushRule: PushRule, newPushRule: PushRule, callback: MatrixCallback): Cancelable { + return updatePushRuleActionsTask + .configureWith(UpdatePushRuleActionsTask.Params(kind, oldPushRule, newPushRule)) { + this.callback = callback + } + .executeBy(taskExecutor) + } + override fun removePushRule(kind: RuleKind, pushRule: PushRule, callback: MatrixCallback): Cancelable { return removePushRuleTask .configureWith(RemovePushRuleTask.Params(kind, pushRule)) { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/PushRulesApi.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/PushRulesApi.kt index db7d2a15ed..6dc7c1cd5a 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/PushRulesApi.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/PushRulesApi.kt @@ -47,6 +47,7 @@ internal interface PushRulesApi { /** * Update the ruleID action + * Ref: https://matrix.org/docs/spec/client_server/latest#put-matrix-client-r0-pushrules-scope-kind-ruleid-actions * * @param kind the notification kind (sender, room...) * @param ruleId the ruleId diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/PushersModule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/PushersModule.kt index 35ee90bf42..e80fca09e7 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/PushersModule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/PushersModule.kt @@ -72,6 +72,9 @@ internal abstract class PushersModule { @Binds abstract fun bindAddPushRuleTask(task: DefaultAddPushRuleTask): AddPushRuleTask + @Binds + abstract fun bindUpdatePushRuleActionTask(task: DefaultUpdatePushRuleActionsTask): UpdatePushRuleActionsTask + @Binds abstract fun bindRemovePushRuleTask(task: DefaultRemovePushRuleTask): RemovePushRuleTask diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/UpdatePushRuleActionsTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/UpdatePushRuleActionsTask.kt new file mode 100644 index 0000000000..d8025be14d --- /dev/null +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/pushers/UpdatePushRuleActionsTask.kt @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2020 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.matrix.android.internal.session.pushers + +import im.vector.matrix.android.api.pushrules.RuleKind +import im.vector.matrix.android.api.pushrules.rest.PushRule +import im.vector.matrix.android.internal.network.executeRequest +import im.vector.matrix.android.internal.task.Task +import org.greenrobot.eventbus.EventBus +import javax.inject.Inject + +internal interface UpdatePushRuleActionsTask : Task { + data class Params( + val kind: RuleKind, + val oldPushRule: PushRule, + val newPushRule: PushRule + ) +} + +internal class DefaultUpdatePushRuleActionsTask @Inject constructor( + private val pushRulesApi: PushRulesApi, + private val eventBus: EventBus +) : UpdatePushRuleActionsTask { + + override suspend fun execute(params: UpdatePushRuleActionsTask.Params) { + if (params.oldPushRule.enabled != params.newPushRule.enabled) { + // First change enabled state + executeRequest(eventBus) { + apiCall = pushRulesApi.updateEnableRuleStatus(params.kind.value, params.newPushRule.ruleId, params.newPushRule.enabled) + } + } + + if (params.newPushRule.enabled) { + // Also ensure the actions are up to date + val body = mapOf("actions" to params.newPushRule.actions) + + executeRequest(eventBus) { + apiCall = pushRulesApi.updateRuleActions(params.kind.value, params.newPushRule.ruleId, body) + } + } + } +} diff --git a/vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt b/vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt index 2cb363621f..1f074261a4 100755 --- a/vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt +++ b/vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt @@ -67,7 +67,7 @@ class BingRulePreference : VectorPreference { if (safeRule.enabled) { return if (safeRule.shouldNotNotify()) { NOTIFICATION_OFF_INDEX - } else if (null != safeRule.getNotificationSound()) { + } else if (safeRule.getNotificationSound() != null) { NOTIFICATION_NOISY_INDEX } else { NOTIFICATION_SILENT_INDEX @@ -104,7 +104,7 @@ class BingRulePreference : VectorPreference { * @param index index * @return a push rule with the updated flags / null if there is no update */ - fun createRule(index: Int): PushRule? { + fun createNewRule(index: Int): PushRule? { val safeRule = ruleAndKind?.pushRule ?: return null val safeKind = ruleAndKind?.kind ?: return null @@ -114,6 +114,7 @@ class BingRulePreference : VectorPreference { NOTIFICATION_OFF_INDEX -> { safeRule.copy(enabled = true) .setNotify(false) + .removeNotificationSound() } NOTIFICATION_SILENT_INDEX -> { safeRule.copy(enabled = false) diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt index 3ecd08953c..483539036e 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt @@ -23,11 +23,13 @@ import android.os.Parcelable import androidx.core.content.edit import androidx.preference.Preference import androidx.preference.PreferenceManager +import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.pushrules.rest.PushRule import im.vector.matrix.android.api.pushrules.rest.PushRuleAndKind import im.vector.riotx.R import im.vector.riotx.core.preference.BingRulePreference import im.vector.riotx.core.preference.VectorPreference +import im.vector.riotx.core.utils.toast import im.vector.riotx.features.notifications.NotificationUtils import javax.inject.Inject @@ -112,29 +114,27 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( preference.isVisible = true preference.setPushRule(ruleAndKind) preference.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue -> - val rule2 = preference.createRule(newValue as Int) - if (null != rule2) { - /* - TODO - displayLoadingView() - session.dataHandler.bingRulesManager.updateRule(preference.rule, - rule, - object : BingRulesManager.onBingRuleUpdateListener { - private fun onDone() { - refreshDisplay() - hideLoadingView() - } + val newRule = preference.createNewRule(newValue as Int) + if (newRule != null) { + displayLoadingView() - override fun onBingRuleUpdateSuccess() { - onDone() - } + session.updatePushRuleActions(ruleAndKind.kind, preference.ruleAndKind?.pushRule ?: ruleAndKind.pushRule, newRule, object : MatrixCallback { + override fun onSuccess(data: Unit) { + if (!isAdded) { + return + } + preference.setPushRule(ruleAndKind.copy(pushRule = newRule)) + hideLoadingView() + } - override fun onBingRuleUpdateFailure(errorMessage: String) { - activity?.toast(errorMessage) - onDone() - } - }) - */ + override fun onFailure(failure: Throwable) { + if (!isAdded) { + return + } + hideLoadingView() + activity?.toast(errorFormatter.toHumanReadable(failure)) + } + }) } false } diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsBaseFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsBaseFragment.kt index e32cc98123..85d32251b6 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsBaseFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsBaseFragment.kt @@ -26,6 +26,7 @@ import im.vector.riotx.R import im.vector.riotx.core.di.DaggerScreenComponent import im.vector.riotx.core.di.HasScreenInjector import im.vector.riotx.core.di.ScreenComponent +import im.vector.riotx.core.error.ErrorFormatter import im.vector.riotx.core.platform.VectorBaseActivity import im.vector.riotx.core.utils.toast import timber.log.Timber @@ -40,6 +41,7 @@ abstract class VectorSettingsBaseFragment : PreferenceFragmentCompat(), HasScree // members protected lateinit var session: Session + protected lateinit var errorFormatter: ErrorFormatter private lateinit var screenComponent: ScreenComponent abstract val preferenceXmlRes: Int @@ -54,6 +56,7 @@ abstract class VectorSettingsBaseFragment : PreferenceFragmentCompat(), HasScree screenComponent = DaggerScreenComponent.factory().create(vectorActivity.getVectorComponent(), vectorActivity) super.onAttach(context) session = screenComponent.activeSessionHolder().getActiveSession() + errorFormatter = screenComponent.errorFormatter() injectWith(injector()) } 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 65f68bb3b7..4e4e9ddb7a 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 @@ -114,7 +114,7 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( !switchPref.isChecked, object : MatrixCallback { override fun onSuccess(data: Unit) { - // Push rules will be updated form the sync + // Push rules will be updated from the sync } override fun onFailure(failure: Throwable) { From 551604cdcb9d31482c3b40c323238b5da2bc538a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Feb 2020 19:02:13 +0100 Subject: [PATCH 05/15] Add missing push rules --- .../android/api/pushrules/rest/PushRule.kt | 5 +++ .../features/settings/VectorPreferences.kt | 4 ++ ...sAdvancedNotificationPreferenceFragment.kt | 44 +++++++++++-------- vector/src/main/res/values/strings_riotX.xml | 4 ++ ...ings_notification_advanced_preferences.xml | 18 ++++++++ 5 files changed, 57 insertions(+), 18 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt index d60fe2e9c4..699ce29032 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt @@ -148,6 +148,11 @@ data class PushRule( const val RULE_ID_CALL = ".m.rule.call" const val RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS = ".m.rule.suppress_notices" const val RULE_ID_ALL_OTHER_MESSAGES_ROOMS = ".m.rule.message" + const val RULE_ID_AT_ROOMS = ".m.rule.roomnotif" + const val RULE_ID_TOMBSTONE = ".m.rule.tombstone" + const val RULE_ID_E2E_ONE_TO_ONE_ROOM = ".m.rule.encrypted_room_one_to_one" + const val RULE_ID_E2E_GROUP = ".m.rule.encrypted" + const val RULE_ID_REACTION = ".m.rule.reaction" const val RULE_ID_FALLBACK = ".m.rule.fallback" /* ========================================================================================== diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt index 816b5b3fee..2132911fff 100755 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt @@ -121,6 +121,10 @@ class VectorPreferences @Inject constructor(private val context: Context) { const val SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY_2" const val SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY = "SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY_2" const val SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY = "SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY_2" + const val SETTINGS_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY = "SETTINGS_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY" + const val SETTINGS_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY" + const val SETTINGS_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY" + const val SETTINGS_ROOMS_UPGRADED_KEY = "SETTINGS_ROOMS_UPGRADED_KEY" // media private const val SETTINGS_DEFAULT_MEDIA_COMPRESSION_KEY = "SETTINGS_DEFAULT_MEDIA_COMPRESSION_KEY" diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt index 483539036e..134eaaa5c1 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt @@ -118,23 +118,27 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( if (newRule != null) { displayLoadingView() - session.updatePushRuleActions(ruleAndKind.kind, preference.ruleAndKind?.pushRule ?: ruleAndKind.pushRule, newRule, object : MatrixCallback { - override fun onSuccess(data: Unit) { - if (!isAdded) { - return - } - preference.setPushRule(ruleAndKind.copy(pushRule = newRule)) - hideLoadingView() - } + session.updatePushRuleActions( + ruleAndKind.kind, + preference.ruleAndKind?.pushRule ?: ruleAndKind.pushRule, + newRule, + object : MatrixCallback { + override fun onSuccess(data: Unit) { + if (!isAdded) { + return + } + preference.setPushRule(ruleAndKind.copy(pushRule = newRule)) + hideLoadingView() + } - override fun onFailure(failure: Throwable) { - if (!isAdded) { - return - } - hideLoadingView() - activity?.toast(errorFormatter.toHumanReadable(failure)) - } - }) + override fun onFailure(failure: Throwable) { + if (!isAdded) { + return + } + hideLoadingView() + activity?.toast(errorFormatter.toHumanReadable(failure)) + } + }) } false } @@ -216,14 +220,18 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( private const val REQUEST_NOTIFICATION_RINGTONE = 888 // preference name <-> rule Id - private var mPrefKeyToBingRuleId = mapOf( + private val mPrefKeyToBingRuleId = mapOf( VectorPreferences.SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY to PushRule.RULE_ID_CONTAIN_DISPLAY_NAME, VectorPreferences.SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY to PushRule.RULE_ID_CONTAIN_USER_NAME, VectorPreferences.SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY to PushRule.RULE_ID_ONE_TO_ONE_ROOM, VectorPreferences.SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY to PushRule.RULE_ID_ALL_OTHER_MESSAGES_ROOMS, VectorPreferences.SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY to PushRule.RULE_ID_INVITE_ME, VectorPreferences.SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY to PushRule.RULE_ID_CALL, - VectorPreferences.SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY to PushRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS + VectorPreferences.SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY to PushRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS, + VectorPreferences.SETTINGS_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY to PushRule.RULE_ID_AT_ROOMS, + VectorPreferences.SETTINGS_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY to PushRule.RULE_ID_E2E_ONE_TO_ONE_ROOM, + VectorPreferences.SETTINGS_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY to PushRule.RULE_ID_E2E_GROUP, + VectorPreferences.SETTINGS_ROOMS_UPGRADED_KEY to PushRule.RULE_ID_TOMBSTONE ) } } diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index 2d1ed60505..c20698d767 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -12,6 +12,10 @@ Notifications configuration + Messages containing @room + Encrypted messages in one-to-one chats + Encrypted messages in group chats + When rooms are upgraded diff --git a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml index 8882a434eb..33f8fe1d81 100644 --- a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml +++ b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml @@ -14,14 +14,28 @@ android:key="SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY_2" android:title="@string/settings_containing_my_user_name" /> + + + + + + + + @@ -34,6 +48,10 @@ android:key="SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY_2" android:title="@string/settings_messages_sent_by_bot" /> + + Date: Fri, 28 Feb 2020 19:04:30 +0100 Subject: [PATCH 06/15] Cleanup --- .../features/settings/VectorPreferences.kt | 15 +++++------ ...ings_notification_advanced_preferences.xml | 27 +++++++++++++------ 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt index 2132911fff..c92c394cfb 100755 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt @@ -35,7 +35,7 @@ import javax.inject.Inject class VectorPreferences @Inject constructor(private val context: Context) { companion object { - const val SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY = "SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY_2" + const val SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY = "SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY" const val SETTINGS_CHANGE_PASSWORD_PREFERENCE_KEY = "SETTINGS_CHANGE_PASSWORD_PREFERENCE_KEY" const val SETTINGS_VERSION_PREFERENCE_KEY = "SETTINGS_VERSION_PREFERENCE_KEY" const val SETTINGS_SDK_VERSION_PREFERENCE_KEY = "SETTINGS_SDK_VERSION_PREFERENCE_KEY" @@ -106,7 +106,6 @@ class VectorPreferences @Inject constructor(private val context: Context) { const val SETTINGS_GROUPS_FLAIR_KEY = "SETTINGS_GROUPS_FLAIR_KEY" // notifications - const val SETTINGS_NOTIFICATIONS_KEY = "SETTINGS_NOTIFICATIONS_KEY" const val SETTINGS_ENABLE_ALL_NOTIF_PREFERENCE_KEY = "SETTINGS_ENABLE_ALL_NOTIF_PREFERENCE_KEY" const val SETTINGS_ENABLE_THIS_DEVICE_PREFERENCE_KEY = "SETTINGS_ENABLE_THIS_DEVICE_PREFERENCE_KEY" // public static final String SETTINGS_TURN_SCREEN_ON_PREFERENCE_KEY = "SETTINGS_TURN_SCREEN_ON_PREFERENCE_KEY"; @@ -115,12 +114,12 @@ class VectorPreferences @Inject constructor(private val context: Context) { const val SETTINGS_SYSTEM_SILENT_NOTIFICATION_PREFERENCE_KEY = "SETTINGS_SYSTEM_SILENT_NOTIFICATION_PREFERENCE_KEY" const val SETTINGS_NOTIFICATION_RINGTONE_PREFERENCE_KEY = "SETTINGS_NOTIFICATION_RINGTONE_PREFERENCE_KEY" const val SETTINGS_NOTIFICATION_RINGTONE_SELECTION_PREFERENCE_KEY = "SETTINGS_NOTIFICATION_RINGTONE_SELECTION_PREFERENCE_KEY" - const val SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY = "SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY_2" - const val SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY = "SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY_2" - const val SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY_2" - const val SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY_2" - const val SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY = "SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY_2" - const val SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY = "SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY_2" + const val SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY = "SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY" + const val SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY = "SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY" + const val SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY" + const val SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY" + const val SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY = "SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY" + const val SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY = "SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY" const val SETTINGS_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY = "SETTINGS_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY" const val SETTINGS_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY" const val SETTINGS_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY" diff --git a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml index 33f8fe1d81..3ef86d1198 100644 --- a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml +++ b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml @@ -3,53 +3,63 @@ @@ -63,6 +73,7 @@ From 957b9eee23bffd3e9ae7e0e675fe116b6710436f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Feb 2020 19:06:26 +0100 Subject: [PATCH 07/15] Cleanup --- ...sAdvancedNotificationPreferenceFragment.kt | 61 ++----------------- 1 file changed, 5 insertions(+), 56 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt index 134eaaa5c1..90f28e5d15 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt @@ -20,9 +20,7 @@ import android.content.Intent import android.media.RingtoneManager import android.net.Uri import android.os.Parcelable -import androidx.core.content.edit import androidx.preference.Preference -import androidx.preference.PreferenceManager import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.pushrules.rest.PushRule import im.vector.matrix.android.api.pushrules.rest.PushRuleAndKind @@ -37,15 +35,6 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( private val vectorPreferences: VectorPreferences ) : VectorSettingsBaseFragment() { - // events listener - /* TODO - private val mEventsListener = object : MXEventListener() { - override fun onBingRulesUpdate() { - refreshPreferences() - refreshDisplay() - } - } */ - override var titleRes: Int = R.string.settings_notification_advanced override val preferenceXmlRes = R.xml.vector_settings_notification_advanced_preferences @@ -101,11 +90,11 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( } } - for (preferenceKey in mPrefKeyToBingRuleId.keys) { + for (preferenceKey in prefKeyToPushRuleId.keys) { val preference = findPreference(preferenceKey) if (preference is BingRulePreference) { // preference.isEnabled = null != rules && isConnected && pushManager.areDeviceNotificationsAllowed() - val ruleAndKind: PushRuleAndKind? = session.getPushRules().findDefaultRule(mPrefKeyToBingRuleId[preferenceKey]) + val ruleAndKind: PushRuleAndKind? = session.getPushRules().findDefaultRule(prefKeyToPushRuleId[preferenceKey]) if (ruleAndKind == null) { // The rule is not defined, hide the preference @@ -136,6 +125,8 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( return } hideLoadingView() + // Restore the previous value + refreshDisplay() activity?.toast(errorFormatter.toHumanReadable(failure)) } }) @@ -170,48 +161,6 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( } } - /** - * Refresh the known information about the account - */ - private fun refreshPreferences() { - PreferenceManager.getDefaultSharedPreferences(activity).edit { - /* TODO - session.dataHandler.pushRules()?.let { - for (prefKey in mPrefKeyToBingRuleId.keys) { - val preference = findPreference(prefKey) - - if (null != preference && preference is SwitchPreference) { - val ruleId = mPrefKeyToBingRuleId[prefKey] - - val rule = it.findDefaultRule(ruleId) - var isEnabled = null != rule && rule.isEnabled - - if (TextUtils.equals(ruleId, PushRule.RULE_ID_DISABLE_ALL) || TextUtils.equals(ruleId, PushRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS)) { - isEnabled = !isEnabled - } else if (isEnabled) { - val domainActions = rule!!.domainActions - - // no action -> noting will be done - if (null == domainActions || domainActions.isEmpty()) { - isEnabled = false - } else if (1 == domainActions.size) { - try { - isEnabled = !TextUtils.equals(domainActions[0] as String, PushRule.ACTION_DONT_NOTIFY) - } catch (e: Exception) { - Timber.e(e, "## refreshPreferences failed") - } - - } - }// check if the rule is only defined by don't notify - - putBoolean(prefKey, isEnabled) - } - } - } - */ - } - } - /* ========================================================================================== * Companion * ========================================================================================== */ @@ -220,7 +169,7 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( private const val REQUEST_NOTIFICATION_RINGTONE = 888 // preference name <-> rule Id - private val mPrefKeyToBingRuleId = mapOf( + private val prefKeyToPushRuleId = mapOf( VectorPreferences.SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY to PushRule.RULE_ID_CONTAIN_DISPLAY_NAME, VectorPreferences.SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY to PushRule.RULE_ID_CONTAIN_USER_NAME, VectorPreferences.SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY to PushRule.RULE_ID_ONE_TO_ONE_ROOM, From c20de4feb02586ac45c831fa98dfa3619964f71b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Feb 2020 19:13:22 +0100 Subject: [PATCH 08/15] Cleanup --- .../features/settings/VectorPreferences.kt | 11 ---------- ...sAdvancedNotificationPreferenceFragment.kt | 22 +++++++++---------- ...ings_notification_advanced_preferences.xml | 22 +++++++++---------- 3 files changed, 22 insertions(+), 33 deletions(-) diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt index c92c394cfb..cd647de891 100755 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt @@ -35,7 +35,6 @@ import javax.inject.Inject class VectorPreferences @Inject constructor(private val context: Context) { companion object { - const val SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY = "SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY" const val SETTINGS_CHANGE_PASSWORD_PREFERENCE_KEY = "SETTINGS_CHANGE_PASSWORD_PREFERENCE_KEY" const val SETTINGS_VERSION_PREFERENCE_KEY = "SETTINGS_VERSION_PREFERENCE_KEY" const val SETTINGS_SDK_VERSION_PREFERENCE_KEY = "SETTINGS_SDK_VERSION_PREFERENCE_KEY" @@ -114,16 +113,6 @@ class VectorPreferences @Inject constructor(private val context: Context) { const val SETTINGS_SYSTEM_SILENT_NOTIFICATION_PREFERENCE_KEY = "SETTINGS_SYSTEM_SILENT_NOTIFICATION_PREFERENCE_KEY" const val SETTINGS_NOTIFICATION_RINGTONE_PREFERENCE_KEY = "SETTINGS_NOTIFICATION_RINGTONE_PREFERENCE_KEY" const val SETTINGS_NOTIFICATION_RINGTONE_SELECTION_PREFERENCE_KEY = "SETTINGS_NOTIFICATION_RINGTONE_SELECTION_PREFERENCE_KEY" - const val SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY = "SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY" - const val SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY = "SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY" - const val SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY" - const val SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY" - const val SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY = "SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY" - const val SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY = "SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY" - const val SETTINGS_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY = "SETTINGS_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY" - const val SETTINGS_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY" - const val SETTINGS_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY = "SETTINGS_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY" - const val SETTINGS_ROOMS_UPGRADED_KEY = "SETTINGS_ROOMS_UPGRADED_KEY" // media private const val SETTINGS_DEFAULT_MEDIA_COMPRESSION_KEY = "SETTINGS_DEFAULT_MEDIA_COMPRESSION_KEY" diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt index 90f28e5d15..772e9df3d3 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt @@ -170,17 +170,17 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( // preference name <-> rule Id private val prefKeyToPushRuleId = mapOf( - VectorPreferences.SETTINGS_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY to PushRule.RULE_ID_CONTAIN_DISPLAY_NAME, - VectorPreferences.SETTINGS_CONTAINING_MY_USER_NAME_PREFERENCE_KEY to PushRule.RULE_ID_CONTAIN_USER_NAME, - VectorPreferences.SETTINGS_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY to PushRule.RULE_ID_ONE_TO_ONE_ROOM, - VectorPreferences.SETTINGS_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY to PushRule.RULE_ID_ALL_OTHER_MESSAGES_ROOMS, - VectorPreferences.SETTINGS_INVITED_TO_ROOM_PREFERENCE_KEY to PushRule.RULE_ID_INVITE_ME, - VectorPreferences.SETTINGS_CALL_INVITATIONS_PREFERENCE_KEY to PushRule.RULE_ID_CALL, - VectorPreferences.SETTINGS_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY to PushRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS, - VectorPreferences.SETTINGS_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY to PushRule.RULE_ID_AT_ROOMS, - VectorPreferences.SETTINGS_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY to PushRule.RULE_ID_E2E_ONE_TO_ONE_ROOM, - VectorPreferences.SETTINGS_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY to PushRule.RULE_ID_E2E_GROUP, - VectorPreferences.SETTINGS_ROOMS_UPGRADED_KEY to PushRule.RULE_ID_TOMBSTONE + "SETTINGS_PUSH_RULE_CONTAINING_MY_DISPLAY_NAME_PREFERENCE_KEY" to PushRule.RULE_ID_CONTAIN_DISPLAY_NAME, + "SETTINGS_PUSH_RULE_CONTAINING_MY_USER_NAME_PREFERENCE_KEY" to PushRule.RULE_ID_CONTAIN_USER_NAME, + "SETTINGS_PUSH_RULE_MESSAGES_IN_ONE_TO_ONE_PREFERENCE_KEY" to PushRule.RULE_ID_ONE_TO_ONE_ROOM, + "SETTINGS_PUSH_RULE_MESSAGES_IN_GROUP_CHAT_PREFERENCE_KEY" to PushRule.RULE_ID_ALL_OTHER_MESSAGES_ROOMS, + "SETTINGS_PUSH_RULE_INVITED_TO_ROOM_PREFERENCE_KEY" to PushRule.RULE_ID_INVITE_ME, + "SETTINGS_PUSH_RULE_CALL_INVITATIONS_PREFERENCE_KEY" to PushRule.RULE_ID_CALL, + "SETTINGS_PUSH_RULE_MESSAGES_SENT_BY_BOT_PREFERENCE_KEY" to PushRule.RULE_ID_SUPPRESS_BOTS_NOTIFICATIONS, + "SETTINGS_PUSH_RULE_MESSAGES_CONTAINING_AT_ROOM_PREFERENCE_KEY" to PushRule.RULE_ID_AT_ROOMS, + "SETTINGS_PUSH_RULE_MESSAGES_IN_E2E_ONE_ONE_CHAT_PREFERENCE_KEY" to PushRule.RULE_ID_E2E_ONE_TO_ONE_ROOM, + "SETTINGS_PUSH_RULE_MESSAGES_IN_E2E_GROUP_CHAT_PREFERENCE_KEY" to PushRule.RULE_ID_E2E_GROUP, + "SETTINGS_PUSH_RULE_ROOMS_UPGRADED_KEY" to PushRule.RULE_ID_TOMBSTONE ) } } diff --git a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml index 3ef86d1198..d5768235f1 100644 --- a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml +++ b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml @@ -6,59 +6,59 @@ android:title="@string/settings_notification_by_event"> From 1228fcda0d4913d6d306da45fb2432b478240c2a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Feb 2020 19:14:15 +0100 Subject: [PATCH 09/15] Rename class --- ...ificationTroubleshootTestManagerFactory.kt | 6 ++--- ...ulePreference.kt => PushRulePreference.kt} | 4 ++-- ...sAdvancedNotificationPreferenceFragment.kt | 4 ++-- ...esSettings.kt => TestPushRulesSettings.kt} | 2 +- ...le.xml => vector_preference_push_rule.xml} | 0 ...ings_notification_advanced_preferences.xml | 22 +++++++++---------- 6 files changed, 19 insertions(+), 19 deletions(-) rename vector/src/main/java/im/vector/riotx/core/preference/{BingRulePreference.kt => PushRulePreference.kt} (98%) rename vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/{TestBingRulesSettings.kt => TestPushRulesSettings.kt} (98%) rename vector/src/main/res/layout/{vector_preference_bing_rule.xml => vector_preference_push_rule.xml} (100%) diff --git a/vector/src/fdroid/java/im/vector/riotx/push/fcm/NotificationTroubleshootTestManagerFactory.kt b/vector/src/fdroid/java/im/vector/riotx/push/fcm/NotificationTroubleshootTestManagerFactory.kt index 723a0b9327..b88a379450 100644 --- a/vector/src/fdroid/java/im/vector/riotx/push/fcm/NotificationTroubleshootTestManagerFactory.kt +++ b/vector/src/fdroid/java/im/vector/riotx/push/fcm/NotificationTroubleshootTestManagerFactory.kt @@ -20,7 +20,7 @@ import im.vector.riotx.fdroid.features.settings.troubleshoot.TestAutoStartBoot import im.vector.riotx.fdroid.features.settings.troubleshoot.TestBackgroundRestrictions import im.vector.riotx.features.settings.troubleshoot.NotificationTroubleshootTestManager import im.vector.riotx.features.settings.troubleshoot.TestAccountSettings -import im.vector.riotx.features.settings.troubleshoot.TestBingRulesSettings +import im.vector.riotx.features.settings.troubleshoot.TestPushRulesSettings import im.vector.riotx.features.settings.troubleshoot.TestDeviceSettings import im.vector.riotx.features.settings.troubleshoot.TestSystemSettings import javax.inject.Inject @@ -28,7 +28,7 @@ import javax.inject.Inject class NotificationTroubleshootTestManagerFactory @Inject constructor(private val testSystemSettings: TestSystemSettings, private val testAccountSettings: TestAccountSettings, private val testDeviceSettings: TestDeviceSettings, - private val testBingRulesSettings: TestBingRulesSettings, + private val testPushRulesSettings: TestPushRulesSettings, private val testAutoStartBoot: TestAutoStartBoot, private val testBackgroundRestrictions: TestBackgroundRestrictions) { @@ -37,7 +37,7 @@ class NotificationTroubleshootTestManagerFactory @Inject constructor(private val mgr.addTest(testSystemSettings) mgr.addTest(testAccountSettings) mgr.addTest(testDeviceSettings) - mgr.addTest(testBingRulesSettings) + mgr.addTest(testPushRulesSettings) mgr.addTest(testAutoStartBoot) mgr.addTest(testBackgroundRestrictions) return mgr diff --git a/vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt b/vector/src/main/java/im/vector/riotx/core/preference/PushRulePreference.kt similarity index 98% rename from vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt rename to vector/src/main/java/im/vector/riotx/core/preference/PushRulePreference.kt index 1f074261a4..16dd1bb486 100755 --- a/vector/src/main/java/im/vector/riotx/core/preference/BingRulePreference.kt +++ b/vector/src/main/java/im/vector/riotx/core/preference/PushRulePreference.kt @@ -27,7 +27,7 @@ import im.vector.matrix.android.api.pushrules.rest.PushRule import im.vector.matrix.android.api.pushrules.rest.PushRuleAndKind import im.vector.riotx.R -class BingRulePreference : VectorPreference { +class PushRulePreference : VectorPreference { /** * @return the selected push rule and its kind @@ -42,7 +42,7 @@ class BingRulePreference : VectorPreference { constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) init { - layoutResource = R.layout.vector_preference_bing_rule + layoutResource = R.layout.vector_preference_push_rule } /** diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt index 772e9df3d3..5fa822ea92 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt @@ -25,7 +25,7 @@ import im.vector.matrix.android.api.MatrixCallback import im.vector.matrix.android.api.pushrules.rest.PushRule import im.vector.matrix.android.api.pushrules.rest.PushRuleAndKind import im.vector.riotx.R -import im.vector.riotx.core.preference.BingRulePreference +import im.vector.riotx.core.preference.PushRulePreference import im.vector.riotx.core.preference.VectorPreference import im.vector.riotx.core.utils.toast import im.vector.riotx.features.notifications.NotificationUtils @@ -92,7 +92,7 @@ class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( for (preferenceKey in prefKeyToPushRuleId.keys) { val preference = findPreference(preferenceKey) - if (preference is BingRulePreference) { + if (preference is PushRulePreference) { // preference.isEnabled = null != rules && isConnected && pushManager.areDeviceNotificationsAllowed() val ruleAndKind: PushRuleAndKind? = session.getPushRules().findDefaultRule(prefKeyToPushRuleId[preferenceKey]) 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/TestPushRulesSettings.kt similarity index 98% rename from vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/TestBingRulesSettings.kt rename to vector/src/main/java/im/vector/riotx/features/settings/troubleshoot/TestPushRulesSettings.kt index 52c1ceb07c..bbdf8fa62c 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/TestPushRulesSettings.kt @@ -23,7 +23,7 @@ import im.vector.riotx.core.resources.StringProvider import im.vector.riotx.features.notifications.toNotificationAction import javax.inject.Inject -class TestBingRulesSettings @Inject constructor(private val activeSessionHolder: ActiveSessionHolder, +class TestPushRulesSettings @Inject constructor(private val activeSessionHolder: ActiveSessionHolder, private val stringProvider: StringProvider) : TroubleshootTest(R.string.settings_troubleshoot_test_bing_settings_title) { diff --git a/vector/src/main/res/layout/vector_preference_bing_rule.xml b/vector/src/main/res/layout/vector_preference_push_rule.xml similarity index 100% rename from vector/src/main/res/layout/vector_preference_bing_rule.xml rename to vector/src/main/res/layout/vector_preference_push_rule.xml diff --git a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml index d5768235f1..a58a2d8f19 100644 --- a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml +++ b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml @@ -5,59 +5,59 @@ android:key="SETTINGS_NOTIFICATION_LEVEL" android:title="@string/settings_notification_by_event"> - - - - - - - - - - - From 3987a68a9ac9963aa905877693f18f94a61a8628 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Feb 2020 22:10:07 +0100 Subject: [PATCH 10/15] Changelog --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 20c2e5b266..bff3421110 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,7 +5,7 @@ Features ✨: - Improvements 🙌: - - + - Restore the push rules configuration in the settings Bugfix 🐛: - Fix crash on attachment preview screen (#1088) From 06e0af9a5b2b34c4d2e39e4e17ec9cfe4bec39ec Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 26 Feb 2020 08:49:17 +0100 Subject: [PATCH 11/15] small mistake --- .../im/vector/riotx/features/notifications/NotificationUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/riotx/features/notifications/NotificationUtils.kt b/vector/src/main/java/im/vector/riotx/features/notifications/NotificationUtils.kt index ff0947598f..50fb5b70de 100755 --- a/vector/src/main/java/im/vector/riotx/features/notifications/NotificationUtils.kt +++ b/vector/src/main/java/im/vector/riotx/features/notifications/NotificationUtils.kt @@ -423,9 +423,9 @@ class NotificationUtils @Inject constructor(private val context: Context, // 'importance' which is set in the NotificationChannel. The integers representing // 'priority' are different from 'importance', so make sure you don't mix them. .apply { - priority = NotificationCompat.PRIORITY_DEFAULT if (roomInfo.shouldBing) { // Compat + priority = NotificationCompat.PRIORITY_DEFAULT vectorPreferences.getNotificationRingTone()?.let { setSound(it) } From 6009026e2fe55fc460bfeba5c203df726a549951 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sat, 29 Feb 2020 09:35:26 +0100 Subject: [PATCH 12/15] Notification settings: create a category for troubleshhot --- vector/src/main/res/values/strings_riotX.xml | 1 + .../src/main/res/xml/vector_settings_notifications.xml | 9 +++++---- vector/src/main/res/xml/vector_settings_root.xml | 1 - 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index c20698d767..d627ac0dd7 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -16,6 +16,7 @@ Encrypted messages in one-to-one chats Encrypted messages in group chats When rooms are upgraded + Troubleshoot diff --git a/vector/src/main/res/xml/vector_settings_notifications.xml b/vector/src/main/res/xml/vector_settings_notifications.xml index 82c9cde759..fb660ba8b9 100644 --- a/vector/src/main/res/xml/vector_settings_notifications.xml +++ b/vector/src/main/res/xml/vector_settings_notifications.xml @@ -2,9 +2,7 @@ - + + + + + - diff --git a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml index a58a2d8f19..6e0fb71671 100644 --- a/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml +++ b/vector/src/main/res/xml/vector_settings_notification_advanced_preferences.xml @@ -64,37 +64,4 @@ - - - - - - - - - - - - - - diff --git a/vector/src/main/res/xml/vector_settings_notifications.xml b/vector/src/main/res/xml/vector_settings_notifications.xml index fb660ba8b9..5ecf693b44 100644 --- a/vector/src/main/res/xml/vector_settings_notifications.xml +++ b/vector/src/main/res/xml/vector_settings_notifications.xml @@ -24,12 +24,44 @@ android:dependency="SETTINGS_ENABLE_THIS_DEVICE_PREFERENCE_KEY" android:key="SETTINGS_NOTIFICATION_ADVANCED_PREFERENCE_KEY" android:persistent="false" - android:summary="@string/settings_notification_advanced_summary" + android:summary="@string/settings_notification_advanced_summary_riotx" android:title="@string/settings_notification_advanced" app:fragment="im.vector.riotx.features.settings.VectorSettingsAdvancedNotificationPreferenceFragment" /> + + + + + + + + + + + + + + Date: Sat, 29 Feb 2020 10:05:00 +0100 Subject: [PATCH 15/15] Code cleanup --- .../android/api/pushrules/rest/PushRule.kt | 2 +- .../features/settings/VectorPreferences.kt | 1 - .../settings/VectorSettingsActivity.kt | 23 +++++++------------ ...sAdvancedNotificationPreferenceFragment.kt | 5 ++-- ...rSettingsNotificationPreferenceFragment.kt | 1 - 5 files changed, 11 insertions(+), 21 deletions(-) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt index 699ce29032..8611f124e8 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/api/pushrules/rest/PushRule.kt @@ -85,7 +85,7 @@ data class PushRule( */ fun removeNotificationSound(): PushRule { return copy( - actions = (getActions().filter { it !is Action.Sound }).toJson() + actions = getActions().filter { it !is Action.Sound }.toJson() ) } diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt index cd647de891..acc3c72253 100755 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorPreferences.kt @@ -45,7 +45,6 @@ class VectorPreferences @Inject constructor(private val context: Context) { const val SETTINGS_APP_TERM_CONDITIONS_PREFERENCE_KEY = "SETTINGS_APP_TERM_CONDITIONS_PREFERENCE_KEY" const val SETTINGS_PRIVACY_POLICY_PREFERENCE_KEY = "SETTINGS_PRIVACY_POLICY_PREFERENCE_KEY" - const val SETTINGS_NOTIFICATION_TROUBLESHOOT_PREFERENCE_KEY = "SETTINGS_NOTIFICATION_TROUBLESHOOT_PREFERENCE_KEY" const val SETTINGS_NOTIFICATION_ADVANCED_PREFERENCE_KEY = "SETTINGS_NOTIFICATION_ADVANCED_PREFERENCE_KEY" const val SETTINGS_THIRD_PARTY_NOTICES_PREFERENCE_KEY = "SETTINGS_THIRD_PARTY_NOTICES_PREFERENCE_KEY" const val SETTINGS_OTHER_THIRD_PARTY_NOTICES_PREFERENCE_KEY = "SETTINGS_OTHER_THIRD_PARTY_NOTICES_PREFERENCE_KEY" diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsActivity.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsActivity.kt index 490805ea3c..909d40a74c 100755 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsActivity.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsActivity.kt @@ -77,21 +77,14 @@ class VectorSettingsActivity : VectorBaseActivity(), } override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean { - val oFragment = when { - VectorPreferences.SETTINGS_NOTIFICATION_TROUBLESHOOT_PREFERENCE_KEY == pref.key -> - supportFragmentManager.fragmentFactory.instantiate(classLoader, VectorSettingsNotificationsTroubleshootFragment::class.java.name) - VectorPreferences.SETTINGS_NOTIFICATION_ADVANCED_PREFERENCE_KEY == pref.key -> - supportFragmentManager.fragmentFactory.instantiate(classLoader, VectorSettingsAdvancedNotificationPreferenceFragment::class.java.name) - else -> - try { - pref.fragment?.let { - supportFragmentManager.fragmentFactory.instantiate(classLoader, it) - } - } catch (e: Throwable) { - showSnackbar(getString(R.string.not_implemented)) - Timber.e(e) - null - } + val oFragment = try { + pref.fragment?.let { + supportFragmentManager.fragmentFactory.instantiate(classLoader, it) + } + } catch (e: Throwable) { + showSnackbar(getString(R.string.not_implemented)) + Timber.e(e) + null } if (oFragment != null) { diff --git a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt index b7c1a0490b..95901de471 100644 --- a/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/settings/VectorSettingsAdvancedNotificationPreferenceFragment.kt @@ -25,9 +25,8 @@ import im.vector.riotx.core.preference.VectorPreference import im.vector.riotx.core.utils.toast import javax.inject.Inject -class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor( - private val vectorPreferences: VectorPreferences -) : VectorSettingsBaseFragment() { +class VectorSettingsAdvancedNotificationPreferenceFragment @Inject constructor() + : VectorSettingsBaseFragment() { override var titleRes: Int = R.string.settings_notification_advanced 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 0ee42b7653..a1e67e6cd0 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 @@ -136,7 +136,6 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( } } - override fun onResume() { super.onResume() activeSessionHolder.getSafeActiveSession()?.refreshPushers()