[2/2] OmniGears: bring back status nework traffic
Change-Id: I4ddbc4984799e146ef1f057ec87a4bd6609bbadc
diff --git a/res/xml/bars_settings.xml b/res/xml/bars_settings.xml
index c237a69..e813280 100644
--- a/res/xml/bars_settings.xml
+++ b/res/xml/bars_settings.xml
@@ -21,28 +21,35 @@
android:key="category_statusbar"
android:title="@string/statusbar_title">
- <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
+ <org.omnirom.omnigears.preference.SystemCheckBoxPreference
android:key="double_tap_sleep_gesture"
android:title="@string/double_tap_to_sleep_title"
android:summary="@string/double_tap_to_sleep_summary"
android:defaultValue="false" />
- <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
+ <org.omnirom.omnigears.preference.SystemCheckBoxPreference
android:key="status_bar_ime_notification"
android:title="@string/status_bar_ime_notification_title"
android:summary="@string/status_bar_ime_notification_summary"
android:defaultValue="true"/>
+
</PreferenceCategory>
+ <PreferenceScreen
+ android:key="category_network_traffic"
+ android:title="@string/network_traffic_title"
+ android:fragment="org.omnirom.omnigears.interfacesettings.NetworkTraffic" />
+
<PreferenceCategory
android:key="category_navigationbar"
android:title="@string/navigationbar_title">
- <org.omnirom.omnigears.preference.SystemSettingSwitchPreference
+ <org.omnirom.omnigears.preference.SystemCheckBoxPreference
android:key="navigation_bar_ime_button"
android:title="@string/navigation_bar_ime_button_title"
android:summary="@string/navigation_bar_ime_button_summary"
android:defaultValue="true"/>
+
</PreferenceCategory>
</PreferenceScreen>
diff --git a/res/xml/network_traffic.xml b/res/xml/network_traffic.xml
new file mode 100644
index 0000000..6877985
--- /dev/null
+++ b/res/xml/network_traffic.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 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/>.
+-->
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ 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" />
+
+ <org.omnirom.omnigears.preference.SystemCheckBoxPreference
+ android:key="network_traffic_autohide"
+ android:title="@string/network_traffic_autohide_title"
+ android:summary="@string/network_traffic_autohide_summary"
+ android:defaultValue="false"/>
+
+ <org.omnirom.omnigears.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" />
+
+</PreferenceScreen>
diff --git a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
index c87a0cd..22702af 100644
--- a/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/BarsSettings.java
@@ -25,22 +25,35 @@
import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.util.Log;
+import android.net.TrafficStats;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import android.support.v7.preference.CheckBoxPreference;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceGroup;
+import android.support.v7.preference.PreferenceScreen;
+import android.support.v7.preference.PreferenceCategory;
+
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.R;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.internal.util.omni.DeviceUtils;
+import com.android.settings.Utils;
+
import java.util.List;
import java.util.ArrayList;
public class BarsSettings extends SettingsPreferenceFragment implements
Preference.OnPreferenceChangeListener, Indexable {
private static final String TAG = "BarsSettings";
+ private static final String NETWORK_TRAFFIC_ROOT = "category_network_traffic";
+ private static final String NAVIGATIONBAR_ROOT = "category_navigationbar";
@Override
public int getMetricsCategory() {
@@ -51,6 +64,74 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.bars_settings);
+
+ PreferenceScreen prefScreen = getPreferenceScreen();
+
+ // Navigationbar catagory will not be displayed when the device is not a tablet
+ // or the device has physical keys
+ if ((!DeviceUtils.deviceSupportNavigationBar(getActivity())) || DeviceUtils.isPhone(getActivity())) {
+ prefScreen.removePreference(findPreference(NAVIGATIONBAR_ROOT));
+ }
+
+ // TrafficStats will return UNSUPPORTED if the device does not support it.
+ if (TrafficStats.getTotalTxBytes() == TrafficStats.UNSUPPORTED ||
+ TrafficStats.getTotalRxBytes() == TrafficStats.UNSUPPORTED) {
+ prefScreen.removePreference(findPreference(NETWORK_TRAFFIC_ROOT));
+ }
+
+ //final boolean customHeaderImage = Settings.System.getInt(getContentResolver(),
+ // Settings.System.STATUS_BAR_CUSTOM_HEADER, 0) == 1;
+ //mCustomHeaderImage = (CheckBoxPreference) findPreference(CUSTOM_HEADER_IMAGE);
+ //mCustomHeaderImage.setChecked(customHeaderImage);
+
+ //String settingHeaderPackage = Settings.System.getString(getContentResolver(),
+ // Settings.System.STATUS_BAR_DAYLIGHT_HEADER_PACK);
+ //if (settingHeaderPackage == null) {
+ // settingHeaderPackage = DEFAULT_HEADER_PACKAGE;
+ //}
+ //mDaylightHeaderPack = (ListPreference) findPreference(DAYLIGHT_HEADER_PACK);
+
+ //List<String> entries = new ArrayList<String>();
+ //List<String> values = new ArrayList<String>();
+ //getAvailableHeaderPacks(entries, values);
+ //mDaylightHeaderPack.setEntries(entries.toArray(new String[entries.size()]));
+ //mDaylightHeaderPack.setEntryValues(values.toArray(new String[values.size()]));
+
+ //int valueIndex = mDaylightHeaderPack.findIndexOfValue(settingHeaderPackage);
+ //if (valueIndex == -1) {
+ // no longer found
+ // settingHeaderPackage = DEFAULT_HEADER_PACKAGE;
+ // Settings.System.putString(getContentResolver(),
+ // Settings.System.STATUS_BAR_DAYLIGHT_HEADER_PACK, settingHeaderPackage);
+ // valueIndex = mDaylightHeaderPack.findIndexOfValue(settingHeaderPackage);
+ //}
+ //mDaylightHeaderPack.setValueIndex(valueIndex >= 0 ? valueIndex : 0);
+ //mDaylightHeaderPack.setSummary(mDaylightHeaderPack.getEntry());
+ //mDaylightHeaderPack.setOnPreferenceChangeListener(this);
+
+ //mHeaderShadow = (SeekBarPreference) findPreference(CUSTOM_HEADER_IMAGE_SHADOW);
+ //final int headerShadow = Settings.System.getInt(getContentResolver(),
+ // Settings.System.STATUS_BAR_CUSTOM_HEADER_SHADOW, 0);
+ //mHeaderShadow.setValue((int)(((double) headerShadow / 255) * 100));
+ //mHeaderShadow.setOnPreferenceChangeListener(this);
+
+ //mQuickPulldown = (ListPreference) findPreference(QUICK_SETTTINGS_PULLDOWN);
+ //mQuickPulldown.setOnPreferenceChangeListener(this);
+ //int quickPullDownValue = Settings.System.getInt(getContentResolver(), Settings.System.STATUS_BAR_QUICK_QS_PULLDOWN, 0);
+ //mQuickPulldown.setValue(String.valueOf(quickPullDownValue));
+ //updatePulldownSummary(quickPullDownValue);
+ }
+
+ @Override
+ public boolean onPreferenceTreeClick(Preference preference) {
+ //if (preference == mCustomHeaderImage) {
+ // final boolean value = ((CheckBoxPreference)preference).isChecked();
+ // Settings.System.putInt(getContentResolver(),
+ // Settings.System.STATUS_BAR_CUSTOM_HEADER, value ? 1 : 0);
+ // return true;
+ //}
+ // If we didn't handle it, let preferences handle it.
+ return super.onPreferenceTreeClick(preference);
}
@Override
diff --git a/src/org/omnirom/omnigears/interfacesettings/NetworkTraffic.java b/src/org/omnirom/omnigears/interfacesettings/NetworkTraffic.java
new file mode 100644
index 0000000..6f983f9
--- /dev/null
+++ b/src/org/omnirom/omnigears/interfacesettings/NetworkTraffic.java
@@ -0,0 +1,204 @@
+/*
+ * Copyright (C) 2015 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/>.
+ */
+
+package org.omnirom.omnigears.interfacesettings;
+
+import android.app.AlertDialog;
+import android.content.ContentResolver;
+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.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceGroup;
+import android.support.v7.preference.PreferenceScreen;
+import android.support.v7.preference.PreferenceCategory;
+import android.provider.SearchIndexableResource;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.R;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.util.omni.DeviceUtils;
+import com.android.settings.Utils;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import org.omnirom.omnigears.preference.SeekBarPreference;
+import org.omnirom.omnigears.preference.SystemCheckBoxPreference;
+
+public class NetworkTraffic extends SettingsPreferenceFragment implements
+ Preference.OnPreferenceChangeListener, Indexable {
+ private static final String TAG = "NetworkTraffic";
+
+ 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 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 int getMetricsCategory() {
+ return MetricsEvent.OMNI_SETTINGS;
+ }
+
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.network_traffic);
+ loadResources();
+
+ PreferenceScreen prefScreen = getPreferenceScreen();
+ ContentResolver resolver = getActivity().getContentResolver();
+
+ 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);
+
+ int period = (mNetTrafficVal & MASK_PERIOD) >>> 16;
+ int periodIndex = mNetTrafficPeriod.findIndexOfValue(String.valueOf(period));
+ mNetTrafficPeriod.setValueIndex(periodIndex >= 0 ? periodIndex : 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);
+ }
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ ContentResolver resolver = getActivity().getContentResolver();
+ 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;
+ }
+
+ 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
+ public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+ boolean enabled) {
+ ArrayList<SearchIndexableResource> result =
+ new ArrayList<SearchIndexableResource>();
+
+ SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.network_traffic;
+ result.add(sir);
+
+ return result;
+ }
+
+ @Override
+ public List<String> getNonIndexableKeys(Context context) {
+ ArrayList<String> result = new ArrayList<String>();
+ return result;
+ }
+ };
+}