diff options
author | Jeff Sharkey <jsharkey@android.com> | 2012-04-17 12:26:06 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2012-04-17 12:28:25 -0700 |
commit | a7ae77fdae69bcc6d6609d4639fed5d96e55eeaa (patch) | |
tree | 5021a8ffe6ceadb1e39fba775caccf5d18c1d22c /src | |
parent | 9b606340a0b5b88436505651dbe3cdaf60117604 (diff) | |
download | android_packages_providers_DownloadProvider-a7ae77fdae69bcc6d6609d4639fed5d96e55eeaa.tar.gz android_packages_providers_DownloadProvider-a7ae77fdae69bcc6d6609d4639fed5d96e55eeaa.tar.bz2 android_packages_providers_DownloadProvider-a7ae77fdae69bcc6d6609d4639fed5d96e55eeaa.zip |
Add and enforce ALLOW_METERED column.
Include flag with each download to indicate if its allowed to proceed
over metered networks. Downloads are left in WAITING_FOR_NETWORK
state, similar to how ALLOWED_NETWORK_TYPES is handled.
Also keep blocked downloads in WAITING_FOR_NETWORK state instead
of marking them as failed.
Bug: 3001465, 5734560
Change-Id: I80bb9aa9bd25ddf6f7a2472db344b6ba6878bd74
Diffstat (limited to 'src')
5 files changed, 22 insertions, 5 deletions
diff --git a/src/com/android/providers/downloads/DownloadInfo.java b/src/com/android/providers/downloads/DownloadInfo.java index 1e670e12..28adfbdf 100644 --- a/src/com/android/providers/downloads/DownloadInfo.java +++ b/src/com/android/providers/downloads/DownloadInfo.java @@ -92,6 +92,7 @@ public class DownloadInfo { info.mIsPublicApi = getInt(Downloads.Impl.COLUMN_IS_PUBLIC_API) != 0; info.mAllowedNetworkTypes = getInt(Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES); info.mAllowRoaming = getInt(Downloads.Impl.COLUMN_ALLOW_ROAMING) != 0; + info.mAllowMetered = getInt(Downloads.Impl.COLUMN_ALLOW_METERED) != 0; info.mTitle = getString(Downloads.Impl.COLUMN_TITLE); info.mDescription = getString(Downloads.Impl.COLUMN_DESCRIPTION); info.mBypassRecommendedSizeLimit = @@ -221,6 +222,7 @@ public class DownloadInfo { public boolean mIsPublicApi; public int mAllowedNetworkTypes; public boolean mAllowRoaming; + public boolean mAllowMetered; public String mTitle; public String mDescription; public int mBypassRecommendedSizeLimit; @@ -352,6 +354,9 @@ public class DownloadInfo { if (!isRoamingAllowed() && mSystemFacade.isNetworkRoaming()) { return NETWORK_CANNOT_USE_ROAMING; } + if (!mAllowMetered && mSystemFacade.isActiveNetworkMetered()) { + return NETWORK_TYPE_DISALLOWED_BY_REQUESTOR; + } return checkIsNetworkTypeAllowed(info.getType()); } @@ -518,6 +523,7 @@ public class DownloadInfo { pw.printPair("mAllowedNetworkTypes", mAllowedNetworkTypes); pw.printPair("mAllowRoaming", mAllowRoaming); + pw.printPair("mAllowMetered", mAllowMetered); pw.println(); pw.decreaseIndent(); diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java index 4a3844f9..5fbe42a5 100644 --- a/src/com/android/providers/downloads/DownloadProvider.java +++ b/src/com/android/providers/downloads/DownloadProvider.java @@ -63,7 +63,7 @@ public final class DownloadProvider extends ContentProvider { /** Database filename */ private static final String DB_NAME = "downloads.db"; /** Current database version */ - private static final int DB_VERSION = 107; + private static final int DB_VERSION = 108; /** Name of table in the database */ private static final String DB_TABLE = "downloads"; @@ -308,6 +308,11 @@ public final class DownloadProvider extends ContentProvider { addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_ERROR_MSG, "TEXT"); break; + case 108: + addColumn(db, DB_TABLE, Downloads.Impl.COLUMN_ALLOW_METERED, + "INTEGER NOT NULL DEFAULT 1"); + break; + default: throw new IllegalStateException("Don't know how to upgrade to " + version); } @@ -632,6 +637,7 @@ public final class DownloadProvider extends ContentProvider { if (isPublicApi) { copyInteger(Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES, values, filteredValues); copyBoolean(Downloads.Impl.COLUMN_ALLOW_ROAMING, values, filteredValues); + copyBoolean(Downloads.Impl.COLUMN_ALLOW_METERED, values, filteredValues); } if (Constants.LOGVV) { @@ -767,6 +773,7 @@ public final class DownloadProvider extends ContentProvider { values.remove(Downloads.Impl.COLUMN_NOTIFICATION_PACKAGE); // checked later in insert() values.remove(Downloads.Impl.COLUMN_ALLOWED_NETWORK_TYPES); values.remove(Downloads.Impl.COLUMN_ALLOW_ROAMING); + values.remove(Downloads.Impl.COLUMN_ALLOW_METERED); values.remove(Downloads.Impl.COLUMN_IS_VISIBLE_IN_DOWNLOADS_UI); values.remove(Downloads.Impl.COLUMN_MEDIA_SCANNED); Iterator<Map.Entry<String, Object>> iterator = values.valueSet().iterator(); diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java index 7108cec3..4de5134b 100644 --- a/src/com/android/providers/downloads/DownloadThread.java +++ b/src/com/android/providers/downloads/DownloadThread.java @@ -270,8 +270,6 @@ public class DownloadThread extends Thread { } else if (networkUsable == DownloadInfo.NETWORK_RECOMMENDED_UNUSABLE_DUE_TO_SIZE) { status = Downloads.Impl.STATUS_QUEUED_FOR_WIFI; mInfo.notifyPauseDueToSize(false); - } else if (networkUsable == DownloadInfo.NETWORK_BLOCKED) { - status = Downloads.Impl.STATUS_BLOCKED; } throw new StopRequestException(status, mInfo.getLogMessageForNetworkError(networkUsable)); @@ -806,8 +804,6 @@ public class DownloadThread extends Thread { case DownloadInfo.NETWORK_UNUSABLE_DUE_TO_SIZE: case DownloadInfo.NETWORK_RECOMMENDED_UNUSABLE_DUE_TO_SIZE: return Downloads.Impl.STATUS_QUEUED_FOR_WIFI; - case DownloadInfo.NETWORK_BLOCKED: - return Downloads.Impl.STATUS_BLOCKED; default: return Downloads.Impl.STATUS_WAITING_FOR_NETWORK; } diff --git a/src/com/android/providers/downloads/RealSystemFacade.java b/src/com/android/providers/downloads/RealSystemFacade.java index f2423d47..6580f909 100644 --- a/src/com/android/providers/downloads/RealSystemFacade.java +++ b/src/com/android/providers/downloads/RealSystemFacade.java @@ -42,6 +42,12 @@ class RealSystemFacade implements SystemFacade { return activeInfo; } + @Override + public boolean isActiveNetworkMetered() { + final ConnectivityManager conn = ConnectivityManager.from(mContext); + return conn.isActiveNetworkMetered(); + } + public boolean isNetworkRoaming() { ConnectivityManager connectivity = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); diff --git a/src/com/android/providers/downloads/SystemFacade.java b/src/com/android/providers/downloads/SystemFacade.java index a1e4098c..d1439354 100644 --- a/src/com/android/providers/downloads/SystemFacade.java +++ b/src/com/android/providers/downloads/SystemFacade.java @@ -19,6 +19,8 @@ interface SystemFacade { */ public NetworkInfo getActiveNetworkInfo(int uid); + public boolean isActiveNetworkMetered(); + /** * @see android.telephony.TelephonyManager#isNetworkRoaming */ |