diff --git a/KeyHandler/res/values/arrays.xml b/KeyHandler/res/values/arrays.xml index 263c31d..c510ead 100644 --- a/KeyHandler/res/values/arrays.xml +++ b/KeyHandler/res/values/arrays.xml @@ -8,11 +8,17 @@ @string/alert_slider_mode_normal @string/alert_slider_mode_vibration @string/alert_slider_mode_silent + @string/alert_slider_mode_dnd_priority_only + @string/alert_slider_mode_dnd_total_silence + @string/alert_slider_mode_dnd_alarms_only 2 1 0 + 3 + 4 + 5 diff --git a/KeyHandler/res/values/strings.xml b/KeyHandler/res/values/strings.xml index 0031284..1643ce3 100644 --- a/KeyHandler/res/values/strings.xml +++ b/KeyHandler/res/values/strings.xml @@ -13,4 +13,9 @@ Silent Normal Vibration + Priority only + Total silence + Alarms only + Mute media + Mute media when switching to silent diff --git a/KeyHandler/res/xml/button_panel.xml b/KeyHandler/res/xml/button_panel.xml index 3755e99..16382cf 100644 --- a/KeyHandler/res/xml/button_panel.xml +++ b/KeyHandler/res/xml/button_panel.xml @@ -7,6 +7,12 @@ + + { - val mode = sharedPreferences.getString(ALERT_SLIDER_TOP_KEY, "0")!!.toInt() - audioManager.setRingerModeInternal(mode) - vibrateIfNeeded(mode) + handleMode(sharedPreferences.getString(ALERT_SLIDER_TOP_KEY, "0")!!.toInt()) } POSITION_MIDDLE -> { - val mode = sharedPreferences.getString(ALERT_SLIDER_MIDDLE_KEY, "1")!!.toInt() - audioManager.setRingerModeInternal(mode) - vibrateIfNeeded(mode) + handleMode(sharedPreferences.getString(ALERT_SLIDER_MIDDLE_KEY, "1")!!.toInt()) } POSITION_BOTTOM -> { - val mode = sharedPreferences.getString(ALERT_SLIDER_BOTTOM_KEY, "2")!!.toInt() - audioManager.setRingerModeInternal(mode) - vibrateIfNeeded(mode) + handleMode(sharedPreferences.getString(ALERT_SLIDER_BOTTOM_KEY, "2")!!.toInt()) } } } @@ -54,6 +73,36 @@ class KeyHandler(context: Context) : DeviceKeyHandler { } } + private fun handleMode(mode: Int) { + val muteMedia = sharedPreferences.getBoolean(MUTE_MEDIA_WITH_SILENT, false) + + when (mode) { + AudioManager.RINGER_MODE_SILENT -> { + notificationManager.setZenMode(Settings.Global.ZEN_MODE_OFF, null, TAG) + audioManager.setRingerModeInternal(mode) + if (muteMedia) { + audioManager.adjustVolume(AudioManager.ADJUST_MUTE, 0) + wasMuted = true + } + } + AudioManager.RINGER_MODE_VIBRATE, AudioManager.RINGER_MODE_NORMAL -> { + notificationManager.setZenMode(Settings.Global.ZEN_MODE_OFF, null, TAG) + audioManager.setRingerModeInternal(mode) + if (muteMedia && wasMuted) { + audioManager.adjustVolume(AudioManager.ADJUST_UNMUTE, 0) + } + } + ZEN_PRIORITY_ONLY, ZEN_TOTAL_SILENCE, ZEN_ALARMS_ONLY -> { + audioManager.setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL) + notificationManager.setZenMode(mode - ZEN_OFFSET, null, TAG) + if (muteMedia && wasMuted) { + audioManager.adjustVolume(AudioManager.ADJUST_UNMUTE, 0) + } + } + } + vibrateIfNeeded(mode) + } + companion object { private const val TAG = "KeyHandler" @@ -66,6 +115,13 @@ class KeyHandler(context: Context) : DeviceKeyHandler { private const val ALERT_SLIDER_TOP_KEY = "config_top_position" private const val ALERT_SLIDER_MIDDLE_KEY = "config_middle_position" private const val ALERT_SLIDER_BOTTOM_KEY = "config_bottom_position" + private const val MUTE_MEDIA_WITH_SILENT = "config_mute_media" + + // ZEN constants + private const val ZEN_OFFSET = 2 + private const val ZEN_PRIORITY_ONLY = 3 + private const val ZEN_TOTAL_SILENCE = 4 + private const val ZEN_ALARMS_ONLY = 5 // Vibration effects private val MODE_NORMAL_EFFECT = VibrationEffect.get(VibrationEffect.EFFECT_HEAVY_CLICK)