19791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff/* 29791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * Copyright (C) 2010 The Android Open Source Project 39791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * 49791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * Licensed under the Apache License, Version 2.0 (the "License"); 59791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * you may not use this file except in compliance with the License. 69791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * You may obtain a copy of the License at 79791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * 89791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * http://www.apache.org/licenses/LICENSE-2.0 99791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * 109791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * Unless required by applicable law or agreed to in writing, software 119791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * distributed under the License is distributed on an "AS IS" BASIS, 129791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * See the License for the specific language governing permissions and 149791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * limitations under the License. 159791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff */ 169791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 179791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffpackage com.android.phone; 189791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 199791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport com.android.phone.R; 209791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 219791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.content.BroadcastReceiver; 229791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.content.Context; 239791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.content.Intent; 249791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.content.IntentFilter; 259791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.os.Bundle; 269791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.preference.Preference; 279791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.preference.PreferenceActivity; 289791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.preference.PreferenceScreen; 299791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.net.Uri; 309791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.net.ThrottleManager; 319791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport android.util.Log; 329791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 339791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport java.util.Calendar; 349791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport java.util.GregorianCalendar; 359791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffimport java.text.DateFormat; 369791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 379791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff/** 389791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff * Listener for broadcasts from ThrottleManager 399791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff */ 409791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriffpublic class DataUsageListener { 419791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 429791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private ThrottleManager mThrottleManager; 439791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private Preference mCurrentUsagePref = null; 449791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private Preference mTimeFramePref = null; 459791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private Preference mThrottleRatePref = null; 469791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private Preference mSummaryPref = null; 47658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff private PreferenceScreen mPrefScreen = null; 48658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff private boolean mSummaryPrefEnabled = false; 499791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 509791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private final Context mContext; 519791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private IntentFilter mFilter; 529791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private BroadcastReceiver mReceiver; 539791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 54658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff private int mPolicyThrottleValue; //in kbps 55658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff private long mPolicyThreshold; 56658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff private int mCurrentThrottleRate; 579791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private long mDataUsed; 589791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private Calendar mStart; 599791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private Calendar mEnd; 609791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 61658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff public DataUsageListener(Context context, Preference summary, PreferenceScreen prefScreen) { 629791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mContext = context; 639791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mSummaryPref = summary; 64658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mPrefScreen = prefScreen; 65658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mSummaryPrefEnabled = true; 669791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff initialize(); 679791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 689791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 699791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff public DataUsageListener(Context context, Preference currentUsage, 709791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff Preference timeFrame, Preference throttleRate) { 719791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mContext = context; 729791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mCurrentUsagePref = currentUsage; 739791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mTimeFramePref = timeFrame; 749791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mThrottleRatePref = throttleRate; 759791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff initialize(); 769791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 779791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 789791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private void initialize() { 799791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 809791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mThrottleManager = (ThrottleManager) mContext.getSystemService(Context.THROTTLE_SERVICE); 819791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 829791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mStart = GregorianCalendar.getInstance(); 839791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mEnd = GregorianCalendar.getInstance(); 849791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 859791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mFilter = new IntentFilter(); 869791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mFilter.addAction(ThrottleManager.THROTTLE_POLL_ACTION); 879791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mFilter.addAction(ThrottleManager.THROTTLE_ACTION); 88658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mFilter.addAction(ThrottleManager.POLICY_CHANGED_ACTION); 899791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 909791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mReceiver = new BroadcastReceiver() { 919791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff @Override 929791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff public void onReceive(Context context, Intent intent) { 939791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff String action = intent.getAction(); 949791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff if (ThrottleManager.THROTTLE_POLL_ACTION.equals(action)) { 959791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff updateUsageStats(intent.getLongExtra(ThrottleManager.EXTRA_CYCLE_READ, 0), 969791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff intent.getLongExtra(ThrottleManager.EXTRA_CYCLE_WRITE, 0), 979791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff intent.getLongExtra(ThrottleManager.EXTRA_CYCLE_START, 0), 989791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff intent.getLongExtra(ThrottleManager.EXTRA_CYCLE_END, 0)); 99658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } else if (ThrottleManager.POLICY_CHANGED_ACTION.equals(action)) { 100658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff updatePolicy(); 1019791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } else if (ThrottleManager.THROTTLE_ACTION.equals(action)) { 1029791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff updateThrottleRate(intent.getIntExtra(ThrottleManager.EXTRA_THROTTLE_LEVEL, -1)); 1039791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 1049791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 1059791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff }; 1069791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 1079791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 1089791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff void resume() { 1099791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mContext.registerReceiver(mReceiver, mFilter); 110658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff updatePolicy(); 1119791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 1129791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 1139791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff void pause() { 1149791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mContext.unregisterReceiver(mReceiver); 1159791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 1169791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 117658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff private void updatePolicy() { 11854e69839e6e468238f849fa7d2d3d3ada9c6f7f2Irfan Sheriff /* Fetch values for default interface */ 11954e69839e6e468238f849fa7d2d3d3ada9c6f7f2Irfan Sheriff mPolicyThrottleValue = mThrottleManager.getCliffLevel(null, 1); 12054e69839e6e468238f849fa7d2d3d3ada9c6f7f2Irfan Sheriff mPolicyThreshold = mThrottleManager.getCliffThreshold(null, 1); 121658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff 122658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff if (mSummaryPref != null) { /* Settings preference */ 123658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff /** 124658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff * Remove data usage preference in settings 125658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff * if policy change disables throttling 126658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff */ 127658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff if (mPolicyThreshold == 0) { 128658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff if (mSummaryPrefEnabled) { 129658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mPrefScreen.removePreference(mSummaryPref); 130658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mSummaryPrefEnabled = false; 131658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } 132658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } else { 133658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff if (!mSummaryPrefEnabled) { 134658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mSummaryPrefEnabled = true; 135658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mPrefScreen.addPreference(mSummaryPref); 136658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } 137658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } 138658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } 139658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff updateUI(); 140658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } 141658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff 142658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff private void updateThrottleRate(int throttleRate) { 143658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mCurrentThrottleRate = throttleRate; 144658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff updateUI(); 145658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } 146658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff 1479791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private void updateUsageStats(long readByteCount, long writeByteCount, 1489791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff long startTime, long endTime) { 1499791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mDataUsed = readByteCount + writeByteCount; 1509791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mStart.setTimeInMillis(startTime); 1519791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mEnd.setTimeInMillis(endTime); 152658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff updateUI(); 1539791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 1549791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 155658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff private void updateUI() { 156658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff if (mPolicyThreshold == 0) 157658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff return; 158658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff int dataUsedPercent = (int) ((mDataUsed * 100) / mPolicyThreshold); 1599791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 1609791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff long cycleTime = mEnd.getTimeInMillis() - mStart.getTimeInMillis(); 1619791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff long currentTime = GregorianCalendar.getInstance().getTimeInMillis() 1629791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff - mStart.getTimeInMillis(); 1639791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 1649791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff int cycleThroughPercent = (cycleTime == 0) ? 0 : (int) ((currentTime * 100) / cycleTime); 1659791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 1669791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff Calendar cal = Calendar.getInstance(); 1679791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff cal.setTimeInMillis(cycleTime - currentTime); 1689791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff int daysLeft = cal.get(Calendar.DAY_OF_YEAR); 16924760921fea7605d8703aca9ce1d46b980a4bbf5Irfan Sheriff //cal.get() returns 365 for less than a day 17024760921fea7605d8703aca9ce1d46b980a4bbf5Irfan Sheriff if (daysLeft >= 365) daysLeft = 0; 1719791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 1729791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff if (mCurrentUsagePref != null) { 173658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff /* Update the UI based on whether we are in a throttled state */ 174658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff if (mCurrentThrottleRate > 0) { 175658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mCurrentUsagePref.setSummary(mContext.getString( 176658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff R.string.throttle_data_rate_reduced_subtext, 177658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff toReadable(mPolicyThreshold), 178658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mCurrentThrottleRate)); 179658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } else { 180658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mCurrentUsagePref.setSummary(mContext.getString( 181658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff R.string.throttle_data_usage_subtext, 182658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff toReadable(mDataUsed), dataUsedPercent, toReadable(mPolicyThreshold))); 183658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } 1849791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 1859791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff if (mTimeFramePref != null) { 1869791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mTimeFramePref.setSummary(mContext.getString(R.string.throttle_time_frame_subtext, 1879791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff cycleThroughPercent, daysLeft, 1889791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff DateFormat.getDateInstance(DateFormat.SHORT).format(mEnd.getTime()))); 1899791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 1909791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff if (mThrottleRatePref != null) { 1919791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff mThrottleRatePref.setSummary(mContext.getString(R.string.throttle_rate_subtext, 192658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mPolicyThrottleValue)); 1939791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 194658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff if (mSummaryPref != null && mSummaryPrefEnabled) { 195658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff 196658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff /* Update the UI based on whether we are in a throttled state */ 197658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff if (mCurrentThrottleRate > 0) { 198658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mSummaryPref.setSummary(mContext.getString( 199658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff R.string.throttle_data_rate_reduced_subtext, 200658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff toReadable(mPolicyThreshold), 201658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mCurrentThrottleRate)); 202658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } else { 203658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff mSummaryPref.setSummary(mContext.getString(R.string.throttle_status_subtext, 204658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff toReadable(mDataUsed), 205658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff dataUsedPercent, 206658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff toReadable(mPolicyThreshold), 207658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff daysLeft, 208658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff DateFormat.getDateInstance(DateFormat.SHORT).format(mEnd.getTime()))); 209658defd21ed7007bd1cd87b097fcd5106ebb10d2Irfan Sheriff } 2109791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 2119791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 2129791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 2139791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff private String toReadable (long data) { 2149791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff long KB = 1024; 2159791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff long MB = 1024 * KB; 2169791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff long GB = 1024 * MB; 2179791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff long TB = 1024 * GB; 2189791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff String ret; 2199791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff 2209791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff if (data < KB) { 2219791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff ret = data + " bytes"; 2229791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } else if (data < MB) { 2239791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff ret = (data / KB) + " KB"; 2249791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } else if (data < GB) { 2259791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff ret = (data / MB) + " MB"; 2269791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } else if (data < TB) { 2279791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff ret = (data / GB) + " GB"; 2289791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } else { 2299791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff ret = (data / TB) + " TB"; 2309791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 2319791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff return ret; 2329791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff } 2339791da9bac09f6b79909a59e4a7bc5eeffca8a5aIrfan Sheriff} 234