diff options
author | Jeff Sharkey <jsharkey@android.com> | 2017-07-12 10:59:43 -0600 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2017-07-14 11:45:03 -0600 |
commit | c442fbd95ad5b3de9e58a11e431f419edb4fe978 (patch) | |
tree | 4da61878939275317c2d7192af65a830f1dba09f | |
parent | 221afa48c953769209fca5fca6e8d38e216e3c92 (diff) | |
download | android_packages_providers_DownloadProvider-c442fbd95ad5b3de9e58a11e431f419edb4fe978.tar.gz android_packages_providers_DownloadProvider-c442fbd95ad5b3de9e58a11e431f419edb4fe978.tar.bz2 android_packages_providers_DownloadProvider-c442fbd95ad5b3de9e58a11e431f419edb4fe978.zip |
Follow removal of NetworkInfo metered flag.
The OS now completely relies on NET_CAPABILITY_NOT_METERED to avoid
confusion and staleness.
Bug: 63391323
Test: builds, boots, Wi-Fi policy is upgraded
Exempt-From-Owner-Approval: Bug 63673347
Change-Id: Iea83e0afd8cbd2be10d85b8a35c903047716b5b9
4 files changed, 19 insertions, 4 deletions
diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java index e101c74d..b9849569 100644 --- a/src/com/android/providers/downloads/DownloadThread.java +++ b/src/com/android/providers/downloads/DownloadThread.java @@ -47,7 +47,6 @@ import static java.net.HttpURLConnection.HTTP_PRECON_FAILED; import static java.net.HttpURLConnection.HTTP_SEE_OTHER; import static java.net.HttpURLConnection.HTTP_UNAVAILABLE; -import android.app.job.JobInfo; import android.app.job.JobParameters; import android.content.ContentValues; import android.content.Context; @@ -743,7 +742,8 @@ public class DownloadThread extends Thread { if (info.isRoaming() && !mInfo.isRoamingAllowed()) { throw new StopRequestException(STATUS_WAITING_FOR_NETWORK, "Network is roaming"); } - if (info.isMetered() && !mInfo.isMeteredAllowed(mInfoDelta.mTotalBytes)) { + if (mSystemFacade.isNetworkMetered(mNetwork) + && !mInfo.isMeteredAllowed(mInfoDelta.mTotalBytes)) { throw new StopRequestException(STATUS_WAITING_FOR_NETWORK, "Network is metered"); } } diff --git a/src/com/android/providers/downloads/RealSystemFacade.java b/src/com/android/providers/downloads/RealSystemFacade.java index df1d245f..1c2ba581 100644 --- a/src/com/android/providers/downloads/RealSystemFacade.java +++ b/src/com/android/providers/downloads/RealSystemFacade.java @@ -25,6 +25,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.net.ConnectivityManager; import android.net.Network; +import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.security.NetworkSecurityPolicy; import android.security.net.config.ApplicationConfig; @@ -61,6 +62,12 @@ class RealSystemFacade implements SystemFacade { } @Override + public boolean isNetworkMetered(Network network) { + return !mContext.getSystemService(ConnectivityManager.class).getNetworkCapabilities(network) + .hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); + } + + @Override public long getMaxBytesOverMobile() { final Long value = DownloadManager.getMaxBytesOverMobile(mContext); return (value == null) ? Long.MAX_VALUE : value; diff --git a/src/com/android/providers/downloads/SystemFacade.java b/src/com/android/providers/downloads/SystemFacade.java index c34317cb..53d14041 100644 --- a/src/com/android/providers/downloads/SystemFacade.java +++ b/src/com/android/providers/downloads/SystemFacade.java @@ -20,6 +20,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager.NameNotFoundException; import android.net.Network; +import android.net.NetworkCapabilities; import android.net.NetworkInfo; import java.security.GeneralSecurityException; @@ -35,6 +36,8 @@ interface SystemFacade { public NetworkInfo getNetworkInfo(Network network, int uid, boolean ignoreBlocked); + public boolean isNetworkMetered(Network network); + /** * @return maximum size, in bytes, of downloads that may go over a mobile connection; or null if * there's no limit diff --git a/tests/src/com/android/providers/downloads/FakeSystemFacade.java b/tests/src/com/android/providers/downloads/FakeSystemFacade.java index b6b800a2..de483c7f 100644 --- a/tests/src/com/android/providers/downloads/FakeSystemFacade.java +++ b/tests/src/com/android/providers/downloads/FakeSystemFacade.java @@ -1,6 +1,6 @@ package com.android.providers.downloads; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -21,6 +21,7 @@ import java.net.URLConnection; import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.List; + import javax.net.ssl.SSLContext; public class FakeSystemFacade implements SystemFacade { @@ -91,12 +92,16 @@ public class FakeSystemFacade implements SystemFacade { final NetworkInfo info = new NetworkInfo(mActiveNetworkType, 0, null, null); info.setDetailedState(DetailedState.CONNECTED, null, null); info.setRoaming(mIsRoaming); - info.setMetered(mIsMetered); return info; } } @Override + public boolean isNetworkMetered(Network network) { + return mIsMetered; + } + + @Override public long getMaxBytesOverMobile() { return mMaxBytesOverMobile; } |