OmniGears: cleanup

-validate power menu entries with global action list
-use SeekBarPreference for ambient display brightness
-set values from PowerManager for brightness seekbars
-rework button backlight page

Change-Id: Id5375684d99942cb350d917bc45b587dd608b1c7
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 32c28fd..5d7a224 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -179,17 +179,14 @@
     <string name="statusbar_battery_charging_color_enable_summary"></string>
     <string name="battery_enable_title">Show battery</string>
 
-    <string name="button_brightness_title">Brightness</string>
-    <string name="button_brightness_summary">Button backlight brightness</string>
+    <string name="button_backlight_title">Button backlight</string>
     <string name="button_timeout_title">Backlight timeout</string>
     <string name="button_timeout_summary">Disabled on value 0</string>
-    <string name="button_no_brightness">Dark mode</string>
-    <string name="button_no_brightness_summary">Don\'t set button brightness</string>
     <string name="button_link_brightness">Link to screen</string>
     <string name="button_link_brightness_summary">Use screen brightness level</string>
     <string name="button_manual_brightness">Brightness level</string>
-    <string name="dialog_manual_brightness_title">Brightness level</string>
     <string name="unit_sec">sec</string>
+    <string name="button_backlight_enable_title">Enable</string>
 
     <string name="navigation_bar_show_title">Show navigation bar</string>
     <string name="navigation_bar_show_summary">Force enable navigation bar</string>
diff --git a/res/xml/ambient_settings.xml b/res/xml/ambient_settings.xml
index 7c61091..729c881 100644
--- a/res/xml/ambient_settings.xml
+++ b/res/xml/ambient_settings.xml
@@ -54,9 +54,11 @@
                     android:defaultValue="true"
                     android:dependency="doze_overwrite_value" />
 
-            <Preference
+            <com.android.settings.preference.SeekBarPreference
                     android:key="doze_brightness_level"
                     android:title="@string/doze_brightness_level_title"
+                    android:max="255"
+                    settings:min="0"
                     android:persistent="false"
                     android:dependency="doze_overwrite_value" />
 
diff --git a/res/xml/button_brightness_settings.xml b/res/xml/button_brightness_settings.xml
index 941552c..68288ee 100644
--- a/res/xml/button_brightness_settings.xml
+++ b/res/xml/button_brightness_settings.xml
@@ -19,22 +19,24 @@
         android:title="@string/button_brightness_title"
         xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
 
-        <com.android.settings.preference.SeekBarPreference
-                android:key="button_manual_brightness_new"
-                android:title="@string/button_manual_brightness"
-                android:max="255"
-                settings:min="0"
-                android:persistent="false" />
-        <CheckBoxPreference
-                android:key="button_no_brightness"
-                android:title="@string/button_no_brightness"
-                android:summary="@string/button_no_brightness_summary"
+        <SwitchPreference
+                android:key="button_backlight_enable"
+                android:title="@string/button_backlight_enable_title"
                 android:persistent="false"/>
         <CheckBoxPreference
                 android:key="button_link_brightness"
                 android:title="@string/button_link_brightness"
                 android:summary="@string/button_link_brightness_summary"
-                android:persistent="false"/>
+                android:persistent="false"
+                android:dependency="button_backlight_enable"
+                android:disableDependentsState="true" />
+        <com.android.settings.preference.SeekBarPreference
+                android:key="button_manual_brightness_new"
+                android:title="@string/button_manual_brightness"
+                android:max="255"
+                settings:min="0"
+                android:persistent="false"
+                android:dependency="button_link_brightness" />
         <com.android.settings.preference.SeekBarPreference
                 android:key="button_timeout"
                 android:title="@string/button_timeout_title"
@@ -43,5 +45,6 @@
                 settings:min="0"
                 settings:unitsLeft=""
                 settings:unitsRight="@string/unit_sec"
-                android:persistent="false" />
+                android:persistent="false"
+                android:dependency="button_backlight_enable" />
 </PreferenceScreen>
diff --git a/res/xml/button_settings.xml b/res/xml/button_settings.xml
index 4a5e9dd..9aec1fb 100644
--- a/res/xml/button_settings.xml
+++ b/res/xml/button_settings.xml
@@ -102,8 +102,7 @@
 
         <PreferenceScreen
             android:key="button_brightness"
-            android:title="@string/button_brightness_title"
-            android:summary="@string/button_brightness_summary"
+            android:title="@string/button_backlight_title"
             android:fragment="org.omnirom.omnigears.brightness.ButtonBrightnessSettings" />
 
         <!--<SwitchPreference
