[2/2] OmniGears: Change of default stream type controlled by volume rocker

PS10: handling of different values to use as default within settings

NOTE: tablets need an overlay at the device tree of custom_arrays.xml
without ringer value included (doesn't break anything if not present though)

Base: https://gerrit.omnirom.org/#/c/2340
Change-Id: I9e2113a6366ab767ad3f41215f6e083fef7dd35f
diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index 0c28d0b..ffad247 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -190,4 +190,16 @@
         <item>3</item>
     </string-array>
 
+    <string-array name="button_volume_default_entries" translatbale="false">
+        <item>@string/button_volume_default_none</item>
+        <item>@string/button_volume_default_media</item>
+        <item>@string/button_volume_default_ringer</item>
+    </string-array>
+
+    <string-array name="button_volume_default_values" translatable="false">
+        <item>-1</item>
+        <item>3</item>
+        <item>2</item>
+    </string-array>
+
 </resources>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index c6027fb..70343d4 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -265,8 +265,16 @@
     <string name="recent_clear_all_button_location_bottom_left">Bottom left</string>
     <string name="recent_clear_all_button_location_bottom_right">Bottom right</string>
 
+    <!-- Contextual Notification Panel Header -->
     <string name="notification_drawer_category_title">Notification drawer</string>
     <string name="custom_statusbar_header_title">Contextual notification panel header</string>
     <string name="custom_statusbar_header_summary">Sets the background of the notification panel header to an image based on the current date and time</string>
 
+    <!-- Volume default -->
+    <string name="button_volume_default_none">None</string>
+    <string name="button_volume_default_ringer">Ringer</string>
+    <string name="button_volume_default_media">Media</string>
+    <string name="button_volume_default_title">Volume default</string>
+    <string name="button_volume_default_summary">Choose which volume gets changed by default</string>
+
 </resources>
diff --git a/res/xml/button_settings.xml b/res/xml/button_settings.xml
index c6fd472..38ea732 100644
--- a/res/xml/button_settings.xml
+++ b/res/xml/button_settings.xml
@@ -41,6 +41,14 @@
             android:summary="@string/button_volume_wake_summary"
             android:defaultValue="false" />
 
+        <ListPreference
+            android:key="button_volume_default_screen"
+            android:title="@string/button_volume_default_title"
+            android:summary="@string/button_volume_default_summary"
+            android:entries="@array/button_volume_default_entries"
+            android:entryValues="@array/button_volume_default_values"
+            android:defaultValue="0" />
+
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/src/org/omnirom/omnigears/ButtonSettings.java b/src/org/omnirom/omnigears/ButtonSettings.java
index e014f8a..4102c4a 100644
--- a/src/org/omnirom/omnigears/ButtonSettings.java
+++ b/src/org/omnirom/omnigears/ButtonSettings.java
@@ -32,10 +32,13 @@
  */
 package org.omnirom.omnigears;
 
+import java.util.prefs.PreferenceChangeListener;
+
 import android.content.ContentResolver;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.preference.CheckBoxPreference;
+import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.PreferenceCategory;
@@ -66,6 +69,7 @@
     private static final String CATEGORY_APPSWITCH = "button_keys_appSwitch";
     
     private static final String BUTTON_VOLUME_WAKE = "button_volume_wake_screen";
+    private static final String BUTTON_VOLUME_DEFAULT = "button_volume_default_screen";
 
     private static final String KEYS_CATEGORY_BINDINGS = "keys_bindings";
     private static final String KEYS_ENABLE_CUSTOM = "keys_enable_custom";
@@ -115,6 +119,7 @@
     private ListPreference mAppSwitchPressAction;
     private ListPreference mAppSwitchLongPressAction;
     private Map<String, Integer> mKeySettings = new HashMap<String, Integer>();
+    private ListPreference mVolumeDefault;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -130,13 +135,21 @@
                 (PreferenceCategory) prefScreen.findPreference(CATEGORY_VOLUME);
 
         if (hasVolumeRocker()) {
+            mVolumeWake = (CheckBoxPreference) findPreference(BUTTON_VOLUME_WAKE);
+            mVolumeDefault = (ListPreference) findPreference(BUTTON_VOLUME_DEFAULT);
             if (!res.getBoolean(R.bool.config_show_volumeRockerWake)) {
-                prefScreen.removePreference(volumeCategory);
+                prefScreen.removePreference(mVolumeWake);
             } else {
-                mVolumeWake = (CheckBoxPreference) findPreference(BUTTON_VOLUME_WAKE);
                 mVolumeWake.setChecked(Settings.System.getInt(resolver,
-                        Settings.System.VOLUME_WAKE_SCREEN, 0) != 0);
+                    Settings.System.VOLUME_WAKE_SCREEN, 0) != 0);
             }
+            String currentDefault = Settings.System.getString(resolver, Settings.System.VOLUME_KEYS_DEFAULT);
+
+            if (currentDefault == null) {
+                currentDefault = mVolumeDefault.getEntryValues()[mVolumeDefault.getEntryValues().length - 1].toString();
+            }
+            mVolumeDefault.setValue(currentDefault);
+            mVolumeDefault.setOnPreferenceChangeListener(this);
         } else {
             prefScreen.removePreference(volumeCategory);
         }
@@ -348,7 +361,6 @@
             boolean checked = ((CheckBoxPreference)preference).isChecked();
             Settings.System.putInt(getActivity().getContentResolver(),
                     Settings.System.VOLUME_WAKE_SCREEN, checked ? 1:0);
-
             return true;
         }
         return super.onPreferenceTreeClick(preferenceScreen, preference);
@@ -470,6 +482,10 @@
             mKeySettings.put(Settings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION, value);
             checkForHomeKey();
             return true;
+        } else if (preference == mVolumeDefault) {
+            String value = (String)newValue;
+            Settings.System.putString(getActivity().getContentResolver(), Settings.System.VOLUME_KEYS_DEFAULT, value);
+            return true;
         }
         return false;
     }