summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2011-08-19 02:24:24 -0700
committerJeff Sharkey <jsharkey@android.com>2011-08-23 18:45:44 -0700
commit8e28b7d78232f6cf08739ca0d129cc7f9e650801 (patch)
treec72bf1bcc07e1dd02764a4f4738a56735e5f4252 /core
parent7a12d6ba14a35276fd3afb314d6c95055da4c6f0 (diff)
downloadframeworks_base-8e28b7d78232f6cf08739ca0d129cc7f9e650801.zip
frameworks_base-8e28b7d78232f6cf08739ca0d129cc7f9e650801.tar.gz
frameworks_base-8e28b7d78232f6cf08739ca0d129cc7f9e650801.tar.bz2
Proactively disable data when over policy limit.
Add policy controls to NetworkStateTracker which are combined with other user preference and internal flags to decide if data connection should be established. Better locking around enabled flags. When data network would be over limit, proactively disable data on that network. Enable when policy is snoozed or when cycle resets. Track and dismiss notifications from now-stale policies. Bug: 4587023, 5178147 Change-Id: Ibfcc9f73cda7c369209af701b46eddd3d1943f2d
Diffstat (limited to 'core')
-rw-r--r--core/java/android/bluetooth/BluetoothTetheringDataTracker.java15
-rw-r--r--core/java/android/net/DummyDataStateTracker.java12
-rw-r--r--core/java/android/net/EthernetDataTracker.java22
-rw-r--r--core/java/android/net/IConnectivityManager.aidl4
-rw-r--r--core/java/android/net/MobileDataStateTracker.java49
-rw-r--r--core/java/android/net/NetworkStateTracker.java12
-rwxr-xr-xcore/res/res/values/strings.xml4
7 files changed, 68 insertions, 50 deletions
diff --git a/core/java/android/bluetooth/BluetoothTetheringDataTracker.java b/core/java/android/bluetooth/BluetoothTetheringDataTracker.java
index a7b0037..83d1bda 100644
--- a/core/java/android/bluetooth/BluetoothTetheringDataTracker.java
+++ b/core/java/android/bluetooth/BluetoothTetheringDataTracker.java
@@ -19,7 +19,6 @@ package android.bluetooth;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.DhcpInfoInternal;
-import android.net.LinkAddress;
import android.net.LinkCapabilities;
import android.net.LinkProperties;
import android.net.NetworkInfo;
@@ -30,7 +29,6 @@ import android.os.Handler;
import android.os.Message;
import android.util.Log;
-import java.net.InetAddress;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -184,11 +182,14 @@ public class BluetoothTetheringDataTracker implements NetworkStateTracker {
return -1;
}
- /**
- * @param enabled
- */
- public void setDataEnable(boolean enabled) {
- android.util.Log.d(TAG, "setDataEnabled: IGNORING enabled=" + enabled);
+ @Override
+ public void setUserDataEnable(boolean enabled) {
+ Log.w(TAG, "ignoring setUserDataEnable(" + enabled + ")");
+ }
+
+ @Override
+ public void setPolicyDataEnable(boolean enabled) {
+ Log.w(TAG, "ignoring setPolicyDataEnable(" + enabled + ")");
}
/**
diff --git a/core/java/android/net/DummyDataStateTracker.java b/core/java/android/net/DummyDataStateTracker.java
index e39725a..9f0f9cd 100644
--- a/core/java/android/net/DummyDataStateTracker.java
+++ b/core/java/android/net/DummyDataStateTracker.java
@@ -19,9 +19,6 @@ package android.net;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
-import android.net.NetworkInfo.DetailedState;
-import android.net.NetworkInfo;
-import android.net.LinkProperties;
import android.util.Slog;
/**
@@ -168,7 +165,14 @@ public class DummyDataStateTracker implements NetworkStateTracker {
return true;
}
- public void setDataEnable(boolean enabled) {
+ @Override
+ public void setUserDataEnable(boolean enabled) {
+ // ignored
+ }
+
+ @Override
+ public void setPolicyDataEnable(boolean enabled) {
+ // ignored
}
@Override
diff --git a/core/java/android/net/EthernetDataTracker.java b/core/java/android/net/EthernetDataTracker.java
index b035c51..21ecc22 100644
--- a/core/java/android/net/EthernetDataTracker.java
+++ b/core/java/android/net/EthernetDataTracker.java
@@ -17,15 +17,7 @@
package android.net;
import android.content.Context;
-import android.net.ConnectivityManager;
-import android.net.DhcpInfoInternal;
-import android.net.LinkAddress;
-import android.net.LinkCapabilities;
-import android.net.LinkProperties;
-import android.net.NetworkInfo;
import android.net.NetworkInfo.DetailedState;
-import android.net.NetworkStateTracker;
-import android.net.NetworkUtils;
import android.os.Handler;
import android.os.IBinder;
import android.os.INetworkManagementService;
@@ -34,7 +26,6 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
-import java.net.InetAddress;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -302,11 +293,14 @@ public class EthernetDataTracker implements NetworkStateTracker {
return -1;
}
- /**
- * @param enabled
- */
- public void setDataEnable(boolean enabled) {
- Log.d(TAG, "setDataEnabled: IGNORING enabled=" + enabled);
+ @Override
+ public void setUserDataEnable(boolean enabled) {
+ Log.w(TAG, "ignoring setUserDataEnable(" + enabled + ")");
+ }
+
+ @Override
+ public void setPolicyDataEnable(boolean enabled) {
+ Log.w(TAG, "ignoring setPolicyDataEnable(" + enabled + ")");
}
/**
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 1b95b60..c9553c0 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -64,9 +64,11 @@ interface IConnectivityManager
boolean requestRouteToHostAddress(int networkType, in byte[] hostAddress);
boolean getMobileDataEnabled();
-
void setMobileDataEnabled(boolean enabled);
+ /** Policy control over specific {@link NetworkStateTracker}. */
+ void setPolicyDataEnable(int networkType, boolean enabled);
+
int tether(String iface);
int untether(String iface);
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index 5501f38..5929cfb 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -16,19 +16,26 @@
package android.net;
+import static com.android.internal.telephony.DataConnectionTracker.CMD_SET_POLICY_DATA_ENABLE;
+import static com.android.internal.telephony.DataConnectionTracker.CMD_SET_USER_DATA_ENABLE;
+import static com.android.internal.telephony.DataConnectionTracker.DISABLED;
+import static com.android.internal.telephony.DataConnectionTracker.ENABLED;
+
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.net.NetworkInfo.DetailedState;
import android.os.Bundle;
-import android.os.HandlerThread;
+import android.os.Handler;
import android.os.Looper;
+import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
import android.os.ServiceManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Slog;
import com.android.internal.telephony.DataConnectionTracker;
import com.android.internal.telephony.ITelephony;
@@ -36,13 +43,6 @@ import com.android.internal.telephony.Phone;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.util.AsyncChannel;
-import android.net.NetworkInfo.DetailedState;
-import android.net.NetworkInfo;
-import android.net.LinkProperties;
-import android.telephony.TelephonyManager;
-import android.util.Slog;
-import android.text.TextUtils;
-
/**
* Track the state of mobile data connectivity. This is done by
* receiving broadcast intents from the Phone process whenever
@@ -452,17 +452,22 @@ public class MobileDataStateTracker implements NetworkStateTracker {
return false;
}
- /**
- * @param enabled
- */
- public void setDataEnable(boolean enabled) {
- try {
- if (DBG) log("setDataEnable: E enabled=" + enabled);
- mDataConnectionTrackerAc.sendMessage(DataConnectionTracker.CMD_SET_DATA_ENABLE,
- enabled ? DataConnectionTracker.ENABLED : DataConnectionTracker.DISABLED);
- if (VDBG) log("setDataEnable: X enabled=" + enabled);
- } catch (Exception e) {
- loge("setDataEnable: X mAc was null" + e);
+ @Override
+ public void setUserDataEnable(boolean enabled) {
+ if (DBG) log("setUserDataEnable: E enabled=" + enabled);
+ final AsyncChannel channel = mDataConnectionTrackerAc;
+ if (channel != null) {
+ channel.sendMessage(CMD_SET_USER_DATA_ENABLE, enabled ? ENABLED : DISABLED);
+ }
+ if (VDBG) log("setUserDataEnable: X enabled=" + enabled);
+ }
+
+ @Override
+ public void setPolicyDataEnable(boolean enabled) {
+ if (DBG) log("setPolicyDataEnable(enabled=" + enabled + ")");
+ final AsyncChannel channel = mDataConnectionTrackerAc;
+ if (channel != null) {
+ channel.sendMessage(CMD_SET_POLICY_DATA_ENABLE, enabled ? ENABLED : DISABLED);
}
}
diff --git a/core/java/android/net/NetworkStateTracker.java b/core/java/android/net/NetworkStateTracker.java
index f53063d..1735592 100644
--- a/core/java/android/net/NetworkStateTracker.java
+++ b/core/java/android/net/NetworkStateTracker.java
@@ -136,9 +136,17 @@ public interface NetworkStateTracker {
public boolean isAvailable();
/**
- * @param enabled
+ * User control of data connection through this network, typically persisted
+ * internally.
*/
- public void setDataEnable(boolean enabled);
+ public void setUserDataEnable(boolean enabled);
+
+ /**
+ * Policy control of data connection through this network, typically not
+ * persisted internally. Usually used when {@link NetworkPolicy#limitBytes}
+ * is passed.
+ */
+ public void setPolicyDataEnable(boolean enabled);
/**
* -------------------------------------------------------------
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 6aff54e..ade2865 100755
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -3098,6 +3098,8 @@
<string name="data_usage_4g_limit_title">4G data disabled</string>
<!-- Notification title when mobile data usage has exceeded limit threshold, and has been disabled. [CHAR LIMIT=32] -->
<string name="data_usage_mobile_limit_title">Mobile data disabled</string>
+ <!-- Notification title when Wi-Fi data usage has exceeded limit threshold, and has been disabled. [CHAR LIMIT=32] -->
+ <string name="data_usage_wifi_limit_title">Wi-Fi data disabled</string>
<!-- Notification body when data usage has exceeded limit threshold, and has been disabled. [CHAR LIMIT=32] -->
<string name="data_usage_limit_body">Touch to enable</string>
@@ -3107,6 +3109,8 @@
<string name="data_usage_4g_limit_snoozed_title">4G data limit exceeded</string>
<!-- Notification title when mobile data usage has exceeded limit threshold. [CHAR LIMIT=32] -->
<string name="data_usage_mobile_limit_snoozed_title">Mobile data limit exceeded</string>
+ <!-- Notification title when Wi-Fi data usage has exceeded limit threshold. [CHAR LIMIT=32] -->
+ <string name="data_usage_wifi_limit_snoozed_title">Wi-Fi data limit exceeded</string>
<!-- Notification body when data usage has exceeded limit threshold. [CHAR LIMIT=32] -->
<string name="data_usage_limit_snoozed_body"><xliff:g id="size" example="3.8GB">%s</xliff:g> over specified limit</string>