From 0368b2a8c8087dc367630d8a3f7963b47b39c384 Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 13 Mar 2022 16:06:10 +0100 Subject: [PATCH 01/14] v118 --- app/googlePlayFlavor/release/output-metadata.json | 4 ++-- fastlane/metadata/android/de-DE/changelogs/118.txt | 14 ++++++++++++++ fastlane/metadata/android/en-US/changelogs/118.txt | 3 ++- fastlane/metadata/android/es-ES/changelogs/118.txt | 14 ++++++++++++++ fastlane/metadata/android/it-IT/changelogs/118.txt | 14 ++++++++++++++ fastlane/metadata/android/nl-NL/changelogs/118.txt | 11 +++++++++++ 6 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 fastlane/metadata/android/de-DE/changelogs/118.txt create mode 100644 fastlane/metadata/android/es-ES/changelogs/118.txt create mode 100644 fastlane/metadata/android/it-IT/changelogs/118.txt create mode 100644 fastlane/metadata/android/nl-NL/changelogs/118.txt diff --git a/app/googlePlayFlavor/release/output-metadata.json b/app/googlePlayFlavor/release/output-metadata.json index 50292be..b4eeeb9 100644 --- a/app/googlePlayFlavor/release/output-metadata.json +++ b/app/googlePlayFlavor/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 116, - "versionName": "1.7.2-googlePlay", + "versionCode": 118, + "versionName": "1.7.4-googlePlay", "outputFile": "app-googlePlayFlavor-release.apk" } ], diff --git a/fastlane/metadata/android/de-DE/changelogs/118.txt b/fastlane/metadata/android/de-DE/changelogs/118.txt new file mode 100644 index 0000000..6b14d86 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/118.txt @@ -0,0 +1,14 @@ +Neuer Auslöser: +* Bildschirmstatus (ein/aus) +Neue Aktionen: +* Benachrichtigung erstellen +* Benachrichtigung(en) schließen +* Medienwiedergabe steuern +Fehler behoben: +* Übersetzungsfehler im niederländischen Variablentext +* Variablen wurden beim Senden von Textnachrichten nicht ersetzt +* Der Dienst startete nicht immer, nachdem das Gerät eingeschaltet wurde +* Setzen von Klingeltönen auf Android 11 und höher +* Für das Ändern von Klingeltönen ist die Speicher-lesen-Berechtigung nötig +* Profil, das nicht verwendet wurde, konnte nicht gelöscht werden +* Orientierungssensor an Geräten ohne Magnet-Sensor \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/118.txt b/fastlane/metadata/android/en-US/changelogs/118.txt index a0f3dc1..1b6f1f3 100644 --- a/fastlane/metadata/android/en-US/changelogs/118.txt +++ b/fastlane/metadata/android/en-US/changelogs/118.txt @@ -7,4 +7,5 @@ * Fixed: Service wouldn't always start after device has been powered on * Fixed: Set ringtones on Android 11 and above * Fixed: Permission read storage required for changing ringtones -* Fixed: Profile that were not in use, could not be deleted. \ No newline at end of file +* Fixed: Profile that were not in use, could not be deleted. +* Fixed: Orientation sensor on devices that have no magnetic sensor. \ No newline at end of file diff --git a/fastlane/metadata/android/es-ES/changelogs/118.txt b/fastlane/metadata/android/es-ES/changelogs/118.txt new file mode 100644 index 0000000..ac3c8a0 --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/118.txt @@ -0,0 +1,14 @@ +Nuevo disparador: +* estado de la pantalla (encendido / apagado) +Nuevas acciones: +* Crear notificación +* Cerrar notificación(es) +* Controlar la reproducción de medios +Corregido: +* Error de traducción en texto de variables holandesas +* Las variables no fueron reemplazadas al enviar mensajes de texto +* El servicio no siempre se iniciaría después de que el dispositivo se haya encendido +* Establecer tonos de llamada en Android 11 y superior +* Se requiere almacenamiento de lectura de permisos para cambiar los tonos de llamada +* Perfil que no estaba en uso, no se pudo eliminar +* Sensor de orientación en dispositivos que no tienen sensor magnético \ No newline at end of file diff --git a/fastlane/metadata/android/it-IT/changelogs/118.txt b/fastlane/metadata/android/it-IT/changelogs/118.txt new file mode 100644 index 0000000..24acc9c --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/118.txt @@ -0,0 +1,14 @@ +Nuovo trigger: +* stato dello schermo (on / off) +Nuove azioni: +* Crea notifica +* Chiudi notifica (s) +* Controlla la riproduzione multimediale +Fissato: +* Bug di traduzione nel testo delle variabili olandesi +* Le variabili non sono state sostituite durante l'invio di messaggi di testo +* Il servizio non si avvia sempre dopo l'accensione del dispositivo +* Imposta suonerie su Android 11 e versioni successive +* Autorizzazione di lettura necessaria per cambiare le suonerie +* Profilo che non era in uso, non poteva essere eliminato +* Sensore di orientamento su dispositivi che non hanno sensore mag. \ No newline at end of file diff --git a/fastlane/metadata/android/nl-NL/changelogs/118.txt b/fastlane/metadata/android/nl-NL/changelogs/118.txt new file mode 100644 index 0000000..2ec9327 --- /dev/null +++ b/fastlane/metadata/android/nl-NL/changelogs/118.txt @@ -0,0 +1,11 @@ +* Nieuwe trigger: schermstatus (aan / uit) +* Nieuwe actie: Melding maken +* Nieuwe actie: Sluit melding (en) +* Nieuwe actie: Bedien het afspelen van media +* Fixed: Vertaling bug in Nederlandse variabelen tekst +* Opgelost: Variabelen zijn niet vervangen bij het verzenden van sms-berichten +* Opgelost: service start niet altijd nadat het apparaat is ingeschakeld +* Opgelost: stel beltonen in op Android 11 en hoger +* Opgelost: Toestemming leesopslag vereist voor het wijzigen van beltonen +* Opgelost: Profiel dat niet in gebruik was, kon niet worden verwijderd. +* Vast: Oriëntatiesensor op apparaten die geen magnetische sensor hebben. \ No newline at end of file From 5a09962cc939d532ec10b35b2e598acdae02daec Mon Sep 17 00:00:00 2001 From: jens Date: Sat, 26 Mar 2022 20:00:19 +0100 Subject: [PATCH 02/14] TimeFrame repetition fix --- app/src/apkFlavor/java/com/jens/automation2/Rule.java | 9 +++++++++ app/src/main/java/com/jens/automation2/Trigger.java | 2 +- .../com/jens/automation2/receivers/DateTimeListener.java | 1 - build.gradle | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/apkFlavor/java/com/jens/automation2/Rule.java b/app/src/apkFlavor/java/com/jens/automation2/Rule.java index d34f756..b67d5b6 100644 --- a/app/src/apkFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/apkFlavor/java/com/jens/automation2/Rule.java @@ -334,6 +334,15 @@ public class Rule implements Comparable { if (oneTrigger.hasStateNotAppliedSinceLastRuleExecution()) return true; + + /* + Workaround for repetition in TimeFrame triggers + */ + if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.timeFrame)) + { + if(oneTrigger.getTimeFrame().repetition > 0) + return true; + } } return false; diff --git a/app/src/main/java/com/jens/automation2/Trigger.java b/app/src/main/java/com/jens/automation2/Trigger.java index bb4e23d..598786b 100644 --- a/app/src/main/java/com/jens/automation2/Trigger.java +++ b/app/src/main/java/com/jens/automation2/Trigger.java @@ -894,7 +894,7 @@ public class Trigger Miscellaneous.compareTimes(tf.getTriggerTimeStart(), tf.getTriggerTimeStop()) < 0 && (Miscellaneous.compareTimes(tf.getTriggerTimeStart(), nowTime) >= 0 - | + || Miscellaneous.compareTimes(nowTime, tf.getTriggerTimeStop()) > 0) ) 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 805d798..cf2af33 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java @@ -266,7 +266,6 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis Intent alarmIntent = new Intent(automationServiceRef, DateTimeListener.class); PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); centralAlarmManagerInstance.set(AlarmManager.RTC_WAKEUP, scheduleCandidate.time.getTimeInMillis(), alarmPendingIntent); - SimpleDateFormat sdf = new SimpleDateFormat("E dd.MM.yyyy HH:mm"); Calendar calendar = Calendar.getInstance(); diff --git a/build.gradle b/build.gradle index 3c1f634..11c8778 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.1' + classpath 'com.android.tools.build:gradle:7.1.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From c688a4c460555b433e64c4c92318ea392fb1ed9c Mon Sep 17 00:00:00 2001 From: jens Date: Sat, 26 Mar 2022 20:00:50 +0100 Subject: [PATCH 03/14] TimeFrame repetition fix --- app/src/fdroidFlavor/java/com/jens/automation2/Rule.java | 9 +++++++++ .../googlePlayFlavor/java/com/jens/automation2/Rule.java | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java b/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java index b8102bd..3e15a09 100644 --- a/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java @@ -331,6 +331,15 @@ public class Rule implements Comparable { if (oneTrigger.hasStateNotAppliedSinceLastRuleExecution()) return true; + + /* + Workaround for repetition in TimeFrame triggers + */ + if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.timeFrame)) + { + if(oneTrigger.getTimeFrame().repetition > 0) + return true; + } } return false; diff --git a/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java b/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java index 6ec99af..5d8f255 100644 --- a/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java @@ -334,6 +334,15 @@ public class Rule implements Comparable { if (oneTrigger.hasStateNotAppliedSinceLastRuleExecution()) return true; + + /* + Workaround for repetition in TimeFrame triggers + */ + if(oneTrigger.getTriggerType().equals(Trigger.Trigger_Enum.timeFrame)) + { + if(oneTrigger.getTimeFrame().repetition > 0) + return true; + } } return false; From 7ed04c7ae2fcb77f4b057e59c36a42e77a26003a Mon Sep 17 00:00:00 2001 From: jens Date: Tue, 29 Mar 2022 17:56:04 +0200 Subject: [PATCH 04/14] cosmetics --- .../receivers/DateTimeListener.java | 21 ++----------------- 1 file changed, 2 insertions(+), 19 deletions(-) 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 cf2af33..62a13c9 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java @@ -27,8 +27,6 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis { private static AutomationService automationServiceRef; private static AlarmManager centralAlarmManagerInstance; -// private static Intent alarmIntent; -// private static PendingIntent alarmPendingIntent; private static boolean alarmListenerActive=false; private static ArrayList alarmCandidates = new ArrayList<>(); @@ -77,23 +75,7 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis clearAlarms(); - int i=0; - -// // get a Calendar object with current time -// Calendar cal = Calendar.getInstance(); -// // add 5 minutes to the calendar object -// cal.add(Calendar.SECOND, 10); -// String calSetWorkingCopyString2 = null; -// SimpleDateFormat sdf2 = new SimpleDateFormat("E dd.MM.yyyy HH:mm"); -// if (cal != null) -// { -// calSetWorkingCopyString2 = sdf2.format(cal.getTime()); -// } -// Miscellaneous.logEvent("i", "AlarmManager", "Setting repeating alarm because of hardcoded test: beginning at " + calSetWorkingCopyString2); -// Intent alarmIntent2 = new Intent(automationServiceRef, AlarmListener.class); -// PendingIntent alarmPendingIntent2 = PendingIntent.getBroadcast(automationServiceRef, 0, alarmIntent2, 0); -// centralAlarmManagerInstance.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5000, alarmPendingIntent2); -// requestCodeList.add(0); + int i=0; ArrayList allRulesWithTimeFrames = new ArrayList(); allRulesWithTimeFrames = Rule.findRuleCandidates(Trigger_Enum.timeFrame); @@ -282,6 +264,7 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, requestCode, alarmIntent, 0); // Miscellaneous.logEvent("i", "AlarmManager", "Clearing alarm with request code: " + String.valueOf(requestCode)); centralAlarmManagerInstance.cancel(alarmPendingIntent); + centralAlarmManagerInstance. } requestCodeList.clear(); } From 152b0c3c49af4e5ed0c17dc12964512e8d9d0d20 Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 3 Apr 2022 14:46:28 +0200 Subject: [PATCH 05/14] fix in DateTimeTrigger management and executions when service already stopped --- .../jens/automation2/ActivityManageRule.java | 14 ++++++++--- .../ActivityManageTriggerTimeFrame.java | 25 +++++++++++++------ .../java/com/jens/automation2/TimeFrame.java | 23 +++++++++++++++++ .../jens/automation2/XmlFileInterface.java | 3 --- .../receivers/DateTimeListener.java | 10 ++++---- 5 files changed, 57 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/ActivityManageRule.java b/app/src/main/java/com/jens/automation2/ActivityManageRule.java index 82c2131..32ec450 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java @@ -256,8 +256,10 @@ public class ActivityManageRule extends Activity switch(selectedTrigger.getTriggerType()) { case timeFrame: - ActivityManageTriggerTimeFrame.editedTimeFrameTrigger = selectedTrigger; +// ActivityManageTriggerTimeFrame.editedTimeFrameTrigger = selectedTrigger; Intent timeFrameEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerTimeFrame.class); + timeFrameEditor.putExtra(intentNameTriggerParameter1, selectedTrigger.getTriggerParameter()); + timeFrameEditor.putExtra(intentNameTriggerParameter2, selectedTrigger.getTriggerParameter2()); startActivityForResult(timeFrameEditor, requestCodeTriggerTimeframeEdit); break; case bluetoothConnection: @@ -1232,9 +1234,15 @@ public class ActivityManageRule extends Activity else if(requestCode == requestCodeTriggerTimeframeEdit) { //edit TimeFrame - if(resultCode == RESULT_OK && ActivityManageTriggerTimeFrame.editedTimeFrameTrigger != null) + if(resultCode == RESULT_OK && data.hasExtra(intentNameTriggerParameter2)) { - ActivityManageTriggerTimeFrame.editedTimeFrameTrigger.setParentRule(ruleToEdit); + Trigger responseTimeFrame = new Trigger(); + responseTimeFrame.setTriggerType(Trigger_Enum.timeFrame); + responseTimeFrame.setTriggerParameter(data.getBooleanExtra(intentNameTriggerParameter1, true)); + responseTimeFrame.setTriggerParameter2(data.getStringExtra(intentNameTriggerParameter2)); + responseTimeFrame.setTimeFrame(new TimeFrame(data.getStringExtra(intentNameTriggerParameter2))); + responseTimeFrame.setParentRule(ruleToEdit); + ruleToEdit.getTriggerSet().set(editIndex, responseTimeFrame); this.refreshTriggerList(); } else diff --git a/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java b/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java index 9bbf606..45ab58c 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java @@ -1,6 +1,7 @@ package com.jens.automation2; import android.app.Activity; +import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; @@ -27,7 +28,7 @@ public class ActivityManageTriggerTimeFrame extends Activity RadioButton radioTimeFrameEntering, radioTimeFrameLeaving; EditText etRepeatEvery; - public static Trigger editedTimeFrameTrigger = null; + static Trigger editedTimeFrameTrigger = null; @Override protected void onCreate(Bundle savedInstanceState) @@ -152,8 +153,13 @@ public class ActivityManageTriggerTimeFrame extends Activity } editedTimeFrameTrigger.setTriggerParameter(radioTimeFrameEntering.isChecked()); - - setResult(RESULT_OK); + editedTimeFrameTrigger.setTriggerParameter2(editedTimeFrameTrigger.getTimeFrame().toTriggerParameter2String()); + + Intent response = new Intent(); + response.putExtra(ActivityManageRule.intentNameTriggerParameter1, editedTimeFrameTrigger.getTriggerParameter()); + response.putExtra(ActivityManageRule.intentNameTriggerParameter2, editedTimeFrameTrigger.getTriggerParameter2()); + + setResult(RESULT_OK, response); finish(); } }); @@ -166,9 +172,15 @@ public class ActivityManageTriggerTimeFrame extends Activity etRepeatEvery.setEnabled(isChecked); } }); - - if(editedTimeFrameTrigger.getTimeFrame() != null) + + if(getIntent().hasExtra(ActivityManageRule.intentNameTriggerParameter2)) + { + editedTimeFrameTrigger = new Trigger(); + editedTimeFrameTrigger.setTriggerParameter(getIntent().getBooleanExtra(ActivityManageRule.intentNameTriggerParameter1, true)); + editedTimeFrameTrigger.setTriggerParameter2(getIntent().getStringExtra(ActivityManageRule.intentNameTriggerParameter2)); + editedTimeFrameTrigger.setTimeFrame(new TimeFrame(editedTimeFrameTrigger.getTriggerParameter2())); loadVariableIntoGui(); + } } private void loadVariableIntoGui() @@ -219,5 +231,4 @@ public class ActivityManageTriggerTimeFrame extends Activity etRepeatEvery.setText(String.valueOf(editedTimeFrameTrigger.getTimeFrame().getRepetition())); } } - -} +} \ No newline at end of file diff --git a/app/src/main/java/com/jens/automation2/TimeFrame.java b/app/src/main/java/com/jens/automation2/TimeFrame.java index a15059e..d776e6e 100644 --- a/app/src/main/java/com/jens/automation2/TimeFrame.java +++ b/app/src/main/java/com/jens/automation2/TimeFrame.java @@ -80,6 +80,29 @@ public class TimeFrame this.setRepetition(Long.parseLong(dateArray[3])); } + public String toTriggerParameter2String() + { + StringBuilder response = new StringBuilder(); + response.append(this.getTriggerTimeStart().getHours() + ":" + this.getTriggerTimeStart().getMinutes() + ":0"); + response.append(separator); + response.append(this.getTriggerTimeStop().getHours() + ":" + this.getTriggerTimeStop().getMinutes() + ":0"); + response.append(separator); + + StringBuilder days = new StringBuilder(); + + for(int day : dayList) + days.append(String.valueOf(day)); + + response.append(days.toString()); + + if(this.repetition > 0) + { + response.append(separator + this.getRepetition()); + } + + return response.toString(); + } + @Override public String toString() { diff --git a/app/src/main/java/com/jens/automation2/XmlFileInterface.java b/app/src/main/java/com/jens/automation2/XmlFileInterface.java index ba5bec3..7193b0b 100644 --- a/app/src/main/java/com/jens/automation2/XmlFileInterface.java +++ b/app/src/main/java/com/jens/automation2/XmlFileInterface.java @@ -254,8 +254,6 @@ public class XmlFileInterface else serializer.text("null"); } - else if(Rule.getRuleCollection().get(i).getTriggerSet().get(j).getTriggerType() == Trigger_Enum.timeFrame) - serializer.text(Rule.getRuleCollection().get(i).getTriggerSet().get(j).getTimeFrame().toString()); else if(Rule.getRuleCollection().get(i).getTriggerSet().get(j).getTriggerType() == Trigger_Enum.speed) serializer.text(String.valueOf(Rule.getRuleCollection().get(i).getTriggerSet().get(j).getSpeed())); else if(Rule.getRuleCollection().get(i).getTriggerSet().get(j).getTriggerType() == Trigger_Enum.noiseLevel) @@ -838,7 +836,6 @@ public class XmlFileInterface private static Trigger readTrigger(XmlPullParser parser) throws IOException, XmlPullParserException { - /* FILE EXAMPE: * ***************** * 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 62a13c9..5eb2f06 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java @@ -29,8 +29,8 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis private static AlarmManager centralAlarmManagerInstance; private static boolean alarmListenerActive=false; private static ArrayList alarmCandidates = new ArrayList<>(); - private static ArrayList requestCodeList = new ArrayList(); + static PendingIntent alarmPendingIntent = null; public static void startAlarmListener(final AutomationService automationServiceRef) { @@ -246,7 +246,7 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis } Intent alarmIntent = new Intent(automationServiceRef, DateTimeListener.class); - PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); + alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); centralAlarmManagerInstance.set(AlarmManager.RTC_WAKEUP, scheduleCandidate.time.getTimeInMillis(), alarmPendingIntent); SimpleDateFormat sdf = new SimpleDateFormat("E dd.MM.yyyy HH:mm"); @@ -261,10 +261,10 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis for(int requestCode : requestCodeList) { Intent alarmIntent = new Intent(automationServiceRef, DateTimeListener.class); - PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, requestCode, alarmIntent, 0); + if(alarmPendingIntent == null) + alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, requestCode, alarmIntent, 0); // Miscellaneous.logEvent("i", "AlarmManager", "Clearing alarm with request code: " + String.valueOf(requestCode)); centralAlarmManagerInstance.cancel(alarmPendingIntent); - centralAlarmManagerInstance. } requestCodeList.clear(); } @@ -298,7 +298,7 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis { Miscellaneous.logEvent("i", "AlarmListener", "Stopping alarm listener.", 4); clearAlarms(); -// centralAlarmManagerInstance.cancel(alarmPendingIntent); + centralAlarmManagerInstance.cancel(alarmPendingIntent); alarmListenerActive = false; } else From 0d3a13e753dff9539b9318f3b56cdf47fa516947 Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 3 Apr 2022 16:20:20 +0200 Subject: [PATCH 06/14] fix in DateTimeTrigger management and executions when service already stopped --- .../com/jens/automation2/ActivityControlCenter.java | 4 ++++ .../java/com/jens/automation2/ActivityManagePoi.java | 1 - .../jens/automation2/receivers/DateTimeListener.java | 11 +---------- .../main/res/layout/activity_manage_specific_poi.xml | 4 ++-- fastlane/metadata/android/en-US/changelogs/119.txt | 3 +++ 5 files changed, 10 insertions(+), 13 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/119.txt diff --git a/app/src/main/java/com/jens/automation2/ActivityControlCenter.java b/app/src/main/java/com/jens/automation2/ActivityControlCenter.java index 04cb1c3..393e2e8 100644 --- a/app/src/main/java/com/jens/automation2/ActivityControlCenter.java +++ b/app/src/main/java/com/jens/automation2/ActivityControlCenter.java @@ -222,6 +222,10 @@ public class ActivityControlCenter extends Activity } Settings.readFromPersistentStorage(ActivityControlCenter.this); + + AutomationService service = AutomationService.getInstance(); + if(service != null) + service.applySettingsAndRules(); } else Toast.makeText(ActivityControlCenter.this, getResources().getString(R.string.noFilesImported), Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/com/jens/automation2/ActivityManagePoi.java b/app/src/main/java/com/jens/automation2/ActivityManagePoi.java index 5f071f7..990465f 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManagePoi.java +++ b/app/src/main/java/com/jens/automation2/ActivityManagePoi.java @@ -34,7 +34,6 @@ public class ActivityManagePoi extends Activity public LocationManager myLocationManager; MyLocationListenerGps myLocationListenerGps = new MyLocationListenerGps(); Location locationGps = null, locationNetwork = null; -// Location locationWifi = null; MyLocationListenerNetwork myLocationListenerNetwork = new MyLocationListenerNetwork(); Button bGetPosition, bSavePoi; ImageButton ibShowOnMap; 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 5eb2f06..1fa1491 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java @@ -50,12 +50,8 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis public void onReceive(Context context, Intent intent) { Miscellaneous.logEvent("i", "AlarmListener", "Alarm received", 2); - Date now = new Date(); - String timeString = String.valueOf(now.getHours()) + ":" + String.valueOf(now.getMinutes()) + ":" + String.valueOf(now.getSeconds()); - Time passTime = Time.valueOf(timeString); ArrayList allRulesWithNowInTimeFrame = Rule.findRuleCandidates(Trigger_Enum.timeFrame); -// ArrayList allRulesWithNowInTimeFrame = Rule.findRuleCandidatesByTime(passTime); for(int i=0; i now.getTimeInMillis()) calSet.add(Calendar.DAY_OF_MONTH, -1); @@ -401,11 +395,8 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis * Das war mal aktiviert. Allerdings: Die ganze Funktion liefert zurück, wenn die Regel NOCH nicht * zutrifft, aber wir z.B. gleich den zeitlichen Bereich betreten. */ -// if(trigger.checkDateTime(calSchedule.getTime(), false)) -// { + return calSchedule; -// } -// } } else Miscellaneous.logEvent("i", "DateTimeListener", "Trigger " + trigger.toString() + " is not executed repeatedly.", 5); diff --git a/app/src/main/res/layout/activity_manage_specific_poi.xml b/app/src/main/res/layout/activity_manage_specific_poi.xml index c13d41c..12677cc 100644 --- a/app/src/main/res/layout/activity_manage_specific_poi.xml +++ b/app/src/main/res/layout/activity_manage_specific_poi.xml @@ -57,7 +57,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" - android:inputType="numberSigned" /> + android:inputType="text" /> @@ -78,7 +78,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" - android:inputType="numberSigned" /> + android:inputType="text" /> Date: Sun, 3 Apr 2022 20:25:10 +0200 Subject: [PATCH 07/14] fix in DateTimeTrigger management and executions when service already stopped --- .../apkFlavor/java/com/jens/automation2/Rule.java | 14 +++++++++----- .../com/jens/automation2/ActivityManageRule.java | 7 ++++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/app/src/apkFlavor/java/com/jens/automation2/Rule.java b/app/src/apkFlavor/java/com/jens/automation2/Rule.java index b67d5b6..fe80995 100644 --- a/app/src/apkFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/apkFlavor/java/com/jens/automation2/Rule.java @@ -233,20 +233,24 @@ public class Rule implements Comparable } if(!changeExistingRule) - for(Rule rule : Rule.ruleCollection) - if(rule.getName().equals(this.getName())) + { + for (Rule rule : Rule.ruleCollection) + { + if (rule.getName().equals(this.getName())) { Toast.makeText(context, context.getResources().getString(R.string.anotherRuleByThatName), Toast.LENGTH_LONG).show(); return false; } - - if(this.getTriggerSet().size()==0) + } + } + + if(this.getTriggerSet().size() == 0) { Toast.makeText(context, context.getResources().getString(R.string.pleaseSpecifiyTrigger), Toast.LENGTH_LONG).show(); return false; } - if(this.getActionSet().size()==0) + if(this.getActionSet().size() == 0) { Toast.makeText(context, context.getResources().getString(R.string.pleaseSpecifiyAction), Toast.LENGTH_LONG).show(); return false; diff --git a/app/src/main/java/com/jens/automation2/ActivityManageRule.java b/app/src/main/java/com/jens/automation2/ActivityManageRule.java index 32ec450..efbfca6 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java @@ -70,7 +70,7 @@ public class ActivityManageRule extends Activity static int triggerBattery; static double triggerSpeed; static double triggerNoise; - + static Rule ruleToEdit; static boolean newRule; @@ -225,6 +225,11 @@ public class ActivityManageRule extends Activity loadFormValuesToVariable(); if(ruleToEdit.change(context)) { + for(Rule r : Rule.ruleCollection) + { + r.get + } + ActivityPermissions.getRequiredPermissions(false); finish(); } From 62c97832a9d5ade0012ebf88e3c87e37c5c7a7c9 Mon Sep 17 00:00:00 2001 From: jens Date: Mon, 4 Apr 2022 20:21:34 +0200 Subject: [PATCH 08/14] fix in DateTimeTrigger management and executions when service already stopped --- .../java/com/jens/automation2/Rule.java | 21 +++++------ .../java/com/jens/automation2/Rule.java | 35 +++++++++++-------- .../java/com/jens/automation2/Rule.java | 35 +++++++++++-------- .../jens/automation2/ActivityMainRules.java | 3 +- .../jens/automation2/ActivityManageRule.java | 35 ++++++++----------- 5 files changed, 68 insertions(+), 61 deletions(-) diff --git a/app/src/apkFlavor/java/com/jens/automation2/Rule.java b/app/src/apkFlavor/java/com/jens/automation2/Rule.java index fe80995..db385da 100644 --- a/app/src/apkFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/apkFlavor/java/com/jens/automation2/Rule.java @@ -21,23 +21,23 @@ import java.util.List; public class Rule implements Comparable { - private static ArrayList ruleCollection = new ArrayList(); + protected static ArrayList ruleCollection = new ArrayList(); - private static List ruleRunHistory = new ArrayList(); + protected static List ruleRunHistory = new ArrayList(); public static List getRuleRunHistory() { return ruleRunHistory; } - private ArrayList triggerSet; - private ArrayList actionSet; - private String name; - private boolean ruleActive = true; // rules can be deactivated, so they won't fire if you don't want them temporarily - private boolean ruleToggle = false; // rule will run again and do the opposite of its actions if applicable - private Calendar lastExecution; - - private static Date lastActivatedRuleActivationTime; + protected ArrayList triggerSet; + protected ArrayList actionSet; + protected String name; + protected boolean ruleActive = true; // rules can be deactivated, so they won't fire if you don't want them temporarily + protected boolean ruleToggle = false; // rule will run again and do the opposite of its actions if applicable + protected Calendar lastExecution; + + protected static Date lastActivatedRuleActivationTime; public Calendar getLastExecution() { @@ -185,6 +185,7 @@ public class Rule implements Comparable if(this.checkBeforeSaving(context, true)) { Miscellaneous.logEvent("i", "Rule", "Changing rule: " + this.toString(), 3); + boolean returnValue = XmlFileInterface.writeFile(); if(returnValue) diff --git a/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java b/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java index 3e15a09..0a4ab03 100644 --- a/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/fdroidFlavor/java/com/jens/automation2/Rule.java @@ -18,23 +18,23 @@ import java.util.List; public class Rule implements Comparable { - private static ArrayList ruleCollection = new ArrayList(); + protected static ArrayList ruleCollection = new ArrayList(); - private static List ruleRunHistory = new ArrayList(); + protected static List ruleRunHistory = new ArrayList(); public static List getRuleRunHistory() { return ruleRunHistory; } - private ArrayList triggerSet; - private ArrayList actionSet; - private String name; - private boolean ruleActive = true; // rules can be deactivated, so they won't fire if you don't want them temporarily - private boolean ruleToggle = false; // rule will run again and do the opposite of its actions if applicable - private Calendar lastExecution; - - private static Date lastActivatedRuleActivationTime; + protected ArrayList triggerSet; + protected ArrayList actionSet; + protected String name; + protected boolean ruleActive = true; // rules can be deactivated, so they won't fire if you don't want them temporarily + protected boolean ruleToggle = false; // rule will run again and do the opposite of its actions if applicable + protected Calendar lastExecution; + + protected static Date lastActivatedRuleActivationTime; public Calendar getLastExecution() { @@ -182,6 +182,7 @@ public class Rule implements Comparable if(this.checkBeforeSaving(context, true)) { Miscellaneous.logEvent("i", "Rule", "Changing rule: " + this.toString(), 3); + boolean returnValue = XmlFileInterface.writeFile(); if(returnValue) @@ -230,20 +231,24 @@ public class Rule implements Comparable } if(!changeExistingRule) - for(Rule rule : Rule.ruleCollection) - if(rule.getName().equals(this.getName())) + { + for (Rule rule : Rule.ruleCollection) + { + if (rule.getName().equals(this.getName())) { Toast.makeText(context, context.getResources().getString(R.string.anotherRuleByThatName), Toast.LENGTH_LONG).show(); return false; } - - if(this.getTriggerSet().size()==0) + } + } + + if(this.getTriggerSet().size() == 0) { Toast.makeText(context, context.getResources().getString(R.string.pleaseSpecifiyTrigger), Toast.LENGTH_LONG).show(); return false; } - if(this.getActionSet().size()==0) + if(this.getActionSet().size() == 0) { Toast.makeText(context, context.getResources().getString(R.string.pleaseSpecifiyAction), Toast.LENGTH_LONG).show(); return false; diff --git a/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java b/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java index 5d8f255..27798c9 100644 --- a/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/googlePlayFlavor/java/com/jens/automation2/Rule.java @@ -21,23 +21,23 @@ import java.util.List; public class Rule implements Comparable { - private static ArrayList ruleCollection = new ArrayList(); + protected static ArrayList ruleCollection = new ArrayList(); - private static List ruleRunHistory = new ArrayList(); + protected static List ruleRunHistory = new ArrayList(); public static List getRuleRunHistory() { return ruleRunHistory; } - private ArrayList triggerSet; - private ArrayList actionSet; - private String name; - private boolean ruleActive = true; // rules can be deactivated, so they won't fire if you don't want them temporarily - private boolean ruleToggle = false; // rule will run again and do the opposite of its actions if applicable - private Calendar lastExecution; - - private static Date lastActivatedRuleActivationTime; + protected ArrayList triggerSet; + protected ArrayList actionSet; + protected String name; + protected boolean ruleActive = true; // rules can be deactivated, so they won't fire if you don't want them temporarily + protected boolean ruleToggle = false; // rule will run again and do the opposite of its actions if applicable + protected Calendar lastExecution; + + protected static Date lastActivatedRuleActivationTime; public Calendar getLastExecution() { @@ -185,6 +185,7 @@ public class Rule implements Comparable if(this.checkBeforeSaving(context, true)) { Miscellaneous.logEvent("i", "Rule", "Changing rule: " + this.toString(), 3); + boolean returnValue = XmlFileInterface.writeFile(); if(returnValue) @@ -233,20 +234,24 @@ public class Rule implements Comparable } if(!changeExistingRule) - for(Rule rule : Rule.ruleCollection) - if(rule.getName().equals(this.getName())) + { + for (Rule rule : Rule.ruleCollection) + { + if (rule.getName().equals(this.getName())) { Toast.makeText(context, context.getResources().getString(R.string.anotherRuleByThatName), Toast.LENGTH_LONG).show(); return false; } - - if(this.getTriggerSet().size()==0) + } + } + + if(this.getTriggerSet().size() == 0) { Toast.makeText(context, context.getResources().getString(R.string.pleaseSpecifiyTrigger), Toast.LENGTH_LONG).show(); return false; } - if(this.getActionSet().size()==0) + if(this.getActionSet().size() == 0) { Toast.makeText(context, context.getResources().getString(R.string.pleaseSpecifiyAction), Toast.LENGTH_LONG).show(); return false; diff --git a/app/src/main/java/com/jens/automation2/ActivityMainRules.java b/app/src/main/java/com/jens/automation2/ActivityMainRules.java index 85221de..20b02b7 100644 --- a/app/src/main/java/com/jens/automation2/ActivityMainRules.java +++ b/app/src/main/java/com/jens/automation2/ActivityMainRules.java @@ -25,6 +25,7 @@ import java.util.ArrayList; public class ActivityMainRules extends ActivityGeneric { + public static final String intentNameRuleName = "ruleName"; private ListView ruleListView; ArrayList ruleList = new ArrayList<>(); private ArrayAdapter ruleListViewAdapter; @@ -207,8 +208,8 @@ public class ActivityMainRules extends ActivityGeneric Toast.makeText(ActivityMainRules.this, getResources().getString(R.string.serviceHasToRunForThat), Toast.LENGTH_LONG).show(); break; case 1: - ruleToEdit = ruleThisIsAbout; Intent manageSpecificRuleIntent = new Intent (ActivityMainRules.this, ActivityManageRule.class); + manageSpecificRuleIntent.putExtra(intentNameRuleName, ruleThisIsAbout.getName()); startActivityForResult(manageSpecificRuleIntent, requestCodeChangeRule); break; case 2: diff --git a/app/src/main/java/com/jens/automation2/ActivityManageRule.java b/app/src/main/java/com/jens/automation2/ActivityManageRule.java index efbfca6..1f88725 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java @@ -71,11 +71,12 @@ public class ActivityManageRule extends Activity static double triggerSpeed; static double triggerNoise; - static Rule ruleToEdit; static boolean newRule; static Trigger newTrigger; static Action newAction; + + Rule ruleToEdit = null; ArrayAdapter triggerListViewAdapter; ArrayAdapter actionListViewAdapter; @@ -130,10 +131,10 @@ public class ActivityManageRule extends Activity @Override protected void onCreate(Bundle savedInstanceState) { - context = this; super.onCreate(savedInstanceState); setContentView(R.layout.activity_manage_specific_rule); - + + context = this; instance = this; cmdTriggerAdd = (Button)findViewById(R.id.cmdTriggerAdd); @@ -147,7 +148,17 @@ public class ActivityManageRule extends Activity imageHelpButton = (ImageView)findViewById(R.id.imageHelpButton); //decide if it will be created anew or loaded to edit an existing one - if(ActivityMainRules.ruleToEdit == null) + if(getIntent().hasExtra(ActivityMainRules.intentNameRuleName)) + { + // change existing rule + Miscellaneous.logEvent("i", "Rule", "Cache not empty, assuming change request.", 3); + newRule = false; + ruleToEdit = Rule.getByName(getIntent().getStringExtra(ActivityMainRules.intentNameRuleName)); + triggerListViewAdapter = new ArrayAdapter(this, R.layout.text_view_for_poi_listview_mediumtextsize, ruleToEdit.getTriggerSet()); + actionListViewAdapter = new ArrayAdapter(this, R.layout.text_view_for_poi_listview_mediumtextsize, ruleToEdit.getActionSet()); + loadVariablesIntoGui(); + } + else { // new rule Miscellaneous.logEvent("i", "Rule", "Cache empty, assuming create request.", 3); @@ -158,16 +169,6 @@ public class ActivityManageRule extends Activity triggerListViewAdapter = new ArrayAdapter(this, R.layout.text_view_for_poi_listview_mediumtextsize, ruleToEdit.getTriggerSet()); actionListViewAdapter = new ArrayAdapter(this, R.layout.text_view_for_poi_listview_mediumtextsize, ruleToEdit.getActionSet()); } - else - { - // change existing rule - Miscellaneous.logEvent("i", "Rule", "Cache not empty, assuming change request.", 3); - newRule = false; - ruleToEdit = ActivityMainRules.ruleToEdit; - triggerListViewAdapter = new ArrayAdapter(this, R.layout.text_view_for_poi_listview_mediumtextsize, ruleToEdit.getTriggerSet()); - actionListViewAdapter = new ArrayAdapter(this, R.layout.text_view_for_poi_listview_mediumtextsize, ruleToEdit.getActionSet()); - loadVariablesIntoGui(); - } cmdTriggerAdd.setOnClickListener(new OnClickListener() { @@ -225,11 +226,6 @@ public class ActivityManageRule extends Activity loadFormValuesToVariable(); if(ruleToEdit.change(context)) { - for(Rule r : Rule.ruleCollection) - { - r.get - } - ActivityPermissions.getRequiredPermissions(false); finish(); } @@ -261,7 +257,6 @@ public class ActivityManageRule extends Activity switch(selectedTrigger.getTriggerType()) { case timeFrame: -// ActivityManageTriggerTimeFrame.editedTimeFrameTrigger = selectedTrigger; Intent timeFrameEditor = new Intent(ActivityManageRule.this, ActivityManageTriggerTimeFrame.class); timeFrameEditor.putExtra(intentNameTriggerParameter1, selectedTrigger.getTriggerParameter()); timeFrameEditor.putExtra(intentNameTriggerParameter2, selectedTrigger.getTriggerParameter2()); From d5ce04f80b6690e178b0b60e8cee353eeadf9b2e Mon Sep 17 00:00:00 2001 From: jens Date: Sat, 7 May 2022 02:06:17 +0200 Subject: [PATCH 09/14] wifi trigger, memorize most recent ssid --- .../com/jens/automation2/location/WifiBroadcastReceiver.java | 5 +++-- .../com/jens/automation2/receivers/DateTimeListener.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/location/WifiBroadcastReceiver.java b/app/src/main/java/com/jens/automation2/location/WifiBroadcastReceiver.java index 3d426a9..5f4d68a 100644 --- a/app/src/main/java/com/jens/automation2/location/WifiBroadcastReceiver.java +++ b/app/src/main/java/com/jens/automation2/location/WifiBroadcastReceiver.java @@ -40,8 +40,9 @@ public class WifiBroadcastReceiver extends BroadcastReceiver { if(newWifiSsid.startsWith("\"") && newWifiSsid.endsWith("\"")) newWifiSsid = newWifiSsid.substring(1, newWifiSsid.length()-1); - - WifiBroadcastReceiver.lastWifiSsid = newWifiSsid; + + if(newWifiSsid.length() > 0) + WifiBroadcastReceiver.lastWifiSsid = newWifiSsid; } public static boolean isWifiListenerActive() 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 1fa1491..8a70863 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java @@ -52,7 +52,7 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis Miscellaneous.logEvent("i", "AlarmListener", "Alarm received", 2); ArrayList allRulesWithNowInTimeFrame = Rule.findRuleCandidates(Trigger_Enum.timeFrame); - for(int i=0; i Date: Sun, 8 May 2022 14:50:40 +0200 Subject: [PATCH 10/14] bug when importing config while service is not running --- .../main/java/com/jens/automation2/ActivityControlCenter.java | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/ActivityControlCenter.java b/app/src/main/java/com/jens/automation2/ActivityControlCenter.java index 393e2e8..df4a87e 100644 --- a/app/src/main/java/com/jens/automation2/ActivityControlCenter.java +++ b/app/src/main/java/com/jens/automation2/ActivityControlCenter.java @@ -224,7 +224,7 @@ public class ActivityControlCenter extends Activity Settings.readFromPersistentStorage(ActivityControlCenter.this); AutomationService service = AutomationService.getInstance(); - if(service != null) + if(service != null && service.isRunning) service.applySettingsAndRules(); } else diff --git a/build.gradle b/build.gradle index 11c8778..9b826b6 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.1.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 52a10fe626036ea1cb9c40c2dd46db42f4ccf2b7 Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 8 May 2022 20:04:45 +0200 Subject: [PATCH 11/14] bug when importing config while service is not running --- .../java/com/jens/automation2/ActivityMainRules.java | 10 ---------- .../java/com/jens/automation2/AutomationService.java | 9 +++++++-- .../jens/automation2/receivers/DateTimeListener.java | 2 +- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/ActivityMainRules.java b/app/src/main/java/com/jens/automation2/ActivityMainRules.java index 20b02b7..eba0a96 100644 --- a/app/src/main/java/com/jens/automation2/ActivityMainRules.java +++ b/app/src/main/java/com/jens/automation2/ActivityMainRules.java @@ -252,15 +252,5 @@ public class ActivityMainRules extends ActivityGeneric } catch(NullPointerException e) {} - - try - { - if(AutomationService.isMyServiceRunning(this)) - DateTimeListener.reloadAlarms(); - } - catch(NullPointerException e) - { - // AlarmManager instance not prepared, yet. - } } } \ No newline at end of file diff --git a/app/src/main/java/com/jens/automation2/AutomationService.java b/app/src/main/java/com/jens/automation2/AutomationService.java index b156e0a..5f5111c 100644 --- a/app/src/main/java/com/jens/automation2/AutomationService.java +++ b/app/src/main/java/com/jens/automation2/AutomationService.java @@ -28,6 +28,7 @@ import androidx.core.app.NotificationManagerCompat; import com.jens.automation2.Trigger.Trigger_Enum; import com.jens.automation2.location.LocationProvider; +import com.jens.automation2.receivers.DateTimeListener; import com.jens.automation2.receivers.PackageReplacedReceiver; import com.jens.automation2.receivers.PhoneStatusListener; @@ -57,6 +58,8 @@ public class AutomationService extends Service implements OnInitListener protected Calendar lockSoundChangesEnd = null; protected boolean isRunning; + protected static AutomationService centralInstance = null; + public void nullLockSoundChangesEnd() { lockSoundChangesEnd = null; @@ -94,8 +97,6 @@ public class AutomationService extends Service implements OnInitListener return myLocationProvider; } - protected static AutomationService centralInstance = null; - public static AutomationService getInstance() { return centralInstance; @@ -287,6 +288,8 @@ public class AutomationService extends Service implements OnInitListener myLocationProvider.applySettingsAndRules(); ReceiverCoordinator.applySettingsAndRules(); + + DateTimeListener.reloadAlarms(); } @Override @@ -460,6 +463,8 @@ public class AutomationService extends Service implements OnInitListener ttsEngine.shutdown(); PackageReplacedReceiver.setHasServiceBeenRunning(false, this); + + centralInstance = null; } protected static Builder createDefaultNotificationBuilderOld() 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 8a70863..2f72a7b 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java @@ -245,7 +245,7 @@ public class DateTimeListener extends BroadcastReceiver implements AutomationLis alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); centralAlarmManagerInstance.set(AlarmManager.RTC_WAKEUP, scheduleCandidate.time.getTimeInMillis(), alarmPendingIntent); - SimpleDateFormat sdf = new SimpleDateFormat("E dd.MM.yyyy HH:mm"); + SimpleDateFormat sdf = new SimpleDateFormat("E dd.MM.yyyy HH:mm:ss"); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(scheduleCandidate.time.getTimeInMillis()); Miscellaneous.logEvent("i", "AlarmManager", "Chose " + sdf.format(calendar.getTime()) + " as next scheduled alarm.", 4); From 3f36c4c6b36f421de13f53b831ebc8633d98b2e5 Mon Sep 17 00:00:00 2001 From: jens Date: Mon, 9 May 2022 20:09:11 +0200 Subject: [PATCH 12/14] bug when picking app to start --- .../com/jens/automation2/ActivityManageActionStartActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/jens/automation2/ActivityManageActionStartActivity.java b/app/src/main/java/com/jens/automation2/ActivityManageActionStartActivity.java index ae31210..4f7b774 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageActionStartActivity.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageActionStartActivity.java @@ -378,7 +378,7 @@ public class ActivityManageActionStartActivity extends Activity public void onClick(View v) { int targetSdkVersion = getApplicationContext().getApplicationInfo().targetSdkVersion; - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && targetSdkVersion >= 30) + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && targetSdkVersion >= 30 && shouldShowRequestPermissionRationale(Manifest.permission.QUERY_ALL_PACKAGES)) { requestPermissions(new String[] {Manifest.permission.QUERY_ALL_PACKAGES}, requestCodeForRequestQueryAllPackagesPermission); } From bdbed3dbefa03459d7a624cf6a753fc34a7c277b Mon Sep 17 00:00:00 2001 From: jens Date: Tue, 10 May 2022 12:42:14 +0200 Subject: [PATCH 13/14] app info text updated --- .../java/com/jens/automation2/ActivityControlCenter.java | 5 ++++- app/src/main/java/com/jens/automation2/Miscellaneous.java | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/ActivityControlCenter.java b/app/src/main/java/com/jens/automation2/ActivityControlCenter.java index df4a87e..ade18b6 100644 --- a/app/src/main/java/com/jens/automation2/ActivityControlCenter.java +++ b/app/src/main/java/com/jens/automation2/ActivityControlCenter.java @@ -346,13 +346,16 @@ public class ActivityControlCenter extends Activity public static String getSystemInfo() { StringBuilder systemInfoText = new StringBuilder(); + systemInfoText.append("App details" + Miscellaneous.lineSeparator); + systemInfoText.append("Version name: " + BuildConfig.VERSION_NAME + Miscellaneous.lineSeparator); + systemInfoText.append("Version code: " + BuildConfig.VERSION_CODE + Miscellaneous.lineSeparator); + systemInfoText.append("Flavor: " + BuildConfig.FLAVOR + Miscellaneous.lineSeparator); systemInfoText.append("Device details" + Miscellaneous.lineSeparator); systemInfoText.append("OS version: " + System.getProperty("os.version") + Miscellaneous.lineSeparator); systemInfoText.append("API Level: " + android.os.Build.VERSION.SDK + Miscellaneous.lineSeparator); systemInfoText.append("Device: " + android.os.Build.DEVICE + Miscellaneous.lineSeparator); systemInfoText.append("Model: " + android.os.Build.MODEL + Miscellaneous.lineSeparator); systemInfoText.append("Product: " + android.os.Build.PRODUCT + Miscellaneous.lineSeparator); - systemInfoText.append("Flavor: " + BuildConfig.FLAVOR + Miscellaneous.lineSeparator); systemInfoText.append("Country: " + Miscellaneous.getUserCountry(Miscellaneous.getAnyContext()) + Miscellaneous.lineSeparator); systemInfoText.append("OS language: " + Locale.getDefault().getDisplayName()); diff --git a/app/src/main/java/com/jens/automation2/Miscellaneous.java b/app/src/main/java/com/jens/automation2/Miscellaneous.java index 565fae9..b0d5491 100644 --- a/app/src/main/java/com/jens/automation2/Miscellaneous.java +++ b/app/src/main/java/com/jens/automation2/Miscellaneous.java @@ -1840,7 +1840,8 @@ public class Miscellaneous extends Service * @param context Context reference to get the TelephonyManager instance from * @return country code or null */ - public static String getUserCountry(Context context) { + public static String getUserCountry(Context context) + { try { final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); From 7046cccabec644b862b1c5a5be376e5973671d3b Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 15 May 2022 01:37:18 +0200 Subject: [PATCH 14/14] new release prep --- app/build.gradle | 4 ++-- app/googlePlayFlavor/release/output-metadata.json | 4 ++-- .../jens/automation2/ActivityManageActionStartActivity.java | 2 +- .../main/java/com/jens/automation2/ActivityPermissions.java | 3 +++ app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + fastlane/metadata/android/de-DE/changelogs/119.txt | 5 +++++ fastlane/metadata/android/en-US/changelogs/119.txt | 6 ++++-- fastlane/metadata/android/es-ES/changelogs/119.txt | 5 +++++ fastlane/metadata/android/it-IT/changelogs/119.txt | 5 +++++ fastlane/metadata/android/nl-NL/changelogs/119.txt | 5 +++++ 14 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 fastlane/metadata/android/de-DE/changelogs/119.txt create mode 100644 fastlane/metadata/android/es-ES/changelogs/119.txt create mode 100644 fastlane/metadata/android/it-IT/changelogs/119.txt create mode 100644 fastlane/metadata/android/nl-NL/changelogs/119.txt diff --git a/app/build.gradle b/app/build.gradle index 31bde0e..b81c169 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,8 +11,8 @@ android { compileSdkVersion 31 buildToolsVersion '29.0.2' useLibrary 'org.apache.http.legacy' - versionCode 118 - versionName "1.7.4" + versionCode 119 + versionName "1.7.5" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/googlePlayFlavor/release/output-metadata.json b/app/googlePlayFlavor/release/output-metadata.json index b4eeeb9..09c1d23 100644 --- a/app/googlePlayFlavor/release/output-metadata.json +++ b/app/googlePlayFlavor/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 118, - "versionName": "1.7.4-googlePlay", + "versionCode": 119, + "versionName": "1.7.5-googlePlay", "outputFile": "app-googlePlayFlavor-release.apk" } ], diff --git a/app/src/main/java/com/jens/automation2/ActivityManageActionStartActivity.java b/app/src/main/java/com/jens/automation2/ActivityManageActionStartActivity.java index 4f7b774..d4afba9 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageActionStartActivity.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageActionStartActivity.java @@ -378,7 +378,7 @@ public class ActivityManageActionStartActivity extends Activity public void onClick(View v) { int targetSdkVersion = getApplicationContext().getApplicationInfo().targetSdkVersion; - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && targetSdkVersion >= 30 && shouldShowRequestPermissionRationale(Manifest.permission.QUERY_ALL_PACKAGES)) + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && targetSdkVersion >= 30 && !ActivityPermissions.havePermission(Manifest.permission.QUERY_ALL_PACKAGES, ActivityManageActionStartActivity.this))// && shouldShowRequestPermissionRationale(Manifest.permission.QUERY_ALL_PACKAGES)) { requestPermissions(new String[] {Manifest.permission.QUERY_ALL_PACKAGES}, requestCodeForRequestQueryAllPackagesPermission); } diff --git a/app/src/main/java/com/jens/automation2/ActivityPermissions.java b/app/src/main/java/com/jens/automation2/ActivityPermissions.java index 3f42fe0..9711b1f 100644 --- a/app/src/main/java/com/jens/automation2/ActivityPermissions.java +++ b/app/src/main/java/com/jens/automation2/ActivityPermissions.java @@ -904,6 +904,9 @@ public class ActivityPermissions extends Activity case Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS: usingElements.add(getResources().getString(R.string.recommendedForBetterReliability)); break; + case Manifest.permission.QUERY_ALL_PACKAGES: + usingElements.add(getResources().getString(R.string.queryAllPackages)); + break; } return usingElements; diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 6f4f437..d6efecd 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -700,4 +700,5 @@ Das Abrufen des Standorts scheint unter Android 12 derzeit nicht zu funktionieren. Wenn es bei Ihnen nicht klappt, tut mir das leid. Ich werde versuchen die Ursache zu beheben, sobald mir die Ursache bekannt ist. Wenn der Donut bei Ihnen also nicht aufhört sich zu drehen, wissen Sie warum. Profil \"%1$s\" benötigt dies. Letztes Profil: + Liste von installierten Anwendungen auslesen \ 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 b30072a..b8161ae 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -699,4 +699,5 @@ Obtener la locación no parece estar funcionando en dispositivos Android 12 actualmente. Si no está funcionando para ti, lo siento. Intentaré arreglar esto tan pronto como conozca la causa. Así que si la rosquilla no deja de girar, ya sabes por qué. El perfil \"%1$s\" requiere esto. Último perfil: + Obtener una lista de las aplicaciones instaladas \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index e93a306..91a704b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -700,4 +700,5 @@ Questo è richiesto dal profilo \"%1$s\". Ottenere la posizione non sembra funzionare su dispositivi Android 12 al momento. Se non funziona per te, mi dispiace. Cercherò di risolvere questo problema non appena conoscerò la causa. Quindi, se cerchio rotante non smette di girare, sai perché. Ultimo profilo: + Ottenere un elenco delle applicazioni installate diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3ddcc6a..3ca0cd1 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -698,4 +698,5 @@ Het verkrijgen van de locatie lijkt momenteel niet te werken op Android 12-apparaten. Als het niet voor je werkt, spijt het me. Ik zal proberen dit op te lossen zodra ik de oorzaak ken. Dus als de donut niet stopt met draaien, weet je waarom. Profiel \"%1$s\" vereist dit. Laatste profiel: + Een lijst met geïnstalleerde toepassingen ophalen diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2d52023..179db60 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -796,4 +796,5 @@ Milliseconds between checks Getting the location does not seem to be working on Android 12 devices currently. If it isn\'t working for you, I\'m sorry. I\'ll try to fix this as soon as I know the cause. So if the donut doesn\'t stop spinning, you know why. Last profile: + Get a list of installed applications \ No newline at end of file diff --git a/fastlane/metadata/android/de-DE/changelogs/119.txt b/fastlane/metadata/android/de-DE/changelogs/119.txt new file mode 100644 index 0000000..8b5c08c --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/119.txt @@ -0,0 +1,5 @@ +* Fehlerbehebung: Verwaltung von Zeitraum-Auslösern wurde manchmal falsch geladen, während der Dienst lief. +* Fehlerbehebung: Zeitraum-Auslöser: Wiederholte Ausführungen haben manchmal nicht funktioniert +* Fehlerbehebung: Zeitraum-Auslöser: Wiederholte Ausführungen liefen weiter, nachdem der Dienst bereits gestoppt wurde. +* Fehlerbehebung: Die Anwendung hatte sich nicht das zuletzt verbundene WLAN gemerkt. +* Fehlerbehebung: Programm starten: Liste zum Auswählen einer Anwendung konnte nicht erzeugt werden. \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/119.txt b/fastlane/metadata/android/en-US/changelogs/119.txt index 8463367..70f11ad 100644 --- a/fastlane/metadata/android/en-US/changelogs/119.txt +++ b/fastlane/metadata/android/en-US/changelogs/119.txt @@ -1,3 +1,5 @@ -* Fixed: Management of DateTimeTrigger was sometimes releaded incorrectly while service was running +* Fixed: Management of DateTimeTrigger was sometimes reloaded incorrectly while service was running * Fixed: DateTimeTrigger: Repeated executions sometimes not working -* Fixed: DateTimeTrigger: Repeated executions continued to run after service was stopped \ No newline at end of file +* Fixed: DateTimeTrigger: Repeated executions continued to run after service was stopped +* Fixed: App did not memorize the most recent wifi name connected to +* Fixed: No app list displayed when trying to pick which app to start \ No newline at end of file diff --git a/fastlane/metadata/android/es-ES/changelogs/119.txt b/fastlane/metadata/android/es-ES/changelogs/119.txt new file mode 100644 index 0000000..10e8c5c --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/119.txt @@ -0,0 +1,5 @@ +* Corregido: La administración de DateTimeTrigger a veces se recargaba incorrectamente mientras se ejecutaba el servicio +* Corregido: DateTimeTrigger: Ejecuciones repetidas a veces no funcionaban +* Corregido: DateTimeTrigger: Las ejecuciones repetidas continuaron ejecutándose después de que se detuvo el servicio +* Corregido: la aplicación no memorizó el nombre wifi más reciente conectado a +* Corregido: No se muestra ninguna lista de aplicaciones al intentar elegir qué aplicación iniciar \ No newline at end of file diff --git a/fastlane/metadata/android/it-IT/changelogs/119.txt b/fastlane/metadata/android/it-IT/changelogs/119.txt new file mode 100644 index 0000000..b3b7ec3 --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/119.txt @@ -0,0 +1,5 @@ +* Risolto: la gestione di DateTimeTrigger a volte veniva ricaricata in modo errato durante l'esecuzione del servizio +* Risolto: DateTimeTrigger: esecuzioni ripetute a volte non funzionano +* Risolto: DateTimeTrigger: esecuzioni ripetute hanno continuato a funzionare dopo l'arresto del servizio +* Risolto: l'app non memorizzava il nome wifi più recente collegato a +* Risolto: nessun elenco di app visualizzato quando si tenta di scegliere quale app avviare \ No newline at end of file diff --git a/fastlane/metadata/android/nl-NL/changelogs/119.txt b/fastlane/metadata/android/nl-NL/changelogs/119.txt new file mode 100644 index 0000000..7aa92dd --- /dev/null +++ b/fastlane/metadata/android/nl-NL/changelogs/119.txt @@ -0,0 +1,5 @@ +* Opgelost: beheer van DateTimeTrigger werd soms onjuist opnieuw geladen terwijl de service werd uitgevoerd +* Opgelost: DateTimeTrigger: Herhaalde uitvoeringen soms niet werken +* Opgelost: DateTimeTrigger: Herhaalde uitvoeringen bleven lopen nadat de service was gestopt +* Opgelost: app heeft de meest recente wifi-naam die is verbonden met +* Opgelost: er wordt geen app-lijst weergegeven wanneer u probeert te kiezen welke app u wilt starten \ No newline at end of file