diff --git a/src/org/omnirom/omnigears/AmbientSettings.java b/src/org/omnirom/omnigears/AmbientSettings.java
index 92ade63..4814e6a 100644
--- a/src/org/omnirom/omnigears/AmbientSettings.java
+++ b/src/org/omnirom/omnigears/AmbientSettings.java
@@ -49,6 +49,7 @@
 
 import com.android.internal.logging.MetricsLogger;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.preference.SeekBarPreference;
 import com.android.settings.preference.SystemCheckBoxPreference;
 import org.omnirom.omnigears.sensor.ShakeSensorManager;
 
@@ -84,8 +85,8 @@
     private ShakeSensorManager mShakeSensorManager;
     private AlertDialog mDialog;
     private Button mShakeFoundButton;
-    private DozeBrightnessDialog mDozeBrightnessDialog;
-    private Preference mDozeBrightness;
+    private SeekBarPreference mDozeBrightness;
+    private int mCurrentBrightness;
 
     @Override
     protected int getMetricsCategory() {
@@ -132,7 +133,16 @@
         updateDozeOptions();
         mShakeSensorManager = new ShakeSensorManager(activity, this);
 
-        mDozeBrightness = (Preference) findPreference(KEY_DOZE_BRIGHTNESS_LEVEL);
+        final int dozeBrightnessConfig = getResources().getInteger(
+                com.android.internal.R.integer.config_screenBrightnessDoze);
+        mCurrentBrightness = Settings.System.getInt(getContentResolver(),
+                Settings.System.SCREEN_BRIGHTNESS_DOZE, dozeBrightnessConfig);
+        mDozeBrightness = (SeekBarPreference) findPreference(KEY_DOZE_BRIGHTNESS_LEVEL);
+        PowerManager pm = (PowerManager)activity.getSystemService(Context.POWER_SERVICE);
+        mDozeBrightness.setMaxValue(pm.getMaximumScreenBrightnessSetting());
+        mDozeBrightness.setMinValue(pm.getMinimumScreenBrightnessSetting());
+        mDozeBrightness.setValue(mCurrentBrightness);
+        mDozeBrightness.setOnPreferenceChangeListener(this);
     }
 
     private static boolean isAccelerometerAvailable(Context context) {
@@ -408,9 +418,6 @@
         if (preference == findPreference(KEY_DOZE_OVERWRITE_VALUE)) {
             updateDozeListMode();
             return true;
-        } else if (preference == mDozeBrightness) {
-            showDozeBrightnessDialog();
-            return true;
         }
         return super.onPreferenceTreeClick(preferenceScreen, preference);
     }
@@ -457,121 +464,14 @@
             int index = mDozeListMode.findIndexOfValue((String) objValue);
             mDozeListMode.setSummary(mDozeListMode.getEntries()[index]);
         }
+        if (preference == mDozeBrightness) {
+            mCurrentBrightness = (Integer) objValue;
+            Settings.System.putInt(getContentResolver(),
+                    Settings.System.SCREEN_BRIGHTNESS_DOZE, mCurrentBrightness);
+        }
         return true;
     }
 
