From b7677bdccec59d401242f8e9df27021c537f59e1 Mon Sep 17 00:00:00 2001 From: Jens Date: Sat, 20 Jan 2024 23:47:32 +0100 Subject: [PATCH] Calendar trigger --- .../java/com/jens/automation2/Rule.java | 26 +++++ .../java/com/jens/automation2/Rule.java | 92 ++++++++++++++++-- .../java/com/jens/automation2/Rule.java | 94 +++++++++++++++++-- .../receivers/CalendarReceiver.java | 14 ++- app/src/main/res/values-de/strings.xml | 35 +++++++ app/src/main/res/values-es/strings.xml | 41 +++++++- app/src/main/res/values-fr/strings.xml | 36 +++++++ app/src/main/res/values-it/strings.xml | 36 +++++++ app/src/main/res/values-nl/strings.xml | 35 +++++++ app/src/main/res/values-pl/strings.xml | 35 +++++++ app/src/main/res/values-ru/strings.xml | 37 +++++++- app/src/main/res/values-zh-rCN/strings.xml | 38 ++++++++ app/src/main/res/values/strings.xml | 6 +- .../metadata/android/en-US/changelogs/138.txt | 1 + 14 files changed, 502 insertions(+), 24 deletions(-) diff --git a/app/src/apkFlavor/java/com/jens/automation2/Rule.java b/app/src/apkFlavor/java/com/jens/automation2/Rule.java index 9de1f29c..3572a0dc 100644 --- a/app/src/apkFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/apkFlavor/java/com/jens/automation2/Rule.java @@ -839,4 +839,30 @@ public class Rule implements Comparable return false; } + + public int getAmountOfTriggersForType(Trigger.Trigger_Enum type) + { + int amount = 0; + + for(Trigger t : getTriggerSet()) + { + if(t.getTriggerType().equals(type)) + amount++; + } + + return amount; + } + + public int getAmountOfActionsForType(Action.Action_Enum type) + { + int amount = 0; + + for(Action a : getActionSet()) + { + if(a.getAction().equals(type)) + amount++; + } + + return amount; + } } \ No newline at end of file diff --git a/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java b/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java index d6cfddb5..81d34a7c 100644 --- a/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java @@ -10,7 +10,10 @@ import android.os.Looper; import android.util.Log; import android.widget.Toast; +import androidx.annotation.Nullable; import com.jens.automation2.receivers.BroadcastListener; +import com.jens.automation2.receivers.CalendarReceiver; + import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -370,19 +373,19 @@ public class Rule implements Comparable { if(hasNotAppliedSinceLastExecution()) { - Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " applies and has flipped since its last execution.", 4); + Miscellaneous.logEvent("i", "getsGreenLight()", "Rule \"" + getName() + "\" applies and has flipped since its last execution.", 4); return true; } else if(hasTriggerOfType(Trigger.Trigger_Enum.calendarEvent) && CalendarReceiver.mayRuleStillBeActivatedForPendingCalendarEvents(this)) { - Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " applies, has not flipped since its last execution, but may still be executed for other calendar events.", 4); + Miscellaneous.logEvent("i", "getsGreenLight()", "Rule \"" + getName() + "\" applies, has not flipped since its last execution, but may still be executed for other calendar events.", 4); return true; } else - Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " has not flipped since its last execution.", 4); + Miscellaneous.logEvent("i", "getsGreenLight()", "Rule \"" + getName() + "\" has not flipped since its last execution.", 4); } else - Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " does not apply.", 4); + Miscellaneous.logEvent("i", "getsGreenLight()", "Rule \"" + getName() + "\" does not apply.", 4); return false; } @@ -391,7 +394,7 @@ public class Rule implements Comparable { if(AutomationService.getInstance() == null) { - Miscellaneous.logEvent("i", "RuleCheck", "Automation service not running. Rule " + getName() + " cannot apply.", 3); + Miscellaneous.logEvent("i", "RuleCheck", "Automation service not running. Rule \"" + getName() + "\" cannot apply.", 3); return false; } @@ -485,7 +488,7 @@ public class Rule implements Comparable { boolean isActuallyToggleable = isActuallyToggable(); - boolean notLastActive = getLastActivatedRule() == null || !getLastActivatedRule().equals(Rule.this); +// boolean notLastActive = getLastActivatedRule() == null || !getLastActivatedRule().equals(Rule.this); boolean doToggle = ruleToggle && isActuallyToggleable; String message; @@ -499,6 +502,29 @@ public class Rule implements Comparable if(Settings.startNewThreadForRuleActivation) publishProgress(message); + /* + Make a note of Rule/CalendarEvent executed combinations + */ + if(Rule.this.hasTriggerOfType(Trigger.Trigger_Enum.calendarEvent)) + { + for(CalendarReceiver.CalendarEvent event : CalendarReceiver.getApplyingCalendarEvents(Rule.this)) + { + if(!CalendarReceiver.hasEventBeenUsedInRule(Rule.this, event)) + { + /* + Record only the first calendar event that matched because the rule may + be executed once for every matching event. + */ + Miscellaneous.logEvent("i", "Rule", "Executing this rule run for calender event: " + event, 5); + CalendarReceiver.addUsedPair(new CalendarReceiver.RuleEventPair(Rule.this, event)); + break; + } + } + } + + /* + Run actions one after another + */ for(int i = 0; i< Rule.this.getActionSet().size(); i++) { try @@ -758,4 +784,58 @@ public class Rule implements Comparable return null; } + + @Override + public boolean equals(@Nullable Object obj) + { + return this.getName().equals(((Rule)obj).getName()); + } + + public boolean hasTriggerOfType(Trigger.Trigger_Enum queryType) + { + for(Trigger t : getTriggerSet()) + { + if(t.getTriggerType().equals(queryType)) + return true; + } + + return false; + } + + public boolean hasActionOfType(Action.Action_Enum queryType) + { + for(Action a : getActionSet()) + { + if(a.getAction().equals(queryType)) + return true; + } + + return false; + } + + public int getAmountOfTriggersForType(Trigger.Trigger_Enum type) + { + int amount = 0; + + for(Trigger t : getTriggerSet()) + { + if(t.getTriggerType().equals(type)) + amount++; + } + + return amount; + } + + public int getAmountOfActionsForType(Action.Action_Enum type) + { + int amount = 0; + + for(Action a : getActionSet()) + { + if(a.getAction().equals(type)) + amount++; + } + + return amount; + } } diff --git a/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java b/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java index 3d92ab2d..85b05de3 100644 --- a/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java @@ -10,9 +10,12 @@ import android.os.Looper; import android.util.Log; import android.widget.Toast; +import androidx.annotation.Nullable; + import com.google.android.gms.location.DetectedActivity; import com.jens.automation2.receivers.ActivityDetectionReceiver; import com.jens.automation2.receivers.BroadcastListener; +import com.jens.automation2.receivers.CalendarReceiver; import java.util.ArrayList; import java.util.Calendar; @@ -373,28 +376,28 @@ public class Rule implements Comparable { if(hasNotAppliedSinceLastExecution()) { - Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " applies and has flipped since its last execution.", 4); + Miscellaneous.logEvent("i", "getsGreenLight()", "Rule \"" + getName() + "\" applies and has flipped since its last execution.", 4); return true; } else if(hasTriggerOfType(Trigger.Trigger_Enum.calendarEvent) && CalendarReceiver.mayRuleStillBeActivatedForPendingCalendarEvents(this)) { - Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " applies, has not flipped since its last execution, but may still be executed for other calendar events.", 4); + Miscellaneous.logEvent("i", "getsGreenLight()", "Rule \"" + getName() + "\" applies, has not flipped since its last execution, but may still be executed for other calendar events.", 4); return true; } else - Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " has not flipped since its last execution.", 4); + Miscellaneous.logEvent("i", "getsGreenLight()", "Rule \"" + getName() + "\" has not flipped since its last execution.", 4); } else - Miscellaneous.logEvent("i", "getsGreenLight()", "Rule " + getName() + " does not apply.", 4); + Miscellaneous.logEvent("i", "getsGreenLight()", "Rule \"" + getName() + "\" does not apply.", 4); return false; } - + public boolean applies(Context context) { if(AutomationService.getInstance() == null) { - Miscellaneous.logEvent("i", "RuleCheck", "Automation service not running. Rule " + getName() + " cannot apply.", 3); + Miscellaneous.logEvent("i", "RuleCheck", "Automation service not running. Rule \"" + getName() + "\" cannot apply.", 3); return false; } @@ -512,7 +515,7 @@ public class Rule implements Comparable { boolean isActuallyToggleable = isActuallyToggable(); - boolean notLastActive = getLastActivatedRule() == null || !getLastActivatedRule().equals(Rule.this); +// boolean notLastActive = getLastActivatedRule() == null || !getLastActivatedRule().equals(Rule.this); boolean doToggle = ruleToggle && isActuallyToggleable; String message; @@ -526,6 +529,29 @@ public class Rule implements Comparable if(Settings.startNewThreadForRuleActivation) publishProgress(message); + /* + Make a note of Rule/CalendarEvent executed combinations + */ + if(Rule.this.hasTriggerOfType(Trigger.Trigger_Enum.calendarEvent)) + { + for(CalendarReceiver.CalendarEvent event : CalendarReceiver.getApplyingCalendarEvents(Rule.this)) + { + if(!CalendarReceiver.hasEventBeenUsedInRule(Rule.this, event)) + { + /* + Record only the first calendar event that matched because the rule may + be executed once for every matching event. + */ + Miscellaneous.logEvent("i", "Rule", "Executing this rule run for calender event: " + event, 5); + CalendarReceiver.addUsedPair(new CalendarReceiver.RuleEventPair(Rule.this, event)); + break; + } + } + } + + /* + Run actions one after another + */ for(int i = 0; i< Rule.this.getActionSet().size(); i++) { try @@ -785,4 +811,58 @@ public class Rule implements Comparable return null; } + + @Override + public boolean equals(@Nullable Object obj) + { + return this.getName().equals(((Rule)obj).getName()); + } + + public boolean hasTriggerOfType(Trigger.Trigger_Enum queryType) + { + for(Trigger t : getTriggerSet()) + { + if(t.getTriggerType().equals(queryType)) + return true; + } + + return false; + } + + public boolean hasActionOfType(Action.Action_Enum queryType) + { + for(Action a : getActionSet()) + { + if(a.getAction().equals(queryType)) + return true; + } + + return false; + } + + public int getAmountOfTriggersForType(Trigger.Trigger_Enum type) + { + int amount = 0; + + for(Trigger t : getTriggerSet()) + { + if(t.getTriggerType().equals(type)) + amount++; + } + + return amount; + } + + public int getAmountOfActionsForType(Action.Action_Enum type) + { + int amount = 0; + + for(Action a : getActionSet()) + { + if(a.getAction().equals(type)) + amount++; + } + + return amount; + } } diff --git a/app/src/main/java/com/jens/automation2/receivers/CalendarReceiver.java b/app/src/main/java/com/jens/automation2/receivers/CalendarReceiver.java index e6900c8b..495d7934 100644 --- a/app/src/main/java/com/jens/automation2/receivers/CalendarReceiver.java +++ b/app/src/main/java/com/jens/automation2/receivers/CalendarReceiver.java @@ -65,8 +65,6 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis public static void addUsedPair(RuleEventPair pair) { - //TODO: Rule with multiple calendar events should be executed only once - // Add pair only if it's not in the list already. for(RuleEventPair usedPair : calendarEventsUsed) { @@ -593,12 +591,20 @@ public class CalendarReceiver extends BroadcastReceiver implements AutomationLis { if (!hasEventBeenUsedInRule(rule, event)) { - Miscellaneous.logEvent("i", "mayRuleStillBeActivatedForPendingCalendarEvents()", "Rule " + rule.getName() + " has not been used in conjunction with event " + event, 4); - return true; + /* + If there are multiple parallel calendar events and a rule has multiple + triggers of type calendar event, we don't want the rule to fire only once. + */ + if(rule.getAmountOfTriggersForType(Trigger.Trigger_Enum.calendarEvent) == 1) + { + Miscellaneous.logEvent("i", "mayRuleStillBeActivatedForPendingCalendarEvents()", "Rule " + rule.getName() + " has not been used in conjunction with event " + event, 4); + return true; + } } } } } + return false; } diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 11eba339..0b9c23a0 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -810,7 +810,42 @@ Erforderlich für bestimmte Aktionen. Wenn Sie eine der folgenden Berechtigungen nicht erteilen und eine Systemmeldung wie \"Eingeschränkte Berechtigung\" erhalten, müssen Sie zuerst zu den Android-Einstellungen und dann zu den Anwendungen gehen und Automatisierung auswählen. Nun sollten sich 3 Punkte in der oberen rechten Ecke befinden. Klicken Sie auf \"Eingeschränkte Einstellungen zulassen\". Danach sollte die erforderliche Erlaubnis erteilt werden können. Dies sollte nur für die APK-Version der App gelten, nicht für die von F-Droid oder dem Play Store. Ortungsdienst festlegen + Ortungsdienst einstellen Leider kann die Erlaubnis WRITE_SECURE_SETTINGS nicht direkt auf Ihrem Android-Gerät erteilt werden. Stattdessen müssen Sie Ihr Gerät an einen Computer anschließen und die Berechtigung über ADB erteilen. Klicken Sie hier, um zu erfahren, wie Sie es gewähren können: https://server47.de/automation/adb_hack.php Ortungsdienst Das Ergebnis dieser Anfrage wird in der Variablen LAST_TRIGGERURL_RESULT gespeichert, wenn Sie es von einer anderen Regel aus überprüfen möchten. Im Falle von HTTP-Fehlern wie 404 ist der Wert \"HTTP_ERROR\". + Kalendertermin + Termin ist derzeit aktiv + Kalendertermin + Ort + Beschreibung/Anmerkungen + Verfügbarkeit + Termin findet derzeit nicht statt/ist beendet + beschäftigt + frei + vorbehaltlich + nicht im Büro + Anderswo arbeiten + Wenn Sie kein Element auswählen, ist jedes Element in Ordnung. + Kalender + Es kann sein, dass nur die ersten 3 Typen tatsächlich funktionieren, weil die anderen Typen nicht Teil der Standard-Kalenderoberfläche von Android sind. + beliebiger Kalender + Verfügbarkeiten + In diesem Trigger wurden zuvor Kalender mit der ID %1$s konfiguriert, aber seitdem gelöscht. Beim nächsten Speichern werden diese aus diesem Trigger entfernt. Bis dahin wird dieser Auslöser/diese Bedingung niemals erfüllt sein. + Konto + Ganztägige Veranstaltung + Die Veranstaltung ist eine ganztägige Veranstaltung + Die Veranstaltung ist keine ganztägige Veranstaltung + Die Berechtigung zum Lesen Ihres Kalenders ist für einen Kalenderauslöser erforderlich. Es ist bereits erforderlich, die Kalenderfelder in diesem Fenster auszufüllen. + Es scheint, als ob auf Ihrem Gerät keine Kalender eingerichtet wurden. Sie können diesen Trigger speichern, aber er wird nie true zurückgeben. + Beim Lesen der Kalender auf Ihrem Gerät ist ein Fehler aufgetreten. + Exakte Alarme setzen + Nach dem Klick auf OK öffnet sich ein Fenster. Bitte wählen Sie dort Automatisierung aus und erlauben Sie der App, exakte Alarme zu planen. + Auswerten + Beim Laden von Werten ist ein Fehler aufgetreten. + Geben Sie gültige Daten in die Parameterfelder ein. + Ereignis ist nicht wiederkehrend + Ereignis ist wiederkehrend + wiederkehrend + Wenn Ihr Kalender mehrere parallele, überlappende oder direkt aufeinanderfolgende Ereignisse enthält, wird eine Regel so oft ausgeführt, wie es Ereignisse gibt, die den Kriterien der Regel entsprechen. Falls eine Regel mehrere Kalenderauslöser hat und mehrere übereinstimmende Ereignisse parallel vorhanden sind, wird die Regel nur einmal ausgeführt. \ 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 44272da5..c9ffd3cd 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -8,9 +8,9 @@ Holandés Ruso Francés - Estoy activando regla %1$s - Estoy activando perfil %1$s - Estoy activando regla %1$s en el modo de invertir + Activando regla %1$s + Activando perfil %1$s + Activando regla %1$s en el modo de invertir Crear sitio Crear regla Lista de sitios: @@ -809,7 +809,42 @@ Requerido para ciertas acciones. Si no le otorga a uno el siguiente permiso y un mensaje del sistema como \"Ajuste restringido\", primero debe ir a la configuración de Android, luego a las aplicaciones, elija Automatización. Ahora debería haber 3 puntos en la esquina superior derecha. Haga clic en \"Permitir configuraciones restringidas\". Después de eso, el permiso necesario debería poder otorgarse. Esto solo debería aplicarse a la versión APK de la aplicación, no a las de F-Droid o Play Store. Encender/desactivar el servicio de ubicación + Establecer el servicio de ubicación Desafortunadamente, el permiso WRITE_SECURE_SETTINGS no se puede otorgar directamente en su dispositivo Android. En su lugar, debe conectar su dispositivo a una computadora y otorgar el permiso a través de ADB. Haga clic aquí para saber cómo otorgarlo: https://server47.de/automation/adb_hack.php Servicio de localización El resultado de esta solicitud se almacenará en la variable LAST_TRIGGERURL_RESULT si desea verificarlo desde otra regla. En caso de errores HTTP como 404, el valor será \"HTTP_ERROR\". + Evento de calendario + El evento está activo actualmente + evento de calendario + Lugar + Descripción/notas + Disponibilidad + El evento no está ocurriendo actualmente/ha finalizado + ocupado + libre + intento + fuera de la oficina + Trabajar en otro lugar + Si no selecciona ningún elemento, cualquiera estará bien. + Calendarios + Puede ser que solo los primeros 3 tipos funcionen realmente porque los otros tipos no forman parte de la interfaz de calendario estándar de Android. + cualquier calendario + Disponibilidades + En este desencadenador, los calendarios con ID %1$s se han configurado previamente, pero se han eliminado desde entonces. Con el siguiente guardado, se eliminarán de este activador. Hasta entonces, este desencadenante/condición nunca se cumplirá. + cuenta + Evento de todo el día + El evento es un evento de todo el día + El evento no es un evento de todo el día + El permiso para leer el calendario será necesario para un activador de calendario. Ya será necesario rellenar los campos del calendario en esta ventana. + Parece que no se han configurado calendarios en su dispositivo. Puede guardar este desencadenador, pero nunca devolverá true. + Se ha producido un error al leer los calendarios de su dispositivo. + Programe alarmas exactas + Después de hacer clic en Aceptar, se abrirá una ventana. Seleccione Automatización allí y permita que la aplicación programe alarmas exactas. + Evaluar + Se ha producido un error al cargar los valores. + Introduzca datos válidos en los campos de parámetros. + El evento no se repite + El evento se repite + Recurrente + Si su calendario contiene varios eventos paralelos, superpuestos o directamente posteriores, una regla se ejecutará tantas veces como eventos coincidan con los criterios de la regla. En caso de que una regla tenga varios activadores de calendario y haya varios eventos coincidentes en paralelo, la regla se ejecutará solo una vez. \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 1d731b5e..19bd1b20 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -809,7 +809,43 @@ Obligatoire pour certaines actions. Si vous ne parvenez pas à accorder à l\'un d\'entre eux l\'autorisation suivante et un message système tel que « Autorisation restreinte », vous devez d\'abord accéder aux paramètres Android, puis aux applications, puis choisir Automatisation. Maintenant, il devrait y avoir 3 points dans le coin supérieur droit. Cliquez sur « Autoriser les paramètres restreints ». Après cela, l\'autorisation nécessaire devrait pouvoir être accordée. Cela ne devrait s\'appliquer qu\'à la version APK de l\'application, pas à celles de F-Droid ou du Play Store. Définir le service de localisation + Définir le service de localisation Malheureusement, l\'autorisation WRITE_SECURE_SETTINGS ne peut pas être donnée directement sur votre appareil Android. Au lieu de cela, vous devez connecter votre appareil à un ordinateur et accorder l\'autorisation via ADB. Cliquez ici pour savoir comment l\'accorder : https://server47.de/automation/adb_hack.php Service de localisation Le résultat de cette requête sera stocké dans la variable LAST_TRIGGERURL_RESULT si vous souhaitez le vérifier à partir d\'une autre règle. En cas d\'erreurs HTTP comme 404, la valeur sera « HTTP_ERROR ». + Événement de calendrier + L\'événement est actuellement actif + Evénement de calendrier + Emplacement + Description/notes + Beschikbaarheid + L\'événement n\'a pas lieu ou s\'est terminé + occupé + libre + tentative + absent du bureau + Travailler ailleurs + Travailler ailleurs + Si vous ne sélectionnez aucun élément, n\'importe lequel d\'entre eux sera acceptable. + Calendriers + Il se peut que seuls les 3 premiers types fonctionnent réellement car les autres types ne font pas partie de l\'interface de calendrier standard d\'Android. + n\'importe quel calendrier + Disponibilités + Dans ce déclencheur, les calendriers avec des ID %1$s ont été configurés précédemment, mais ont été supprimés depuis. Lors de la prochaine sauvegarde, ceux-ci seront supprimés de ce déclencheur. D\'ici là, ce déclencheur/condition ne sera jamais rempli. + compte + Événement d\'une journée + L\'événement est un événement d\'une journée + L\'événement n\'est pas un événement d\'une journée + event isL\'autorisation de lire votre calendrier sera requise pour un déclencheur de calendrier. Il sera déjà nécessaire de remplir les champs du calendrier dans cette fenêtre. Il ne s\'agit pas d\'un événement qui dure toute la journée + Il semble qu\'aucun calendrier n\'ait été configuré sur votre appareil. Vous pouvez enregistrer ce déclencheur, mais il ne renverra jamais true. + Une erreur s\'est produite lors de la lecture des calendriers sur votre appareil. + Programmer des alarmes exactes + Après avoir cliqué sur OK, une fenêtre s\'ouvre. Veuillez sélectionner Automatisation et permettre à l\'application de programmer des alarmes précises. + Évaluer + Une erreur s\'est produite lors du chargement des valeurs. + Saisissez des données valides dans les champs de paramètre. + l\'événement ne se reproduit pas + l\'événement se reproduit + Récurrents + Si votre calendrier contient plusieurs événements parallèles, qui se chevauchent ou qui se suivent directement, une règle sera exécutée autant de fois qu\'il y a d\'événements correspondant aux critères de la règle. Dans le cas où une règle a plusieurs déclencheurs de calendrier et qu\'il y a plusieurs événements correspondants en parallèle, la règle ne sera exécutée qu\'une seule fois. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 48b7cd3f..6f8a3171 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -810,7 +810,43 @@ Obbligatorio per determinate azioni. Se non riesci a concedere una delle seguenti autorizzazioni e un messaggio di sistema come \"Autorizzazione limitata\", devi prima andare alle impostazioni di Android, quindi alle applicazioni, scegli Automazione. Ora dovrebbero esserci 3 punti nell\'angolo in alto a destra. Fai clic su \"Consenti impostazioni limitate\". Dopodiché dovrebbe essere concessa l\'autorizzazione necessaria. Questo dovrebbe valere solo per la versione APK dell\'app, non per quelle di F-Droid o Play Store. Impostare il servizio di localizzazione + Impostare il servizio di localizzazione Purtroppo l\'autorizzazione WRITE_SECURE_SETTINGS non può essere data direttamente sul tuo dispositivo Android. Invece, devi collegare il tuo dispositivo a un computer e concedere l\'autorizzazione tramite ADB. Clicca qui per scoprire come concederlo: https://server47.de/automation/adb_hack.php Servizio di localizzazione Il risultato di questa richiesta verrà memorizzato nella variabile LAST_TRIGGERURL_RESULT se si desidera controllarlo da un\'altra regola. In caso di errori HTTP come 404 il valore sarà \"HTTP_ERROR\". + Evento del calendario + L\'evento è attualmente attivo + evento del calendario + Ubicazione + Descrizione/note + Disponibilità + L\'evento al momento non è in corso/è terminato + occupato + gratuito + tentativo + Fuori sede + Lavorare altrove + Se non selezioni nessun elemento, tutti saranno ok. + Calendari + Calendari + È possibile che solo i primi 3 tipi funzionino effettivamente perché gli altri tipi non fanno parte dell\'interfaccia del calendario standard di Android. + qualsiasi calendario + Disponibilità + In questo trigger i calendari con ID %1$s sono stati configurati in precedenza, ma sono stati eliminati da allora. Con il prossimo salvataggio, questi verranno rimossi da questo attivatore. Fino ad allora, questa condizione non sarà mai soddisfatta. + conto + Evento che dura tutto il giorno + L\'evento è un evento che dura tutto il giorno + L\'evento non è un evento che dura tutto il giorno + L\'autorizzazione per leggere il calendario sarà necessaria per un trigger di calendario. Sarà già necessario compilare i campi del calendario in questa finestra. + Sembra che sul tuo dispositivo non sia stato impostato alcun calendario. È possibile salvare questo trigger, ma non restituirà mai true. + Si è verificato un errore durante la lettura dei calendari sul dispositivo. + Pianifica allarmi esatti + Dopo aver fatto clic su OK, si aprirà una finestra. Seleziona Automazione lì e consenti all\'app di programmare allarmi esatti. + Valutare + Si è verificato un errore durante il caricamento dei valori. + Immettere dati validi nei campi dei parametri. + l\'evento non si ripete + l\'evento si ripete + Reoccurring + Se il calendario contiene più eventi paralleli, sovrapposti o direttamente successivi, una regola verrà eseguita tante volte quanti sono gli eventi che corrispondono ai criteri della regola. Nel caso in cui una regola disponga di più trigger di calendario e siano presenti più eventi corrispondenti in parallelo, la regola verrà eseguita una sola volta. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 49e4142e..ba545b47 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -808,8 +808,43 @@ Vereist voor bepaalde acties. Als u er niet in slaagt om een van de volgende machtigingen en een systeembericht zoals \"Beperkte toestemming\" te verlenen, moet u eerst naar Android-instellingen gaan en vervolgens naar toepassingen en Automatisering kiezen. Nu zouden er 3 stippen in de rechterbovenhoek moeten zijn. Klik op \"Beperkte instellingen toestaan\". Daarna moet de benodigde toestemming aanvaardbaar zijn. Dit zou alleen van toepassing moeten zijn op de APK-versie van de app, niet die van F-Droid of Play Store. Locatieservice instellen + Locatieservice instellen Helaas kan de toestemming WRITE_SECURE_SETTINGS niet rechtstreeks op uw Android-apparaat worden gegeven. In plaats daarvan moet u uw apparaat op een computer aansluiten en de toestemming verlenen via ADB. Klik hier om te weten te komen hoe u het kunt toekennen: https://server47.de/automation/adb_hack.php Locatie service Het resultaat van dit verzoek wordt opgeslagen in de variabele LAST_TRIGGERURL_RESULT als u het vanuit een andere regel wilt controleren. In het geval van HTTP-fouten zoals 404 is de waarde \"HTTP_ERROR\". + Agenda-afspraak + Begivenheden er aktiv i øjeblikket + agenda-afspraak + Plaats + Beschrijving/opmerkingen + Beschikbaarheid + Evenement vindt momenteel niet plaats/is afgelopen + druk + vrij + proberen + Niet op kantoor + elders werken + Als u geen item selecteert, is elk item in orde. + Kalenders + Het kan zijn dat alleen de eerste 3 typen daadwerkelijk werken omdat de andere typen geen deel uitmaken van de standaard agenda-interface van Android. + elke kalender + Beschikbaarheid + In deze trigger zijn kalenders met ID\'s %1$s eerder geconfigureerd, maar sindsdien verwijderd. Bij de volgende save worden die uit deze trigger verwijderd. Tot die tijd zal nooit aan deze trigger/voorwaarde worden voldaan. + rekening + Evenement dat de hele dag duurt + evenement is een evenement dat de hele dag duurt + evenement is niet een evenement dat de hele dag duurt + De toestemming om uw agenda te lezen is vereist voor een agendatrigger. Het is al nodig om de kalendervelden in dit venster in te vullen. + Het lijkt erop dat er geen agenda\'s zijn ingesteld op uw apparaat. U kunt deze trigger opslaan, maar deze wordt nooit waar geretourneerd. + Er is een fout opgetreden bij het lezen van de agenda\'s op uw apparaat. + Plan exacte alarmen + Nadat u op OK hebt geklikt, wordt een venster geopend. Selecteer daar Automatisering en laat de app exacte alarmen plannen. + Evalueren + Er is een fout opgetreden tijdens het laden van waarden. + Voer geldige gegevens in de parametervelden in. + gebeurtenis zich niet opnieuw voordoet + gebeurtenis zich opnieuw voordoet + Terugkerende + Als uw agenda meerdere parallelle, overlappende of direct volgende gebeurtenissen bevat, wordt een regel net zo vaak uitgevoerd als er afspraken zijn die voldoen aan de criteria van de regel. Als een regel meerdere agendatriggers heeft en er meerdere overeenkomende gebeurtenissen parallel zijn, wordt de regel slechts één keer uitgevoerd. diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index dbfb7588..36d4bbb2 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -907,7 +907,42 @@ Wymagane w przypadku niektórych działań. Jeśli nie uda Ci się przyznać następującego uprawnienia i komunikatu systemowego, takiego jak \"Ograniczone uprawnienia\", musisz najpierw przejść do ustawień Androida, a następnie aplikacji, wybrać Automatyzacja. Teraz w prawym górnym rogu powinny znajdować się 3 kropki. Kliknij \"Zezwól na ustawienia z ograniczeniami\". Następnie powinno być możliwe udzielenie niezbędnego pozwolenia. Powinno to dotyczyć tylko wersji APK aplikacji, a nie tych z F-Droid lub Sklepu Play. Ustawianie usługi lokalizacyjnej + Ustawianie usługi lokalizacyjnej Niestety WRITE_SECURE_SETTINGS uprawnień nie można nadać bezpośrednio na urządzeniu z Androidem. Zamiast tego musisz podłączyć urządzenie do komputera i przyznać uprawnienia przez ADB. Kliknij tutaj, aby dowiedzieć się, jak go przyznać: https://server47.de/automation/adb_hack.php Usługa lokalizacyjna Wynik tego żądania zostanie zapisany w zmiennej LAST_TRIGGERURL_RESULT, jeśli chcesz go sprawdzić z innej reguły. W przypadku błędów HTTP, takich jak 404, wartość będzie wynosić \"HTTP_ERROR\". + Wydarzenie w kalendarzu + Wydarzenie jest obecnie aktywne + wydarzenie w kalendarzu + Lokalizacja + Opis/uwagi + Dostępność + Wydarzenie obecnie się nie odbywa/zakończyło + zajęty + wolny + próba + poza biurem + praca w innym miejscu + Jeśli nie wybierzesz żadnego elementu, każdy będzie w porządku. + Kalendarze + Może się zdarzyć, że tylko pierwsze 3 typy faktycznie działają, ponieważ inne typy nie są częścią standardowego interfejsu kalendarza Androida. + dowolny kalendarz + Dostępność + W tym wyzwalaczu kalendarze o identyfikatorach %1$s zostały wcześniej skonfigurowane, ale od tego czasu zostały usunięte. Przy następnym zapisie zostaną one usunięte z tego wyzwalacza. Do tego czasu ten wyzwalacz/warunek nigdy nie zostanie spełniony. + rachunek + Wydarzenie całodniowe + Wydarzenie jest wydarzeniem całodniowym + Wydarzenie nie jest wydarzeniem całodniowym + Uprawnienie do odczytu kalendarza będzie wymagane dla wyzwalacza kalendarza. Wymagane będzie już wypełnienie pól kalendarza w tym oknie. + Wygląda na to, że na urządzeniu nie skonfigurowano żadnych kalendarzy. Możesz zapisać ten wyzwalacz, ale nigdy nie zwróci on wartości true. + Wystąpił błąd podczas odczytywania kalendarzy na urządzeniu. + Zaplanuj dokładne alarmy + Po kliknięciu OK otworzy się okno. Wybierz tam Automatyzacja i zezwól aplikacji na zaplanowanie dokładnych alarmów. + Oceniać + Wystąpił błąd podczas ładowania wartości. + Wprowadź prawidłowe dane w polach parametrów. + zdarzenie nie powtarza się + zdarzenie powtarza się + Cyklicznych + Jeśli Twój kalendarz zawiera wiele równoległych, nakładających się na siebie lub bezpośrednio następujących wydarzeń, reguła zostanie wykonana tyle razy, ile jest wydarzeń spełniających kryteria reguły. Jeśli reguła ma wiele wyzwalaczy kalendarza i równolegle występuje wiele pasujących zdarzeń, reguła zostanie wykonana tylko raz. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 7c5464b1..9121b784 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -867,7 +867,42 @@ Required for certain actions. Если вы не можете предоставить одно из следующих разрешений и системное сообщение типа «Ограниченное разрешение», вам нужно сначала перейти в настройки Android, затем в приложения, выбрать «Автоматизация». Теперь в правом верхнем углу должно быть 3 точки. Нажмите «Разрешить ограниченные настройки». После этого необходимо получить необходимое разрешение. Это должно относиться только к APK-версии приложения, а не к версии из F-Droid или Play Store. Настройка службы определения местоположения - К сожалению, разрешение WRITE_SECURE_SETTINGS не может быть дано непосредственно на вашем Android-устройстве. Вместо этого вам нужно подключить устройство к компьютеру и предоставить разрешение через ADB. Нажмите здесь, чтобы узнать, как его получить: https://server47.de/automation/adb_hack.php + Настройка службы определения местоположения + К сожалению, разрешение WRITE_SECURE_SETTINGS не может быть дано непосредственно на вашем Android-устройстве. Вместо этого вам нужно подключить устройство к компьютеру и предоставить разрешение через ADB. Нажмите здесь, чтобы узнать, как его получить: https://server47.de/automation/adb_hack.php Служба определения местоположения Результат этого запроса будет сохранен в переменной LAST_TRIGGERURL_RESULT если вы захотите проверить его из другого правила. В случае ошибок HTTP, таких как 404, значение будет \"HTTP_ERROR\". + Событие календаря + Событие в данный момент активно + Событие календаря + Местоположение + Описание/примечания + Наличие + Событие в настоящее время не происходит/завершилось + занятый + свободный + попытка + Вне офиса + Работа в другом месте + Если вы не выберете ни одного элемента, подойдет любой. + Календари + Возможно, на самом деле работают только первые 3 типа, потому что остальные типы не являются частью стандартного интерфейса календаря Android. + Любой календарь + Наличии + В этом триггере календари с идентификаторами %1$s были настроены ранее, но с тех пор были удалены. При следующем сохранении они будут удалены из этого триггера. До тех пор этот триггер/условие никогда не будет выполнен. + счет + Мероприятие в течение всего дня + Событие - это событие на весь день + Событие не является событием на весь день + Для триггера календаря потребуется разрешение на чтение календаря. Уже потребуется заполнить поля календаря в этом окне. + Похоже, что на вашем устройстве не настроены календари. Вы можете сохранить этот триггер, но он никогда не вернет true. + Произошла ошибка при чтении календарей на вашем устройстве. + Планирование точных сигналов тревоги + После нажатия кнопки ОК откроется окно. Выберите там «Автоматизация» и разрешите приложению планировать точные сигналы тревоги. + Оценивать + Произошла ошибка при загрузке значений. + Введите допустимые данные в поля параметров. + событие не повторяется + Событие повторяется + Повторяющиеся + Если календарь содержит несколько параллельных, перекрывающихся или непосредственно следующих событий, правило будет выполняться столько раз, сколько событий соответствует критериям правила. В случае, если правило имеет несколько календарных триггеров и параллельно существует несколько совпадающих событий, то правило будет выполнено только один раз. diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 6aba6a79..5f7cb439 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -808,7 +808,45 @@ 对于某些操作是必需的。 如果您未能授予以下权限和\"受限权限\"之类的系统消息,则需要先转到 Android 设置,然后转到应用程序,选择自动化。现在右上角应该有 3 个点。单击\"允许受限设置\"。之后,应该可以授予必要的权限。这应该仅适用于应用的 APK 版本,而不适用于 F-Droid 或 Play 商店中的版本。 设置位置服务 + 设置位置服务 不幸的是,WRITE_SECURE_SETTINGS无法直接在您的 Android 设备上授予权限。相反,您需要将设备连接到计算机并通过 ADB 授予权限。单击此处了解如何授予它: https://server47.de/automation/adb_hack.php 定位服务 此请求的结果将存储在变量 LAST_TRIGGERURL_RESULT 中,如果您希望从其他规则中检查它。如果出现像 404 这样的 HTTP 错误,则该值将为\"HTTP_ERROR\"。 + 日历事件 + 活动当前处于活动状态 + 日历事件 + 位置 + 描述/注释 + 可用性 + 活动当前未发生/已结束 + + 自由 + 尝试 + 不在办公室 + 不在办公室 + 不在办公室 + 在其他地方工作 + 如果您不选择任何项目,则任何一个都可以。 + 日历 + 可能只有前 3 种类型真正有效,因为其他类型不是 Android 标准日历界面的一部分。 + 任何日历 + 可用性 + 在此触发器中,以前已配置了 ID 为 %1$s 的日历,但此后已被删除。在下次保存时,这些将从此触发器中删除。在此之前,此触发器/条件将永远不会得到满足。 + account + 帐户 + 全天活动 + 活动是全天活动 + 活动不是一整天的活动 + 日历触发器需要读取日历的权限。在此窗口中填充日历字段已经是必需的。 + 您的设备上似乎没有设置日历。您可以保存此触发器,但它永远不会返回 true。 + 读取设备上的日历时出错。 + 安排确切的警报 + 单击\"确定\"后,将打开一个窗口。请在那里选择自动化,并允许应用程序安排确切的警报。 + 评价 + 加载值时发生错误。 + 在参数字段中输入有效数据。 + 事件不会再次发生 + 事件再次发生 + 重复发生 + 如果您的日历包含多个平行、重叠或直接跟随的事件,则规则的执行次数将与规则条件匹配的事件次数相同。如果规则具有多个日历触发器,并且并行有多个匹配事件,则该规则将仅执行一次。 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eb0817d8..ab12daa3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -897,7 +897,7 @@ Bind to accessibility service After clicking OK you\'ll be sent to a system dialog. Please select Automation there and allow "Allow accessibility API". Required for certain actions. - If you fail to grant one the following permission and a system message like \"Restricted permission\" you need to go to Android settings first, then applications, choose Automation. Now there should be 3 dots in the upper right corner. Click \"Allow restricted settings\". After that the necessary permission should be grantable. This should only apply to the APK version of the app, not the ones from F-Droid or Play Store. + If you fail to grant one the following permission and a system message like \"Restricted permission\" you need to go to Android settings first, then applications, choose Automation. Now there should be 3 dots in the upper right corner. Click \"Allow restricted settings\". After that the necessary permission should be grant-able. This should only apply to the APK version of the app, not the ones from F-Droid or Play Store. set location service Set location service Unfortunately the permission WRITE_SECURE_SETTINGS cannot be given directly on your Android device. Instead you need to connect your device to a computer and grant the permission via ADB. Click here to find out how to grant it: https://server47.de/automation/adb_hack.php @@ -920,7 +920,7 @@ working elsewhere If you select no item, any one will be ok. Calendars - It may be that only the first 3 types are actually working because the other types are not part of Google Calendar. + It may be that only the first 3 types are actually working because the other types are not part of Android\'s standard calendar interface. any calender availabilities In this trigger calendars with IDs %1$s have been previously configured, but have been deleted since. With the next save those will be removed from this trigger. Until then this trigger/condition will never be met. @@ -939,5 +939,5 @@ event is not reoccurring event is reoccurring reoccurring - If your calendar holds multiple events in parallel, a rule would get executed as many time as there are events matching the rule\'s criteria. Also for events that directly follow each other a rule with a matching event trigger would get executed twice.\nOnly in case a rule has multiple calendar triggers and there are multiple matching events in parallel the rule will get executed only once. + If your calendar holds multiple parallel, overlapping or directly following events, a rule will get executed as many times as there are events matching the rule\'s criteria. In case a rule has multiple calendar triggers and there are multiple matching events in parallel, then the rule will get executed only once. \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/138.txt b/fastlane/metadata/android/en-US/changelogs/138.txt index b9de9179..ea12e6d0 100644 --- a/fastlane/metadata/android/en-US/changelogs/138.txt +++ b/fastlane/metadata/android/en-US/changelogs/138.txt @@ -4,6 +4,7 @@ * Fixed: Storage permission might be displayed as not granted even if it was * Fixed: Applied a very old bugfix also to F-Droid and Google-Play editions that had by mistake been implemented only in the APK edition (timeFrame trigger with repetitions) * Fixed: Rare crash while starting service +* Fixed: Compensated for Android changes, time-based triggers are now precise again * Added: new action -> take screenshot * Added: Location service (GPS) can be toggled between states if WRITE_SECURE_SETTINGS has been granted from a computer * Added: triggerUrl action can now be used with POST and parameters