/* * Copyright (C) 2014 The Dirty Unicorns 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.aokp.romcontrol.fragments.statusbar; import android.app.Activity; import android.app.AlertDialog; import android.app.Fragment; import android.content.ContentResolver; import android.content.res.Resources; import android.net.TrafficStats; import android.os.Bundle; import android.preference.SwitchPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; import android.provider.Settings; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.android.internal.logging.MetricsLogger; import com.aokp.romcontrol.R; import com.aokp.romcontrol.widgets.SeekBarPreferenceCham; import net.margaritov.preference.colorpicker.ColorPickerPreference; public class TrafficSettingsFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_traffic_settings_main, container, false); Resources res = getResources(); super.onCreate(savedInstanceState); getChildFragmentManager().beginTransaction() .replace(R.id.traffic_settings_main, new TrafficSettingsPreferenceFragment()) .commit(); return v; } public static class TrafficSettingsPreferenceFragment extends PreferenceFragment implements OnPreferenceChangeListener { public TrafficSettingsPreferenceFragment() { } private static final String TAG = "TrafficSettingsFragment"; private static final String NETWORK_TRAFFIC_STATE = "network_traffic_state"; private static final String NETWORK_TRAFFIC_COLOR = "network_traffic_color"; 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_HIDEARROW = "network_traffic_hidearrow"; private static final String NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD = "network_traffic_autohide_threshold"; private ListPreference mNetTrafficState; private ColorPickerPreference mNetTrafficColor; private ListPreference mNetTrafficUnit; private ListPreference mNetTrafficPeriod; private SwitchPreference mNetTrafficAutohide; private SwitchPreference mNetTrafficHidearrow; private SeekBarPreferenceCham mNetTrafficAutohideThreshold; private static final int MENU_RESET = Menu.FIRST; private static final int DEFAULT_TRAFFIC_COLOR = 0xffffffff; 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.fragment_traffic_settings); loadResources(); PreferenceScreen prefSet = getPreferenceScreen(); mNetTrafficState = (ListPreference) prefSet.findPreference(NETWORK_TRAFFIC_STATE); mNetTrafficUnit = (ListPreference) prefSet.findPreference(NETWORK_TRAFFIC_UNIT); mNetTrafficPeriod = (ListPreference) prefSet.findPreference(NETWORK_TRAFFIC_PERIOD); mNetTrafficAutohide = (SwitchPreference) prefSet.findPreference(NETWORK_TRAFFIC_AUTOHIDE); mNetTrafficAutohide.setChecked((Settings.System.getInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_AUTOHIDE, 0) == 1)); mNetTrafficAutohide.setOnPreferenceChangeListener(this); mNetTrafficAutohideThreshold = (SeekBarPreferenceCham) prefSet.findPreference(NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD); int netTrafficAutohideThreshold = Settings.System.getInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD, 10); mNetTrafficAutohideThreshold.setValue(netTrafficAutohideThreshold / 1); mNetTrafficAutohideThreshold.setOnPreferenceChangeListener(this); mNetTrafficHidearrow = (SwitchPreference) prefSet.findPreference(NETWORK_TRAFFIC_HIDEARROW); mNetTrafficHidearrow.setChecked((Settings.System.getInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_HIDEARROW, 0) == 1)); mNetTrafficHidearrow.setOnPreferenceChangeListener(this); mNetTrafficColor = (ColorPickerPreference) prefSet.findPreference(NETWORK_TRAFFIC_COLOR); mNetTrafficColor.setOnPreferenceChangeListener(this); int intColor = Settings.System.getInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_COLOR, 0xffffffff); String hexColor = String.format("#%08x", (0xffffffff & intColor)); mNetTrafficColor.setSummary(hexColor); mNetTrafficColor.setNewPreviewColor(intColor); if (TrafficStats.getTotalTxBytes() != TrafficStats.UNSUPPORTED && TrafficStats.getTotalRxBytes() != TrafficStats.UNSUPPORTED) { mNetTrafficVal = Settings.System.getInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_STATE, 0); int intIndex = mNetTrafficVal & (MASK_UP + MASK_DOWN); intIndex = mNetTrafficState.findIndexOfValue(String.valueOf(intIndex)); updateNetworkTrafficState(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); } } private void updateNetworkTrafficState(int mIndex) { if (mIndex <= 0) { mNetTrafficUnit.setEnabled(false); mNetTrafficColor.setEnabled(false); mNetTrafficPeriod.setEnabled(false); mNetTrafficAutohide.setEnabled(false); mNetTrafficHidearrow.setEnabled(false); mNetTrafficAutohideThreshold.setEnabled(false); } else { mNetTrafficUnit.setEnabled(true); mNetTrafficColor.setEnabled(true); mNetTrafficPeriod.setEnabled(true); mNetTrafficAutohide.setEnabled(true); mNetTrafficHidearrow.setEnabled(true); mNetTrafficAutohideThreshold.setEnabled(true); } } private void NetworkTrafficColorReset() { Settings.System.putInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_COLOR, DEFAULT_TRAFFIC_COLOR); mNetTrafficColor.setNewPreviewColor(DEFAULT_TRAFFIC_COLOR); String hexColor = String.format("#%08x", (0xffffffff & DEFAULT_TRAFFIC_COLOR)); mNetTrafficColor.setSummary(hexColor); } public boolean onPreferenceChange(Preference preference, Object newValue) { 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(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_STATE, mNetTrafficVal); int index = mNetTrafficState.findIndexOfValue((String) newValue); mNetTrafficState.setSummary(mNetTrafficState.getEntries()[index]); updateNetworkTrafficState(index); return true; } else if (preference == mNetTrafficColor) { String hex = ColorPickerPreference.convertToARGB( Integer.valueOf(String.valueOf(newValue))); preference.setSummary(hex); int intHex = ColorPickerPreference.convertToColorInt(hex); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_COLOR, intHex); return true; } else if (preference == mNetTrafficUnit) { mNetTrafficVal = setBit(mNetTrafficVal, MASK_UNIT, ((String)newValue).equals("1")); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_STATE, mNetTrafficVal); int index = mNetTrafficUnit.findIndexOfValue((String) newValue); mNetTrafficUnit.setSummary(mNetTrafficUnit.getEntries()[index]); return true; } else if (preference == mNetTrafficPeriod) { int intState = Integer.valueOf((String)newValue); mNetTrafficVal = setBit(mNetTrafficVal, MASK_PERIOD, false) + (intState << 16); Settings.System.putInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_STATE, mNetTrafficVal); int index = mNetTrafficPeriod.findIndexOfValue((String) newValue); mNetTrafficPeriod.setSummary(mNetTrafficPeriod.getEntries()[index]); return true; } else if (preference == mNetTrafficHidearrow) { boolean value = (Boolean) newValue; Settings.System.putInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_HIDEARROW, value ? 1 : 0); return true; } else if (preference == mNetTrafficAutohide) { boolean value = (Boolean) newValue; Settings.System.putInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_AUTOHIDE, value ? 1 : 0); return true; } else if (preference == mNetTrafficAutohideThreshold) { int threshold = (Integer) newValue; Settings.System.putInt(getActivity().getContentResolver(), Settings.System.NETWORK_TRAFFIC_AUTOHIDE_THRESHOLD, threshold * 1); return true; } return false; } 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); } 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; } } }