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); + } + } }