Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit e316fda8 authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #5954 from k9mail/vibration_setting_refactoring

Extract vibration settings to separate class `NotificationVibration`
parents 50ac77e3 25c0e4af
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -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)
                    )
                )
            }

@@ -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)
@@ -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
                )
            }

+2 −57
Original line number Diff line number Diff line
@@ -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
)
+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")
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -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))
        }
    }
+4 −4
Original line number Diff line number Diff line
@@ -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)
@@ -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