[2/2] OmniGears: force show navbar and hw key disable support

Change-Id: Icab8be5b8f86dfedef0ef3953b058c4d75560219
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 8b8f036..5720353 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -18,8 +18,6 @@
  -->
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
-    <string name="more_settings_title">OmniGears More...</string>
     <string name="ok">OK</string>
     <string name="advanced">Advanced</string>
     <string name="profiles_add">Add...</string>
@@ -350,14 +348,13 @@
     <string name="global_actions_voiceassist_title">Voiceassist</string>
     <string name="global_actions_silent_title">Silent mode</string>
     <string name="global_actions_dnd_title">Do not disturb</string>
-    <string name="global_actions_title">Power menu</string>
     <string name="global_actions_summary">Actions shown in power menu</string>
     <string name="global_actions_header">Some actions are only visible depending on the setup or only if the device is unlocked</string>
     <string name="global_actions_anim">Appearance</string>
     <string name="global_actions_advanced_reboot_summary">Show more options in restart menu</string>
     <string name="global_actions_advanced_reboot_title">Enable advanced restart</string>
     <string name="global_actions_advanced_reboot_summary_new">Show more options in restart menu if not locked</string>
-    
+
     <string name="font_sample_text">11:57</string>
 
     <string name="screenshot_crop_and_share_title">Screenshot crop &amp; share</string>
@@ -513,7 +510,6 @@
 
     <!-- Display : Rotation -->
     <string name="category_display">Display</string>
-    <string name="display_rotation_title">Rotation</string>
     <string name="display_rotation_disabled">Disabled</string>
     <string name="display_rotation_unit">degrees</string>
     <string name="display_rotation_category_title">Rotation modes</string>
diff --git a/res/xml/button_settings.xml b/res/xml/button_settings.xml
index 9070ec7..3944d82 100644
--- a/res/xml/button_settings.xml
+++ b/res/xml/button_settings.xml
@@ -36,6 +36,23 @@
     </PreferenceCategory>
 
     <PreferenceCategory
+        android:key="button_keys"
+        android:title="@string/button_keys_title" >
+
+        <SwitchPreference
+            android:key="navigation_bar_show"
+            android:title="@string/navigation_bar_show_title"
+            android:summary="@string/navigation_bar_show_summary"
+            android:persistent="false" />
+        <SwitchPreference
+            android:key="hardware_keys_disable"
+            android:title="@string/hardware_keys_disable_title"
+            android:summary="@string/hardware_keys_disable_summary"
+            android:persistent="false"
+            android:dependency="navigation_bar_show"/>
+    </PreferenceCategory>
+
+    <PreferenceCategory
         android:key="button_power"
         android:title="@string/global_actions_power_title" >
 
diff --git a/src/org/omnirom/omnigears/ButtonSettings.java b/src/org/omnirom/omnigears/ButtonSettings.java
index c2e1b84..ec25354 100644
--- a/src/org/omnirom/omnigears/ButtonSettings.java
+++ b/src/org/omnirom/omnigears/ButtonSettings.java
@@ -26,7 +26,10 @@
 import android.support.v7.preference.ListPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.Preference.OnPreferenceChangeListener;
+import android.support.v7.preference.PreferenceCategory;
+import android.support.v7.preference.PreferenceScreen;
 import android.support.v7.preference.ListPreference;
+import android.support.v14.preference.SwitchPreference;
 import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 
@@ -42,9 +45,13 @@
 
 import com.android.internal.util.omni.OmniSwitchConstants;
 import com.android.internal.util.omni.PackageUtils;
+import com.android.internal.util.omni.DeviceUtils;
 
 public class ButtonSettings extends SettingsPreferenceFragment implements OnPreferenceChangeListener, Indexable {
 
+    private static final String CATEGORY_KEYS = "button_keys";
+    private static final String KEYS_SHOW_NAVBAR_KEY = "navigation_bar_show";
+    private static final String KEYS_DISABLE_HW_KEY = "hardware_keys_disable";
     private static final String NAVIGATION_BAR_RECENTS_STYLE = "navbar_recents_style";
     private static final String LONG_PRESS_RECENTS_ACTION = "long_press_recents_action";
     private static final String LONG_PRESS_HOME_ACTION = "long_press_home_action";
@@ -52,6 +59,8 @@
     private ListPreference mNavbarRecentsStyle;
     private ListPreference mLongPressRecentsAction;
     private ListPreference mLongPressHomeAction;
+    private SwitchPreference mEnableNavBar;
+    private SwitchPreference mDisabkeHWKeys;
 
     @Override
     public int getMetricsCategory() {
@@ -65,8 +74,30 @@
         addPreferencesFromResource(R.xml.button_settings);
 
         final ContentResolver resolver = getContentResolver();
+        final PreferenceScreen prefScreen = getPreferenceScreen();
         final int deviceKeys = getResources().getInteger(
                 com.android.internal.R.integer.config_deviceHardwareKeys);
+        final PreferenceCategory keysCategory =
+                (PreferenceCategory) prefScreen.findPreference(CATEGORY_KEYS);
+
+        if (deviceKeys == 0) {
+            prefScreen.removePreference(keysCategory);
+        } else {
+            mEnableNavBar = (SwitchPreference) prefScreen.findPreference(
+                   KEYS_SHOW_NAVBAR_KEY);
+
+            mDisabkeHWKeys = (SwitchPreference) prefScreen.findPreference(
+                    KEYS_DISABLE_HW_KEY);
+
+            boolean showNavBarDefault = DeviceUtils.deviceSupportNavigationBar(getActivity());
+            boolean showNavBar = Settings.System.getInt(resolver,
+                        Settings.System.NAVIGATION_BAR_SHOW, showNavBarDefault ? 1:0) == 1;
+            mEnableNavBar.setChecked(showNavBar);
+
+            boolean harwareKeysDisable = Settings.System.getInt(resolver,
+                        Settings.System.HARDWARE_KEYS_DISABLE, 0) == 1;
+            mDisabkeHWKeys.setChecked(harwareKeysDisable);
+        }
 
         mNavbarRecentsStyle = (ListPreference) findPreference(NAVIGATION_BAR_RECENTS_STYLE);
         int recentsStyle = Settings.System.getInt(resolver,
@@ -97,6 +128,23 @@
 
     @Override
     public boolean onPreferenceTreeClick(Preference preference) {
+        if (preference == mEnableNavBar) {
+            boolean checked = ((SwitchPreference)preference).isChecked();
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.NAVIGATION_BAR_SHOW, checked ? 1:0);
+            // remove hw button disable if we disable navbar
+            if (!checked) {
+                Settings.System.putInt(getContentResolver(),
+                        Settings.System.HARDWARE_KEYS_DISABLE, 0);
+                mDisabkeHWKeys.setChecked(false);
+            }
+            return true;
+        } else if (preference == mDisabkeHWKeys) {
+            boolean checked = ((SwitchPreference)preference).isChecked();
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.HARDWARE_KEYS_DISABLE, checked ? 1:0);
+            return true;
+        }
         return super.onPreferenceTreeClick(preference);
     }
 
@@ -181,6 +229,13 @@
                 @Override
                 public List<String> getNonIndexableKeys(Context context) {
                     ArrayList<String> result = new ArrayList<String>();
+                    final Resources res = context.getResources();
+                    final int deviceKeys = res.getInteger(
+                            com.android.internal.R.integer.config_deviceHardwareKeys);
+
+                    if (deviceKeys == 0) {
+                        result.add(CATEGORY_KEYS);
+                    }
                     return result;
                 }
             };