From 2e5303d31eaa4d128ba465e36f4a620e8657e08f Mon Sep 17 00:00:00 2001 From: Aidan Follestad Date: Mon, 1 Aug 2016 15:50:58 -0500 Subject: [PATCH] If there is no internet, app will wait until internet is connected to perform full checks. --- app/src/main/AndroidManifest.xml | 8 +++- .../{services => receivers}/BootReceiver.java | 2 +- .../receivers/ConnectivityReceiver.java | 24 +++++++++++ .../nocknock/services/CheckService.java | 41 +++++++++++-------- .../afollestad/nocknock/util/NetworkUtil.java | 18 ++++++++ 5 files changed, 75 insertions(+), 18 deletions(-) rename app/src/main/java/com/afollestad/nocknock/{services => receivers}/BootReceiver.java (95%) create mode 100644 app/src/main/java/com/afollestad/nocknock/receivers/ConnectivityReceiver.java create mode 100644 app/src/main/java/com/afollestad/nocknock/util/NetworkUtil.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c144c2b..c61cc1c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,12 +43,18 @@ android:enabled="true" android:label="Site Check Service" /> - + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/afollestad/nocknock/services/BootReceiver.java b/app/src/main/java/com/afollestad/nocknock/receivers/BootReceiver.java similarity index 95% rename from app/src/main/java/com/afollestad/nocknock/services/BootReceiver.java rename to app/src/main/java/com/afollestad/nocknock/receivers/BootReceiver.java index 82b45c9..a925ad9 100644 --- a/app/src/main/java/com/afollestad/nocknock/services/BootReceiver.java +++ b/app/src/main/java/com/afollestad/nocknock/receivers/BootReceiver.java @@ -1,4 +1,4 @@ -package com.afollestad.nocknock.services; +package com.afollestad.nocknock.receivers; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/app/src/main/java/com/afollestad/nocknock/receivers/ConnectivityReceiver.java b/app/src/main/java/com/afollestad/nocknock/receivers/ConnectivityReceiver.java new file mode 100644 index 0000000..7851035 --- /dev/null +++ b/app/src/main/java/com/afollestad/nocknock/receivers/ConnectivityReceiver.java @@ -0,0 +1,24 @@ +package com.afollestad.nocknock.receivers; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import com.afollestad.nocknock.services.CheckService; +import com.afollestad.nocknock.util.NetworkUtil; + +/** + * @author Aidan Follestad (afollestad) + */ +public class ConnectivityReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + final boolean hasInternet = NetworkUtil.hasInternet(context); + Log.v("ConnectivityReceiver", "Connectivity state changed... has internet? " + hasInternet); + if (hasInternet) + context.startService(new Intent(context, CheckService.class) + .putExtra(CheckService.ONLY_WAITING, true)); + } +} diff --git a/app/src/main/java/com/afollestad/nocknock/services/CheckService.java b/app/src/main/java/com/afollestad/nocknock/services/CheckService.java index 5a77a5b..34302c5 100644 --- a/app/src/main/java/com/afollestad/nocknock/services/CheckService.java +++ b/app/src/main/java/com/afollestad/nocknock/services/CheckService.java @@ -24,6 +24,7 @@ import com.afollestad.nocknock.api.ServerModel; import com.afollestad.nocknock.api.ServerStatus; import com.afollestad.nocknock.ui.MainActivity; import com.afollestad.nocknock.ui.ViewSiteActivity; +import com.afollestad.nocknock.util.NetworkUtil; import java.util.Locale; @@ -35,6 +36,7 @@ public class CheckService extends Service { public static String ACTION_CHECK_UPDATE = BuildConfig.APPLICATION_ID + ".CHECK_UPDATE"; public static String ACTION_RUNNING = BuildConfig.APPLICATION_ID + ".CHECK_RUNNING"; public static String MODEL_ID = "model_id"; + public static String ONLY_WAITING = "only_waiting"; public static int NOTI_ID = 3456; private static void LOG(String msg, Object... format) { @@ -157,8 +159,11 @@ public class CheckService extends Service { new Thread(() -> { final Query query = Inquiry.get() .selectFrom(MainActivity.SITES_TABLE_NAME, ServerModel.class); - if (intent != null && intent.hasExtra(MODEL_ID)) + if (intent != null && intent.hasExtra(MODEL_ID)) { query.where("_id = ?", intent.getLongExtra(MODEL_ID, -1)); + } else if (intent != null && intent.getBooleanExtra(ONLY_WAITING, false)) { + query.where("status = ?", ServerStatus.WAITING); + } final ServerModel[] sites = query.all(); if (sites == null || sites.length == 0) { @@ -177,23 +182,27 @@ public class CheckService extends Service { updateStatus(site); } - for (ServerModel site : sites) { - LOG("Checking %s (%s)...", site.name, site.url); - site.status = ServerStatus.CHECKING; - site.lastCheck = System.currentTimeMillis(); - updateStatus(site); + if (NetworkUtil.hasInternet(this)) { + for (ServerModel site : sites) { + LOG("Checking %s (%s)...", site.name, site.url); + site.status = ServerStatus.CHECKING; + site.lastCheck = System.currentTimeMillis(); + updateStatus(site); - try { - Bridge.get(site.url) - .throwIfNotSuccess() - .cancellable(false) - .request(); - site.reason = null; - site.status = ServerStatus.OK; - } catch (BridgeException e) { - processError(e, site); + try { + Bridge.get(site.url) + .throwIfNotSuccess() + .cancellable(false) + .request(); + site.reason = null; + site.status = ServerStatus.OK; + } catch (BridgeException e) { + processError(e, site); + } + updateStatus(site); } - updateStatus(site); + } else { + LOG("No internet connection, waiting."); } isRunning(false); diff --git a/app/src/main/java/com/afollestad/nocknock/util/NetworkUtil.java b/app/src/main/java/com/afollestad/nocknock/util/NetworkUtil.java new file mode 100644 index 0000000..3680f26 --- /dev/null +++ b/app/src/main/java/com/afollestad/nocknock/util/NetworkUtil.java @@ -0,0 +1,18 @@ +package com.afollestad.nocknock.util; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + +/** + * @author Aidan Follestad (afollestad) + */ +public class NetworkUtil { + + public static boolean hasInternet(Context context) { + final ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + final NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + return activeNetwork != null && + activeNetwork.isConnectedOrConnecting(); + } +} \ No newline at end of file