diff --git a/res/values/cherish_arrays.xml b/res/values/cherish_arrays.xml index cec2a35..122b4ec 100644 --- a/res/values/cherish_arrays.xml +++ b/res/values/cherish_arrays.xml @@ -650,6 +650,21 @@ 2 + + + @string/show_carrier_disabled + @string/show_carrier_keyguard + @string/show_carrier_statusbar + @string/show_carrier_enabled + + + + 0 + 1 + 2 + 3 + + @string/brightness_slider_style_default diff --git a/res/values/cherish_strings.xml b/res/values/cherish_strings.xml index 388b799..545f7a7 100644 --- a/res/values/cherish_strings.xml +++ b/res/values/cherish_strings.xml @@ -1369,4 +1369,21 @@ Danmaku speed (vertical) Blacklist Menu opacity level + + + CarrierLabel Settings + Customize statusbar carrierlabel + Carrier Label + Customize the carrier label + Custom carrier label + Please enter a new label. Leave blank to revert to stock label. + Custom label currently not set + Carrier label + Disabled + Lockscreen only + Statusbar only + Lockscreen & statusbar + Carrier label color + Carrier label size + Carrier Label Font diff --git a/res/xml/cherish_settings_statusbar.xml b/res/xml/cherish_settings_statusbar.xml index 317c08f..ca70656 100644 --- a/res/xml/cherish_settings_statusbar.xml +++ b/res/xml/cherish_settings_statusbar.xml @@ -82,6 +82,13 @@ android:icon="@drawable/ic_battery_bar" android:summary="@string/battery_bar_summary" android:fragment="com.cherish.settings.fragments.BatteryBarSettings" /> + + + + + + + + + + + + + + diff --git a/src/com/cherish/settings/fragments/CustomCarrierLabel.java b/src/com/cherish/settings/fragments/CustomCarrierLabel.java new file mode 100644 index 0000000..4cc083f --- /dev/null +++ b/src/com/cherish/settings/fragments/CustomCarrierLabel.java @@ -0,0 +1,188 @@ +/* + * Copyright (C) 2020 CherishOS + * + * 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.app.AlertDialog; +import android.content.ContentResolver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnCancelListener; +import android.content.Intent; +import android.content.res.Resources; +import android.os.Bundle; +import android.os.UserHandle; +import android.provider.Settings; +import android.text.Spannable; +import android.text.TextUtils; +import android.widget.EditText; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; +import androidx.preference.ListPreference; + +import com.android.internal.logging.nano.MetricsProto; +import com.cherish.settings.preferences.CustomSeekBarPreference; +import net.margaritov.preference.colorpicker.ColorPickerPreference; + +import com.android.settings.R; +import com.android.settings.SettingsPreferenceFragment; + +import com.android.settings.search.BaseSearchIndexProvider; +import com.android.settingslib.search.SearchIndexable; +import android.provider.SearchIndexableResource; + +import java.util.ArrayList; +import java.util.List; + +@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) +public class CustomCarrierLabel extends SettingsPreferenceFragment + implements Preference.OnPreferenceChangeListener { + + public static final String TAG = "CarrierLabel"; + private static final String CUSTOM_CARRIER_LABEL = "custom_carrier_label"; + private static final String STATUS_BAR_CARRIER_COLOR = "status_bar_carrier_color"; + private static final String STATUS_BAR_CARRIER_FONT_SIZE = "status_bar_carrier_font_size"; + + static final int DEFAULT_STATUS_CARRIER_COLOR = 0xffffffff; + + private PreferenceScreen mCustomCarrierLabel; + private String mCustomCarrierLabelText; + private ColorPickerPreference mCarrierColorPicker; + private CustomSeekBarPreference mStatusBarCarrierSize; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + addPreferencesFromResource(R.xml.custom_carrier_label); + PreferenceScreen prefSet = getPreferenceScreen(); + ContentResolver resolver = getActivity().getContentResolver(); + + int intColor; + String hexColor; + + // custom carrier label + mCustomCarrierLabel = (PreferenceScreen) findPreference(CUSTOM_CARRIER_LABEL); + updateCustomLabelTextSummary(); + + mCarrierColorPicker = (ColorPickerPreference) findPreference(STATUS_BAR_CARRIER_COLOR); + mCarrierColorPicker.setOnPreferenceChangeListener(this); + intColor = Settings.System.getInt(resolver, + Settings.System.STATUS_BAR_CARRIER_COLOR, DEFAULT_STATUS_CARRIER_COLOR); + hexColor = String.format("#%08x", (0xffffffff & intColor)); + mCarrierColorPicker.setSummary(hexColor); + mCarrierColorPicker.setNewPreviewColor(intColor); + + mStatusBarCarrierSize = (CustomSeekBarPreference) findPreference(STATUS_BAR_CARRIER_FONT_SIZE); + int StatusBarCarrierSize = Settings.System.getInt(resolver, + Settings.System.STATUS_BAR_CARRIER_FONT_SIZE, 14); + mStatusBarCarrierSize.setValue(StatusBarCarrierSize / 1); + mStatusBarCarrierSize.setOnPreferenceChangeListener(this); + } + + @Override + public int getMetricsCategory() { + return MetricsProto.MetricsEvent.CHERISH_SETTINGS; + } + + @Override + public void onResume() { + super.onResume(); + } + + public boolean onPreferenceChange(Preference preference, Object newValue) { + ContentResolver resolver = getActivity().getContentResolver(); + + if (preference == mCarrierColorPicker) { + String hex = ColorPickerPreference.convertToARGB( + Integer.valueOf(String.valueOf(newValue))); + preference.setSummary(hex); + int intHex = ColorPickerPreference.convertToColorInt(hex); + Settings.System.putInt(resolver, + Settings.System.STATUS_BAR_CARRIER_COLOR, intHex); + return true; + } else if (preference == mStatusBarCarrierSize) { + int width = ((Integer)newValue).intValue(); + Settings.System.putInt(resolver, + Settings.System.STATUS_BAR_CARRIER_FONT_SIZE, width); + return true; + } + return false; + } + + public boolean onPreferenceTreeClick(Preference preference) { + ContentResolver resolver = getActivity().getContentResolver(); + boolean value; + if (preference.getKey().equals(CUSTOM_CARRIER_LABEL)) { + AlertDialog.Builder alert = new AlertDialog.Builder(getActivity()); + alert.setTitle(R.string.custom_carrier_label_title); + alert.setMessage(R.string.custom_carrier_label_explain); + // Set an EditText view to get user input + final EditText input = new EditText(getActivity()); + input.setText(TextUtils.isEmpty(mCustomCarrierLabelText) ? "" : mCustomCarrierLabelText); + input.setSelection(input.getText().length()); + alert.setView(input); + alert.setPositiveButton(getString(android.R.string.ok), + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + String value = ((Spannable) input.getText()).toString().trim(); + Settings.System.putString(resolver, Settings.System.CUSTOM_CARRIER_LABEL, value); + updateCustomLabelTextSummary(); + Intent i = new Intent(); + i.setAction(Intent.ACTION_CUSTOM_CARRIER_LABEL_CHANGED); + getActivity().sendBroadcast(i); + } + }); + alert.setNegativeButton(getString(android.R.string.cancel), null); + alert.show(); + return true; + } + return false; + } + + private void updateCustomLabelTextSummary() { + mCustomCarrierLabelText = Settings.System.getString( + getContentResolver(), Settings.System.CUSTOM_CARRIER_LABEL); + if (TextUtils.isEmpty(mCustomCarrierLabelText)) { + mCustomCarrierLabel.setSummary(R.string.custom_carrier_label_notset); + } else { + mCustomCarrierLabel.setSummary(mCustomCarrierLabelText); + } + } + + /** + * 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.custom_carrier_label; + result.add(sir); + return result; + } + + @Override + public List getNonIndexableKeys(Context context) { + List keys = super.getNonIndexableKeys(context); + return keys; + } + }; +}