diff --git a/res/values/cherish_arrays.xml b/res/values/cherish_arrays.xml index ce5d8b8..cd9f2eb 100644 --- a/res/values/cherish_arrays.xml +++ b/res/values/cherish_arrays.xml @@ -1166,4 +1166,36 @@ 7 8 + + + + @string/status_bar_battery_percentage_default + @string/status_bar_battery_percentage_text_inside + @string/status_bar_battery_percentage_text_next + + + + 0 + 1 + 2 + + + + + @string/status_bar_battery_style_icon_portrait + @string/status_bar_battery_style_circle + @string/status_bar_battery_style_dotted_circle + @string/status_bar_battery_style_filled_circle + @string/status_bar_battery_style_text + @string/status_bar_battery_style_hidden + + + + 0 + 1 + 2 + 3 + 4 + 5 + diff --git a/res/values/cherish_strings.xml b/res/values/cherish_strings.xml index f33078d..d598860 100644 --- a/res/values/cherish_strings.xml +++ b/res/values/cherish_strings.xml @@ -1044,4 +1044,19 @@ Tiles columns on portrait Tiles columns on landscape Show tiles title + + + Statusbar battery indicator + Configure icon and text styles for the statusbar battery indicator + Battery style + Icon portrait + Circle + Dotted circle + Filled circle + Text + Hidden + Battery percentage + Hidden + Inside the icon + Next to the icon diff --git a/res/xml/cherish_settings_statusbar.xml b/res/xml/cherish_settings_statusbar.xml index dd4bea3..6450592 100644 --- a/res/xml/cherish_settings_statusbar.xml +++ b/res/xml/cherish_settings_statusbar.xml @@ -24,6 +24,13 @@ android:icon="@drawable/ic_network_traffic" android:fragment="com.cherish.settings.fragments.Traffic" android:title="@string/traffic_title" /> + + + + + + + + + + + diff --git a/src/com/cherish/settings/fragments/fragments/StatusbarBatterySettings.java b/src/com/cherish/settings/fragments/fragments/StatusbarBatterySettings.java new file mode 100644 index 0000000..9d9197d --- /dev/null +++ b/src/com/cherish/settings/fragments/fragments/StatusbarBatterySettings.java @@ -0,0 +1,187 @@ +/* + * Copyright (C) 2020-2021 The CherishOS 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.cherish.settings.fragments; + +import android.content.ContentResolver; +import android.content.Context; +import android.os.Bundle; +import android.os.UserHandle; +import android.provider.SearchIndexableResource; +import android.provider.Settings; + +import androidx.preference.ListPreference; +import androidx.preference.Preference; +import androidx.preference.Preference.OnPreferenceChangeListener; +import androidx.preference.PreferenceCategory; +import androidx.preference.PreferenceScreen; +import androidx.preference.SwitchPreference; + +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; +import com.android.settings.Utils; +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settingslib.search.SearchIndexable; + +import java.util.ArrayList; +import java.util.List; + +@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) +public class StatusbarBatterySettings extends SettingsPreferenceFragment implements + Preference.OnPreferenceChangeListener { + + private static final String STATUS_BAR_BATTERY_STYLE = "status_bar_battery_style"; + private static final String STATUS_BAR_SHOW_BATTERY_PERCENT = "status_bar_show_battery_percent"; + + private ListPreference mBatteryPercent; + private ListPreference mBatteryStyle; + + private int mBatteryPercentValue; + private int mBatteryPercentValuePrev; + + private static final int BATTERY_STYLE_PORTRAIT = 0; + private static final int BATTERY_STYLE_TEXT = 4; + private static final int BATTERY_STYLE_HIDDEN = 5; + private static final int BATTERY_PERCENT_HIDDEN = 0; + private static final int BATTERY_PERCENT_SHOW = 2; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.cherish_settings_statusbar_battery); + + int batterystyle = Settings.System.getIntForUser(getContentResolver(), + Settings.System.STATUS_BAR_BATTERY_STYLE, BATTERY_STYLE_PORTRAIT, UserHandle.USER_CURRENT); + mBatteryStyle = findPreference("status_bar_battery_style"); + mBatteryStyle.setValue(String.valueOf(batterystyle)); + mBatteryStyle.setSummary(mBatteryStyle.getEntry()); + mBatteryStyle.setOnPreferenceChangeListener(this); + + mBatteryPercentValue = Settings.System.getIntForUser(getContentResolver(), + Settings.System.STATUS_BAR_SHOW_BATTERY_PERCENT, 0, UserHandle.USER_CURRENT); + mBatteryPercentValuePrev = Settings.System.getIntForUser(getContentResolver(), + Settings.System.STATUS_BAR_SHOW_BATTERY_PERCENT + "_prev", -1, UserHandle.USER_CURRENT); + mBatteryPercent = findPreference("status_bar_show_battery_percent"); + mBatteryPercent.setValue(String.valueOf(mBatteryPercentValue)); + mBatteryPercent.setSummary(mBatteryPercent.getEntry()); + mBatteryPercent.setOnPreferenceChangeListener(this); + + updateBatteryOptions(batterystyle, mBatteryPercentValue); + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + ContentResolver resolver = getActivity().getContentResolver(); + if (preference == mBatteryStyle) { + int batterystyle = Integer.parseInt((String) newValue); + updateBatteryOptions(batterystyle, mBatteryPercentValue); + int index = mBatteryStyle.findIndexOfValue((String) newValue); + mBatteryStyle.setSummary(mBatteryStyle.getEntries()[index]); + return true; + } else if (preference == mBatteryPercent) { + mBatteryPercentValue = Integer.parseInt((String) newValue); + Settings.System.putIntForUser(resolver, + Settings.System.STATUS_BAR_SHOW_BATTERY_PERCENT, mBatteryPercentValue, + UserHandle.USER_CURRENT); + int index = mBatteryPercent.findIndexOfValue((String) newValue); + mBatteryPercent.setSummary(mBatteryPercent.getEntries()[index]); + return true; + } + return false; + } + + private void updateBatteryOptions(int batterystyle, int batterypercent) { + ContentResolver resolver = getActivity().getContentResolver(); + switch (batterystyle) { + case BATTERY_STYLE_TEXT: + handleTextPercentage(BATTERY_PERCENT_SHOW); + break; + case BATTERY_STYLE_HIDDEN: + handleTextPercentage(BATTERY_PERCENT_HIDDEN); + break; + default: + mBatteryPercent.setEnabled(true); + if (mBatteryPercentValuePrev != -1) { + Settings.System.putIntForUser(resolver, + Settings.System.STATUS_BAR_SHOW_BATTERY_PERCENT, + mBatteryPercentValuePrev, UserHandle.USER_CURRENT); + Settings.System.putIntForUser(resolver, + Settings.System.STATUS_BAR_SHOW_BATTERY_PERCENT + "_prev", + -1, UserHandle.USER_CURRENT); + mBatteryPercentValue = mBatteryPercentValuePrev; + mBatteryPercentValuePrev = -1; + int index = mBatteryPercent.findIndexOfValue(String.valueOf(mBatteryPercentValue)); + mBatteryPercent.setSummary(mBatteryPercent.getEntries()[index]); + } + + Settings.System.putIntForUser(resolver, + Settings.System.STATUS_BAR_BATTERY_STYLE, batterystyle, + UserHandle.USER_CURRENT); + break; + } + } + + private void handleTextPercentage(int batterypercent) { + ContentResolver resolver = getActivity().getContentResolver(); + if (mBatteryPercentValuePrev == -1) { + mBatteryPercentValuePrev = mBatteryPercentValue; + Settings.System.putIntForUser(resolver, + Settings.System.STATUS_BAR_SHOW_BATTERY_PERCENT + "_prev", + mBatteryPercentValue, UserHandle.USER_CURRENT); + } + + Settings.System.putIntForUser(resolver, + Settings.System.STATUS_BAR_SHOW_BATTERY_PERCENT, + batterypercent, UserHandle.USER_CURRENT); + Settings.System.putIntForUser(resolver, + Settings.System.STATUS_BAR_BATTERY_STYLE, BATTERY_STYLE_TEXT, + UserHandle.USER_CURRENT); + int index = mBatteryPercent.findIndexOfValue(String.valueOf(batterypercent)); + mBatteryPercent.setSummary(mBatteryPercent.getEntries()[index]); + mBatteryPercent.setEnabled(false); + } + + @Override + public int getMetricsCategory() { + return MetricsEvent.CHERISH_SETTINGS; + } + + /** + * For Search. + */ + + public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = + new BaseSearchIndexProvider() { + + @Override + public List getXmlResourcesToIndex(Context context, + boolean enabled) { + ArrayList result = + new ArrayList(); + SearchIndexableResource sir = new SearchIndexableResource(context); + sir.xmlResId = R.xml.cherish_settings_statusbar_battery; + result.add(sir); + return result; + } + + @Override + public List getNonIndexableKeys(Context context) { + List keys = super.getNonIndexableKeys(context); + return keys; + } + }; +}