-    private void showDozeBrightnessDialog() {
-        if (mDozeBrightnessDialog != null && mDozeBrightnessDialog.isShowing()) {
-            return;
-        }
-
-        mDozeBrightnessDialog = new DozeBrightnessDialog(getActivity());
-        mDozeBrightnessDialog.show();
-    }
-
-    private class DozeBrightnessDialog extends AlertDialog implements DialogInterface.OnClickListener {
-
-        private SeekBar mBacklightBar;
-        private EditText mBacklightInput;
-        private int mCurrentBrightness;
-        private int mMaxBrightness;
-
-        public DozeBrightnessDialog(Context context) {
-            super(context);
-        }
-
-        @Override
-        protected void onCreate(Bundle savedInstanceState) {
-            final View v = getLayoutInflater().inflate(R.layout.dialog_manual_brightness, null);
-            final Context context = getContext();
-
-            mBacklightBar = (SeekBar) v.findViewById(R.id.backlight);
-            mBacklightInput = (EditText) v.findViewById(R.id.backlight_input);
-
-            setTitle(R.string.dialog_manual_brightness_title);
-            setCancelable(true);
-            setView(v);
-
-            final int dozeBrightnessConfig = getResources().getInteger(
-                    com.android.internal.R.integer.config_screenBrightnessDoze);
-            mCurrentBrightness = Settings.System.getInt(getContentResolver(),
-                    Settings.System.SCREEN_BRIGHTNESS_DOZE, dozeBrightnessConfig);
-
-            final PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
-            mMaxBrightness = pm.getMaximumScreenBrightnessSetting();
-            mBacklightBar.setMax(mMaxBrightness);
-            mBacklightBar.setProgress(mCurrentBrightness);
-            mBacklightInput.setText(String.valueOf(mCurrentBrightness));
-
-            initListeners();
-
-            setButton(DialogInterface.BUTTON_POSITIVE, getResources().getString(R.string.ok), this);
-            setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(R.string.cancel), this);
-
-            super.onCreate(savedInstanceState);
-        }
-
-        @Override
-        public void onClick(DialogInterface dialog, int which) {
-            if (which == DialogInterface.BUTTON_POSITIVE) {
-                try {
-                    int newBacklight = Integer.valueOf(mBacklightInput.getText().toString());
-                    Settings.System.putInt(getContext().getContentResolver(),
-                            Settings.System.SCREEN_BRIGHTNESS_DOZE, newBacklight);
-                } catch (NumberFormatException e) {
-                    Log.d(TAG, "NumberFormatException " + e);
-                }
-            }
-        }
-
-        private void initListeners() {
-            mBacklightBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
-                @Override
-                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-                    if (seekBar.getProgress() > 0) {
-                        mBacklightInput.setText(String.valueOf(seekBar.getProgress()));
-                    }
-                }
-                @Override
-                public void onStartTrackingTouch(SeekBar seekBar) {
-                }
-                @Override
-                public void onStopTrackingTouch(SeekBar seekBar) {
-                }
-            });
-
-            mBacklightInput.addTextChangedListener(new TextWatcher() {
-                @Override
-                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-                }
-                @Override
-                public void onTextChanged(CharSequence s, int start, int before, int count) {
-                }
-                @Override
-                public void afterTextChanged(Editable s) {
-                    boolean ok = false;
-                    try {
-                        int minValue = 1;
-                        int maxValue = mMaxBrightness;
-                        int newBrightness = Integer.valueOf(s.toString());
-
-                        if (newBrightness >= minValue && newBrightness <= maxValue) {
-                            ok = true;
-                            mBacklightBar.setProgress(newBrightness);
-                        }
-                    } catch (NumberFormatException e) {
-                        //ignored, ok is false ayway
-                    }
-
-                    Button okButton = mDozeBrightnessDialog.getButton(DialogInterface.BUTTON_POSITIVE);
-                    if (okButton != null) {
-                        okButton.setEnabled(ok);
-                    }
-                }
-            });
-        }
-    }
-
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
                 @Override
diff --git a/src/org/omnirom/omnigears/ButtonBrightnessSettings.java b/src/org/omnirom/omnigears/ButtonBrightnessSettings.java
index e5b56fd..3d91713 100644
--- a/src/org/omnirom/omnigears/ButtonBrightnessSettings.java
+++ b/src/org/omnirom/omnigears/ButtonBrightnessSettings.java
@@ -34,6 +34,7 @@
 import android.preference.ListPreference;
 import android.preference.CheckBoxPreference;
 import android.preference.PreferenceCategory;
+import android.preference.SwitchPreference;
 import android.provider.Settings;
 import android.provider.SearchIndexableResource;
 import android.view.View;
