diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 98d1f74..8c34898 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -31,6 +31,7 @@
android:xlargeScreens="true" />
+
@@ -315,6 +316,12 @@
android:name="com.farmerbb.secondscreen.service.TurnOffService"
android:exported="true" >
+
+
+
+
+
diff --git a/app/src/main/java/com/farmerbb/secondscreen/receiver/TaskerConditionReceiver.java b/app/src/main/java/com/farmerbb/secondscreen/receiver/TaskerConditionReceiver.java
index 759ce1a..ebdabba 100644
--- a/app/src/main/java/com/farmerbb/secondscreen/receiver/TaskerConditionReceiver.java
+++ b/app/src/main/java/com/farmerbb/secondscreen/receiver/TaskerConditionReceiver.java
@@ -28,18 +28,25 @@
// Receiver run by Tasker periodically to check the state of currently active profiles, whenever
// a SecondScreen state is included as a condition in a Tasker profile.
public final class TaskerConditionReceiver extends BroadcastReceiver {
+ Bundle lastbundle = null;
+
+
@SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent) {
if(U.isExternalAccessDisabled(context)) return;
+ if (lastbundle.equals(intent.getBundleExtra(com.twofortyfouram.locale.api.Intent.EXTRA_BUNDLE))) {
+ return;
+ }
+ updateValues(intent);
+
BundleScrubber.scrub(intent);
- final Bundle bundle = intent.getBundleExtra(com.twofortyfouram.locale.api.Intent.EXTRA_BUNDLE);
- BundleScrubber.scrub(bundle);
+ BundleScrubber.scrub(lastbundle);
- if(PluginBundleManager.isBundleValid(bundle)) {
- String filename = bundle.getString(PluginBundleManager.BUNDLE_EXTRA_STRING_MESSAGE);
+ if(PluginBundleManager.isBundleValid(lastbundle)) {
+ String filename = lastbundle.getString(PluginBundleManager.BUNDLE_EXTRA_STRING_MESSAGE);
SharedPreferences prefCurrent = context.getSharedPreferences("current", Context.MODE_MULTI_PROCESS);
if("quick_actions".equals(prefCurrent.getString("filename", "0"))) {
@@ -72,4 +79,8 @@ public void onReceive(Context context, Intent intent) {
}
}
}
+
+ private void updateValues(Intent intent) {
+ lastbundle = intent.getBundleExtra(com.twofortyfouram.locale.api.Intent.EXTRA_BUNDLE);
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/farmerbb/secondscreen/service/SecondScreenIntentService.java b/app/src/main/java/com/farmerbb/secondscreen/service/SecondScreenIntentService.java
index 998dbdf..12ca91e 100644
--- a/app/src/main/java/com/farmerbb/secondscreen/service/SecondScreenIntentService.java
+++ b/app/src/main/java/com/farmerbb/secondscreen/service/SecondScreenIntentService.java
@@ -16,11 +16,11 @@
package com.farmerbb.secondscreen.service;
import android.annotation.TargetApi;
-import android.app.IntentService;
-import android.app.Notification;
-import android.app.NotificationChannel;
-import android.app.NotificationManager;
-import android.content.Intent;
+import android.app.*;
+import android.content.*;
+import android.content.pm.PackageManager;
+import android.net.ConnectivityManager;
+import android.net.Network;
import android.os.Build;
import android.os.IBinder;
@@ -54,11 +54,17 @@ public IBinder onBind(Intent intent) {
return binder;
}
+
@CallSuper
@Override
protected void onHandleIntent(@Nullable Intent intent) {
- if(intent.getBooleanExtra("start_foreground", false))
- startForeground();
+ if (checkNetwork()) {
+ if(intent.getBooleanExtra("start_foreground", false))
+ startForeground();
+ }
+ else {
+ NetworkStateReceiver.enable(getApplicationContext());
+ }
}
@Override
@@ -108,4 +114,62 @@ public Notification getNotification() {
return mBuilder.build();
}
+
+ boolean checkNetwork() {
+ final ConnectivityManager connManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
+ Network activeNetwork = connManager.getActiveNetwork();
+ if (activeNetwork != null) {
+ return true;
+ }
+ return false;
+ }
+
+ public static class NetworkStateReceiver extends BroadcastReceiver {
+ private static final String TAG = NetworkStateReceiver.class.getName();
+
+ private static SecondScreenIntentService service;
+
+ public static void setService(SecondScreenIntentService newService) {
+ service = newService;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (service.checkNetwork()) {
+ NetworkStateReceiver.disable(context);
+
+ final AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+
+ final Intent innerIntent = new Intent(context, SecondScreenIntentService.class);
+ final PendingIntent pendingIntent = PendingIntent.getService(context, 0, innerIntent, 0);
+
+ SharedPreferences preferences = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
+ preferences.edit();
+ boolean autoRefreshEnabled = preferences.getBoolean("pref_auto_refresh_enabled", false);
+
+ final String hours = preferences.getString("pref_auto_refresh_enabled", "0");
+ long hoursLong = Long.parseLong(hours) * 60 * 60 * 1000;
+
+ if (autoRefreshEnabled && hoursLong != 0) {
+ final long alarmTime = preferences.getLong("last_auto_refresh_time", 0) + hoursLong;
+ alarmManager.set(AlarmManager.RTC, alarmTime, pendingIntent);
+ } else {
+
+ alarmManager.cancel(pendingIntent);
+ }
+ }
+ }
+
+ public static void enable(Context context) {
+ final PackageManager packageManager = context.getPackageManager();
+ final ComponentName receiver = new ComponentName(context, NetworkStateReceiver.class);
+ packageManager.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
+ }
+
+ public static void disable(Context context) {
+ final PackageManager packageManager = context.getPackageManager();
+ final ComponentName receiver = new ComponentName(context, NetworkStateReceiver.class);
+ packageManager.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
+ }
+ }
}