diff --git a/app/src/main/java/eu/faircode/netguard/ServiceTile.java b/app/src/main/java/eu/faircode/netguard/ServiceTile.java index 1d493e75..11790736 100644 --- a/app/src/main/java/eu/faircode/netguard/ServiceTile.java +++ b/app/src/main/java/eu/faircode/netguard/ServiceTile.java @@ -21,6 +21,10 @@ package eu.faircode.netguard; import android.annotation.TargetApi; +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.preference.PreferenceManager; @@ -28,6 +32,8 @@ import android.service.quicksettings.Tile; import android.service.quicksettings.TileService; import android.util.Log; +import java.util.Date; + @TargetApi(Build.VERSION_CODES.N) public class ServiceTile extends TileService implements SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = "NetGuard.Tile"; @@ -52,7 +58,7 @@ public class ServiceTile extends TileService implements SharedPreferences.OnShar @Override public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { if ("enabled".equals(key)) { - boolean enabled = prefs.getBoolean("enabled", false); + boolean enabled = prefs.getBoolean(key, false); getQsTile().setState(enabled ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE); getQsTile().updateTile(); } @@ -66,12 +72,30 @@ public class ServiceTile extends TileService implements SharedPreferences.OnShar public void onClick() { Log.i(TAG, "Click"); + + // Cancel set alarm + AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); + PendingIntent pi = PendingIntent.getBroadcast(this, 0, new Intent(Widget.INTENT_ON), PendingIntent.FLAG_UPDATE_CURRENT); + am.cancel(pi); + + // Check state SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); boolean enabled = !prefs.getBoolean("enabled", false); prefs.edit().putBoolean("enabled", enabled).apply(); if (enabled) ServiceSinkhole.start("tile", this); - else + else { ServiceSinkhole.stop("tile", this); + + // Auto enable + int auto = Integer.parseInt(prefs.getString("auto_enable", "0")); + if (auto > 0) { + Log.i(TAG, "Scheduling enabled after minutes=" + auto); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) + am.set(AlarmManager.RTC_WAKEUP, new Date().getTime() + auto * 60 * 1000L, pi); + else + am.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, new Date().getTime() + auto * 60 * 1000L, pi); + } + } } } diff --git a/app/src/main/java/eu/faircode/netguard/Widget.java b/app/src/main/java/eu/faircode/netguard/Widget.java index caf2bf83..c59a5209 100644 --- a/app/src/main/java/eu/faircode/netguard/Widget.java +++ b/app/src/main/java/eu/faircode/netguard/Widget.java @@ -39,7 +39,7 @@ import java.util.Date; public class Widget extends AppWidgetProvider { private static final String TAG = "NetGuard.Widget"; - private static final String INTENT_ON = "eu.faircode.netguard.APPWIDGET_ON"; + public static final String INTENT_ON = "eu.faircode.netguard.APPWIDGET_ON"; private static final String INTENT_OFF = "eu.faircode.netguard.APPWIDGET_OFF"; @Override