diff --git a/res/color/master_setting_switch_bar_bg.xml b/res/color/master_setting_switch_bar_bg.xml
new file mode 100644
index 0000000..5a38517
--- /dev/null
+++ b/res/color/master_setting_switch_bar_bg.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/res/drawable/ic_menu_add_white.xml b/res/drawable/ic_menu_add_white.xml
new file mode 100644
index 0000000..b7b57b5
--- /dev/null
+++ b/res/drawable/ic_menu_add_white.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
diff --git a/res/drawable/ic_settings_lockscreen.xml b/res/drawable/ic_settings_lockscreen.xml
new file mode 100644
index 0000000..2606b31
--- /dev/null
+++ b/res/drawable/ic_settings_lockscreen.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
diff --git a/res/drawable/master_setting_switchbar_background.xml b/res/drawable/master_setting_switchbar_background.xml
new file mode 100644
index 0000000..e9992ca
--- /dev/null
+++ b/res/drawable/master_setting_switchbar_background.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
diff --git a/res/layout/applist_preference_icon.xml b/res/layout/applist_preference_icon.xml
new file mode 100644
index 0000000..e2e94e2
--- /dev/null
+++ b/res/layout/applist_preference_icon.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/master_setting_switch.xml b/res/layout/master_setting_switch.xml
new file mode 100644
index 0000000..5ab875a
--- /dev/null
+++ b/res/layout/master_setting_switch.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
diff --git a/res/layout/master_setting_switch_bar.xml b/res/layout/master_setting_switch_bar.xml
new file mode 100644
index 0000000..f0f316c
--- /dev/null
+++ b/res/layout/master_setting_switch_bar.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/res/values/one_arrays.xml b/res/values/one_arrays.xml
index 4e2cea9..3d3d5b9 100644
--- a/res/values/one_arrays.xml
+++ b/res/values/one_arrays.xml
@@ -15,4 +15,53 @@
- 300
- 600
+
+
+
+ - @string/gaming_mode_ringer_off_title
+ - @string/gaming_mode_ringer_vibrate_title
+ - @string/gaming_mode_ringer_dnd_title
+ - @string/gaming_mode_ringer_silent_title
+
+
+ - 0
+ - 1
+ - 2
+ - 3
+
+
+
+ - @string/gaming_mode_notifications_off_title
+ - @string/gaming_mode_notifications_notif_title
+ - @string/gaming_mode_notifications_toast_title
+ - @string/gaming_mode_notifications_all_title
+
+
+ - 0
+ - 1
+ - 2
+ - 3
+
+
+
+
+ - @string/network_traffic_statusbar
+ - @string/network_traffic_qs_header
+
+
+ - 0
+ - 1
+
+
+
+ - @string/network_traffic_dynamic
+ - @string/network_traffic_download
+ - @string/network_traffic_upload
+
+
+ - 0
+ - 1
+ - 2
+
+
diff --git a/res/values/one_strings.xml b/res/values/one_strings.xml
index a94ba90..1c75c27 100644
--- a/res/values/one_strings.xml
+++ b/res/values/one_strings.xml
@@ -19,6 +19,7 @@
Miscellaneous
Status bar
About
+ Lock Screen
OK
@@ -27,9 +28,58 @@
Save
- Network traffic
- Show net activity in statusbar
- Net activity autohide threshold (KB/s)
+ Network
+ Network speed
+ Show network speed in the status bar
+ Location
+ Status bar
+ QS header
+ Display mode
+ Dynamic
+ Download
+ Upload
+ Auto-hide threshold
+ Refresh interval
+
+
+ Screen off FOD
+ Use fingerprint reader also when the screen is off
+ Show icon
+ Show fingerprint icon when the screen is off
+
+
+ New Brightness slider (beta)
+ Shows brightness slider below qs panel
+ Brightness slider at bottom
+ Show a brightness slider on bottom quick settings
+
+
+ Gaming Mode
+ Customize gaming mode preferences
+ Automatically turn on for these apps
+ Add apps for Gaming mode
+ Gaming mode will turn on automatically when these apps are opened and turn off when they are closed
+ Block notifications
+ Block all headsup messages except calls
+ Lock buttons
+ Disable hardware buttons when Gaming mode is turned on
+ Disable automatic brightness
+ Lock screen brightness when Gaming mode is turned on
+ Ringer in gaming mode
+ Do not change
+ Vibrate
+ Do Not Disturb
+ Silent
+ Gaming mode indication
+ Disabled
+ Show notification
+ Show toasts
+ Show toasts and notification
+ Dynamic mode
+ Try detecting and adding gaming apps automatically
+ Choose app
+ Delete
+ Remove selected item?
Swipe to screenshot
@@ -47,12 +97,12 @@
Developers
Support Team
- • Co-Founder \n• Core Developer \n• UI/UX Designer\n• Maintainer
- • Founder \n• Core Developer\n• Maintainer
+ • Founder \n• Core Developer \n• UI/UX Designer\n• Maintainer
+ • Co-Founder \n• Core Developer\n• Maintainer
• The One whos Effort made this
- • Teams Inspiration
• Feature Hungry
- • Support Group Moderator
+ • Feature Bringer
+ Device Support
Links
Announcements
Official announcements channel
diff --git a/res/xml/config_center_about.xml b/res/xml/config_center_about.xml
index 5e6dd3c..568ab16 100644
--- a/res/xml/config_center_about.xml
+++ b/res/xml/config_center_about.xml
@@ -53,34 +53,54 @@
-
+ android:data="https://github.com/prathameshdhawale"/>
-
+
-
+ android:data="https://github.com/AbShaheen184"/>
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/network_traffic.xml b/res/xml/network_traffic.xml
new file mode 100644
index 0000000..a8ce6aa
--- /dev/null
+++ b/res/xml/network_traffic.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/xml/one_settings.xml b/res/xml/one_settings.xml
index 27301ea..32d322b 100644
--- a/res/xml/one_settings.xml
+++ b/res/xml/one_settings.xml
@@ -39,4 +39,19 @@
android:fragment="com.teamone.OneCustoms.fragments.About"
android:icon="@drawable/ic_settings_about"/>
+
+
+
+
+
+
+
diff --git a/res/xml/one_settings_gestures.xml b/res/xml/one_settings_gestures.xml
index 0e017e7..2c30048 100644
--- a/res/xml/one_settings_gestures.xml
+++ b/res/xml/one_settings_gestures.xml
@@ -18,12 +18,6 @@
android:title="@string/gestures_title"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
-
-
+
+
+
+
+
+
+
diff --git a/res/xml/one_settings_misc.xml b/res/xml/one_settings_misc.xml
new file mode 100644
index 0000000..4398040
--- /dev/null
+++ b/res/xml/one_settings_misc.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
diff --git a/res/xml/one_settings_statusbar.xml b/res/xml/one_settings_statusbar.xml
index 16db322..bdad8fb 100644
--- a/res/xml/one_settings_statusbar.xml
+++ b/res/xml/one_settings_statusbar.xml
@@ -18,18 +18,19 @@
android:title="@string/statusbar_title"
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
-
-
-
+
+
+
+
+
+
diff --git a/src/com/teamone/OneCustoms/fragments/GamingMode.java b/src/com/teamone/OneCustoms/fragments/GamingMode.java
new file mode 100644
index 0000000..014cfe3
--- /dev/null
+++ b/src/com/teamone/OneCustoms/fragments/GamingMode.java
@@ -0,0 +1,342 @@
+/*
+ * Copyright (C) 2019 crDroid Android 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.teamone.OneCustoms.fragments;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
+
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+
+import com.teamone.OneCustoms.preferences.PackageListAdapter;
+import com.teamone.OneCustoms.preferences.PackageListAdapter.PackageItem;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class GamingMode extends SettingsPreferenceFragment
+ implements Preference.OnPreferenceClickListener {
+
+ private static final int DIALOG_GAMING_APPS = 1;
+ private static final String GAMING_MODE_HW_KEYS = "gaming_mode_hw_keys_toggle";
+
+ private SwitchPreference mHardwareKeysDisable;
+
+ private PackageListAdapter mPackageAdapter;
+ private PackageManager mPackageManager;
+ private PreferenceGroup mGamingPrefList;
+ private Preference mAddGamingPref;
+
+ private String mGamingPackageList;
+ private Map mGamingPackages;
+ private Context mContext;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // Get launch-able applications
+ addPreferencesFromResource(R.xml.gaming_mode_settings);
+
+ mFooterPreferenceMixin.createFooterPreference().setTitle(R.string.add_gaming_mode_package_summary);
+
+ final PreferenceScreen prefScreen = getPreferenceScreen();
+
+ mHardwareKeysDisable = (SwitchPreference) findPreference(GAMING_MODE_HW_KEYS);
+
+ mPackageManager = getPackageManager();
+ mPackageAdapter = new PackageListAdapter(getActivity());
+
+ mGamingPrefList = (PreferenceGroup) findPreference("gamingmode_applications");
+ mGamingPrefList.setOrderingAsAdded(false);
+
+ mGamingPackages = new HashMap();
+
+ mAddGamingPref = findPreference("add_gamingmode_packages");
+
+ mAddGamingPref.setOnPreferenceClickListener(this);
+
+ mContext = getActivity().getApplicationContext();
+
+ SettingsObserver observer = new SettingsObserver(new Handler(Looper.getMainLooper()));
+ observer.observe();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ refreshCustomApplicationPrefs();
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.ONE_MODS;
+ }
+
+ @Override
+ public int getDialogMetricsCategory(int dialogId) {
+ if (dialogId == DIALOG_GAMING_APPS) {
+ return MetricsProto.MetricsEvent.ONE_MODS;
+ }
+ return 0;
+ }
+
+ /**
+ * Utility classes and supporting methods
+ */
+ @Override
+ public Dialog onCreateDialog(int id) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ final Dialog dialog;
+ final ListView list = new ListView(getActivity());
+ list.setAdapter(mPackageAdapter);
+
+ builder.setTitle(R.string.profile_choose_app);
+ builder.setView(list);
+ dialog = builder.create();
+
+ switch (id) {
+ case DIALOG_GAMING_APPS:
+ list.setOnItemClickListener(new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ // Add empty application definition, the user will be able to edit it later
+ PackageItem info = (PackageItem) parent.getItemAtPosition(position);
+ addCustomApplicationPref(info.packageName, mGamingPackages);
+ dialog.cancel();
+ }
+ });
+ }
+ return dialog;
+ }
+
+ class SettingsObserver extends ContentObserver {
+ SettingsObserver(Handler handler) {
+ super(handler);
+ }
+
+ void observe() {
+ ContentResolver resolver = mContext.getContentResolver();
+
+ resolver.registerContentObserver(Settings.System.getUriFor(
+ Settings.System.GAMING_MODE_ACTIVE), false, this,
+ UserHandle.USER_ALL);
+ }
+
+ @Override
+ public void onChange(boolean selfChange, Uri uri) {
+ if (uri.equals(Settings.System.getUriFor(
+ Settings.System.GAMING_MODE_ACTIVE))) {
+ boolean enable = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.GAMING_MODE_ACTIVE, 0) == 1;
+ }
+ }
+ }
+
+ /**
+ * Application class
+ */
+ private static class Package {
+ public String name;
+ /**
+ * Stores all the application values in one call
+ * @param name
+ */
+ public Package(String name) {
+ this.name = name;
+ }
+
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append(name);
+ return builder.toString();
+ }
+
+ public static Package fromString(String value) {
+ if (TextUtils.isEmpty(value)) {
+ return null;
+ }
+
+ try {
+ Package item = new Package(value);
+ return item;
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+
+ };
+
+ private void refreshCustomApplicationPrefs() {
+ if (!parsePackageList()) {
+ return;
+ }
+
+ // Add the Application Preferences
+ if (mGamingPrefList != null) {
+ mGamingPrefList.removeAll();
+
+ for (Package pkg : mGamingPackages.values()) {
+ try {
+ Preference pref = createPreferenceFromInfo(pkg);
+ mGamingPrefList.addPreference(pref);
+ } catch (PackageManager.NameNotFoundException e) {
+ // Do nothing
+ }
+ }
+ }
+
+ // Keep these at the top
+ mAddGamingPref.setOrder(0);
+ // Add 'add' options
+ mGamingPrefList.addPreference(mAddGamingPref);
+ }
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ if (preference == mAddGamingPref) {
+ showDialog(DIALOG_GAMING_APPS);
+ } else {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.dialog_delete_title)
+ .setMessage(R.string.dialog_delete_message)
+ .setIconAttribute(android.R.attr.alertDialogIcon)
+ .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (preference == mGamingPrefList.findPreference(preference.getKey())) {
+ removeApplicationPref(preference.getKey(), mGamingPackages);
+ }
+ }
+ })
+ .setNegativeButton(android.R.string.cancel, null);
+
+ builder.show();
+ }
+ return true;
+ }
+
+ private void addCustomApplicationPref(String packageName, Map map) {
+ Package pkg = map.get(packageName);
+ if (pkg == null) {
+ pkg = new Package(packageName);
+ map.put(packageName, pkg);
+ savePackageList(false, map);
+ refreshCustomApplicationPrefs();
+ }
+ }
+
+ private Preference createPreferenceFromInfo(Package pkg)
+ throws PackageManager.NameNotFoundException {
+ PackageInfo info = mPackageManager.getPackageInfo(pkg.name,
+ PackageManager.GET_META_DATA);
+ Preference pref =
+ new Preference(getActivity());
+
+ pref.setKey(pkg.name);
+ pref.setTitle(info.applicationInfo.loadLabel(mPackageManager));
+ pref.setIcon(info.applicationInfo.loadIcon(mPackageManager));
+ pref.setPersistent(false);
+ pref.setOnPreferenceClickListener(this);
+ return pref;
+ }
+
+ private void removeApplicationPref(String packageName, Map map) {
+ if (map.remove(packageName) != null) {
+ savePackageList(false, map);
+ refreshCustomApplicationPrefs();
+ }
+ }
+
+ private boolean parsePackageList() {
+ boolean parsed = false;
+
+ final String gamingModeString = Settings.System.getString(getContentResolver(),
+ Settings.System.GAMING_MODE_VALUES);
+
+ if (!TextUtils.equals(mGamingPackageList, gamingModeString)) {
+ mGamingPackageList = gamingModeString;
+ mGamingPackages.clear();
+ parseAndAddToMap(gamingModeString, mGamingPackages);
+ parsed = true;
+ }
+
+ return parsed;
+ }
+
+ private void parseAndAddToMap(String baseString, Map map) {
+ if (baseString == null) {
+ return;
+ }
+
+ final String[] array = TextUtils.split(baseString, "\\|");
+ for (String item : array) {
+ if (TextUtils.isEmpty(item)) {
+ continue;
+ }
+ Package pkg = Package.fromString(item);
+ map.put(pkg.name, pkg);
+ }
+ }
+
+
+ private void savePackageList(boolean preferencesUpdated, Map map) {
+ String setting = map == mGamingPackages ? Settings.System.GAMING_MODE_VALUES : Settings.System.GAMING_MODE_DUMMY;
+
+ List settings = new ArrayList();
+ for (Package app : map.values()) {
+ settings.add(app.toString());
+ }
+ final String value = TextUtils.join("|", settings);
+ if (preferencesUpdated) {
+ if (TextUtils.equals(setting, Settings.System.GAMING_MODE_VALUES)) {
+ mGamingPackageList = value;
+ }
+ }
+ Settings.System.putString(getContentResolver(),
+ setting, value);
+ }
+}
diff --git a/src/com/teamone/OneCustoms/fragments/GamingModeReceiver.java b/src/com/teamone/OneCustoms/fragments/GamingModeReceiver.java
new file mode 100644
index 0000000..b347512
--- /dev/null
+++ b/src/com/teamone/OneCustoms/fragments/GamingModeReceiver.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2019 crDroid Android 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.teamone.OneCustoms.fragments;
+
+import android.app.AlertDialog;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.provider.Settings;
+import android.util.Log;
+import android.text.TextUtils;
+
+import com.android.settings.R;
+import com.android.internal.util.gaming.GamingModeController;
+
+public class GamingModeReceiver extends BroadcastReceiver {
+
+ private static final String TAG = "GamingModeReceiver";
+ private static final boolean DEBUG = false;
+
+ public GamingModeReceiver() {
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent.getAction() != null &&
+ intent.getAction().equals(GamingModeController.GAMING_MODE_TURN_OFF)) {
+ if (DEBUG) Log.d(TAG, "Received " + GamingModeController.GAMING_MODE_TURN_OFF);
+ Settings.System.putInt(context.getContentResolver(), Settings.System.GAMING_MODE_ACTIVE, 0);
+ } else if (intent.getAction() != null &&
+ intent.getAction().equals(GamingModeController.GAMING_MODE_TURN_ON)) {
+ if (DEBUG) Log.d(TAG, "Received " + GamingModeController.GAMING_MODE_TURN_ON);
+ Settings.System.putInt(context.getContentResolver(), Settings.System.GAMING_MODE_ACTIVE, 1);
+ }
+ }
+}
diff --git a/src/com/teamone/OneCustoms/fragments/LockScreen.java b/src/com/teamone/OneCustoms/fragments/LockScreen.java
new file mode 100644
index 0000000..3cd0e2e
--- /dev/null
+++ b/src/com/teamone/OneCustoms/fragments/LockScreen.java
@@ -0,0 +1,70 @@
+package com.teamone.OneCustoms.fragments;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.ContentResolver;
+import android.content.pm.PackageManager;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.hardware.fingerprint.FingerprintManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Settings;
+import androidx.preference.*;
+
+import com.android.internal.one.app.OneContextConstants;
+import com.android.internal.logging.nano.MetricsProto;
+
+import com.teamone.OneCustoms.preferences.SystemSettingSwitchPreference;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+
+public class LockScreen extends SettingsPreferenceFragment implements
+ Preference.OnPreferenceChangeListener {
+
+ private static final String KEY_SCREEN_OFF_FOD = "screen_off_fod";
+ private static final String KEY_SCREEN_OFF_FOD_ICON = "screen_off_fod_icon";
+
+ private SwitchPreference mScreenOffFOD;
+ private SystemSettingSwitchPreference mScreenOffFODIcon;
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ addPreferencesFromResource(R.xml.one_settings_lockscreen);
+ final PreferenceScreen prefScreen = getPreferenceScreen();
+ Resources resources = getResources();
+ PackageManager packageManager = getPackageManager();
+
+ boolean mScreenOffFODValue = Settings.System.getInt(getActivity().getContentResolver(),
+ Settings.System.SCREEN_OFF_FOD, 0) != 0;
+
+ mScreenOffFOD = (SwitchPreference) findPreference(KEY_SCREEN_OFF_FOD);
+ mScreenOffFOD.setChecked(mScreenOffFODValue);
+ mScreenOffFOD.setOnPreferenceChangeListener(this);
+ mScreenOffFODIcon = (SystemSettingSwitchPreference) findPreference(KEY_SCREEN_OFF_FOD_ICON);
+
+ if (!packageManager.hasSystemFeature(OneContextConstants.Features.FOD)) {
+ mScreenOffFOD.setVisible(false);
+ mScreenOffFODIcon.setVisible(false);
+ }
+
+ }
+
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ ContentResolver resolver = getActivity().getContentResolver();
+ if (preference == mScreenOffFOD) {
+ int mScreenOffFODValue = (Boolean) newValue ? 1 : 0;
+ Settings.System.putInt(resolver, Settings.System.SCREEN_OFF_FOD, mScreenOffFODValue);
+ Settings.Secure.putInt(resolver, Settings.Secure.DOZE_ALWAYS_ON, mScreenOffFODValue);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.ONE_MODS;
+ }
+}
diff --git a/src/com/teamone/OneCustoms/fragments/MiscSettings.java b/src/com/teamone/OneCustoms/fragments/MiscSettings.java
new file mode 100644
index 0000000..2d49b51
--- /dev/null
+++ b/src/com/teamone/OneCustoms/fragments/MiscSettings.java
@@ -0,0 +1,50 @@
+package com.teamone.OneCustoms.fragments;
+
+import com.android.internal.logging.nano.MetricsProto;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.ContentResolver;
+import android.content.DialogInterface;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.os.SystemProperties;
+import android.os.UserHandle;
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+import androidx.preference.Preference.OnPreferenceChangeListener;
+import androidx.preference.SwitchPreference;
+import android.provider.Settings;
+import com.android.settings.R;
+
+import java.util.Arrays;
+import java.util.HashSet;
+
+import com.android.settings.SettingsPreferenceFragment;
+
+public class MiscSettings extends SettingsPreferenceFragment implements
+ OnPreferenceChangeListener {
+
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ addPreferencesFromResource(R.xml.one_settings_misc);
+
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object objValue) {
+
+ return false;
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.ONE_MODS;
+ }
+}
diff --git a/src/com/teamone/OneCustoms/fragments/NetworkTraffic.java b/src/com/teamone/OneCustoms/fragments/NetworkTraffic.java
new file mode 100644
index 0000000..3c89ef5
--- /dev/null
+++ b/src/com/teamone/OneCustoms/fragments/NetworkTraffic.java
@@ -0,0 +1,106 @@
+package com.teamone.OneCustoms.fragments;
+
+import android.os.Bundle;
+import android.provider.Settings;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CompoundButton;
+import android.widget.Switch;
+import android.widget.TextView;
+
+import androidx.preference.Preference;
+
+import com.android.internal.logging.nano.MetricsProto;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+
+import com.teamone.OneCustoms.preferences.SystemSettingListPreference;
+import com.teamone.OneCustoms.preferences.CustomSeekBarPreference;
+
+public class NetworkTraffic extends SettingsPreferenceFragment implements
+ Preference.OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener {
+
+ private SystemSettingListPreference mLocation;
+ private SystemSettingListPreference mIndicatorMode;
+ private CustomSeekBarPreference mThreshold;
+ private CustomSeekBarPreference mInterval;
+
+ private TextView mTextView;
+ private View mSwitchBar;
+
+ @Override
+ public void onCreate(Bundle savedInstance) {
+ super.onCreate(savedInstance);
+ addPreferencesFromResource(R.xml.network_traffic);
+
+ mLocation = (SystemSettingListPreference) findPreference("network_traffic_location");
+ mIndicatorMode = (SystemSettingListPreference) findPreference("network_traffic_mode");
+ mThreshold = (CustomSeekBarPreference) findPreference("network_traffic_autohide_threshold");
+ mInterval = (CustomSeekBarPreference) findPreference("network_traffic_refresh_interval");
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final View view = LayoutInflater.from(getContext()).inflate(R.layout.master_setting_switch, container, false);
+ ((ViewGroup) view).addView(super.onCreateView(inflater, container, savedInstanceState));
+ return view;
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ boolean enabled = Settings.System.getInt(getContentResolver(),
+ Settings.System.NETWORK_TRAFFIC_STATE, 0) == 1;
+
+ mTextView = view.findViewById(R.id.switch_text);
+ mTextView.setText(getString(enabled ?
+ R.string.switch_on_text : R.string.switch_off_text));
+
+ mSwitchBar = view.findViewById(R.id.switch_bar);
+ Switch switchWidget = mSwitchBar.findViewById(android.R.id.switch_widget);
+ switchWidget.setChecked(enabled);
+ switchWidget.setOnCheckedChangeListener(this);
+ mSwitchBar.setActivated(enabled);
+ mSwitchBar.setOnClickListener(v -> {
+ switchWidget.setChecked(!switchWidget.isChecked());
+ mSwitchBar.setActivated(switchWidget.isChecked());
+ });
+
+ mLocation.setEnabled(enabled);
+ mIndicatorMode.setEnabled(enabled);
+ mThreshold.setEnabled(enabled);
+ mInterval.setEnabled(enabled);
+ }
+
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
+ Settings.System.putInt(getContentResolver(),
+ Settings.System.NETWORK_TRAFFIC_STATE, isChecked ? 1 : 0);
+ mTextView.setText(getString(isChecked ? R.string.switch_on_text : R.string.switch_off_text));
+ mSwitchBar.setActivated(isChecked);
+
+ mLocation.setEnabled(isChecked);
+ mIndicatorMode.setEnabled(isChecked);
+ mThreshold.setEnabled(isChecked);
+ mInterval.setEnabled(isChecked);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ return false;
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.ONE_MODS;
+ }
+}
diff --git a/src/com/teamone/OneCustoms/fragments/NetworkTraffic.java.save b/src/com/teamone/OneCustoms/fragments/NetworkTraffic.java.save
new file mode 100644
index 0000000..6c209a8
--- /dev/null
+++ b/src/com/teamone/OneCustoms/fragments/NetworkTraffic.java.save
@@ -0,0 +1,111 @@
+package com.teamone.OneCustoms.fragments;
+
+import android.os.Bundle;
+import android.provider.Settings;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CompoundButton;
+import android.widget.Switch;
+import android.widget.TextView;
+
+import androidx.preference.Preference;
+
+import com.android.internal.logging.nano.MetricsProto;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+
+import com.teamone.OneCustoms.preferences.SystemSettingListPreference;
+import com.teamone.OneCustoms.preferences.CustomSeekBarPreference;
+
+public class NetworkTraffic extends SettingsPreferenceFragment implements
+ Preference.OnPreferenceChangeListener, CompoundButton.OnCheckedChangeListener {
+
+ private SystemSettingListPreference mLocation;
+ private SystemSettingListPreference mIndicatorMode;
+ private CustomSeekBarPreference mThreshold;
+ private CustomSeekBarPreference mInterval;
+
+ private TextView mTextView;
+ private View mSwitchBar;
+
+ @Override
+ public void onCreate(Bundle savedInstance) {
+ super.onCreate(savedInstance);
+ addPreferencesFromResource(R.xml.network_traffic);
+
+ mLocation = (SystemSettingListPreference) findPreference("network_traffic_location");
+<<<<<<< HEAD:src/com/teamone/OneCustoms/fragments/NetworkTraffic.java
+ mThreshold = (CustomSeekBarPreference) findPreference("network_traffic_autohide_threshold");
+ mInterval = (CustomSettingSeekBarPreference) findPreference("network_traffic_refresh_interval");
+=======
+ mIndicatorMode = (SystemSettingListPreference) findPreference("network_traffic_mode");
+ mThreshold = (SystemSettingSeekBarPreference) findPreference("network_traffic_autohide_threshold");
+ mInterval = (SystemSettingSeekBarPreference) findPreference("network_traffic_refresh_interval");
+>>>>>>> 6ce9851... ConfigCenter: Network Traffic: Allow to choose display mode [1/2]:src/com/havoc/config/center/fragments/NetworkTraffic.java
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final View view = LayoutInflater.from(getContext()).inflate(R.layout.master_setting_switch, container, false);
+ ((ViewGroup) view).addView(super.onCreateView(inflater, container, savedInstanceState));
+ return view;
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ boolean enabled = Settings.System.getInt(getContentResolver(),
+ Settings.System.NETWORK_TRAFFIC_STATE, 0) == 1;
+
+ mTextView = view.findViewById(R.id.switch_text);
+ mTextView.setText(getString(enabled ?
+ R.string.switch_on_text : R.string.switch_off_text));
+
+ mSwitchBar = view.findViewById(R.id.switch_bar);
+ Switch switchWidget = mSwitchBar.findViewById(android.R.id.switch_widget);
+ switchWidget.setChecked(enabled);
+ switchWidget.setOnCheckedChangeListener(this);
+ mSwitchBar.setActivated(enabled);
+ mSwitchBar.setOnClickListener(v -> {
+ switchWidget.setChecked(!switchWidget.isChecked());
+ mSwitchBar.setActivated(switchWidget.isChecked());
+ });
+
+ mLocation.setEnabled(enabled);
+ mIndicatorMode.setEnabled(enabled);
+ mThreshold.setEnabled(enabled);
+ mInterval.setEnabled(enabled);
+ }
+
+ @Override
+ public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
+ Settings.System.putInt(getContentResolver(),
+ Settings.System.NETWORK_TRAFFIC_STATE, isChecked ? 1 : 0);
+ mTextView.setText(getString(isChecked ? R.string.switch_on_text : R.string.switch_off_text));
+ mSwitchBar.setActivated(isChecked);
+
+ mLocation.setEnabled(isChecked);
+ mIndicatorMode.setEnabled(isChecked);
+ mThreshold.setEnabled(isChecked);
+ mInterval.setEnabled(isChecked);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ return false;
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.ONE_MODS;
+ }
+}
diff --git a/src/com/teamone/OneCustoms/fragments/StatusBarSettings.java b/src/com/teamone/OneCustoms/fragments/StatusBarSettings.java
index 4ea28b8..0a8061c 100644
--- a/src/com/teamone/OneCustoms/fragments/StatusBarSettings.java
+++ b/src/com/teamone/OneCustoms/fragments/StatusBarSettings.java
@@ -25,7 +25,6 @@
import android.view.View;
import com.android.settings.SettingsPreferenceFragment;
-import com.teamone.OneCustoms.preferences.CustomSeekBarPreference;
import com.teamone.OneCustoms.preferences.SystemSettingSwitchPreference;
import com.android.settings.Utils;
import android.util.Log;
@@ -39,8 +38,8 @@
public class StatusBarSettings extends SettingsPreferenceFragment implements
OnPreferenceChangeListener {
- private CustomSeekBarPreference mThreshold;
- private SystemSettingSwitchPreference mNetMonitor;
+ private static final String NETWORK_TRAFFIC = "network_traffic_state";
+ private SystemSettingSwitchPreference mNetworkTraffic;
@Override
public void onCreate(Bundle icicle) {
@@ -49,39 +48,21 @@ public void onCreate(Bundle icicle) {
addPreferencesFromResource(R.xml.one_settings_statusbar);
PreferenceScreen prefSet = getPreferenceScreen();
- final ContentResolver resolver = getActivity().getContentResolver();
- boolean isNetMonitorEnabled = Settings.System.getIntForUser(resolver,
- Settings.System.NETWORK_TRAFFIC_STATE, 1, UserHandle.USER_CURRENT) == 1;
- mNetMonitor = (SystemSettingSwitchPreference) findPreference("network_traffic_state");
- mNetMonitor.setChecked(isNetMonitorEnabled);
- mNetMonitor.setOnPreferenceChangeListener(this);
-
- int value = Settings.System.getIntForUser(resolver,
- Settings.System.NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD, 1, UserHandle.USER_CURRENT);
- mThreshold = (CustomSeekBarPreference) findPreference("network_traffic_autohide_threshold");
- mThreshold.setValue(value);
- mThreshold.setOnPreferenceChangeListener(this);
- mThreshold.setEnabled(isNetMonitorEnabled);
+ mNetworkTraffic = (SystemSettingSwitchPreference) findPreference(NETWORK_TRAFFIC);
+ mNetworkTraffic.setChecked((Settings.System.getInt(getActivity().getContentResolver(),
+ Settings.System.NETWORK_TRAFFIC_STATE, 0) == 1));
+ mNetworkTraffic.setOnPreferenceChangeListener(this);
}
@Override
- public boolean onPreferenceChange(Preference preference, Object objValue) {
- if (preference == mNetMonitor) {
- boolean value = (Boolean) objValue;
- Settings.System.putIntForUser(getActivity().getContentResolver(),
- Settings.System.NETWORK_TRAFFIC_STATE, value ? 1 : 0,
- UserHandle.USER_CURRENT);
- mNetMonitor.setChecked(value);
- mThreshold.setEnabled(value);
- return true;
- } else if (preference == mThreshold) {
- int val = (Integer) objValue;
- Settings.System.putIntForUser(getContentResolver(),
- Settings.System.NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD, val,
- UserHandle.USER_CURRENT);
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (preference == mNetworkTraffic) {
+ boolean value = (Boolean) newValue;
+ Settings.System.putInt(getActivity().getContentResolver(),
+ Settings.System.NETWORK_TRAFFIC_STATE, value ? 1 : 0);
return true;
- }
+ }
return false;
}
diff --git a/src/com/teamone/OneCustoms/preferences/PackageListAdapter.java b/src/com/teamone/OneCustoms/preferences/PackageListAdapter.java
new file mode 100644
index 0000000..603f0c4
--- /dev/null
+++ b/src/com/teamone/OneCustoms/preferences/PackageListAdapter.java
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2012-2014 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.teamone.OneCustoms.preferences;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.Message;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.TreeSet;
+
+import com.android.settings.R;
+
+public class PackageListAdapter extends BaseAdapter implements Runnable {
+ private PackageManager mPm;
+ private LayoutInflater mInflater;
+ private List mInstalledPackages = new LinkedList();
+
+ // Packages which don't have launcher icons, but which we want to show nevertheless
+ private static final String[] PACKAGE_WHITELIST = new String[] {
+ "android", /* system server */
+ "com.android.systemui", /* system UI */
+ "com.android.providers.downloads" /* download provider */
+ };
+
+ private final Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ PackageItem item = (PackageItem) msg.obj;
+ int index = Collections.binarySearch(mInstalledPackages, item);
+ if (index < 0) {
+ mInstalledPackages.add(-index - 1, item);
+ } else {
+ mInstalledPackages.get(index).activityTitles.addAll(item.activityTitles);
+ }
+ notifyDataSetChanged();
+ }
+ };
+
+ public static class PackageItem implements Comparable {
+ public final String packageName;
+ public final CharSequence title;
+ private final TreeSet activityTitles = new TreeSet();
+ public final Drawable icon;
+
+ PackageItem(String packageName, CharSequence title, Drawable icon) {
+ this.packageName = packageName;
+ this.title = title;
+ this.icon = icon;
+ }
+
+ @Override
+ public int compareTo(PackageItem another) {
+ int result = title.toString().compareToIgnoreCase(another.title.toString());
+ return result != 0 ? result : packageName.compareTo(another.packageName);
+ }
+ }
+
+ public PackageListAdapter(Context context) {
+ mPm = context.getPackageManager();
+ mInflater = LayoutInflater.from(context);
+ reloadList();
+ }
+
+ @Override
+ public int getCount() {
+ synchronized (mInstalledPackages) {
+ return mInstalledPackages.size();
+ }
+ }
+
+ @Override
+ public PackageItem getItem(int position) {
+ synchronized (mInstalledPackages) {
+ return mInstalledPackages.get(position);
+ }
+ }
+
+ @Override
+ public long getItemId(int position) {
+ synchronized (mInstalledPackages) {
+ // packageName is guaranteed to be unique in mInstalledPackages
+ return mInstalledPackages.get(position).packageName.hashCode();
+ }
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+ if (convertView != null) {
+ holder = (ViewHolder) convertView.getTag();
+ } else {
+ convertView = mInflater.inflate(R.layout.applist_preference_icon, null, false);
+ holder = new ViewHolder();
+ convertView.setTag(holder);
+ holder.title = (TextView) convertView.findViewById(com.android.internal.R.id.title);
+ holder.summary = (TextView) convertView.findViewById(com.android.internal.R.id.summary);
+ holder.icon = (ImageView) convertView.findViewById(R.id.icon);
+ }
+
+ PackageItem applicationInfo = getItem(position);
+ holder.title.setText(applicationInfo.title);
+ holder.icon.setImageDrawable(applicationInfo.icon);
+
+ boolean needSummary = applicationInfo.activityTitles.size() > 0;
+ if (applicationInfo.activityTitles.size() == 1) {
+ if (TextUtils.equals(applicationInfo.title, applicationInfo.activityTitles.first())) {
+ needSummary = false;
+ }
+ }
+
+ if (needSummary) {
+ holder.summary.setText(TextUtils.join(", ", applicationInfo.activityTitles));
+ holder.summary.setVisibility(View.VISIBLE);
+ } else {
+ holder.summary.setVisibility(View.GONE);
+ }
+
+ return convertView;
+ }
+
+ private void reloadList() {
+ mInstalledPackages.clear();
+ new Thread(this).start();
+ }
+
+ @Override
+ public void run() {
+ final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
+ mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+ List installedAppsInfo = mPm.queryIntentActivities(mainIntent, 0);
+
+ for (ResolveInfo info : installedAppsInfo) {
+ ApplicationInfo appInfo = info.activityInfo.applicationInfo;
+ final PackageItem item = new PackageItem(appInfo.packageName,
+ appInfo.loadLabel(mPm), appInfo.loadIcon(mPm));
+ item.activityTitles.add(info.loadLabel(mPm));
+ mHandler.obtainMessage(0, item).sendToTarget();
+ }
+
+ for (String packageName : PACKAGE_WHITELIST) {
+ try {
+ ApplicationInfo appInfo = mPm.getApplicationInfo(packageName, 0);
+ final PackageItem item = new PackageItem(appInfo.packageName,
+ appInfo.loadLabel(mPm), appInfo.loadIcon(mPm));
+ mHandler.obtainMessage(0, item).sendToTarget();
+ } catch (PackageManager.NameNotFoundException ignored) {
+ // package not present, so nothing to add -> ignore it
+ }
+ }
+ }
+
+ private static class ViewHolder {
+ TextView title;
+ TextView summary;
+ ImageView icon;
+ }
+}
diff --git a/src/com/teamone/OneCustoms/preferences/SwitchPreference.java b/src/com/teamone/OneCustoms/preferences/SwitchPreference.java
new file mode 100644
index 0000000..f3f51d1
--- /dev/null
+++ b/src/com/teamone/OneCustoms/preferences/SwitchPreference.java
@@ -0,0 +1,55 @@
+package com.teamone.OneCustoms.preferences;
+
+import android.content.Context;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.View;
+
+import androidx.core.content.res.TypedArrayUtils;
+import androidx.preference.R;
+
+public class SwitchPreference extends androidx.preference.SwitchPreference {
+
+ private final Context mContext;
+ private final Vibrator mVibrator;
+
+ public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+
+ mContext = context;
+ mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
+ }
+
+ public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+ this(context, attrs, defStyleAttr, 0);
+ }
+
+ public SwitchPreference(Context context, AttributeSet attrs) {
+ this(context, attrs, TypedArrayUtils.getAttr(context,
+ androidx.preference.R.attr.switchPreferenceStyle,
+ android.R.attr.switchPreferenceStyle));
+ }
+
+ public SwitchPreference(Context context) {
+ this(context, null);
+ }
+
+ @Override
+ protected void performClick(View view) {
+ super.performClick(view);
+
+ doHapticFeedback();
+ }
+
+ private void doHapticFeedback() {
+ final boolean hapticEnabled = Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.HAPTIC_FEEDBACK_ENABLED, 1) != 0;
+
+ if (hapticEnabled) {
+ mVibrator.vibrate(VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
+ }
+ }
+}
diff --git a/src/com/teamone/OneCustoms/preferences/SystemSettingListPreference.java b/src/com/teamone/OneCustoms/preferences/SystemSettingListPreference.java
new file mode 100644
index 0000000..5e596fd
--- /dev/null
+++ b/src/com/teamone/OneCustoms/preferences/SystemSettingListPreference.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2017 AICP
+ *
+ * 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.teamone.OneCustoms.preferences;
+
+import android.content.Context;
+import androidx.preference.ListPreference;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.provider.Settings;
+
+public class SystemSettingListPreference extends ListPreference {
+ private boolean mAutoSummary = false;
+
+ public SystemSettingListPreference(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
+ }
+
+ public SystemSettingListPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
+ }
+
+ public SystemSettingListPreference(Context context) {
+ super(context);
+ setPreferenceDataStore(new SystemSettingsStore(context.getContentResolver()));
+ }
+
+ @Override
+ public void setValue(String value) {
+ super.setValue(value);
+ if (mAutoSummary || TextUtils.isEmpty(getSummary())) {
+ setSummary(getEntry(), true);
+ }
+ }
+
+ @Override
+ public void setSummary(CharSequence summary) {
+ setSummary(summary, false);
+ }
+
+ private void setSummary(CharSequence summary, boolean autoSummary) {
+ mAutoSummary = autoSummary;
+ super.setSummary(summary);
+ }
+
+ @Override
+ protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
+ // This is what default ListPreference implementation is doing without respecting
+ // real default value:
+ //setValue(restoreValue ? getPersistedString(mValue) : (String) defaultValue);
+ // Instead, we better do
+ setValue(restoreValue ? getPersistedString((String) defaultValue) : (String) defaultValue);
+ }
+}
diff --git a/src/com/teamone/OneCustoms/preferences/SystemSettingsStore.java b/src/com/teamone/OneCustoms/preferences/SystemSettingsStore.java
new file mode 100644
index 0000000..15a458b
--- /dev/null
+++ b/src/com/teamone/OneCustoms/preferences/SystemSettingsStore.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2017 AICP
+ *
+ * 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.teamone.OneCustoms.preferences;
+
+import android.content.ContentResolver;
+import android.preference.PreferenceDataStore;
+import android.provider.Settings;
+
+public class SystemSettingsStore extends androidx.preference.PreferenceDataStore
+ implements PreferenceDataStore {
+
+ private ContentResolver mContentResolver;
+
+ public SystemSettingsStore(ContentResolver contentResolver) {
+ mContentResolver = contentResolver;
+ }
+
+ public boolean getBoolean(String key, boolean defValue) {
+ return getInt(key, defValue ? 1 : 0) != 0;
+ }
+
+ public float getFloat(String key, float defValue) {
+ return Settings.System.getFloat(mContentResolver, key, defValue);
+ }
+
+ public int getInt(String key, int defValue) {
+ return Settings.System.getInt(mContentResolver, key, defValue);
+ }
+
+ public long getLong(String key, long defValue) {
+ return Settings.System.getLong(mContentResolver, key, defValue);
+ }
+
+ public String getString(String key, String defValue) {
+ String result = Settings.System.getString(mContentResolver, key);
+ return result == null ? defValue : result;
+ }
+
+ public void putBoolean(String key, boolean value) {
+ putInt(key, value ? 1 : 0);
+ }
+
+ public void putFloat(String key, float value) {
+ Settings.System.putFloat(mContentResolver, key, value);
+ }
+
+ public void putInt(String key, int value) {
+ Settings.System.putInt(mContentResolver, key, value);
+ }
+
+ public void putLong(String key, long value) {
+ Settings.System.putLong(mContentResolver, key, value);
+ }
+
+ public void putString(String key, String value) {
+ Settings.System.putString(mContentResolver, key, value);
+ }
+
+}