summaryrefslogtreecommitdiffstats
path: root/src/com/android/providers
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/providers')
-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();
}