diff options
author | Steve Howard <showard@google.com> | 2010-07-19 11:03:17 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-07-19 11:03:17 -0700 |
commit | 74e3e793cf01755d4b220b3e8b966d40eaacca7e (patch) | |
tree | ac817b7b3363a32a711b37482033c8d135b90d63 /src | |
parent | 89fb824c42c8ee1686439dab4ca42a69b19624f0 (diff) | |
parent | c45c8eb1f9e8d93a02a7af2621a8fbcea1b2f6a7 (diff) | |
download | android_packages_providers_DownloadProvider-74e3e793cf01755d4b220b3e8b966d40eaacca7e.tar.gz android_packages_providers_DownloadProvider-74e3e793cf01755d4b220b3e8b966d40eaacca7e.tar.bz2 android_packages_providers_DownloadProvider-74e3e793cf01755d4b220b3e8b966d40eaacca7e.zip |
am c45c8eb1: am 1aa26989: Merge "Introduce a seam to ConnectivityManager and TelephonyManager" into gingerbread
Merge commit 'c45c8eb1f9e8d93a02a7af2621a8fbcea1b2f6a7'
* commit 'c45c8eb1f9e8d93a02a7af2621a8fbcea1b2f6a7':
Introduce a seam to ConnectivityManager and TelephonyManager
Diffstat (limited to 'src')
7 files changed, 99 insertions, 64 deletions
diff --git a/src/com/android/providers/downloads/DownloadProvider.java b/src/com/android/providers/downloads/DownloadProvider.java index 698ec259..d3e6072b 100644 --- a/src/com/android/providers/downloads/DownloadProvider.java +++ b/src/com/android/providers/downloads/DownloadProvider.java @@ -247,7 +247,7 @@ public final class DownloadProvider extends ContentProvider { @Override public boolean onCreate() { if (mSystemFacade == null) { - mSystemFacade = new RealSystemFacade(); + mSystemFacade = new RealSystemFacade(getContext()); } mOpenHelper = new DatabaseHelper(getContext()); diff --git a/src/com/android/providers/downloads/DownloadReceiver.java b/src/com/android/providers/downloads/DownloadReceiver.java index e8f10e7d..0b4a12da 100644 --- a/src/com/android/providers/downloads/DownloadReceiver.java +++ b/src/com/android/providers/downloads/DownloadReceiver.java @@ -38,7 +38,13 @@ import java.io.File; */ public class DownloadReceiver extends BroadcastReceiver { + SystemFacade mSystemFacade = null; + public void onReceive(Context context, Intent intent) { + if (mSystemFacade == null) { + mSystemFacade = new RealSystemFacade(context); + } + if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { if (Constants.LOGVV) { Log.v(Constants.TAG, "Receiver onBoot"); @@ -52,7 +58,7 @@ public class DownloadReceiver extends BroadcastReceiver { intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); if (info != null && info.isConnected()) { if (Constants.LOGX) { - if (Helpers.isNetworkAvailable(context)) { + if (Helpers.isNetworkAvailable(mSystemFacade)) { Log.i(Constants.TAG, "Broadcast: Network Up"); } else { Log.i(Constants.TAG, "Broadcast: Network Up, Actually Down"); @@ -61,7 +67,7 @@ public class DownloadReceiver extends BroadcastReceiver { context.startService(new Intent(context, DownloadService.class)); } else { if (Constants.LOGX) { - if (Helpers.isNetworkAvailable(context)) { + if (Helpers.isNetworkAvailable(mSystemFacade)) { Log.i(Constants.TAG, "Broadcast: Network Down, Actually Up"); } else { Log.i(Constants.TAG, "Broadcast: Network Down"); diff --git a/src/com/android/providers/downloads/DownloadService.java b/src/com/android/providers/downloads/DownloadService.java index 2e713fbf..b5cb2d45 100644 --- a/src/com/android/providers/downloads/DownloadService.java +++ b/src/com/android/providers/downloads/DownloadService.java @@ -16,9 +16,6 @@ package com.android.providers.downloads; -import com.google.android.collect.Lists; -import com.google.common.annotations.VisibleForTesting; - import android.app.AlarmManager; import android.app.PendingIntent; import android.app.Service; @@ -45,11 +42,13 @@ import android.provider.Downloads; import android.util.Config; import android.util.Log; +import com.google.android.collect.Lists; +import com.google.common.annotations.VisibleForTesting; + import java.io.File; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; -import java.util.List; /** @@ -205,7 +204,7 @@ public class DownloadService extends Service { } if (mSystemFacade == null) { - mSystemFacade = new RealSystemFacade(); + mSystemFacade = new RealSystemFacade(this); } mDownloads = Lists.newArrayList(); @@ -311,8 +310,8 @@ public class DownloadService extends Service { } mPendingUpdate = false; } - boolean networkAvailable = Helpers.isNetworkAvailable(DownloadService.this); - boolean networkRoaming = Helpers.isNetworkRoaming(DownloadService.this); + boolean networkAvailable = Helpers.isNetworkAvailable(mSystemFacade); + boolean networkRoaming = Helpers.isNetworkRoaming(mSystemFacade); long now = mSystemFacade.currentTimeMillis(); Cursor cursor = getContentResolver().query(Downloads.Impl.CONTENT_URI, diff --git a/src/com/android/providers/downloads/DownloadThread.java b/src/com/android/providers/downloads/DownloadThread.java index c488c0cd..44e7962a 100644 --- a/src/com/android/providers/downloads/DownloadThread.java +++ b/src/com/android/providers/downloads/DownloadThread.java @@ -218,13 +218,13 @@ http_request_loop: break http_request_loop; } catch (IOException ex) { if (Constants.LOGX) { - if (Helpers.isNetworkAvailable(mContext)) { + if (Helpers.isNetworkAvailable(mSystemFacade)) { Log.i(Constants.TAG, "Execute Failed " + mInfo.mId + ", Net Up"); } else { Log.i(Constants.TAG, "Execute Failed " + mInfo.mId + ", Net Down"); } } - if (!Helpers.isNetworkAvailable(mContext)) { + if (!Helpers.isNetworkAvailable(mSystemFacade)) { finalStatus = Downloads.Impl.STATUS_RUNNING_PAUSED; } else if (mInfo.mNumFailed < Constants.MAX_RETRIES) { finalStatus = Downloads.Impl.STATUS_RUNNING_PAUSED; @@ -453,13 +453,13 @@ http_request_loop: entityStream = response.getEntity().getContent(); } catch (IOException ex) { if (Constants.LOGX) { - if (Helpers.isNetworkAvailable(mContext)) { + if (Helpers.isNetworkAvailable(mSystemFacade)) { Log.i(Constants.TAG, "Get Failed " + mInfo.mId + ", Net Up"); } else { Log.i(Constants.TAG, "Get Failed " + mInfo.mId + ", Net Down"); } } - if (!Helpers.isNetworkAvailable(mContext)) { + if (!Helpers.isNetworkAvailable(mSystemFacade)) { finalStatus = Downloads.Impl.STATUS_RUNNING_PAUSED; } else if (mInfo.mNumFailed < Constants.MAX_RETRIES) { finalStatus = Downloads.Impl.STATUS_RUNNING_PAUSED; @@ -486,7 +486,7 @@ http_request_loop: bytesRead = entityStream.read(data); } catch (IOException ex) { if (Constants.LOGX) { - if (Helpers.isNetworkAvailable(mContext)) { + if (Helpers.isNetworkAvailable(mSystemFacade)) { Log.i(Constants.TAG, "Read Failed " + mInfo.mId + ", Net Up"); } else { Log.i(Constants.TAG, "Read Failed " + mInfo.mId + ", Net Down"); @@ -508,7 +508,7 @@ http_request_loop: "can't resume interrupted download with no ETag"); } finalStatus = Downloads.Impl.STATUS_PRECONDITION_FAILED; - } else if (!Helpers.isNetworkAvailable(mContext)) { + } else if (!Helpers.isNetworkAvailable(mSystemFacade)) { finalStatus = Downloads.Impl.STATUS_RUNNING_PAUSED; } else if (mInfo.mNumFailed < Constants.MAX_RETRIES) { finalStatus = Downloads.Impl.STATUS_RUNNING_PAUSED; @@ -545,7 +545,7 @@ http_request_loop: mInfo.mId); } finalStatus = Downloads.Impl.STATUS_LENGTH_REQUIRED; - } else if (!Helpers.isNetworkAvailable(mContext)) { + } else if (!Helpers.isNetworkAvailable(mSystemFacade)) { finalStatus = Downloads.Impl.STATUS_RUNNING_PAUSED; } else if (mInfo.mNumFailed < Constants.MAX_RETRIES) { finalStatus = Downloads.Impl.STATUS_RUNNING_PAUSED; diff --git a/src/com/android/providers/downloads/Helpers.java b/src/com/android/providers/downloads/Helpers.java index 2705a7cb..4a0f860b 100644 --- a/src/com/android/providers/downloads/Helpers.java +++ b/src/com/android/providers/downloads/Helpers.java @@ -514,58 +514,15 @@ public class Helpers { /** * Returns whether the network is available */ - public static boolean isNetworkAvailable(Context context) { - ConnectivityManager connectivity = - (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - if (connectivity == null) { - Log.w(Constants.TAG, "couldn't get connectivity manager"); - } else { - NetworkInfo[] info = connectivity.getAllNetworkInfo(); - if (info != null) { - for (int i = 0; i < info.length; i++) { - if (info[i].getState() == NetworkInfo.State.CONNECTED) { - if (Constants.LOGVV) { - Log.v(Constants.TAG, "network is available"); - } - return true; - } - } - } - } - if (Constants.LOGVV) { - Log.v(Constants.TAG, "network is not available"); - } - return false; + public static boolean isNetworkAvailable(SystemFacade system) { + return !system.getConnectedNetworkTypes().isEmpty(); } /** * Returns whether the network is roaming */ - public static boolean isNetworkRoaming(Context context) { - ConnectivityManager connectivity = - (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - if (connectivity == null) { - Log.w(Constants.TAG, "couldn't get connectivity manager"); - } else { - NetworkInfo info = connectivity.getActiveNetworkInfo(); - if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) { - if (TelephonyManager.getDefault().isNetworkRoaming()) { - if (Constants.LOGVV) { - Log.v(Constants.TAG, "network is roaming"); - } - return true; - } else { - if (Constants.LOGVV) { - Log.v(Constants.TAG, "network is not roaming"); - } - } - } else { - if (Constants.LOGVV) { - Log.v(Constants.TAG, "not using mobile network"); - } - } - } - return false; + public static boolean isNetworkRoaming(SystemFacade system) { + return system.isNetworkRoaming(); } /** diff --git a/src/com/android/providers/downloads/RealSystemFacade.java b/src/com/android/providers/downloads/RealSystemFacade.java index 88f10d8c..41ca6b6e 100644 --- a/src/com/android/providers/downloads/RealSystemFacade.java +++ b/src/com/android/providers/downloads/RealSystemFacade.java @@ -1,7 +1,65 @@ package com.android.providers.downloads; +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.telephony.TelephonyManager; +import android.util.Log; + +import java.util.BitSet; + class RealSystemFacade implements SystemFacade { + private Context mContext; + + public RealSystemFacade(Context context) { + mContext = context; + } + public long currentTimeMillis() { return System.currentTimeMillis(); } + + public BitSet getConnectedNetworkTypes() { + BitSet connectedTypes = new BitSet(); + + ConnectivityManager connectivity = + (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivity == null) { + Log.w(Constants.TAG, "couldn't get connectivity manager"); + return connectedTypes; + } + + NetworkInfo[] infos = connectivity.getAllNetworkInfo(); + if (infos != null) { + for (NetworkInfo info : infos) { + if (info.getState() == NetworkInfo.State.CONNECTED) { + connectedTypes.set(info.getType()); + } + } + } + + if (Constants.LOGVV) { + boolean isConnected = !connectedTypes.isEmpty(); + Log.v(Constants.TAG, "network is " + (isConnected ? "" : "not ") + "available"); + } + return connectedTypes; + } + + public boolean isNetworkRoaming() { + ConnectivityManager connectivity = + (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivity == null) { + Log.w(Constants.TAG, "couldn't get connectivity manager"); + return false; + } + + NetworkInfo info = connectivity.getActiveNetworkInfo(); + boolean isMobile = (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE); + boolean isRoaming = isMobile && TelephonyManager.getDefault().isNetworkRoaming(); + if (Constants.LOGVV) { + Log.v(Constants.TAG, "network is mobile: " + isMobile); + Log.v(Constants.TAG, "network is roaming: " + isRoaming); + } + return isMobile && isRoaming; + } } diff --git a/src/com/android/providers/downloads/SystemFacade.java b/src/com/android/providers/downloads/SystemFacade.java index 4498877d..e16e6a06 100644 --- a/src/com/android/providers/downloads/SystemFacade.java +++ b/src/com/android/providers/downloads/SystemFacade.java @@ -1,6 +1,21 @@ package com.android.providers.downloads; +import java.util.BitSet; + interface SystemFacade { + /** + * @see System#currentTimeMillis() + */ public long currentTimeMillis(); + + /** + * @return Network types (as in ConnectivityManager.TYPE_*) of all connected networks. + */ + public BitSet getConnectedNetworkTypes(); + + /** + * @see android.telephony.TelephonyManager#isNetworkRoaming + */ + public boolean isNetworkRoaming(); } |