@@ -61,12 +62,12 @@
         Preference.OnPreferenceChangeListener, Indexable {
     private static final String TAG = "ButtonBrightnessSettings";
 
-    private static final String KEY_BUTTON_NO_BRIGHTNESS = "button_no_brightness";
+    private static final String KEY_BUTTON_BACKLIGHT_ENABLE = "button_backlight_enable";
     private static final String KEY_BUTTON_LINK_BRIGHTNESS = "button_link_brightness";
     private static final String KEY_BUTTON_MANUAL_BRIGHTNESS_NEW = "button_manual_brightness_new";
     private static final String KEY_BUTTON_TIMEOUT = "button_timeout";
 
-    private CheckBoxPreference mNoButtonBrightness;
+    private SwitchPreference mButtonBacklightEnable;
     private CheckBoxPreference mLinkButtonBrightness;
     private IPowerManager mPowerService;
     private SeekBarPreference mButtonTimoutBar;
@@ -84,9 +85,9 @@
         PreferenceScreen prefSet = getPreferenceScreen();
         ContentResolver resolver = getContentResolver();
 
-        mNoButtonBrightness = (CheckBoxPreference) findPreference(KEY_BUTTON_NO_BRIGHTNESS);
-        mNoButtonBrightness.setChecked(Settings.System.getInt(resolver,
-                Settings.System.CUSTOM_BUTTON_DISABLE_BRIGHTNESS, 0) != 0);
+        mButtonBacklightEnable = (SwitchPreference) findPreference(KEY_BUTTON_BACKLIGHT_ENABLE);
+        mButtonBacklightEnable.setChecked(Settings.System.getInt(resolver,
+                Settings.System.CUSTOM_BUTTON_DISABLE_BRIGHTNESS, 0) == 0);
 
         mLinkButtonBrightness = (CheckBoxPreference) findPreference(KEY_BUTTON_LINK_BRIGHTNESS);
         mLinkButtonBrightness.setChecked(Settings.System.getInt(resolver,
@@ -97,6 +98,8 @@
                 com.android.internal.R.integer.config_button_brightness_default);
         final int currentBrightness = Settings.System.getInt(resolver,
                 Settings.System.CUSTOM_BUTTON_BRIGHTNESS, customButtonBrightness);
+        PowerManager pm = (PowerManager)getActivity().getSystemService(Context.POWER_SERVICE);
+        mManualButtonBrightnessNew.setMaxValue(pm.getMaximumScreenBrightnessSetting());
         mManualButtonBrightnessNew.setValue(currentBrightness);
         mManualButtonBrightnessNew.setOnPreferenceChangeListener(this);
 
@@ -107,39 +110,19 @@
         mButtonTimoutBar.setOnPreferenceChangeListener(this);
 
         mPowerService = IPowerManager.Stub.asInterface(ServiceManager.getService("power"));
-
-        updateEnablement();
-    }
-
-    private void updateEnablement() {
-        if (mNoButtonBrightness.isChecked()){
-            mLinkButtonBrightness.setEnabled(false);
-            mButtonTimoutBar.setEnabled(false);
-            mManualButtonBrightnessNew.setEnabled(false);
-        } else if (mLinkButtonBrightness.isChecked()){
-            mNoButtonBrightness.setEnabled(false);
-            mManualButtonBrightnessNew.setEnabled(false);
-        } else {
-            mNoButtonBrightness.setEnabled(true);
-            mLinkButtonBrightness.setEnabled(true);
-            mButtonTimoutBar.setEnabled(true);
-            mManualButtonBrightnessNew.setEnabled(true);
-        }
     }
 
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-        if (preference == mNoButtonBrightness) {
-            boolean checked = ((CheckBoxPreference)preference).isChecked();
+        if (preference == mButtonBacklightEnable) {
+            boolean checked = ((SwitchPreference)preference).isChecked();
             Settings.System.putInt(getContentResolver(),
-                    Settings.System.CUSTOM_BUTTON_DISABLE_BRIGHTNESS, checked ? 1:0);
-            updateEnablement();
+                    Settings.System.CUSTOM_BUTTON_DISABLE_BRIGHTNESS, checked ? 0 : 1);
             return true;
         } else if (preference == mLinkButtonBrightness) {
             boolean checked = ((CheckBoxPreference)preference).isChecked();
             Settings.System.putInt(getContentResolver(),
-                    Settings.System.CUSTOM_BUTTON_USE_SCREEN_BRIGHTNESS, checked ? 1:0);
-            updateEnablement();
+                    Settings.System.CUSTOM_BUTTON_USE_SCREEN_BRIGHTNESS, checked ? 1 : 0);
             return true;
         }
         return super.onPreferenceTreeClick(preferenceScreen, preference);
diff --git a/src/org/omnirom/omnigears/interfacesettings/GlobalActionsSettings.java b/src/org/omnirom/omnigears/interfacesettings/GlobalActionsSettings.java
index 3cffc44..cb7ecbe 100644
--- a/src/org/omnirom/omnigears/interfacesettings/GlobalActionsSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/GlobalActionsSettings.java
@@ -69,6 +69,7 @@
 
         final String[] allActions = getContext().getResources().getStringArray(
                 com.android.internal.R.array.values_globalActionsList);
+        final List<String> allActionssList = new ArrayList<String>(Arrays.asList(allActions));
 
         final String enabledActions = Settings.System.getString(contentResolver,
                 Settings.System.GLOBAL_ACTIONS_LIST);
@@ -88,22 +89,23 @@
         }
         final UserManager um = (UserManager) getContext().getSystemService(Context.USER_SERVICE);
         boolean multiUser = um.isUserSwitcherEnabled();
-        Preference userPref = null;
         int count = prefScreen.getPreferenceCount();
         for (int i = 0; i < count; i++) {
             Preference p = prefScreen.getPreference(i);
             if (p instanceof SwitchPreference) {
                 SwitchPreference action = (SwitchPreference) p;
                 String key = action.getKey();
+                if (!allActionssList.contains(key)) {
+                    prefScreen.removePreference(action);
+                    continue;
+                }
                 if (key.equals("users") && !multiUser) {
-                    userPref = action;
+                    prefScreen.removePreference(action);
+                    continue;
                 }
                 action.setChecked(mGlobalActionsMap.get(key));
             }
         }
-        if (userPref != null) {
-            prefScreen.removePreference(userPref);
-        }
     }
 
     @Override