/* * Copyright (C) 2012 The CyanogenMod Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.nitrogen.settings.fragments.notificationlight; import android.content.ContentResolver; import android.content.Context; import android.content.res.Resources; import android.os.Bundle; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.support.v7.preference.PreferenceScreen; import android.support.v14.preference.PreferenceFragment; import android.provider.SearchIndexableResource; import android.provider.Settings; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.nitrogen.settings.preferences.SystemSettingSwitchPreference; import java.util.List; import java.util.ArrayList; public class BatteryLightSettings extends SettingsPreferenceFragment implements Preference.OnPreferenceChangeListener, Indexable { private static final String TAG = "BatteryLightSettings"; private static final String LOW_COLOR_PREF = "low_color"; private static final String MEDIUM_COLOR_PREF = "medium_color"; private static final String FULL_COLOR_PREF = "full_color"; private static final String REALLY_FULL_COLOR_PREF = "really_full_color"; private static final String BATTERY_LIGHT_PREF = "battery_light_enabled"; private static final String BATTERY_PULSE_PREF = "battery_light_pulse"; private boolean mMultiColorLed; private SystemSettingSwitchPreference mEnabledPref; private SystemSettingSwitchPreference mPulsePref; private PreferenceGroup mColorPrefs; private BatteryLightPreference mLowColorPref; private BatteryLightPreference mMediumColorPref; private BatteryLightPreference mFullColorPref; private BatteryLightPreference mReallyFullColorPref; private static final int MENU_RESET = Menu.FIRST; private int mLowBatteryWarningLevel; private boolean mBatteryLightEnabled; @Override protected int getMetricsCategory() { return MetricsEvent.NITROGEN_SETTINGS; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.battery_light_settings); PreferenceScreen prefSet = getPreferenceScreen(); ContentResolver resolver = getContentResolver(); mLowBatteryWarningLevel = getResources().getInteger( com.android.internal.R.integer.config_lowBatteryWarningLevel); mBatteryLightEnabled = getResources().getBoolean( com.android.internal.R.bool.config_intrusiveBatteryLed); mEnabledPref = (SystemSettingSwitchPreference)prefSet.findPreference(BATTERY_LIGHT_PREF); mEnabledPref.setChecked(Settings.System.getInt(resolver, Settings.System.BATTERY_LIGHT_ENABLED, mBatteryLightEnabled ? 1 : 0) != 0); mEnabledPref.setOnPreferenceChangeListener(this); mPulsePref = (SystemSettingSwitchPreference)prefSet.findPreference(BATTERY_PULSE_PREF); mPulsePref.setChecked(Settings.System.getInt(resolver, Settings.System.BATTERY_LIGHT_PULSE, 0) == 1); mPulsePref.setOnPreferenceChangeListener(this); // Does the Device support changing battery LED colors? if (getResources().getBoolean(com.android.internal.R.bool.config_multiColorBatteryLed)) { setHasOptionsMenu(true); // Low, Medium and full color preferences mLowColorPref = (BatteryLightPreference) prefSet.findPreference(LOW_COLOR_PREF); mLowColorPref.setOnPreferenceChangeListener(this); mMediumColorPref = (BatteryLightPreference) prefSet.findPreference(MEDIUM_COLOR_PREF); mMediumColorPref.setOnPreferenceChangeListener(this); mFullColorPref = (BatteryLightPreference) prefSet.findPreference(FULL_COLOR_PREF); mFullColorPref.setOnPreferenceChangeListener(this); mReallyFullColorPref = (BatteryLightPreference) prefSet.findPreference(REALLY_FULL_COLOR_PREF); mReallyFullColorPref.setOnPreferenceChangeListener(this); } else { prefSet.removePreference(prefSet.findPreference("colors_list")); resetColors(); } } @Override public void onResume() { super.onResume(); refreshDefault(); } private void refreshDefault() { ContentResolver resolver = getContentResolver(); Resources res = getResources(); if (mLowColorPref != null) { int lowColor = Settings.System.getInt(resolver, Settings.System.BATTERY_LIGHT_LOW_COLOR, res.getInteger(com.android.internal.R.integer.config_notificationsBatteryLowARGB)); mLowColorPref.setColor(lowColor); } if (mMediumColorPref != null) { int mediumColor = Settings.System.getInt(resolver, Settings.System.BATTERY_LIGHT_MEDIUM_COLOR, res.getInteger(com.android.internal.R.integer.config_notificationsBatteryMediumARGB)); mMediumColorPref.setColor(mediumColor); } if (mFullColorPref != null) { int fullColor = Settings.System.getInt(resolver, Settings.System.BATTERY_LIGHT_FULL_COLOR, res.getInteger(com.android.internal.R.integer.config_notificationsBatteryFullARGB)); mFullColorPref.setColor(fullColor); } if (mReallyFullColorPref != null) { int reallyFullColor = Settings.System.getInt(resolver, Settings.System.BATTERY_LIGHT_REALLY_FULL_COLOR, res.getInteger(com.android.internal.R.integer.config_notificationsBatteryReallyFullARGB)); mReallyFullColorPref.setColor(reallyFullColor); } } /** * Updates the default or application specific notification settings. * * @param key of the specific setting to update * @param color */ protected void updateValues(String key, Integer color) { ContentResolver resolver = getContentResolver(); if (key.equals(LOW_COLOR_PREF)) { Settings.System.putInt(resolver, Settings.System.BATTERY_LIGHT_LOW_COLOR, color); } else if (key.equals(MEDIUM_COLOR_PREF)) { Settings.System.putInt(resolver, Settings.System.BATTERY_LIGHT_MEDIUM_COLOR, color); } else if (key.equals(FULL_COLOR_PREF)) { Settings.System.putInt(resolver, Settings.System.BATTERY_LIGHT_FULL_COLOR, color); } else if (key.equals(REALLY_FULL_COLOR_PREF)) { Settings.System.putInt(resolver, Settings.System.BATTERY_LIGHT_REALLY_FULL_COLOR, color); } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { menu.add(0, MENU_RESET, 0, R.string.reset) .setIcon(R.drawable.ic_settings_backup_restore) // use the backup icon .setAlphabeticShortcut('r') .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_RESET: resetToDefaults(); return true; } return false; } protected void resetColors() { ContentResolver resolver = getActivity().getContentResolver(); Resources res = getResources(); // Reset to the framework default colors Settings.System.putInt(resolver, Settings.System.BATTERY_LIGHT_LOW_COLOR, res.getInteger(com.android.internal.R.integer.config_notificationsBatteryLowARGB)); Settings.System.putInt(resolver, Settings.System.BATTERY_LIGHT_MEDIUM_COLOR, res.getInteger(com.android.internal.R.integer.config_notificationsBatteryMediumARGB)); Settings.System.putInt(resolver, Settings.System.BATTERY_LIGHT_FULL_COLOR, res.getInteger(com.android.internal.R.integer.config_notificationsBatteryFullARGB)); Settings.System.putInt(resolver, Settings.System.BATTERY_LIGHT_REALLY_FULL_COLOR, res.getInteger(com.android.internal.R.integer.config_notificationsBatteryReallyFullARGB)); refreshDefault(); } protected void resetToDefaults() { if (mEnabledPref != null) mEnabledPref.setChecked(true); if (mPulsePref != null) mPulsePref.setChecked(false); resetColors(); } @Override public boolean onPreferenceChange(Preference preference, Object objValue) { if (preference == mEnabledPref) { boolean value = (Boolean) objValue; Settings.System.putInt(getActivity().getContentResolver(), Settings.System.BATTERY_LIGHT_ENABLED, value ? 1:0); } else if (preference == mPulsePref) { boolean value = (Boolean) objValue; Settings.System.putInt(getActivity().getContentResolver(), Settings.System.BATTERY_LIGHT_PULSE, value ? 1:0); } else { BatteryLightPreference lightPref = (BatteryLightPreference) preference; updateValues(lightPref.getKey(), lightPref.getColor()); } return true; } public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { @Override public List<SearchIndexableResource> getXmlResourcesToIndex(Context context, boolean enabled) { ArrayList<SearchIndexableResource> result = new ArrayList<SearchIndexableResource>(); SearchIndexableResource sir = new SearchIndexableResource(context); sir.xmlResId = R.xml.battery_light_settings; result.add(sir); return result; } @Override public List<String> getNonIndexableKeys(Context context) { ArrayList<String> result = new ArrayList<String>(); final Resources res = context.getResources(); if (!res.getBoolean(com.android.internal.R.bool.config_intrusiveBatteryLed)) { result.add(BATTERY_LIGHT_PREF); result.add(BATTERY_PULSE_PREF); } if (!res.getBoolean(com.android.internal.R.bool.config_multiColorBatteryLed)) { result.add(LOW_COLOR_PREF); result.add(MEDIUM_COLOR_PREF); result.add(FULL_COLOR_PREF); result.add(REALLY_FULL_COLOR_PREF); } return result; } }; }