Loading core/java/android/net/ThrottleManager.java +10 −2 Original line number Diff line number Diff line Loading @@ -73,6 +73,12 @@ public class ThrottleManager */ public static final String EXTRA_THROTTLE_LEVEL = "level"; /** * Broadcast on boot and whenever the settings change. * {@hide} */ public static final String POLICY_CHANGED_ACTION = "android.net.thrott.POLICY_CHANGED_ACTION"; // {@hide} public static final int DIRECTION_TX = 0; // {@hide} Loading Loading @@ -103,6 +109,8 @@ public class ThrottleManager // @hide public static final int PERIOD_SECOND = 11; /** * returns a long of the ms from the epoch to the time the current cycle ends for the * named interface Loading Loading @@ -147,7 +155,7 @@ public class ThrottleManager /** * returns the number of bytes read+written after which a particular cliff * takes effect on the named iface. Currently only cliff #0 is supported (1 step) * takes effect on the named iface. Currently only cliff #1 is supported (1 step) * {@hide} */ public long getCliffThreshold(String iface, int cliff) { Loading @@ -160,7 +168,7 @@ public class ThrottleManager /** * returns the thottling bandwidth (bps) for a given cliff # on the named iface. * only cliff #0 is currently supported. * only cliff #1 is currently supported. * {@hide} */ public int getCliffLevel(String iface, int cliff) { Loading services/java/com/android/server/ThrottleService.java +55 −18 Original line number Diff line number Diff line Loading @@ -22,12 +22,14 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.res.Resources; import android.content.SharedPreferences; import android.database.ContentObserver; import android.net.IThrottleManager; import android.net.ThrottleManager; import android.os.Binder; Loading Loading @@ -98,8 +100,6 @@ public class ThrottleService extends IThrottleManager.Stub { private DataRecorder mRecorder; private int mThrottleLevel; // 0 for none, 1 for first throttle val, 2 for next, etc private String mPolicyIface; private static final int NOTIFICATION_WARNING = 2; Loading @@ -109,6 +109,12 @@ public class ThrottleService extends IThrottleManager.Stub { private Notification mThrottlingNotification; private boolean mWarningNotificationSent = false; private SettingsObserver mSettingsObserver; private int mThrottleIndex; // 0 for none, 1 for first throttle val, 2 for next, etc private static final int THROTTLE_INDEX_UNINITIALIZED = -1; private static final int THROTTLE_INDEX_UNTHROTTLED = 0; public ThrottleService(Context context) { if (DBG) Slog.d(TAG, "Starting ThrottleService"); mContext = context; Loading @@ -126,6 +132,38 @@ public class ThrottleService extends IThrottleManager.Stub { Context.NOTIFICATION_SERVICE); } private static class SettingsObserver extends ContentObserver { private int mMsg; private Handler mHandler; SettingsObserver(Handler handler, int msg) { super(handler); mHandler = handler; mMsg = msg; } void observe(Context context) { ContentResolver resolver = context.getContentResolver(); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_POLLING_SEC), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_THRESHOLD), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_VALUE), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_RESET_DAY), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_NOTIFICATION_TYPE), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_IFACE), false, this); // TODO - add help url } @Override public void onChange(boolean selfChange) { mHandler.obtainMessage(mMsg).sendToTarget(); } } private void enforceAccessPermission() { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.ACCESS_NETWORK_STATE, Loading @@ -145,7 +183,7 @@ public class ThrottleService extends IThrottleManager.Stub { //TODO - a better name? getCliffByteCountThreshold? public synchronized long getCliffThreshold(String iface, int cliff) { enforceAccessPermission(); if ((cliff == 0) && iface.equals(mPolicyIface)) { if ((cliff == 1) && iface.equals(mPolicyIface)) { return mPolicyThreshold; } return 0; Loading @@ -153,7 +191,7 @@ public class ThrottleService extends IThrottleManager.Stub { // TODO - a better name? getThrottleRate? public synchronized int getCliffLevel(String iface, int cliff) { enforceAccessPermission(); if ((cliff == 0) && iface.equals(mPolicyIface)) { if ((cliff == 1) && iface.equals(mPolicyIface)) { return mPolicyThrottleValue; } return 0; Loading @@ -179,7 +217,7 @@ public class ThrottleService extends IThrottleManager.Stub { // TODO - a better name - getCurrentThrottleRate? public synchronized int getThrottle(String iface) { enforceAccessPermission(); if (iface.equals(mPolicyIface) && (mThrottleLevel == 1)) { if (iface.equals(mPolicyIface) && (mThrottleIndex == 1)) { return mPolicyThrottleValue; } return 0; Loading Loading @@ -208,6 +246,9 @@ public class ThrottleService extends IThrottleManager.Stub { mThread.start(); mHandler = new MyHandler(mThread.getLooper()); mHandler.obtainMessage(EVENT_REBOOT_RECOVERY).sendToTarget(); mSettingsObserver = new SettingsObserver(mHandler, EVENT_POLICY_CHANGED); mSettingsObserver.observe(mContext); } Loading Loading @@ -242,8 +283,7 @@ public class ThrottleService extends IThrottleManager.Stub { // check for sim change TODO // reregister for notification of policy change // register for roaming indication change // check for roaming TODO mThrottleIndex = THROTTLE_INDEX_UNINITIALIZED; mRecorder = new DataRecorder(mContext, ThrottleService.this); Loading Loading @@ -300,14 +340,10 @@ public class ThrottleService extends IThrottleManager.Stub { ", resetDay=" + mPolicyResetDay + ", noteType=" + mPolicyNotificationsAllowedMask); Calendar end = calculatePeriodEnd(); Calendar start = calculatePeriodStart(end); mRecorder.setNextPeriod(start,end); onResetAlarm(); mAlarmManager.cancel(mPendingResetIntent); mAlarmManager.set(AlarmManager.RTC_WAKEUP, end.getTimeInMillis(), mPendingResetIntent); Intent broadcast = new Intent(ThrottleManager.POLICY_CHANGED_ACTION); mContext.sendBroadcast(broadcast); } private void onPollAlarm() { Loading Loading @@ -357,9 +393,9 @@ public class ThrottleService extends IThrottleManager.Stub { // check if we need to throttle if (currentTotal > mPolicyThreshold) { if (mThrottleLevel != 1) { if (mThrottleIndex != 1) { synchronized (ThrottleService.this) { mThrottleLevel = 1; mThrottleIndex = 1; } if (DBG) Slog.d(TAG, "Threshold " + mPolicyThreshold + " exceeded!"); try { Loading Loading @@ -429,9 +465,9 @@ public class ThrottleService extends IThrottleManager.Stub { private synchronized void clearThrottleAndNotification() { if (mThrottleLevel == 1) { if (mThrottleIndex != THROTTLE_INDEX_UNTHROTTLED) { synchronized (ThrottleService.this) { mThrottleLevel = 0; mThrottleIndex = THROTTLE_INDEX_UNTHROTTLED; } try { mNMService.setInterfaceThrottle(mPolicyIface, -1, -1); Loading Loading @@ -499,6 +535,7 @@ public class ThrottleService extends IThrottleManager.Stub { mRecorder.setNextPeriod(start,end); mAlarmManager.cancel(mPendingResetIntent); mAlarmManager.set(AlarmManager.RTC_WAKEUP, end.getTimeInMillis(), mPendingResetIntent); } Loading Loading
core/java/android/net/ThrottleManager.java +10 −2 Original line number Diff line number Diff line Loading @@ -73,6 +73,12 @@ public class ThrottleManager */ public static final String EXTRA_THROTTLE_LEVEL = "level"; /** * Broadcast on boot and whenever the settings change. * {@hide} */ public static final String POLICY_CHANGED_ACTION = "android.net.thrott.POLICY_CHANGED_ACTION"; // {@hide} public static final int DIRECTION_TX = 0; // {@hide} Loading Loading @@ -103,6 +109,8 @@ public class ThrottleManager // @hide public static final int PERIOD_SECOND = 11; /** * returns a long of the ms from the epoch to the time the current cycle ends for the * named interface Loading Loading @@ -147,7 +155,7 @@ public class ThrottleManager /** * returns the number of bytes read+written after which a particular cliff * takes effect on the named iface. Currently only cliff #0 is supported (1 step) * takes effect on the named iface. Currently only cliff #1 is supported (1 step) * {@hide} */ public long getCliffThreshold(String iface, int cliff) { Loading @@ -160,7 +168,7 @@ public class ThrottleManager /** * returns the thottling bandwidth (bps) for a given cliff # on the named iface. * only cliff #0 is currently supported. * only cliff #1 is currently supported. * {@hide} */ public int getCliffLevel(String iface, int cliff) { Loading
services/java/com/android/server/ThrottleService.java +55 −18 Original line number Diff line number Diff line Loading @@ -22,12 +22,14 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.res.Resources; import android.content.SharedPreferences; import android.database.ContentObserver; import android.net.IThrottleManager; import android.net.ThrottleManager; import android.os.Binder; Loading Loading @@ -98,8 +100,6 @@ public class ThrottleService extends IThrottleManager.Stub { private DataRecorder mRecorder; private int mThrottleLevel; // 0 for none, 1 for first throttle val, 2 for next, etc private String mPolicyIface; private static final int NOTIFICATION_WARNING = 2; Loading @@ -109,6 +109,12 @@ public class ThrottleService extends IThrottleManager.Stub { private Notification mThrottlingNotification; private boolean mWarningNotificationSent = false; private SettingsObserver mSettingsObserver; private int mThrottleIndex; // 0 for none, 1 for first throttle val, 2 for next, etc private static final int THROTTLE_INDEX_UNINITIALIZED = -1; private static final int THROTTLE_INDEX_UNTHROTTLED = 0; public ThrottleService(Context context) { if (DBG) Slog.d(TAG, "Starting ThrottleService"); mContext = context; Loading @@ -126,6 +132,38 @@ public class ThrottleService extends IThrottleManager.Stub { Context.NOTIFICATION_SERVICE); } private static class SettingsObserver extends ContentObserver { private int mMsg; private Handler mHandler; SettingsObserver(Handler handler, int msg) { super(handler); mHandler = handler; mMsg = msg; } void observe(Context context) { ContentResolver resolver = context.getContentResolver(); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_POLLING_SEC), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_THRESHOLD), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_VALUE), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_RESET_DAY), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_NOTIFICATION_TYPE), false, this); resolver.registerContentObserver(Settings.Secure.getUriFor( Settings.Secure.THROTTLE_IFACE), false, this); // TODO - add help url } @Override public void onChange(boolean selfChange) { mHandler.obtainMessage(mMsg).sendToTarget(); } } private void enforceAccessPermission() { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.ACCESS_NETWORK_STATE, Loading @@ -145,7 +183,7 @@ public class ThrottleService extends IThrottleManager.Stub { //TODO - a better name? getCliffByteCountThreshold? public synchronized long getCliffThreshold(String iface, int cliff) { enforceAccessPermission(); if ((cliff == 0) && iface.equals(mPolicyIface)) { if ((cliff == 1) && iface.equals(mPolicyIface)) { return mPolicyThreshold; } return 0; Loading @@ -153,7 +191,7 @@ public class ThrottleService extends IThrottleManager.Stub { // TODO - a better name? getThrottleRate? public synchronized int getCliffLevel(String iface, int cliff) { enforceAccessPermission(); if ((cliff == 0) && iface.equals(mPolicyIface)) { if ((cliff == 1) && iface.equals(mPolicyIface)) { return mPolicyThrottleValue; } return 0; Loading @@ -179,7 +217,7 @@ public class ThrottleService extends IThrottleManager.Stub { // TODO - a better name - getCurrentThrottleRate? public synchronized int getThrottle(String iface) { enforceAccessPermission(); if (iface.equals(mPolicyIface) && (mThrottleLevel == 1)) { if (iface.equals(mPolicyIface) && (mThrottleIndex == 1)) { return mPolicyThrottleValue; } return 0; Loading Loading @@ -208,6 +246,9 @@ public class ThrottleService extends IThrottleManager.Stub { mThread.start(); mHandler = new MyHandler(mThread.getLooper()); mHandler.obtainMessage(EVENT_REBOOT_RECOVERY).sendToTarget(); mSettingsObserver = new SettingsObserver(mHandler, EVENT_POLICY_CHANGED); mSettingsObserver.observe(mContext); } Loading Loading @@ -242,8 +283,7 @@ public class ThrottleService extends IThrottleManager.Stub { // check for sim change TODO // reregister for notification of policy change // register for roaming indication change // check for roaming TODO mThrottleIndex = THROTTLE_INDEX_UNINITIALIZED; mRecorder = new DataRecorder(mContext, ThrottleService.this); Loading Loading @@ -300,14 +340,10 @@ public class ThrottleService extends IThrottleManager.Stub { ", resetDay=" + mPolicyResetDay + ", noteType=" + mPolicyNotificationsAllowedMask); Calendar end = calculatePeriodEnd(); Calendar start = calculatePeriodStart(end); mRecorder.setNextPeriod(start,end); onResetAlarm(); mAlarmManager.cancel(mPendingResetIntent); mAlarmManager.set(AlarmManager.RTC_WAKEUP, end.getTimeInMillis(), mPendingResetIntent); Intent broadcast = new Intent(ThrottleManager.POLICY_CHANGED_ACTION); mContext.sendBroadcast(broadcast); } private void onPollAlarm() { Loading Loading @@ -357,9 +393,9 @@ public class ThrottleService extends IThrottleManager.Stub { // check if we need to throttle if (currentTotal > mPolicyThreshold) { if (mThrottleLevel != 1) { if (mThrottleIndex != 1) { synchronized (ThrottleService.this) { mThrottleLevel = 1; mThrottleIndex = 1; } if (DBG) Slog.d(TAG, "Threshold " + mPolicyThreshold + " exceeded!"); try { Loading Loading @@ -429,9 +465,9 @@ public class ThrottleService extends IThrottleManager.Stub { private synchronized void clearThrottleAndNotification() { if (mThrottleLevel == 1) { if (mThrottleIndex != THROTTLE_INDEX_UNTHROTTLED) { synchronized (ThrottleService.this) { mThrottleLevel = 0; mThrottleIndex = THROTTLE_INDEX_UNTHROTTLED; } try { mNMService.setInterfaceThrottle(mPolicyIface, -1, -1); Loading Loading @@ -499,6 +535,7 @@ public class ThrottleService extends IThrottleManager.Stub { mRecorder.setNextPeriod(start,end); mAlarmManager.cancel(mPendingResetIntent); mAlarmManager.set(AlarmManager.RTC_WAKEUP, end.getTimeInMillis(), mPendingResetIntent); } Loading