diff --git a/res/values/cherish_arrays.xml b/res/values/cherish_arrays.xml
index 1d4c0e8..5e2ac6d 100644
--- a/res/values/cherish_arrays.xml
+++ b/res/values/cherish_arrays.xml
@@ -303,4 +303,18 @@
- 300000
- 600000
+
+
+
+ - @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 c34b133..327efe2 100644
--- a/res/values/cherish_strings.xml
+++ b/res/values/cherish_strings.xml
@@ -305,5 +305,17 @@
2 minutes
5 minutes
10 minutes
+
+
+ Carrier label
+ Customize the carrier label
+ Custom carrier label
+ Enter a custom label. Leave blank to use your network name
+ Custom label currently not set
+ Carrier label location
+ Disabled
+ Lockscreen
+ Statusbar
+ Both
diff --git a/res/xml/cherish_settings_statusbar.xml b/res/xml/cherish_settings_statusbar.xml
index a4de6ad..c2ffed2 100644
--- a/res/xml/cherish_settings_statusbar.xml
+++ b/res/xml/cherish_settings_statusbar.xml
@@ -14,6 +14,12 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/statusbar_title"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+
+
+
+
+
+
+
+
+
+
diff --git a/src/com/cherish/settings/fragments/CustomCarrierLabel.java b/src/com/cherish/settings/fragments/CustomCarrierLabel.java
new file mode 100644
index 0000000..9956872
--- /dev/null
+++ b/src/com/cherish/settings/fragments/CustomCarrierLabel.java
@@ -0,0 +1,107 @@
+/*
+ * 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.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 com.android.internal.logging.nano.MetricsProto;
+
+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 PreferenceScreen mCustomCarrierLabel;
+ private String mCustomCarrierLabelText;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ ContentResolver resolver = getActivity().getContentResolver();
+
+ addPreferencesFromResource(R.xml.custom_carrier_label);
+ PreferenceScreen prefSet = getPreferenceScreen();
+
+ mCustomCarrierLabel = (PreferenceScreen) findPreference(CUSTOM_CARRIER_LABEL);
+ updateCustomLabelTextSummary();
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ return false;
+ }
+
+ public boolean onPreferenceTreeClick(Preference preference) {
+ ContentResolver resolver = getActivity().getContentResolver();
+ boolean value;
+ if (preference == mCustomCarrierLabel) {
+ 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);
+ }
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.CHERISH_SETTINGS;
+ }
+}