diff --git a/app/src/main/java/com/jens/automation2/ActivityManageRule.java b/app/src/main/java/com/jens/automation2/ActivityManageRule.java index 83a7503..bd086e6 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java @@ -712,6 +712,7 @@ public class ActivityManageRule extends Activity { newTrigger.setTriggerType(Trigger_Enum.screenState); getTriggerScreenStateDialog().show(); + Miscellaneous.messageBox(getResources().getString(R.string.info), getResources().getString(R.string.lockedCommentScreenMustBeOff), ActivityManageRule.this).show(); return; } else if(triggerType == Trigger_Enum.deviceStarts) @@ -1080,7 +1081,8 @@ public class ActivityManageRule extends Activity Miscellaneous.getAnyContext().getResources().getString(R.string.off), Miscellaneous.getAnyContext().getResources().getString(R.string.on), Miscellaneous.getAnyContext().getResources().getString(R.string.unlocked), - Miscellaneous.getAnyContext().getResources().getString(R.string.locked) + Miscellaneous.getAnyContext().getResources().getString(R.string.lockedWithoutSecurity), + Miscellaneous.getAnyContext().getResources().getString(R.string.lockedWithSecurity) }; alertDialog.setItems(choices, new DialogInterface.OnClickListener() diff --git a/app/src/main/java/com/jens/automation2/Trigger.java b/app/src/main/java/com/jens/automation2/Trigger.java index 2a63765..47162a8 100644 --- a/app/src/main/java/com/jens/automation2/Trigger.java +++ b/app/src/main/java/com/jens/automation2/Trigger.java @@ -445,13 +445,15 @@ public class Trigger try { int desiredState = Integer.parseInt(getTriggerParameter2()); - int currentState = ScreenStateReceiver.getScreenState(); - return desiredState == currentState; + if(desiredState == ScreenStateReceiver.SCREEN_STATE_OFF || desiredState == ScreenStateReceiver.SCREEN_STATE_ON) + return desiredState == ScreenStateReceiver.getScreenPowerState(); + else + return desiredState == ScreenStateReceiver.getScreenLockState(); } catch (Exception e) { - Miscellaneous.logEvent("w", "Trigger", "Error checking profile trigger.", 4); + Miscellaneous.logEvent("w", "Trigger", "Error checking screen state trigger.", 4); } return false; @@ -1608,7 +1610,10 @@ public class Trigger state = Miscellaneous.getAnyContext().getString(R.string.unlocked); break; case "3": - state = Miscellaneous.getAnyContext().getString(R.string.locked); + state = Miscellaneous.getAnyContext().getString(R.string.lockedWithoutSecurity); + break; + case "4": + state = Miscellaneous.getAnyContext().getString(R.string.lockedWithSecurity); break; default: state = Miscellaneous.getAnyContext().getString(R.string.unknown); diff --git a/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java index 2f72a7b..3f054eb 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java @@ -403,4 +403,26 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis return null; } + + public class TimeObject + { + int hours, minutes, seconds; + + public int getHours() + { + return hours; + } + + public void setHours(int hours) + { + this.hours = hours; + } + + public TimeObject(int hours, int minutes, int seconds) + { + this.hours = hours; + this.minutes = minutes; + this.seconds = seconds; + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/jens/automation2/receivers/ScreenStateReceiver.java b/app/src/main/java/com/jens/automation2/receivers/ScreenStateReceiver.java index 670a3e3..7eac053 100644 --- a/app/src/main/java/com/jens/automation2/receivers/ScreenStateReceiver.java +++ b/app/src/main/java/com/jens/automation2/receivers/ScreenStateReceiver.java @@ -7,12 +7,8 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.os.BatteryManager; import android.os.Build; -import android.os.PowerManager; import android.provider.Settings; -import android.util.Log; -import android.widget.Toast; import androidx.annotation.RequiresApi; @@ -23,13 +19,13 @@ import com.jens.automation2.Rule; import com.jens.automation2.Trigger.Trigger_Enum; import java.util.ArrayList; -import java.util.List; import java.util.Timer; import java.util.TimerTask; public class ScreenStateReceiver extends BroadcastReceiver implements AutomationListenerInterface { - static int screenState = -1; // initialize with a better value than this + static int screenPowerState = -1; // initialize with a better value than this + static int screenLockState = -1; // initialize with a better value than this public static AutomationService automationServiceRef = null; private static boolean screenStateReceiverActive = false; @@ -37,7 +33,14 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation private static Intent screenStatusIntent = null; private static BroadcastReceiver screenStateReceiverInstance = null; - public final static String broadcastScreenLocked = "automation.system.screen_locked"; + public final static String broadcastScreenLockedWithoutSecurity = "automation.system.screen_locked_without_security"; + public final static String broadcastScreenLockedWithSecurity = "automation.system.screen_locked_with_security"; + + public final static int SCREEN_STATE_OFF = 0; + public final static int SCREEN_STATE_ON = 1; + public final static int SCREEN_STATE_UNLOCKED = 2; + public final static int SCREEN_STATE_LOCKED_WITHOUT_SECURITY = 3; + public final static int SCREEN_STATE_LOCKED_WITH_SECURITY = 4; public static BroadcastReceiver getScreenStateReceiverInstance() { @@ -62,7 +65,7 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation screenStateIntentFilter.addAction(Intent.ACTION_SCREEN_OFF); screenStateIntentFilter.addAction(Intent.ACTION_SCREEN_ON); screenStateIntentFilter.addAction(Intent.ACTION_USER_PRESENT); // also fired when device is unlocked - screenStateIntentFilter.addAction(broadcastScreenLocked); + screenStateIntentFilter.addAction(broadcastScreenLockedWithSecurity); // Intent.ACTION_USER_UNLOCKED } @@ -91,16 +94,14 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation return screenStateReceiverActive; } - public static int getScreenState() + public static int getScreenPowerState() { - return screenState; + return screenPowerState; } - private static int currentChargingState = 0; //0=unknown, 1=no, 2=yes - - public static int getCurrentChargingState() + public static int getScreenLockState() { - return currentChargingState; + return screenLockState; } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1) @@ -118,7 +119,7 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { - ScreenStateReceiver.screenState = 0; + ScreenStateReceiver.screenPowerState = SCREEN_STATE_OFF; // Method 2 // PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); @@ -134,10 +135,13 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation Miscellaneous.logEvent("i", "ScreenStateReceiver", "keyguardManager.isKeyguardLocked(): " + String.valueOf(keyguardManager.isKeyguardLocked()), 4); Miscellaneous.logEvent("i", "ScreenStateReceiver", "keyguardManager.isDeviceLocked(): " + String.valueOf(keyguardManager.isDeviceLocked()), 4); - boolean locked = keyguardManager.isKeyguardLocked() && keyguardManager.isDeviceLocked(); - if (locked) + if(keyguardManager.isKeyguardLocked() && !keyguardManager.isDeviceLocked()) { - sendLockBroadcast(context); + sendLockBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithoutSecurity); + } + else if(keyguardManager.isDeviceLocked()) + { + sendLockBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithSecurity); } else { @@ -148,15 +152,19 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { - ScreenStateReceiver.screenState = 1; + ScreenStateReceiver.screenPowerState = SCREEN_STATE_ON; } else if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) { - ScreenStateReceiver.screenState = 2; + ScreenStateReceiver.screenLockState = SCREEN_STATE_UNLOCKED; } - else if (intent.getAction().equals(broadcastScreenLocked)) + else if (intent.getAction().equals(broadcastScreenLockedWithoutSecurity)) { - ScreenStateReceiver.screenState = 3; + ScreenStateReceiver.screenLockState = SCREEN_STATE_LOCKED_WITHOUT_SECURITY; + } + else if (intent.getAction().equals(broadcastScreenLockedWithSecurity)) + { + ScreenStateReceiver.screenLockState = SCREEN_STATE_LOCKED_WITH_SECURITY; } else { @@ -222,10 +230,18 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation { KeyguardManager keyguardManager = (KeyguardManager) Miscellaneous.getAnyContext().getSystemService(Context.KEYGUARD_SERVICE); - boolean locked = keyguardManager.isKeyguardLocked() && keyguardManager.isDeviceLocked(); - if (locked) + Miscellaneous.logEvent("i", "ScreenStateReceiver", "keyguardManager.isKeyguardLocked(): " + String.valueOf(keyguardManager.isKeyguardLocked()), 4); + Miscellaneous.logEvent("i", "ScreenStateReceiver", "keyguardManager.isDeviceLocked(): " + String.valueOf(keyguardManager.isDeviceLocked()), 4); + + if(keyguardManager.isKeyguardLocked() && !keyguardManager.isDeviceLocked()) { - sendLockBroadcast(Miscellaneous.getAnyContext()); + sendLockBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithoutSecurity); + timer.purge(); + timer.cancel(); + } + else if(keyguardManager.isDeviceLocked()) + { + sendLockBroadcast(Miscellaneous.getAnyContext(), broadcastScreenLockedWithSecurity); timer.purge(); timer.cancel(); } @@ -258,10 +274,10 @@ public class ScreenStateReceiver extends BroadcastReceiver implements Automation } } - static void sendLockBroadcast(Context context) + static void sendLockBroadcast(Context context, String lockType) { Intent lockedBroadcastIntent = new Intent(); - lockedBroadcastIntent.setAction(broadcastScreenLocked); + lockedBroadcastIntent.setAction(lockType); context.sendBroadcast(lockedBroadcastIntent); } } \ No newline at end of file diff --git a/app/src/main/java/com/jens/automation2/receivers/TimeZoneListener.java b/app/src/main/java/com/jens/automation2/receivers/TimeZoneListener.java index 5961a98..4d55a9d 100644 --- a/app/src/main/java/com/jens/automation2/receivers/TimeZoneListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/TimeZoneListener.java @@ -14,14 +14,13 @@ import com.jens.automation2.Trigger.Trigger_Enum; public class TimeZoneListener extends BroadcastReceiver implements AutomationListenerInterface { private static TimeZoneListener timeZoneListenerInstance = null; - protected static boolean timeZoneListenerActive = false; + protected static boolean timezoneListenerActive = false; protected static AutomationService automationServiceRef = null; - protected static IntentFilter timeZoneListenerIntentFilter = null; - + protected static IntentFilter timezoneListenerIntentFilter = null; - public static boolean isTimeZoneListenerActive() + public static boolean isTimezoneListenerActive() { - return timeZoneListenerActive; + return timezoneListenerActive; } public static void startTimeZoneListener(AutomationService automationService) @@ -33,19 +32,19 @@ public class TimeZoneListener extends BroadcastReceiver implements AutomationLis try { - if(!timeZoneListenerActive && Rule.isAnyRuleUsing(Trigger_Enum.timeFrame)) + if(!timezoneListenerActive && Rule.isAnyRuleUsing(Trigger_Enum.timeFrame)) { Miscellaneous.logEvent("i", "TimeZoneListener", "Starting TimeZoneListener", 4); - timeZoneListenerActive = true; + timezoneListenerActive = true; - if(timeZoneListenerIntentFilter == null) + if(timezoneListenerIntentFilter == null) { - timeZoneListenerIntentFilter = new IntentFilter(); - timeZoneListenerIntentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED); - timeZoneListenerIntentFilter.addAction(Intent.ACTION_TIME_CHANGED); + timezoneListenerIntentFilter = new IntentFilter(); + timezoneListenerIntentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED); + timezoneListenerIntentFilter.addAction(Intent.ACTION_TIME_CHANGED); } - automationService.registerReceiver(timeZoneListenerInstance, timeZoneListenerIntentFilter); + automationService.registerReceiver(timeZoneListenerInstance, timezoneListenerIntentFilter); } } catch(Exception ex) @@ -57,11 +56,11 @@ public class TimeZoneListener extends BroadcastReceiver implements AutomationLis { try { - if(timeZoneListenerActive) + if(timezoneListenerActive) { Miscellaneous.logEvent("i", "TimeZoneListener", "Stopping TimeZoneListener", 4); automationServiceRef.unregisterReceiver(timeZoneListenerInstance); - timeZoneListenerActive = false; + timezoneListenerActive = false; } } catch(Exception ex) @@ -81,7 +80,7 @@ public class TimeZoneListener extends BroadcastReceiver implements AutomationLis } else if(action.equals(Intent.ACTION_TIME_CHANGED)) { - Miscellaneous.logEvent("i", "TimeZoneListener", "Device time changed. Reloading alarms.", 4); + Miscellaneous.logEvent("i", "TimeZoneListener", "Device time changed. Reloading alarms.", 3); DateTimeListener.reloadAlarms(); } } @@ -104,7 +103,7 @@ public class TimeZoneListener extends BroadcastReceiver implements AutomationLis @Override public boolean isListenerRunning() { - return TimeZoneListener.isTimeZoneListenerActive(); + return TimeZoneListener.isTimezoneListenerActive(); } @Override public Trigger_Enum[] getMonitoredTrigger() diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 6241f66..a1fb053 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -557,7 +557,7 @@ Keine Dateien konnten importiert werden. Nicht alle passenden Dateien konnten importiert werden. Webseite mit Beispielen öffnen - Sie können eine bestimmte Nummer eingeben, aber müssen nicht. Wenn Sie eine angeben wollen, können Sie auch eine aus dem Adressbuch auswählen. Außerdem können Sie reguläre Audrücke verwenden. Zum Testen selbiger mag ich die Seite: + Sie können eine bestimmte Nummer eingeben (des Anrufpartners), aber müssen nicht. Wenn Sie eine angeben wollen, können Sie auch eine aus dem Adressbuch auswählen. Außerdem können Sie reguläre Audrücke verwenden. Zum Testen selbiger mag ich die Seite: Fehler beim Importieren der Einstellungen. Regeln und Orte wurden erfolgreich importiert. Fehler beim Importieren der Regeln. @@ -713,5 +713,5 @@ Broadcast empfangen Vorschläge anzeigen Broadcast auswählen - gesperrt + gesperrt \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index d4f913a..e94fd09 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -294,7 +294,7 @@ Valor del parámetro Añadir pareja intento Tipo del parámetro - Puedes introducir un número, pero es opciónal. Si quieres usar uno puedes elegir uno de su directorio o introducir uno manualmente. Adiciónalmente puedes usar expresiónes regulares. Para probar esos me gusta la pagina: + Puedes introducir un número remoto, pero es opciónal. Si quieres usar uno puedes elegir uno de su directorio o introducir uno manualmente. Adiciónalmente puedes usar expresiónes regulares. Para probar esos me gusta la pagina: Rotación del monitor activado. Rotación del monitor desactivado. No hay sitios. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 16bab2c..5e689fe 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -355,7 +355,7 @@ Seleziona se\nentrante o uscente Non ho l\'ultimo numero di telefono e quindi non posso inserirlo nella variabile. Numero di telefono - È possibile inserire un numero di telefono specifico, ma non è necessario. Se vuoi specificarne uno, puoi sceglierlo dalla tua rubrica o inserirlo manualmente. Inoltre puoi usare espressioni regolari. Per testare un\'espressione regolare mi piace questa pagina: + È possibile inserire un numero di telefono remoto specifico, ma non è necessario. Se vuoi specificarne uno, puoi sceglierlo dalla tua rubrica o inserirlo manualmente. Inoltre puoi usare espressioni regolari. Per testare un\'espressione regolare mi piace questa pagina: Esegui suono Inserisci una latitudine valida. Inserisci una longitudine valida. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index f68a3e3..0d3fbd3 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -543,7 +543,7 @@ Voer een geldige actie in Voer een geldige pakketnaam in. Staat - U kunt een specifiek telefoonnummer opgeven, maar dat hoeft niet. Als u er een wilt opgeven, kunt u er een uit uw adresboek kiezen of het handmatig invoeren. Daarnaast kun je reguliere expressies gebruiken. Om een reguliere expressie te testen is deze pagina behulpzaam: + U kunt een specifiek telefoonnummer opgeven (van de bellende partner), maar dat hoeft niet. Als u er een wilt opgeven, kunt u er een uit uw adresboek kiezen of het handmatig invoeren. Daarnaast kun je reguliere expressies gebruiken. Om een reguliere expressie te testen is deze pagina behulpzaam: Import configuration Export configuration Meer instellingen diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6c79425..aa1c144 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -645,7 +645,7 @@ Enter a valid action Enter a valid package name. State - You can enter a specific phone number, but you don\'t have to. If you want to specify one you can either pick one from your address book or enter it manually. In addition you may use regular expressions. To test a regular expression I like this page: + You can enter a specific remote phone number, but you don\'t have to. If you want to specify one you can either pick one from your address book or enter it manually. In addition you may use regular expressions. To test a regular expression I like this page: Import configuration Export configuration More settings @@ -812,5 +812,7 @@ To avoid unnecessary wearing of your storage, logs are not saved by default. So if you have a problem please activate logging in settings first and set log level to 5. Then reproduce the problem. Only then logs can be attached. Show suggestions Select broadcast - locked + locked (swipe only, no PIN) + locked (with PIN, etc.) + Any state of locked will only be detected if the screen is off. \ No newline at end of file