diff --git a/res/values/cherish_arrays.xml b/res/values/cherish_arrays.xml
index 14466cc..7280386 100644
--- a/res/values/cherish_arrays.xml
+++ b/res/values/cherish_arrays.xml
@@ -1034,4 +1034,19 @@
- 1
- 2
+
+
+
+ - @string/show_carrier_disabled
+ - @string/show_carrier_keyguard
+ - @string/show_carrier_statusbar
+ - @string/show_carrier_enabled
+
+
+
+ - 0
+ - 1
+ - 2
+ - 3
+
diff --git a/res/values/cherish_strings.xml b/res/values/cherish_strings.xml
index 6cdbdfe..867ba8c 100644
--- a/res/values/cherish_strings.xml
+++ b/res/values/cherish_strings.xml
@@ -976,4 +976,21 @@
Disable power menu on lock screen
This will only disable the power menu on secure lock screens
+
+
+ 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 63cbc8d..61f35b7 100644
--- a/res/xml/cherish_settings_statusbar.xml
+++ b/res/xml/cherish_settings_statusbar.xml
@@ -137,5 +137,11 @@
android:summary="@string/battery_bar_summary"
android:fragment="com.cherish.settings.fragments.BatteryBarSettings" />
+
diff --git a/res/xml/custom_carrier_label.xml b/res/xml/custom_carrier_label.xml
new file mode 100644
index 0000000..dde373b
--- /dev/null
+++ b/res/xml/custom_carrier_label.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/com/cherish/settings/fragments/CustomCarrierLabel.java b/src/com/cherish/settings/fragments/CustomCarrierLabel.java
new file mode 100644
index 0000000..1d96273
--- /dev/null
+++ b/src/com/cherish/settings/fragments/CustomCarrierLabel.java
@@ -0,0 +1,169 @@
+/*
+ * 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.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;
+
+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";
+ private static final String CARRIER_FONT_STYLE = "status_bar_carrier_font_style";
+
+ static final int DEFAULT_STATUS_CARRIER_COLOR = 0xffffffff;
+
+ private PreferenceScreen mCustomCarrierLabel;
+ private String mCustomCarrierLabelText;
+ private ColorPickerPreference mCarrierColorPicker;
+ private CustomSeekBarPreference mStatusBarCarrierSize;
+ private ListPreference mCarrierFontStyle;
+
+ @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);
+
+ mCarrierFontStyle = (ListPreference) findPreference(CARRIER_FONT_STYLE);
+ int showCarrierFont = Settings.System.getInt(resolver,
+ Settings.System.STATUS_BAR_CARRIER_FONT_STYLE, 0);
+ mCarrierFontStyle.setValue(String.valueOf(showCarrierFont));
+ mCarrierFontStyle.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;
+ } else if (preference == mCarrierFontStyle) {
+ int showCarrierFont = Integer.valueOf((String) newValue);
+ int index = mCarrierFontStyle.findIndexOfValue((String) newValue);
+ Settings.System.putInt(resolver, Settings.System.
+ STATUS_BAR_CARRIER_FONT_STYLE, showCarrierFont);
+ mCarrierFontStyle.setSummary(mCarrierFontStyle.getEntries()[index]);
+ 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);
+ }
+ }
+}