summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSteve Howard <showard@google.com>2010-07-15 15:57:31 -0700
committerSteve Howard <showard@google.com>2010-07-15 16:22:52 -0700
commitaf28400b74de05862b470412a5c92f68e99f59f8 (patch)
tree9bed7e915f12354803cba98c51d81cac82c94e9a /src
parent88ea0b39bb74c7f8204ba74d3e83bce440a59d88 (diff)
downloadandroid_packages_providers_DownloadProvider-af28400b74de05862b470412a5c92f68e99f59f8.tar.gz
android_packages_providers_DownloadProvider-af28400b74de05862b470412a5c92f68e99f59f8.tar.bz2
android_packages_providers_DownloadProvider-af28400b74de05862b470412a5c92f68e99f59f8.zip
Introduce a seam to ConnectivityManager and TelephonyManager
This change abstracts access to ConnectivityManager and TelephonyManager behind methods on SystemFacade, moving the code from Helpers into RealSystemFacade and adding fake implementations to FakeSystemFacade. This facilitates new connectivity tests. Change-Id: Id6c6b861e1d4ca45b3c1572bfb8ae0aa26af756b
Diffstat (limited to 'src')
-rw-r--r--src/com/android/providers/downloads/DownloadProvider.java2
-rw-r--r--src/com/android/providers/downloads/DownloadReceiver.java10
-rw-r--r--src/com/android/providers/downloads/DownloadService.java13
-rw-r--r--src/com/android/providers/downloads/DownloadThread.java14
-rw-r--r--src/com/android/providers/downloads/Helpers.java51
-rw-r--r--src/com/android/providers/downloads/RealSystemFacade.java58
-rw-r--r--src/com/android/providers/downloads/SystemFacade.java15
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 186b01f1..4007e761 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 8188eaae..e7763e4e 100644
--- a/src/com/android/providers/downloads/DownloadThread.java
+++ b/src/com/android/providers/downloads/DownloadThread.java
@@ -211,13 +211,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;
@@ -446,13 +446,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;
@@ -479,7 +479,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");
@@ -501,7 +501,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;
@@ -538,7 +538,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();
}