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)