From fdfef57f498e3021a34342538aef9f1c7ccbae78 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Thu, 16 Jun 2011 15:07:48 -0700 Subject: Notify policy listeners about metered ifaces. Currently, kernel definition of metered networks is applied at the interface level. This change maintain list of those metered ifaces and notifies policy listeners, like ConnectivityService. (This gives us a consistent picture of when a network would be blocked.) Bug: 4601393 Change-Id: I277d5ca96ab967a1c1c3f1da8f9587557cd6d74c --- core/java/android/app/DownloadManager.java | 24 +++++++++++------------ core/java/android/net/INetworkPolicyListener.aidl | 3 ++- core/java/android/net/NetworkPolicyManager.java | 18 ++++++++--------- core/java/android/provider/Downloads.java | 16 +++++++-------- 4 files changed, 30 insertions(+), 31 deletions(-) (limited to 'core') diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index 28559cc..ad8d41f 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -226,6 +226,14 @@ public class DownloadManager { public final static int ERROR_FILE_ALREADY_EXISTS = 1009; /** + * Value of {@link #COLUMN_REASON} when the download has failed because of + * {@link NetworkPolicyManager} controls on the requesting application. + * + * @hide + */ + public final static int ERROR_BLOCKED = 1010; + + /** * Value of {@link #COLUMN_REASON} when the download is paused because some network error * occurred and the download manager is waiting before retrying the request. */ @@ -249,14 +257,6 @@ public class DownloadManager { public final static int PAUSED_UNKNOWN = 4; /** - * Value of {@link #COLUMN_REASON} when the download has been paused because - * of {@link NetworkPolicyManager} controls on the requesting application. - * - * @hide - */ - public final static int PAUSED_BY_POLICY = 5; - - /** * Broadcast intent action sent by the download manager when a download completes. */ public final static String ACTION_DOWNLOAD_COMPLETE = "android.intent.action.DOWNLOAD_COMPLETE"; @@ -804,7 +804,6 @@ public class DownloadManager { parts.add(statusClause("=", Downloads.Impl.STATUS_WAITING_TO_RETRY)); parts.add(statusClause("=", Downloads.Impl.STATUS_WAITING_FOR_NETWORK)); parts.add(statusClause("=", Downloads.Impl.STATUS_QUEUED_FOR_WIFI)); - parts.add(statusClause("=", Downloads.Impl.STATUS_PAUSED_BY_POLICY)); } if ((mStatusFlags & STATUS_SUCCESSFUL) != 0) { parts.add(statusClause("=", Downloads.Impl.STATUS_SUCCESS)); @@ -1275,9 +1274,6 @@ public class DownloadManager { case Downloads.Impl.STATUS_QUEUED_FOR_WIFI: return PAUSED_QUEUED_FOR_WIFI; - case Downloads.Impl.STATUS_PAUSED_BY_POLICY: - return PAUSED_BY_POLICY; - default: return PAUSED_UNKNOWN; } @@ -1316,6 +1312,9 @@ public class DownloadManager { case Downloads.Impl.STATUS_FILE_ALREADY_EXISTS_ERROR: return ERROR_FILE_ALREADY_EXISTS; + case Downloads.Impl.STATUS_BLOCKED: + return ERROR_BLOCKED; + default: return ERROR_UNKNOWN; } @@ -1333,7 +1332,6 @@ public class DownloadManager { case Downloads.Impl.STATUS_WAITING_TO_RETRY: case Downloads.Impl.STATUS_WAITING_FOR_NETWORK: case Downloads.Impl.STATUS_QUEUED_FOR_WIFI: - case Downloads.Impl.STATUS_PAUSED_BY_POLICY: return STATUS_PAUSED; case Downloads.Impl.STATUS_SUCCESS: diff --git a/core/java/android/net/INetworkPolicyListener.aidl b/core/java/android/net/INetworkPolicyListener.aidl index 9230151..a45ec54 100644 --- a/core/java/android/net/INetworkPolicyListener.aidl +++ b/core/java/android/net/INetworkPolicyListener.aidl @@ -19,6 +19,7 @@ package android.net; /** {@hide} */ oneway interface INetworkPolicyListener { - void onRulesChanged(int uid, int uidRules); + void onUidRulesChanged(int uid, int uidRules); + void onMeteredIfacesChanged(in String[] meteredIfaces); } diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index 0d4d9a9..bfea168 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -34,13 +34,13 @@ public class NetworkPolicyManager { /** No specific network policy, use system default. */ public static final int POLICY_NONE = 0x0; - /** Reject network usage on paid networks when application in background. */ - public static final int POLICY_REJECT_PAID_BACKGROUND = 0x1; + /** Reject network usage on metered networks when application in background. */ + public static final int POLICY_REJECT_METERED_BACKGROUND = 0x1; /** All network traffic should be allowed. */ public static final int RULE_ALLOW_ALL = 0x0; - /** Reject traffic on paid networks. */ - public static final int RULE_REJECT_PAID = 0x1; + /** Reject traffic on metered networks. */ + public static final int RULE_REJECT_METERED = 0x1; /** * {@link Intent} action launched when user selects {@link NetworkPolicy} @@ -98,7 +98,7 @@ public class NetworkPolicyManager { * Set policy flags for specific UID. * * @param policy {@link #POLICY_NONE} or combination of flags like - * {@link #POLICY_REJECT_PAID_BACKGROUND}. + * {@link #POLICY_REJECT_METERED_BACKGROUND}. */ public void setUidPolicy(int uid, int policy) { try { @@ -217,8 +217,8 @@ public class NetworkPolicyManager { /** {@hide} */ public static void dumpPolicy(PrintWriter fout, int policy) { fout.write("["); - if ((policy & POLICY_REJECT_PAID_BACKGROUND) != 0) { - fout.write("REJECT_PAID_BACKGROUND"); + if ((policy & POLICY_REJECT_METERED_BACKGROUND) != 0) { + fout.write("REJECT_METERED_BACKGROUND"); } fout.write("]"); } @@ -226,8 +226,8 @@ public class NetworkPolicyManager { /** {@hide} */ public static void dumpRules(PrintWriter fout, int rules) { fout.write("["); - if ((rules & RULE_REJECT_PAID) != 0) { - fout.write("REJECT_PAID"); + if ((rules & RULE_REJECT_METERED) != 0) { + fout.write("REJECT_METERED"); } fout.write("]"); } diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java index 0a8c3ca..ba4804d 100644 --- a/core/java/android/provider/Downloads.java +++ b/core/java/android/provider/Downloads.java @@ -548,14 +548,6 @@ public final class Downloads { } /** - * This download has been paused because requesting application has been - * blocked by {@link NetworkPolicyManager}. - * - * @hide - */ - public static final int STATUS_PAUSED_BY_POLICY = 189; - - /** * This download hasn't stated yet */ public static final int STATUS_PENDING = 190; @@ -704,6 +696,14 @@ public final class Downloads { public static final int STATUS_TOO_MANY_REDIRECTS = 497; /** + * This download has failed because requesting application has been + * blocked by {@link NetworkPolicyManager}. + * + * @hide + */ + public static final int STATUS_BLOCKED = 498; + + /** * This download is visible but only shows in the notifications * while it's in progress. */ -- cgit v1.1