diff --git a/res/values/cherish_arrays.xml b/res/values/cherish_arrays.xml
index 02daee2..89a7d68 100644
--- a/res/values/cherish_arrays.xml
+++ b/res/values/cherish_arrays.xml
@@ -408,7 +408,7 @@
- 3
-
+
- @string/network_traffic_disabled
- @string/network_traffic_statusbar
@@ -420,11 +420,11 @@
- 1
- 2
-
-
+
+
- @string/network_traffic_dynamic
- - @string/network_traffic_download
- @string/network_traffic_upload
+ - @string/network_traffic_download
@@ -432,4 +432,16 @@
- 1
- 2
+
+
+ - @string/network_traffic_units_bits
+ - @string/network_traffic_units_bytes
+
+
+
+ - 0
+ - 1
+ - 2
+ - 3
+
diff --git a/res/values/cherish_strings.xml b/res/values/cherish_strings.xml
index b18bca9..54e120e 100644
--- a/res/values/cherish_strings.xml
+++ b/res/values/cherish_strings.xml
@@ -508,10 +508,24 @@
Status bar
QS header
Refresh interval
+ Duration after which speed is remeasured
Display mode
Dynamic
Download
Upload
Single net font size
+ Auto hide
+ Hide the traffic monitor when inactive
+ Kb/s
+ KB/s
+ Traffic measurement units
+ Bits per second (b/s)
+ Kilobits per second (kb/s)
+ Megabits per second (Mb/s)
+ Bytes per second (B/s)
+ Kilobytes per second (kB/s)
+ Megabytes per second (MB/s)
+ Hide arrows
+ Hide the network traffic indicator arrows
diff --git a/res/xml/cherish_settings_traffic.xml b/res/xml/cherish_settings_traffic.xml
index 3694861..2d62509 100644
--- a/res/xml/cherish_settings_traffic.xml
+++ b/res/xml/cherish_settings_traffic.xml
@@ -1,62 +1,81 @@
-
-
-
-
+
+
+ android:defaultValue="0" />
-
+
+
+ settings:units="@string/network_traffic_autohide_kilobytes"
+ settings:interval="10"
+ android:dependency="network_traffic_autohide" />
+
+
-
+
+
-
+
\ No newline at end of file
diff --git a/src/com/cherish/settings/fragments/Traffic.java b/src/com/cherish/settings/fragments/Traffic.java
new file mode 100644
index 0000000..06cc81f
--- /dev/null
+++ b/src/com/cherish/settings/fragments/Traffic.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2021-2022 The PixelDust 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.Settings;
+
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+import androidx.preference.Preference.OnPreferenceChangeListener;
+import androidx.preference.SwitchPreference;
+
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+
+import com.cherish.settings.preferences.CustomSeekBarPreference;
+
+public class Traffic extends SettingsPreferenceFragment implements OnPreferenceChangeListener {
+
+ private CustomSeekBarPreference mNetTrafficSize;
+ private CustomSeekBarPreference mNetTrafficAutohideThreshold;
+ private CustomSeekBarPreference mNetTrafficRefreshInterval;
+ private ListPreference mNetTrafficLocation;
+ private ListPreference mNetTrafficMode;
+ private ListPreference mNetTrafficUnits;
+ private SwitchPreference mNetTrafficAutohide;
+ private SwitchPreference mNetTrafficHideArrow;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.cherish_settings_traffic);
+ final ContentResolver resolver = getActivity().getContentResolver();
+
+ mNetTrafficSize = (CustomSeekBarPreference)
+ findPreference(Settings.System.NETWORK_TRAFFIC_FONT_SIZE);
+ mNetTrafficAutohideThreshold = (CustomSeekBarPreference)
+ findPreference(Settings.System.NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD);
+ mNetTrafficRefreshInterval = (CustomSeekBarPreference)
+ findPreference(Settings.System.NETWORK_TRAFFIC_REFRESH_INTERVAL);
+ mNetTrafficLocation = (ListPreference)
+ findPreference(Settings.System.NETWORK_TRAFFIC_LOCATION);
+ mNetTrafficLocation.setOnPreferenceChangeListener(this);
+ mNetTrafficMode = (ListPreference)
+ findPreference(Settings.System.NETWORK_TRAFFIC_MODE);
+ mNetTrafficAutohide = (SwitchPreference)
+ findPreference(Settings.System.NETWORK_TRAFFIC_AUTOHIDE);
+ mNetTrafficUnits = (ListPreference)
+ findPreference(Settings.System.NETWORK_TRAFFIC_UNITS);
+ mNetTrafficHideArrow = (SwitchPreference)
+ findPreference(Settings.System.NETWORK_TRAFFIC_HIDEARROW);
+
+ int location = Settings.System.getIntForUser(resolver,
+ Settings.System.NETWORK_TRAFFIC_LOCATION, 0, UserHandle.USER_CURRENT);
+ updateEnabledStates(location);
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsEvent.CHERISH_SETTINGS;
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (preference == mNetTrafficLocation) {
+ int location = Integer.valueOf((String) newValue);
+ updateEnabledStates(location);
+ return true;
+ }
+ return false;
+ }
+
+ private void updateEnabledStates(int location) {
+ final boolean enabled = location != 0;
+ mNetTrafficSize.setEnabled(enabled);
+ mNetTrafficMode.setEnabled(enabled);
+ mNetTrafficAutohide.setEnabled(enabled);
+ mNetTrafficAutohideThreshold.setEnabled(enabled);
+ mNetTrafficHideArrow.setEnabled(enabled);
+ mNetTrafficRefreshInterval.setEnabled(enabled);
+ mNetTrafficUnits.setEnabled(enabled);
+ }
+}
\ No newline at end of file
diff --git a/src/com/cherish/settings/fragments/fragments/Traffic.java b/src/com/cherish/settings/fragments/fragments/Traffic.java
deleted file mode 100644
index 5b57faa..0000000
--- a/src/com/cherish/settings/fragments/fragments/Traffic.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2020-2022 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.app.ActivityManagerNative;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.IWindowManager;
-import android.view.View;
-import android.view.WindowManagerGlobal;
-
-import androidx.preference.ListPreference;
-import androidx.preference.Preference.OnPreferenceChangeListener;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceScreen;
-
-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.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import com.cherish.settings.preferences.CustomSeekBarPreference;
-import com.cherish.settings.preferences.SystemSettingSwitchPreference;
-import com.cherish.settings.preferences.SystemSettingSeekBarPreference;
-
-@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
-public class Traffic extends SettingsPreferenceFragment implements OnPreferenceChangeListener {
-
- private static final String NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD = "network_traffic_autohide_threshold";
- private static final String NETWORK_TRAFFIC_LOCATION = "network_traffic_location";
- private static final String NETWORK_TRAFFIC_REFRESH_INTERVAL = "network_traffic_refresh_interval";
- private static final String NETWORK_TRAFFIC_FONT_SIZE = "network_traffic_font_size";
-
- private CustomSeekBarPreference mThreshold;
- private SystemSettingSeekBarPreference mInterval;
- private ListPreference mNetTrafficLocation;
- private CustomSeekBarPreference mNetTrafficSize;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- addPreferencesFromResource(R.xml.cherish_settings_traffic);
-
- final ContentResolver resolver = getActivity().getContentResolver();
- final PreferenceScreen prefSet = getPreferenceScreen();
-
- // Network traffic location
- mNetTrafficLocation = (ListPreference) findPreference(NETWORK_TRAFFIC_LOCATION);
- int location = Settings.System.getIntForUser(resolver,
- Settings.System.NETWORK_TRAFFIC_LOCATION, 0, UserHandle.USER_CURRENT);
- mNetTrafficLocation.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);
-
- int val = Settings.System.getIntForUser(resolver,
- Settings.System.NETWORK_TRAFFIC_REFRESH_INTERVAL, 1, UserHandle.USER_CURRENT);
- mInterval = (SystemSettingSeekBarPreference) findPreference(NETWORK_TRAFFIC_REFRESH_INTERVAL);
- mInterval.setValue(val);
- mInterval.setOnPreferenceChangeListener(this);
-
- int fontSize = Settings.System.getInt(resolver,
- Settings.System.NETWORK_TRAFFIC_FONT_SIZE, 18);
- mNetTrafficSize = (CustomSeekBarPreference) findPreference(NETWORK_TRAFFIC_FONT_SIZE);
- mNetTrafficSize.setValue(fontSize / 1);
- mNetTrafficSize.setOnPreferenceChangeListener(this);
-
- int netMonitorEnabled = Settings.System.getIntForUser(resolver,
- Settings.System.NETWORK_TRAFFIC_STATE, 0, UserHandle.USER_CURRENT);
- if (netMonitorEnabled == 1) {
- mNetTrafficLocation.setValue(String.valueOf(location+1));
- updateTrafficLocation(location+1);
- } else {
- mNetTrafficLocation.setValue("0");
- updateTrafficLocation(0);
- }
- mNetTrafficLocation.setSummary(mNetTrafficLocation.getEntry());
- }
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.CHERISH_SETTINGS;
- }
-
- @Override
- public void onResume() {
- super.onResume();
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final ContentResolver resolver = getActivity().getContentResolver();
- if (preference == mNetTrafficLocation) {
- int location = Integer.valueOf((String) newValue);
- int index = mNetTrafficLocation.findIndexOfValue((String) newValue);
- mNetTrafficLocation.setSummary(mNetTrafficLocation.getEntries()[index]);
- if (location > 0) {
- // Convert the selected location mode from our list {0,1,2} and store it to "view location" setting: 0=sb; 1=expanded sb
- Settings.System.putIntForUser(resolver,
- Settings.System.NETWORK_TRAFFIC_LOCATION, location-1, UserHandle.USER_CURRENT);
- // And also enable the net monitor
- Settings.System.putIntForUser(resolver,
- Settings.System.NETWORK_TRAFFIC_STATE, 1, UserHandle.USER_CURRENT);
- } else { // Disable net monitor completely
- Settings.System.putIntForUser(resolver,
- Settings.System.NETWORK_TRAFFIC_STATE, 0, UserHandle.USER_CURRENT);
- }
- updateTrafficLocation(location);
- return true;
- } else if (preference == mThreshold) {
- int val = (Integer) newValue;
- Settings.System.putIntForUser(resolver,
- Settings.System.NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD, val,
- UserHandle.USER_CURRENT);
- return true;
- } else if (preference == mInterval) {
- int val = (Integer) newValue;
- Settings.System.putIntForUser(resolver,
- Settings.System.NETWORK_TRAFFIC_REFRESH_INTERVAL, val,
- UserHandle.USER_CURRENT);
- return true;
- } else if (preference == mNetTrafficSize) {
- int fontSize = ((Integer)objValue).intValue();
- Settings.System.putInt(getActivity().getContentResolver(),
- Settings.System.NETWORK_TRAFFIC_FONT_SIZE, fontSize);
- return true;
- }
- return false;
- }
-
- public void updateTrafficLocation(int location) {
- switch(location){
- case 0:
- mThreshold.setEnabled(false);
- mInterval.setEnabled(false);
- mNetTrafficSize.setEnabled(false);
- break;
- case 1:
- mThreshold.setEnabled(true);
- mInterval.setEnabled(true);
- mNetTrafficSize.setEnabled(true);
- break;
- case 2:
- mThreshold.setEnabled(true);
- mInterval.setEnabled(true);
- mNetTrafficSize.setEnabled(false);
- break;
- default:
- break;
- }
- }
-
- /**
- * For Search.
- */
- public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.cherish_settings_traffic);
-}