[2/2] OmniGears: Network Traffic
Change-Id: Id0a7066b7936d4a917cc33e11763eb25c78ebd2a
diff --git a/res/values/custom_arrays.xml b/res/values/custom_arrays.xml
index 8cd1433..8b5677b 100644
--- a/res/values/custom_arrays.xml
+++ b/res/values/custom_arrays.xml
@@ -157,4 +157,45 @@
<item>0</item>
<item>1</item>
</string-array>
+
+ <!-- Network Traffic Display States -->
+ <string-array name="show_network_traffic_state_entries" translatable="false">
+ <item>@string/show_network_traffic_disable</item>
+ <item>@string/show_network_traffic_up</item>
+ <item>@string/show_network_traffic_down</item>
+ <item>@string/show_network_traffic_all</item>
+ </string-array>
+
+ <string-array name="show_network_traffic_state_values" translatable="false">
+ <item>0</item>
+ <item>1</item>
+ <item>2</item>
+ <item>3</item>
+ </string-array>
+
+ <!-- Network Traffic Display Unit -->
+ <string-array name="show_network_traffic_unit_entries" translatable="false">
+ <item>@string/show_network_traffic_bit</item>
+ <item>@string/show_network_traffic_byte</item>
+ </string-array>
+
+ <string-array name="show_network_traffic_unit_values" translatable="false">
+ <item>0</item>
+ <item>1</item>
+ </string-array>
+
+ <!-- Network Traffic Period -->
+ <string-array name="show_network_traffic_frequency_entries" translatable="false">
+ <item>@string/show_network_traffic_500</item>
+ <item>@string/show_network_traffic_1000</item>
+ <item>@string/show_network_traffic_1500</item>
+ <item>@string/show_network_traffic_2000</item>
+ </string-array>
+
+ <string-array name="show_network_traffic_frequency_values" translatable="false">
+ <item>500</item>
+ <item>1000</item>
+ <item>1500</item>
+ <item>2000</item>
+ </string-array>
</resources>
diff --git a/res/values/custom_integers.xml b/res/values/custom_integers.xml
new file mode 100644
index 0000000..0b75685
--- /dev/null
+++ b/res/values/custom_integers.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2013 The OmniROM Project
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ -->
+
+<resources>
+
+ <!-- Overlays for NetworkTraffic to use -->
+ <integer name="maskUp">0x00000001</integer>
+ <integer name="maskDown">0x00000002</integer>
+ <integer name="maskUnit">0x00000004</integer>
+ <integer name="maskPeriod">0xFFFF0000</integer>
+</resources>
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index 33d50d8..69e1693 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -188,4 +188,24 @@
<string name="notification_title">Notification panel</string>
<string name="status_bar_custom_header_title">Custom header image</string>
<string name="status_bar_custom_header_summary">Enable notification panel header image</string>
+
+ <!-- Network traffic -->
+ <string name="network_traffic_title">Network traffic</string>
+ <string name="show_network_traffic_state">Status bar traffic monitor</string>
+ <string name="show_network_traffic_unit">Display unit</string>
+ <string name="show_network_traffic_frequency">Update interval</string>
+ <string name="show_network_traffic_disable">Disabled</string>
+ <string name="show_network_traffic_up">Outgoing</string>
+ <string name="show_network_traffic_down">Incoming</string>
+ <string name="show_network_traffic_all">Outgoing and incoming</string>
+ <string name="show_network_traffic_bit">Bits per second</string>
+ <string name="show_network_traffic_byte">Bytes per second</string>
+ <string name="show_network_traffic_500">500 ms</string>
+ <string name="show_network_traffic_1000">1000 ms</string>
+ <string name="show_network_traffic_1500">1500 ms</string>
+ <string name="show_network_traffic_2000">2000 ms</string>
+ <string name="network_traffic_autohide_title">Auto hide</string>
+ <string name="network_traffic_autohide_summary">Hide the traffic monitor when there is no activity</string>
+ <string name="network_traffic_autohide_threshold">Inactivity threshold</string>
+
</resources>
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index 09f5053..f9f38a4 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -36,6 +36,50 @@
android:persistent="false"/>
</PreferenceCategory>
+ <!-- Network traffic meter -->
+ <PreferenceCategory
+ android:key="category_network_traffic"
+ android:title="@string/network_traffic_title">
+
+ <ListPreference
+ android:key="network_traffic_state"
+ android:title="@string/show_network_traffic_state"
+ android:entries="@array/show_network_traffic_state_entries"
+ android:entryValues="@array/show_network_traffic_state_values"
+ android:persistent="false" />
+
+ <ListPreference
+ android:key="network_traffic_unit"
+ android:title="@string/show_network_traffic_unit"
+ android:entries="@array/show_network_traffic_unit_entries"
+ android:entryValues="@array/show_network_traffic_unit_values"
+ android:persistent="false" />
+
+ <ListPreference
+ android:key="network_traffic_period"
+ android:title="@string/show_network_traffic_frequency"
+ android:entries="@array/show_network_traffic_frequency_entries"
+ android:entryValues="@array/show_network_traffic_frequency_values"
+ android:persistent="false" />
+
+ <com.android.settings.preference.SystemCheckBoxPreference
+ android:key="network_traffic_autohide"
+ android:title="@string/network_traffic_autohide_title"
+ android:summary="@string/network_traffic_autohide_summary"
+ android:defaultValue="false"/>
+
+ <com.android.settings.preference.SeekBarPreference
+ android:key="network_traffic_autohide_threshold"
+ android:title="@string/network_traffic_autohide_threshold"
+ android:max="100"
+ settings:min="0"
+ settings:unitsLeft=""
+ settings:unitsRight="kB/s"
+ android:dependency="network_traffic_autohide"
+ android:persistent="false" />
+
+ </PreferenceCategory>
+
<PreferenceCategory
android:key="notification_category"
android:title="@string/notification_title" >
diff --git a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
index b1b0653..4e374b9 100644
--- a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
@@ -23,6 +23,7 @@
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
+import android.net.TrafficStats;
import android.os.Bundle;
import android.os.RemoteException;
import android.preference.ListPreference;
@@ -38,6 +39,8 @@
import com.android.settings.R;
import com.android.internal.util.omni.DeviceUtils;
import com.android.settings.Utils;
+import com.android.settings.preference.SeekBarPreference;
+import com.android.settings.preference.SystemCheckBoxPreference;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
@@ -55,15 +58,32 @@
private static final String STATUSBAR_BATTERY_PERCENT = "statusbar_battery_percent";
private static final String NAVIGATION_BAR_CATEGORY = "navbar_category";
private static final String NAVIGATION_BAR_RECENTS_STYLE = "navbar_recents_style";
+ private static final String NETWORK_TRAFFIC_STATE = "network_traffic_state";
+ private static final String NETWORK_TRAFFIC_UNIT = "network_traffic_unit";
+ private static final String NETWORK_TRAFFIC_PERIOD = "network_traffic_period";
+ private static final String NETWORK_TRAFFIC_AUTOHIDE = "network_traffic_autohide";
+ private static final String NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD = "network_traffic_autohide_threshold";
private ListPreference mBatteryStyle;
private ListPreference mBatteryPercent;
private ListPreference mNavbarRecentsStyle;
+ private ListPreference mNetTrafficState;
+ private ListPreference mNetTrafficUnit;
+ private ListPreference mNetTrafficPeriod;
+ private SystemCheckBoxPreference mNetTrafficAutohide;
+ private SeekBarPreference mNetTrafficAutohideThreshold;
+
+ private int mNetTrafficVal;
+ private int MASK_UP;
+ private int MASK_DOWN;
+ private int MASK_UNIT;
+ private int MASK_PERIOD;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.bars_settings);
+ loadResources();
PreferenceScreen prefScreen = getPreferenceScreen();
ContentResolver resolver = getActivity().getContentResolver();
@@ -95,6 +115,50 @@
mNavbarRecentsStyle.setValue(Integer.toString(recentsStyle));
mNavbarRecentsStyle.setSummary(mNavbarRecentsStyle.getEntry());
mNavbarRecentsStyle.setOnPreferenceChangeListener(this);
+
+ mNetTrafficState = (ListPreference) prefScreen.findPreference(NETWORK_TRAFFIC_STATE);
+ mNetTrafficUnit = (ListPreference) prefScreen.findPreference(NETWORK_TRAFFIC_UNIT);
+ mNetTrafficPeriod = (ListPreference) prefScreen.findPreference(NETWORK_TRAFFIC_PERIOD);
+ mNetTrafficAutohide = (SystemCheckBoxPreference) prefScreen.findPreference(NETWORK_TRAFFIC_AUTOHIDE);
+ mNetTrafficAutohideThreshold = (SeekBarPreference) prefScreen.findPreference(NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD);
+
+ // TrafficStats will return UNSUPPORTED if the device does not support it.
+ if (TrafficStats.getTotalTxBytes() != TrafficStats.UNSUPPORTED &&
+ TrafficStats.getTotalRxBytes() != TrafficStats.UNSUPPORTED) {
+ mNetTrafficVal = Settings.System.getInt(resolver, Settings.System.NETWORK_TRAFFIC_STATE, 0);
+ int intIndex = mNetTrafficVal & (MASK_UP + MASK_DOWN);
+ intIndex = mNetTrafficState.findIndexOfValue(String.valueOf(intIndex));
+
+ mNetTrafficState.setValueIndex(intIndex >= 0 ? intIndex : 0);
+ mNetTrafficState.setSummary(mNetTrafficState.getEntry());
+ mNetTrafficState.setOnPreferenceChangeListener(this);
+
+ mNetTrafficUnit.setValueIndex(getBit(mNetTrafficVal, MASK_UNIT) ? 1 : 0);
+ mNetTrafficUnit.setSummary(mNetTrafficUnit.getEntry());
+ mNetTrafficUnit.setOnPreferenceChangeListener(this);
+
+ intIndex = (mNetTrafficVal & MASK_PERIOD) >>> 16;
+ intIndex = mNetTrafficPeriod.findIndexOfValue(String.valueOf(intIndex));
+ mNetTrafficPeriod.setValueIndex(intIndex >= 0 ? intIndex : 1);
+ mNetTrafficPeriod.setSummary(mNetTrafficPeriod.getEntry());
+ mNetTrafficPeriod.setOnPreferenceChangeListener(this);
+
+ int netTrafficAutohideThreshold = Settings.System.getInt(getContentResolver(),
+ Settings.System.NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD, 10);
+ mNetTrafficAutohideThreshold.setValue(netTrafficAutohideThreshold / 1);
+ mNetTrafficAutohideThreshold.setOnPreferenceChangeListener(this);
+
+ mNetTrafficUnit.setEnabled(intIndex != 0);
+ mNetTrafficPeriod.setEnabled(intIndex != 0);
+ mNetTrafficAutohide.setEnabled(intIndex != 0);
+ mNetTrafficAutohideThreshold.setEnabled(intIndex != 0);
+ } else {
+ prefScreen.removePreference(findPreference(NETWORK_TRAFFIC_STATE));
+ prefScreen.removePreference(findPreference(NETWORK_TRAFFIC_UNIT));
+ prefScreen.removePreference(findPreference(NETWORK_TRAFFIC_PERIOD));
+ prefScreen.removePreference(findPreference(NETWORK_TRAFFIC_AUTOHIDE));
+ prefScreen.removePreference(findPreference(NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD));
+ }
}
@Override
@@ -134,6 +198,33 @@
mNavbarRecentsStyle.getEntries()[index]);
Settings.System.putInt(getContentResolver(),
Settings.System.NAVIGATION_BAR_RECENTS, value);
+ } else if (preference == mNetTrafficState) {
+ int intState = Integer.valueOf((String)newValue);
+ mNetTrafficVal = setBit(mNetTrafficVal, MASK_UP, getBit(intState, MASK_UP));
+ mNetTrafficVal = setBit(mNetTrafficVal, MASK_DOWN, getBit(intState, MASK_DOWN));
+ Settings.System.putInt(resolver, Settings.System.NETWORK_TRAFFIC_STATE, mNetTrafficVal);
+ int index = mNetTrafficState.findIndexOfValue((String) newValue);
+ mNetTrafficState.setSummary(mNetTrafficState.getEntries()[index]);
+ mNetTrafficUnit.setEnabled(intState != 0);
+ mNetTrafficPeriod.setEnabled(intState != 0);
+ mNetTrafficAutohide.setEnabled(intState != 0);
+ mNetTrafficAutohideThreshold.setEnabled(intState != 0);
+ } else if (preference == mNetTrafficUnit) {
+ // 1 = Display as Byte/s; default is bit/s
+ mNetTrafficVal = setBit(mNetTrafficVal, MASK_UNIT, ((String)newValue).equals("1"));
+ Settings.System.putInt(resolver, Settings.System.NETWORK_TRAFFIC_STATE, mNetTrafficVal);
+ int index = mNetTrafficUnit.findIndexOfValue((String) newValue);
+ mNetTrafficUnit.setSummary(mNetTrafficUnit.getEntries()[index]);
+ } else if (preference == mNetTrafficPeriod) {
+ int intState = Integer.valueOf((String)newValue);
+ mNetTrafficVal = setBit(mNetTrafficVal, MASK_PERIOD, false) + (intState << 16);
+ Settings.System.putInt(resolver, Settings.System.NETWORK_TRAFFIC_STATE, mNetTrafficVal);
+ int index = mNetTrafficPeriod.findIndexOfValue((String) newValue);
+ mNetTrafficPeriod.setSummary(mNetTrafficPeriod.getEntries()[index]);
+ } else if (preference == mNetTrafficAutohideThreshold) {
+ int threshold = (Integer) newValue;
+ Settings.System.putInt(getActivity().getContentResolver(),
+ Settings.System.NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD, threshold * 1);
}
return true;
@@ -164,6 +255,26 @@
return PackageUtils.isAvailableApp(OmniSwitchConstants.APP_PACKAGE_NAME, getActivity());
}
+ private void loadResources() {
+ Resources resources = getActivity().getResources();
+ MASK_UP = resources.getInteger(R.integer.maskUp);
+ MASK_DOWN = resources.getInteger(R.integer.maskDown);
+ MASK_UNIT = resources.getInteger(R.integer.maskUnit);
+ MASK_PERIOD = resources.getInteger(R.integer.maskPeriod);
+ }
+
+ // intMask should only have the desired bit(s) set
+ private int setBit(int intNumber, int intMask, boolean blnState) {
+ if (blnState) {
+ return (intNumber | intMask);
+ }
+ return (intNumber & ~intMask);
+ }
+
+ private boolean getBit(int intNumber, int intMask) {
+ return (intNumber & intMask) == intMask;
+ }
+
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override