From 904237f83940676433104952d165d3b28d961044 Mon Sep 17 00:00:00 2001 From: Antonio Cansado Date: Wed, 25 May 2016 09:57:21 -0700 Subject: [PATCH] Cleaning up NetworkStatsManager. - Throwing SecurityExceptionand and IllegalArgumentException instead of null for new APIs - removing @removed APIs Bug:27530098,27379882 Change-Id: Ifbe65bfc5051aa33aff2baa22cfa8e67b0f7c358 --- api/current.txt | 2 +- api/removed.txt | 31 ---- api/system-current.txt | 2 +- api/system-removed.txt | 31 ---- api/test-current.txt | 2 +- api/test-removed.txt | 31 ---- .../android/app/usage/DataUsagePolicy.java | 175 ------------------ .../app/usage/NetworkStatsManager.java | 31 +--- .../server/net/NetworkStatsObservers.java | 10 - 9 files changed, 7 insertions(+), 308 deletions(-) delete mode 100644 core/java/android/app/usage/DataUsagePolicy.java diff --git a/api/current.txt b/api/current.txt index 70ea1c577134e..e88113db4de64 100644 --- a/api/current.txt +++ b/api/current.txt @@ -6455,7 +6455,7 @@ package android.app.usage { public class NetworkStatsManager { method public android.app.usage.NetworkStats queryDetails(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; method public android.app.usage.NetworkStats queryDetailsForUid(int, java.lang.String, long, long, int) throws android.os.RemoteException, java.lang.SecurityException; - method public android.app.usage.NetworkStats queryDetailsForUidTag(int, java.lang.String, long, long, int, int); + method public android.app.usage.NetworkStats queryDetailsForUidTag(int, java.lang.String, long, long, int, int) throws java.lang.SecurityException; method public android.app.usage.NetworkStats querySummary(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; method public android.app.usage.NetworkStats.Bucket querySummaryForDevice(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; method public android.app.usage.NetworkStats.Bucket querySummaryForUser(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; diff --git a/api/removed.txt b/api/removed.txt index 42c64ea62cced..0ff2476407494 100644 --- a/api/removed.txt +++ b/api/removed.txt @@ -31,37 +31,6 @@ package android.app.admin { } -package android.app.usage { - - public class DataUsagePolicy { - field public final int networkType; - field public final java.lang.String[] subscriberIds; - field public final long thresholdInBytes; - field public final int[] uids; - } - - public static class DataUsagePolicy.Builder { - ctor public DataUsagePolicy.Builder(); - method public android.app.usage.DataUsagePolicy.Builder addSubscriberId(java.lang.String); - method public android.app.usage.DataUsagePolicy.Builder addUid(int); - method public android.app.usage.DataUsagePolicy build(); - method public android.app.usage.DataUsagePolicy.Builder setNetworkType(int); - method public android.app.usage.DataUsagePolicy.Builder setThreshold(long); - } - - public class NetworkStatsManager { - method public void registerDataUsageCallback(android.app.usage.DataUsagePolicy, android.app.usage.NetworkStatsManager.DataUsageCallback, android.os.Handler); - method public void registerDataUsageCallback(android.app.usage.DataUsagePolicy, android.app.usage.NetworkStatsManager.UsageCallback, android.os.Handler); - method public void unregisterDataUsageCallback(android.app.usage.NetworkStatsManager.DataUsageCallback); - } - - public static abstract class NetworkStatsManager.DataUsageCallback { - ctor public NetworkStatsManager.DataUsageCallback(); - method public deprecated void onLimitReached(); - } - -} - package android.content { public abstract class Context { diff --git a/api/system-current.txt b/api/system-current.txt index a6f612d195bf6..d89d1667ea5af 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6736,7 +6736,7 @@ package android.app.usage { public class NetworkStatsManager { method public android.app.usage.NetworkStats queryDetails(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; method public android.app.usage.NetworkStats queryDetailsForUid(int, java.lang.String, long, long, int) throws android.os.RemoteException, java.lang.SecurityException; - method public android.app.usage.NetworkStats queryDetailsForUidTag(int, java.lang.String, long, long, int, int); + method public android.app.usage.NetworkStats queryDetailsForUidTag(int, java.lang.String, long, long, int, int) throws java.lang.SecurityException; method public android.app.usage.NetworkStats querySummary(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; method public android.app.usage.NetworkStats.Bucket querySummaryForDevice(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; method public android.app.usage.NetworkStats.Bucket querySummaryForUser(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; diff --git a/api/system-removed.txt b/api/system-removed.txt index 4873605d4e1d0..715312fdf6d49 100644 --- a/api/system-removed.txt +++ b/api/system-removed.txt @@ -29,37 +29,6 @@ package android.app.admin { } -package android.app.usage { - - public class DataUsagePolicy { - field public final int networkType; - field public final java.lang.String[] subscriberIds; - field public final long thresholdInBytes; - field public final int[] uids; - } - - public static class DataUsagePolicy.Builder { - ctor public DataUsagePolicy.Builder(); - method public android.app.usage.DataUsagePolicy.Builder addSubscriberId(java.lang.String); - method public android.app.usage.DataUsagePolicy.Builder addUid(int); - method public android.app.usage.DataUsagePolicy build(); - method public android.app.usage.DataUsagePolicy.Builder setNetworkType(int); - method public android.app.usage.DataUsagePolicy.Builder setThreshold(long); - } - - public class NetworkStatsManager { - method public void registerDataUsageCallback(android.app.usage.DataUsagePolicy, android.app.usage.NetworkStatsManager.DataUsageCallback, android.os.Handler); - method public void registerDataUsageCallback(android.app.usage.DataUsagePolicy, android.app.usage.NetworkStatsManager.UsageCallback, android.os.Handler); - method public void unregisterDataUsageCallback(android.app.usage.NetworkStatsManager.DataUsageCallback); - } - - public static abstract class NetworkStatsManager.DataUsageCallback { - ctor public NetworkStatsManager.DataUsageCallback(); - method public deprecated void onLimitReached(); - } - -} - package android.content { public abstract class Context { diff --git a/api/test-current.txt b/api/test-current.txt index 37bc7afb69ef1..a0f1acae8507d 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -6461,7 +6461,7 @@ package android.app.usage { public class NetworkStatsManager { method public android.app.usage.NetworkStats queryDetails(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; method public android.app.usage.NetworkStats queryDetailsForUid(int, java.lang.String, long, long, int) throws android.os.RemoteException, java.lang.SecurityException; - method public android.app.usage.NetworkStats queryDetailsForUidTag(int, java.lang.String, long, long, int, int); + method public android.app.usage.NetworkStats queryDetailsForUidTag(int, java.lang.String, long, long, int, int) throws java.lang.SecurityException; method public android.app.usage.NetworkStats querySummary(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; method public android.app.usage.NetworkStats.Bucket querySummaryForDevice(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; method public android.app.usage.NetworkStats.Bucket querySummaryForUser(int, java.lang.String, long, long) throws android.os.RemoteException, java.lang.SecurityException; diff --git a/api/test-removed.txt b/api/test-removed.txt index 42c64ea62cced..0ff2476407494 100644 --- a/api/test-removed.txt +++ b/api/test-removed.txt @@ -31,37 +31,6 @@ package android.app.admin { } -package android.app.usage { - - public class DataUsagePolicy { - field public final int networkType; - field public final java.lang.String[] subscriberIds; - field public final long thresholdInBytes; - field public final int[] uids; - } - - public static class DataUsagePolicy.Builder { - ctor public DataUsagePolicy.Builder(); - method public android.app.usage.DataUsagePolicy.Builder addSubscriberId(java.lang.String); - method public android.app.usage.DataUsagePolicy.Builder addUid(int); - method public android.app.usage.DataUsagePolicy build(); - method public android.app.usage.DataUsagePolicy.Builder setNetworkType(int); - method public android.app.usage.DataUsagePolicy.Builder setThreshold(long); - } - - public class NetworkStatsManager { - method public void registerDataUsageCallback(android.app.usage.DataUsagePolicy, android.app.usage.NetworkStatsManager.DataUsageCallback, android.os.Handler); - method public void registerDataUsageCallback(android.app.usage.DataUsagePolicy, android.app.usage.NetworkStatsManager.UsageCallback, android.os.Handler); - method public void unregisterDataUsageCallback(android.app.usage.NetworkStatsManager.DataUsageCallback); - } - - public static abstract class NetworkStatsManager.DataUsageCallback { - ctor public NetworkStatsManager.DataUsageCallback(); - method public deprecated void onLimitReached(); - } - -} - package android.content { public abstract class Context { diff --git a/core/java/android/app/usage/DataUsagePolicy.java b/core/java/android/app/usage/DataUsagePolicy.java deleted file mode 100644 index ee6b60c371f6d..0000000000000 --- a/core/java/android/app/usage/DataUsagePolicy.java +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright (C) 2016 The Android Open Source 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 android.app.usage; - -import android.net.ConnectivityManager; -import android.os.Parcel; -import android.os.Parcelable; -import android.util.IntArray; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; - -/** - * Defines a policy for data usage callbacks, made through {@link DataUsagePolicy.Builder} and used - * to be notified on data usage via {@link NetworkStatsManager#registerDataUsageCallback}. - * @removed - */ -public class DataUsagePolicy { - - /** - * Network type to be monitored, as defined in {@link ConnectivityManager}, e.g. - * {@link ConnectivityManager#TYPE_MOBILE}, {@link ConnectivityManager#TYPE_WIFI} etc. - */ - public final int networkType; - - /** - * Set of subscriber ids to be monitored for the given network type. May be empty if not - * applicable. - *

Should not be modified once created. - */ - public final String[] subscriberIds; - - /** - * Set of UIDs of which to monitor data usage. - * - *

If not {@code null}, the caller will be notified when any of the uids exceed - * the given threshold. If empty all uids for which the calling process has access - * to stats will be monitored. - *

Should not be modified once created. - */ - public final int[] uids; - - /** - * Threshold in bytes to be notified on. - */ - public final long thresholdInBytes; - - /** - * @hide - */ - DataUsagePolicy(int networkType, String[] subscriberIds, int[] uids, - long thresholdInBytes) { - this.networkType = networkType; - this.subscriberIds = subscriberIds; - this.uids = uids; - this.thresholdInBytes = thresholdInBytes; - } - - /** - * Builder used to create {@link DataUsagePolicy} objects. - */ - public static class Builder { - private static final int INVALID_NETWORK_TYPE = -1; - private int mNetworkType = INVALID_NETWORK_TYPE; - private List mSubscriberList = new ArrayList<>(); - private IntArray mUids = new IntArray(); - private long mThresholdInBytes; - - /** - * Default constructor for Builder. - */ - public Builder() {} - - /** - * Build {@link DataUsagePolicy} given the current policies. - */ - public DataUsagePolicy build() { - if (mNetworkType == INVALID_NETWORK_TYPE) { - throw new IllegalArgumentException( - "DataUsagePolicy requires a valid network type to be set"); - } - return new DataUsagePolicy(mNetworkType, - mSubscriberList.toArray(new String[mSubscriberList.size()]), - mUids.toArray(), mThresholdInBytes); - } - - /** - * Specifies that the given {@code subscriberId} should be monitored. - * - * @param subscriberId the subscriber id of the network interface. - */ - public Builder addSubscriberId(String subscriberId) { - mSubscriberList.add(subscriberId); - return this; - } - - /** - * Specifies that the given {@code uid} should be monitored. - */ - public Builder addUid(int uid) { - mUids.add(uid); - return this; - } - - /** - * Specifies that the callback should monitor the given network. It is mandatory - * to set one. - * - * @param networkType As defined in {@link ConnectivityManager}, e.g. - * {@link ConnectivityManager#TYPE_MOBILE}, - * {@link ConnectivityManager#TYPE_WIFI}, etc. - */ - public Builder setNetworkType(int networkType) { - mNetworkType = networkType; - return this; - } - - /** - * Sets the threshold in bytes on which the listener should be called. The framework may - * impose a minimum threshold to avoid too many notifications to be triggered. - */ - public Builder setThreshold(long thresholdInBytes) { - mThresholdInBytes = thresholdInBytes; - return this; - } - } - - @Override - public String toString() { - return "DataUsagePolicy [ networkType=" + networkType - + ", subscriberIds=" + Arrays.toString(subscriberIds) - + ", uids=" + Arrays.toString(uids) - + ", thresholdInBytes=" + thresholdInBytes + " ]"; - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof DataUsagePolicy == false) return false; - DataUsagePolicy that = (DataUsagePolicy) obj; - return that.networkType == this.networkType - && Arrays.deepEquals(that.subscriberIds, this.subscriberIds) - && Arrays.equals(that.uids, this.uids) - && that.thresholdInBytes == this.thresholdInBytes; - } - - @Override - public int hashCode() { - // Start with a non-zero constant. - int result = 17; - - // Include a hash for each field. - result = 31 * result + networkType; - result = 31 * result + Arrays.deepHashCode(subscriberIds); - result = 31 * result + Arrays.hashCode(uids); - result = 31 * result + (int) (thresholdInBytes ^ (thresholdInBytes >>> 32)); - - return result; - } -} diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java index 4a2811778aacb..720c84a8e2a86 100644 --- a/core/java/android/app/usage/NetworkStatsManager.java +++ b/core/java/android/app/usage/NetworkStatsManager.java @@ -240,18 +240,13 @@ public class NetworkStatsManager { * {@link java.lang.System#currentTimeMillis}. * @param uid UID of app * @param tag TAG of interest. Use {@link NetworkStats.Bucket#TAG_NONE} for no tags. - * @return Statistics object or null if permissions are insufficient or error happened during - * statistics collection. + * @return Statistics object or null if an error happened during statistics collection. + * @throws SecurityException if permissions are insufficient to read network statistics. */ public NetworkStats queryDetailsForUidTag(int networkType, String subscriberId, - long startTime, long endTime, int uid, int tag) { + long startTime, long endTime, int uid, int tag) throws SecurityException { NetworkTemplate template; - try { - template = createTemplate(networkType, subscriberId); - } catch (IllegalArgumentException e) { - if (DBG) Log.e(TAG, "Cannot create template", e); - return null; - } + template = createTemplate(networkType, subscriberId); NetworkStats result; try { @@ -303,17 +298,6 @@ public class NetworkStatsManager { return result; } - /** @removed */ - public void registerDataUsageCallback(DataUsagePolicy policy, DataUsageCallback callback, - @Nullable Handler handler) {} - - /** @removed */ - public void registerDataUsageCallback(DataUsagePolicy policy, UsageCallback callback, - @Nullable Handler handler) {} - - /** @removed */ - public void unregisterDataUsageCallback(DataUsageCallback callback) {} - /** * Registers to receive notifications about data usage on specified networks. * @@ -396,13 +380,6 @@ public class NetworkStatsManager { } } - /** @removed */ - public static abstract class DataUsageCallback { - /** @removed */ - @Deprecated - public void onLimitReached() {} - } - /** * Base class for usage callbacks. Should be extended by applications wanting notifications. */ diff --git a/services/core/java/com/android/server/net/NetworkStatsObservers.java b/services/core/java/com/android/server/net/NetworkStatsObservers.java index 230c2e95109e6..ea361700faf4e 100644 --- a/services/core/java/com/android/server/net/NetworkStatsObservers.java +++ b/services/core/java/com/android/server/net/NetworkStatsObservers.java @@ -190,11 +190,9 @@ class NetworkStatsObservers { private void handleUpdateStats(StatsContext statsContext) { if (mDataUsageRequests.size() == 0) { - if (LOGV) Slog.v(TAG, "No registered listeners of data usage"); return; } - if (LOGV) Slog.v(TAG, "Checking if any registered observer needs to be notified"); for (int i = 0; i < mDataUsageRequests.size(); i++) { RequestInfo requestInfo = mDataUsageRequests.valueAt(i); requestInfo.updateStats(statsContext); @@ -371,9 +369,6 @@ class NetworkStatsObservers { NetworkStats stats = mCollection.getSummary(template, Long.MIN_VALUE /* start */, Long.MAX_VALUE /* end */, mAccessLevel, mCallingUid); - if (LOGV) { - Slog.v(TAG, "Netstats for " + template + ": " + stats); - } return stats.getTotalBytes(); } } @@ -391,11 +386,6 @@ class NetworkStatsObservers { for (int i = 0; i < uidsToMonitor.length; i++) { long bytesSoFar = getTotalBytesForNetworkUid(mRequest.template, uidsToMonitor[i]); - - if (LOGV) { - Slog.v(TAG, bytesSoFar + " bytes so far since notification for " - + mRequest.template + " for uid=" + uidsToMonitor[i]); - } if (bytesSoFar > mRequest.thresholdInBytes) { return true; }