diff options
author | Jeff Sharkey <jsharkey@android.com> | 2012-04-17 12:23:40 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2012-04-18 10:12:09 -0700 |
commit | 15ec7d6d7f23ec197a88619b5e03320cfebd2240 (patch) | |
tree | 7451becce140741cc122da92f5d1443f89125cb7 | |
parent | 70544533aec6b318ff1687c9eec0cb9e86ce1b1a (diff) | |
download | frameworks_base-15ec7d6d7f23ec197a88619b5e03320cfebd2240.zip frameworks_base-15ec7d6d7f23ec197a88619b5e03320cfebd2240.tar.gz frameworks_base-15ec7d6d7f23ec197a88619b5e03320cfebd2240.tar.bz2 |
Add ALLOW_METERED column to DownloadManager.
Also allow isActiveNetworkMetered() to inspect networks without
requiring ACCESS_WIFI_STATE.
Bug: 3001465
Change-Id: Ibc23577d4ad941e4f93db417be6b046881dcbfb1
-rw-r--r-- | core/java/android/app/DownloadManager.java | 31 | ||||
-rw-r--r-- | core/java/android/provider/Downloads.java | 19 | ||||
-rw-r--r-- | services/java/com/android/server/ConnectivityService.java | 36 |
3 files changed, 53 insertions, 33 deletions
diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index 55f29e6..0713127 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -347,9 +347,9 @@ public class DownloadManager { private CharSequence mTitle; private CharSequence mDescription; private String mMimeType; - private boolean mRoamingAllowed = true; private int mAllowedNetworkTypes = ~0; // default to all network types allowed - private boolean mAllowedOverMetered = true; + private boolean mRoamingAllowed = true; + private boolean mMeteredAllowed = true; private boolean mIsVisibleInDownloadsUi = true; private boolean mScannable = false; private boolean mUseSystemCache = false; @@ -624,17 +624,6 @@ public class DownloadManager { } /** - * Set whether this download may proceed over a metered network - * connection. By default, metered networks are allowed. - * - * @see ConnectivityManager#isActiveNetworkMetered() - */ - public Request setAllowedOverMetered(boolean allow) { - mAllowedOverMetered = allow; - return this; - } - - /** * Set whether this download may proceed over a roaming connection. By default, roaming is * allowed. * @param allowed whether to allow a roaming connection to be used @@ -646,6 +635,17 @@ public class DownloadManager { } /** + * Set whether this download may proceed over a metered network + * connection. By default, metered networks are allowed. + * + * @see ConnectivityManager#isActiveNetworkMetered() + */ + public Request setAllowedOverMetered(boolean allow) { + mMeteredAllowed = allow; + return this; + } + + /** * Set whether this download should be displayed in the system's Downloads UI. True by * default. * @param isVisible whether to display this download in the Downloads UI @@ -687,10 +687,10 @@ public class DownloadManager { putIfNonNull(values, Downloads.Impl.COLUMN_DESCRIPTION, mDescription); putIfNonNull(values, Downloads.Impl.COLUMN_MIME_TYPE, mMimeType); - // TODO: add COLUMN_ALLOW_METERED and persist values.put(Downloads.Impl.COLUMN_VISIBILITY, mNotificationVisibility); values.put(Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES, mAllowedNetworkTypes); values.put(Downloads.Impl.COLUMN_ALLOW_ROAMING, mRoamingAllowed); + values.put(Downloads.Impl.COLUMN_ALLOW_METERED, mMeteredAllowed); values.put(Downloads.Impl.COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI, mIsVisibleInDownloadsUi); return values; @@ -1340,9 +1340,6 @@ 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; } diff --git a/core/java/android/provider/Downloads.java b/core/java/android/provider/Downloads.java index cd8d51f..31ad12b 100644 --- a/core/java/android/provider/Downloads.java +++ b/core/java/android/provider/Downloads.java @@ -329,6 +329,14 @@ public final class Downloads { public static final String COLUMN_IS_PUBLIC_API = "is_public_api"; /** + * The name of the column holding a bitmask of allowed network types. This is only used for + * public API downloads. + * <P>Type: INTEGER</P> + * <P>Owner can Init/Read</P> + */ + public static final String COLUMN_ALLOWED_NETWORK_TYPES = "allowed_network_types"; + + /** * The name of the column indicating whether roaming connections can be used. This is only * used for public API downloads. * <P>Type: BOOLEAN</P> @@ -337,12 +345,12 @@ public final class Downloads { public static final String COLUMN_ALLOW_ROAMING = "allow_roaming"; /** - * The name of the column holding a bitmask of allowed network types. This is only used for - * public API downloads. - * <P>Type: INTEGER</P> + * The name of the column indicating whether metered connections can be used. This is only + * used for public API downloads. + * <P>Type: BOOLEAN</P> * <P>Owner can Init/Read</P> */ - public static final String COLUMN_ALLOWED_NETWORK_TYPES = "allowed_network_types"; + public static final String COLUMN_ALLOW_METERED = "allow_metered"; /** * Whether or not this download should be displayed in the system's Downloads UI. Defaults @@ -701,7 +709,10 @@ public final class Downloads { * blocked by {@link NetworkPolicyManager}. * * @hide + * @deprecated since behavior now uses + * {@link #STATUS_WAITING_FOR_NETWORK} */ + @Deprecated public static final int STATUS_BLOCKED = 498; /** {@hide} */ diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 359074a..722e312 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -865,27 +865,39 @@ private NetworkStateTracker makeWimaxStateTracker() { @Override public NetworkQuotaInfo getActiveNetworkQuotaInfo() { enforceAccessPermission(); - final NetworkState state = getNetworkStateUnchecked(mActiveDefaultNetwork); - if (state != null) { - try { - return mPolicyManager.getNetworkQuotaInfo(state); - } catch (RemoteException e) { + + final long token = Binder.clearCallingIdentity(); + try { + final NetworkState state = getNetworkStateUnchecked(mActiveDefaultNetwork); + if (state != null) { + try { + return mPolicyManager.getNetworkQuotaInfo(state); + } catch (RemoteException e) { + } } + return null; + } finally { + Binder.restoreCallingIdentity(token); } - return null; } @Override public boolean isActiveNetworkMetered() { enforceAccessPermission(); - final NetworkState state = getNetworkStateUnchecked(mActiveDefaultNetwork); - if (state != null) { - try { - return mPolicyManager.isNetworkMetered(state); - } catch (RemoteException e) { + + final long token = Binder.clearCallingIdentity(); + try { + final NetworkState state = getNetworkStateUnchecked(mActiveDefaultNetwork); + if (state != null) { + try { + return mPolicyManager.isNetworkMetered(state); + } catch (RemoteException e) { + } } + return false; + } finally { + Binder.restoreCallingIdentity(token); } - return false; } public boolean setRadios(boolean turnOn) { |