diff options
author | Robin Lee <rgl@google.com> | 2016-04-07 16:43:13 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-04-07 16:43:15 +0000 |
commit | f4837c7cf730eb08fdd3596169fa383e0b8c6293 (patch) | |
tree | 3f79dd14d5be423a795f9b23f85e7339d6a75e92 /src/com/android/providers | |
parent | 5b7e8d4ada2b10f4e0d0cec6a6b3dd5ad4553161 (diff) | |
parent | 26c68db9ccf1983f5d6e8a734f8ffccea3849f10 (diff) | |
download | android_packages_providers_DownloadProvider-f4837c7cf730eb08fdd3596169fa383e0b8c6293.tar.gz android_packages_providers_DownloadProvider-f4837c7cf730eb08fdd3596169fa383e0b8c6293.tar.bz2 android_packages_providers_DownloadProvider-f4837c7cf730eb08fdd3596169fa383e0b8c6293.zip |
Merge "Implement multi-network downloads" into nyc-dev
Diffstat (limited to 'src/com/android/providers')
3 files changed, 20 insertions, 1 deletions
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java index 65142db6..8d51909e 100644 --- a/src/com/android/providers/downloads/DownloadThread.java +++ b/src/com/android/providers/downloads/DownloadThread.java @@ -45,6 +45,7 @@ import android.drm.DrmManagerClient; import android.drm.DrmOutputStream; import android.net.ConnectivityManager; import android.net.INetworkPolicyListener; +import android.net.Network; import android.net.NetworkInfo; import android.net.NetworkPolicyManager; import android.net.TrafficStats; @@ -351,6 +352,13 @@ public class DownloadThread implements Runnable { throw new StopRequestException(STATUS_BAD_REQUEST, e); } + final Network network = mSystemFacade.getActiveNetwork(mInfo.mUid); + if (network == null) { + throw new StopRequestException(Downloads.Impl.STATUS_WAITING_FOR_NETWORK, + "no network associated with requesting UID"); + } + logDebug("Using network: " + network); + boolean cleartextTrafficPermitted = mSystemFacade.isCleartextTrafficPermitted(mInfo.mUid); int redirectionCount = 0; while (redirectionCount++ < Constants.MAX_REDIRECTS) { @@ -367,7 +375,7 @@ public class DownloadThread implements Runnable { HttpURLConnection conn = null; try { checkConnectivity(); - conn = (HttpURLConnection) url.openConnection(); + conn = (HttpURLConnection) network.openConnection(url); conn.setInstanceFollowRedirects(false); conn.setConnectTimeout(DEFAULT_TIMEOUT); conn.setReadTimeout(DEFAULT_TIMEOUT); diff --git a/src/com/android/providers/downloads/RealSystemFacade.java b/src/com/android/providers/downloads/RealSystemFacade.java index b3f170fb..48df2a09 100644 --- a/src/com/android/providers/downloads/RealSystemFacade.java +++ b/src/com/android/providers/downloads/RealSystemFacade.java @@ -26,6 +26,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.net.ConnectivityManager; +import android.net.Network; import android.net.NetworkInfo; import android.telephony.TelephonyManager; import android.util.Log; @@ -59,6 +60,13 @@ class RealSystemFacade implements SystemFacade { } @Override + public Network getActiveNetwork(int uid) { + ConnectivityManager connectivity = + (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + return connectivity.getActiveNetworkForUid(uid); + } + + @Override public boolean isActiveNetworkMetered() { final ConnectivityManager conn = ConnectivityManager.from(mContext); return conn.isActiveNetworkMetered(); diff --git a/src/com/android/providers/downloads/SystemFacade.java b/src/com/android/providers/downloads/SystemFacade.java index 83fc7a63..7f97b919 100644 --- a/src/com/android/providers/downloads/SystemFacade.java +++ b/src/com/android/providers/downloads/SystemFacade.java @@ -18,6 +18,7 @@ package com.android.providers.downloads; import android.content.Intent; import android.content.pm.PackageManager.NameNotFoundException; +import android.net.Network; import android.net.NetworkInfo; interface SystemFacade { @@ -32,6 +33,8 @@ interface SystemFacade { */ public NetworkInfo getActiveNetworkInfo(int uid); + public Network getActiveNetwork(int uid); + public boolean isActiveNetworkMetered(); /** |