Loading app/core/src/main/java/com/fsck/k9/AccountPreferenceSerializer.kt +9 −9 Original line number Diff line number Diff line Loading @@ -142,9 +142,11 @@ class AccountPreferenceSerializer( isRingEnabled = storage.getBoolean("$accountUuid.ring", true), ringtone = storage.getString("$accountUuid.ringtone", DEFAULT_RINGTONE_URI), light = getEnumStringPref(storage, "$accountUuid.notificationLight", NotificationLight.Disabled), isVibrateEnabled = storage.getBoolean("$accountUuid.vibrate", false), vibratePattern = VibratePattern.deserialize(storage.getInt("$accountUuid.vibratePattern", 0)), vibrateTimes = storage.getInt("$accountUuid.vibrateTimes", 5) vibration = NotificationVibration( isEnabled = storage.getBoolean("$accountUuid.vibrate", false), pattern = VibratePattern.deserialize(storage.getInt("$accountUuid.vibratePattern", 0)), repeatCount = storage.getInt("$accountUuid.vibrateTimes", 5) ) ) } Loading Loading @@ -322,9 +324,9 @@ class AccountPreferenceSerializer( editor.putBoolean("$accountUuid.markMessageAsReadOnDelete", isMarkMessageAsReadOnDelete) editor.putBoolean("$accountUuid.alwaysShowCcBcc", isAlwaysShowCcBcc) editor.putBoolean("$accountUuid.vibrate", notificationSettings.isVibrateEnabled) editor.putInt("$accountUuid.vibratePattern", notificationSettings.vibratePattern.serialize()) editor.putInt("$accountUuid.vibrateTimes", notificationSettings.vibrateTimes) editor.putBoolean("$accountUuid.vibrate", notificationSettings.vibration.isEnabled) editor.putInt("$accountUuid.vibratePattern", notificationSettings.vibration.pattern.serialize()) editor.putInt("$accountUuid.vibrateTimes", notificationSettings.vibration.repeatCount) editor.putBoolean("$accountUuid.ring", notificationSettings.isRingEnabled) editor.putString("$accountUuid.ringtone", notificationSettings.ringtone) editor.putString("$accountUuid.notificationLight", notificationSettings.light.name) Loading Loading @@ -607,9 +609,7 @@ class AccountPreferenceSerializer( isRingEnabled = true, ringtone = DEFAULT_RINGTONE_URI, light = NotificationLight.Disabled, isVibrateEnabled = false, vibratePattern = VibratePattern.Default, vibrateTimes = 5 vibration = NotificationVibration.DEFAULT ) } Loading app/core/src/main/java/com/fsck/k9/NotificationSettings.kt +2 −57 Original line number Diff line number Diff line Loading @@ -7,60 +7,5 @@ data class NotificationSettings( val isRingEnabled: Boolean = false, val ringtone: String? = null, val light: NotificationLight = NotificationLight.Disabled, val isVibrateEnabled: Boolean = false, val vibratePattern: VibratePattern = VibratePattern.Default, val vibrateTimes: Int = 0 ) { val vibrationPattern: LongArray get() = getVibrationPattern(vibratePattern, vibrateTimes) companion object { fun getVibrationPattern(vibratePattern: VibratePattern, times: Int): LongArray { val selectedPattern = vibratePattern.vibrationPattern val repeatedPattern = LongArray(selectedPattern.size * times) for (n in 0 until times) { System.arraycopy(selectedPattern, 0, repeatedPattern, n * selectedPattern.size, selectedPattern.size) } // Do not wait before starting the vibration pattern. repeatedPattern[0] = 0 return repeatedPattern } } } enum class VibratePattern( /** * These are "off, on" patterns, specified in milliseconds. */ val vibrationPattern: LongArray ) { Default(vibrationPattern = longArrayOf(300, 200)), Pattern1(vibrationPattern = longArrayOf(100, 200)), Pattern2(vibrationPattern = longArrayOf(100, 500)), Pattern3(vibrationPattern = longArrayOf(200, 200)), Pattern4(vibrationPattern = longArrayOf(200, 500)), Pattern5(vibrationPattern = longArrayOf(500, 500)); fun serialize(): Int = when (this) { Default -> 0 Pattern1 -> 1 Pattern2 -> 2 Pattern3 -> 3 Pattern4 -> 4 Pattern5 -> 5 } companion object { fun deserialize(value: Int): VibratePattern = when (value) { 0 -> Default 1 -> Pattern1 2 -> Pattern2 3 -> Pattern3 4 -> Pattern4 5 -> Pattern5 else -> error("Unknown VibratePattern value: $value") } } } val vibration: NotificationVibration = NotificationVibration.DEFAULT ) app/core/src/main/java/com/fsck/k9/NotificationVibration.kt 0 → 100644 +62 −0 Original line number Diff line number Diff line package com.fsck.k9 data class NotificationVibration( val isEnabled: Boolean, val pattern: VibratePattern, val repeatCount: Int ) { val systemPattern: LongArray get() = getSystemPattern(pattern, repeatCount) companion object { val DEFAULT = NotificationVibration(isEnabled = false, pattern = VibratePattern.Default, repeatCount = 5) fun getSystemPattern(vibratePattern: VibratePattern, repeatCount: Int): LongArray { val selectedPattern = vibratePattern.vibrationPattern val repeatedPattern = LongArray(selectedPattern.size * repeatCount) for (n in 0 until repeatCount) { System.arraycopy(selectedPattern, 0, repeatedPattern, n * selectedPattern.size, selectedPattern.size) } // Do not wait before starting the vibration pattern. repeatedPattern[0] = 0 return repeatedPattern } } } enum class VibratePattern( /** * These are "off, on" patterns, specified in milliseconds. */ val vibrationPattern: LongArray ) { Default(vibrationPattern = longArrayOf(300, 200)), Pattern1(vibrationPattern = longArrayOf(100, 200)), Pattern2(vibrationPattern = longArrayOf(100, 500)), Pattern3(vibrationPattern = longArrayOf(200, 200)), Pattern4(vibrationPattern = longArrayOf(200, 500)), Pattern5(vibrationPattern = longArrayOf(500, 500)); fun serialize(): Int = when (this) { Default -> 0 Pattern1 -> 1 Pattern2 -> 2 Pattern3 -> 3 Pattern4 -> 4 Pattern5 -> 5 } companion object { fun deserialize(value: Int): VibratePattern = when (value) { 0 -> Default 1 -> Pattern1 2 -> Pattern2 3 -> Pattern3 4 -> Pattern4 5 -> Pattern5 else -> error("Unknown VibratePattern value: $value") } } } app/core/src/main/java/com/fsck/k9/notification/BaseNotificationDataCreator.kt +1 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ internal class BaseNotificationDataCreator { private fun createNotificationAppearance(account: Account): NotificationAppearance { return with(account.notificationSettings) { val vibrationPattern = if (isVibrateEnabled) vibrationPattern else null val vibrationPattern = vibration.systemPattern.takeIf { vibration.isEnabled } NotificationAppearance(ringtone, vibrationPattern, account.notificationSettings.light.toColor(account)) } } Loading app/core/src/main/java/com/fsck/k9/notification/NotificationChannelManager.kt +4 −4 Original line number Diff line number Diff line Loading @@ -213,8 +213,8 @@ class NotificationChannelManager( val notificationSettings = account.notificationSettings return sound == notificationSettings.ringtoneUri && systemLight == notificationSettings.light && shouldVibrate() == notificationSettings.isVibrateEnabled && vibrationPattern.contentEquals(notificationSettings.vibrationPattern) shouldVibrate() == notificationSettings.vibration.isEnabled && vibrationPattern.contentEquals(notificationSettings.vibration.systemPattern) } @RequiresApi(Build.VERSION_CODES.O) Loading Loading @@ -244,8 +244,8 @@ class NotificationChannelManager( val isLightEnabled = notificationSettings.light != NotificationLight.Disabled enableLights(isLightEnabled) vibrationPattern = notificationSettings.vibrationPattern enableVibration(notificationSettings.isVibrateEnabled) vibrationPattern = notificationSettings.vibration.systemPattern enableVibration(notificationSettings.vibration.isEnabled) } private val Account.messagesNotificationChannelSuffix: String Loading Loading
app/core/src/main/java/com/fsck/k9/AccountPreferenceSerializer.kt +9 −9 Original line number Diff line number Diff line Loading @@ -142,9 +142,11 @@ class AccountPreferenceSerializer( isRingEnabled = storage.getBoolean("$accountUuid.ring", true), ringtone = storage.getString("$accountUuid.ringtone", DEFAULT_RINGTONE_URI), light = getEnumStringPref(storage, "$accountUuid.notificationLight", NotificationLight.Disabled), isVibrateEnabled = storage.getBoolean("$accountUuid.vibrate", false), vibratePattern = VibratePattern.deserialize(storage.getInt("$accountUuid.vibratePattern", 0)), vibrateTimes = storage.getInt("$accountUuid.vibrateTimes", 5) vibration = NotificationVibration( isEnabled = storage.getBoolean("$accountUuid.vibrate", false), pattern = VibratePattern.deserialize(storage.getInt("$accountUuid.vibratePattern", 0)), repeatCount = storage.getInt("$accountUuid.vibrateTimes", 5) ) ) } Loading Loading @@ -322,9 +324,9 @@ class AccountPreferenceSerializer( editor.putBoolean("$accountUuid.markMessageAsReadOnDelete", isMarkMessageAsReadOnDelete) editor.putBoolean("$accountUuid.alwaysShowCcBcc", isAlwaysShowCcBcc) editor.putBoolean("$accountUuid.vibrate", notificationSettings.isVibrateEnabled) editor.putInt("$accountUuid.vibratePattern", notificationSettings.vibratePattern.serialize()) editor.putInt("$accountUuid.vibrateTimes", notificationSettings.vibrateTimes) editor.putBoolean("$accountUuid.vibrate", notificationSettings.vibration.isEnabled) editor.putInt("$accountUuid.vibratePattern", notificationSettings.vibration.pattern.serialize()) editor.putInt("$accountUuid.vibrateTimes", notificationSettings.vibration.repeatCount) editor.putBoolean("$accountUuid.ring", notificationSettings.isRingEnabled) editor.putString("$accountUuid.ringtone", notificationSettings.ringtone) editor.putString("$accountUuid.notificationLight", notificationSettings.light.name) Loading Loading @@ -607,9 +609,7 @@ class AccountPreferenceSerializer( isRingEnabled = true, ringtone = DEFAULT_RINGTONE_URI, light = NotificationLight.Disabled, isVibrateEnabled = false, vibratePattern = VibratePattern.Default, vibrateTimes = 5 vibration = NotificationVibration.DEFAULT ) } Loading
app/core/src/main/java/com/fsck/k9/NotificationSettings.kt +2 −57 Original line number Diff line number Diff line Loading @@ -7,60 +7,5 @@ data class NotificationSettings( val isRingEnabled: Boolean = false, val ringtone: String? = null, val light: NotificationLight = NotificationLight.Disabled, val isVibrateEnabled: Boolean = false, val vibratePattern: VibratePattern = VibratePattern.Default, val vibrateTimes: Int = 0 ) { val vibrationPattern: LongArray get() = getVibrationPattern(vibratePattern, vibrateTimes) companion object { fun getVibrationPattern(vibratePattern: VibratePattern, times: Int): LongArray { val selectedPattern = vibratePattern.vibrationPattern val repeatedPattern = LongArray(selectedPattern.size * times) for (n in 0 until times) { System.arraycopy(selectedPattern, 0, repeatedPattern, n * selectedPattern.size, selectedPattern.size) } // Do not wait before starting the vibration pattern. repeatedPattern[0] = 0 return repeatedPattern } } } enum class VibratePattern( /** * These are "off, on" patterns, specified in milliseconds. */ val vibrationPattern: LongArray ) { Default(vibrationPattern = longArrayOf(300, 200)), Pattern1(vibrationPattern = longArrayOf(100, 200)), Pattern2(vibrationPattern = longArrayOf(100, 500)), Pattern3(vibrationPattern = longArrayOf(200, 200)), Pattern4(vibrationPattern = longArrayOf(200, 500)), Pattern5(vibrationPattern = longArrayOf(500, 500)); fun serialize(): Int = when (this) { Default -> 0 Pattern1 -> 1 Pattern2 -> 2 Pattern3 -> 3 Pattern4 -> 4 Pattern5 -> 5 } companion object { fun deserialize(value: Int): VibratePattern = when (value) { 0 -> Default 1 -> Pattern1 2 -> Pattern2 3 -> Pattern3 4 -> Pattern4 5 -> Pattern5 else -> error("Unknown VibratePattern value: $value") } } } val vibration: NotificationVibration = NotificationVibration.DEFAULT )
app/core/src/main/java/com/fsck/k9/NotificationVibration.kt 0 → 100644 +62 −0 Original line number Diff line number Diff line package com.fsck.k9 data class NotificationVibration( val isEnabled: Boolean, val pattern: VibratePattern, val repeatCount: Int ) { val systemPattern: LongArray get() = getSystemPattern(pattern, repeatCount) companion object { val DEFAULT = NotificationVibration(isEnabled = false, pattern = VibratePattern.Default, repeatCount = 5) fun getSystemPattern(vibratePattern: VibratePattern, repeatCount: Int): LongArray { val selectedPattern = vibratePattern.vibrationPattern val repeatedPattern = LongArray(selectedPattern.size * repeatCount) for (n in 0 until repeatCount) { System.arraycopy(selectedPattern, 0, repeatedPattern, n * selectedPattern.size, selectedPattern.size) } // Do not wait before starting the vibration pattern. repeatedPattern[0] = 0 return repeatedPattern } } } enum class VibratePattern( /** * These are "off, on" patterns, specified in milliseconds. */ val vibrationPattern: LongArray ) { Default(vibrationPattern = longArrayOf(300, 200)), Pattern1(vibrationPattern = longArrayOf(100, 200)), Pattern2(vibrationPattern = longArrayOf(100, 500)), Pattern3(vibrationPattern = longArrayOf(200, 200)), Pattern4(vibrationPattern = longArrayOf(200, 500)), Pattern5(vibrationPattern = longArrayOf(500, 500)); fun serialize(): Int = when (this) { Default -> 0 Pattern1 -> 1 Pattern2 -> 2 Pattern3 -> 3 Pattern4 -> 4 Pattern5 -> 5 } companion object { fun deserialize(value: Int): VibratePattern = when (value) { 0 -> Default 1 -> Pattern1 2 -> Pattern2 3 -> Pattern3 4 -> Pattern4 5 -> Pattern5 else -> error("Unknown VibratePattern value: $value") } } }
app/core/src/main/java/com/fsck/k9/notification/BaseNotificationDataCreator.kt +1 −1 Original line number Diff line number Diff line Loading @@ -41,7 +41,7 @@ internal class BaseNotificationDataCreator { private fun createNotificationAppearance(account: Account): NotificationAppearance { return with(account.notificationSettings) { val vibrationPattern = if (isVibrateEnabled) vibrationPattern else null val vibrationPattern = vibration.systemPattern.takeIf { vibration.isEnabled } NotificationAppearance(ringtone, vibrationPattern, account.notificationSettings.light.toColor(account)) } } Loading
app/core/src/main/java/com/fsck/k9/notification/NotificationChannelManager.kt +4 −4 Original line number Diff line number Diff line Loading @@ -213,8 +213,8 @@ class NotificationChannelManager( val notificationSettings = account.notificationSettings return sound == notificationSettings.ringtoneUri && systemLight == notificationSettings.light && shouldVibrate() == notificationSettings.isVibrateEnabled && vibrationPattern.contentEquals(notificationSettings.vibrationPattern) shouldVibrate() == notificationSettings.vibration.isEnabled && vibrationPattern.contentEquals(notificationSettings.vibration.systemPattern) } @RequiresApi(Build.VERSION_CODES.O) Loading Loading @@ -244,8 +244,8 @@ class NotificationChannelManager( val isLightEnabled = notificationSettings.light != NotificationLight.Disabled enableLights(isLightEnabled) vibrationPattern = notificationSettings.vibrationPattern enableVibration(notificationSettings.isVibrateEnabled) vibrationPattern = notificationSettings.vibration.systemPattern enableVibration(notificationSettings.vibration.isEnabled) } private val Account.messagesNotificationChannelSuffix: String Loading