From 88cdc366c5ab5cdd5238b91c0b6c39cc7f80a3ea Mon Sep 17 00:00:00 2001 From: jens Date: Thu, 4 Nov 2021 18:01:30 +0100 Subject: [PATCH 01/51] Changelogs --- .gitignore | 1 + .../com/jens/automation2/receivers/ConnectivityReceiver.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 74284c4..5a04663 100644 --- a/.gitignore +++ b/.gitignore @@ -148,3 +148,4 @@ fabric.properties /app/app-release.apk Automation_settings.xml +/app/googlePlayFlavor/ diff --git a/app/src/main/java/com/jens/automation2/receivers/ConnectivityReceiver.java b/app/src/main/java/com/jens/automation2/receivers/ConnectivityReceiver.java index 5345d8c..8fb4e97 100644 --- a/app/src/main/java/com/jens/automation2/receivers/ConnectivityReceiver.java +++ b/app/src/main/java/com/jens/automation2/receivers/ConnectivityReceiver.java @@ -112,7 +112,7 @@ public class ConnectivityReceiver extends BroadcastReceiver implements Automatio @SuppressLint("NewApi") public static boolean isAirplaneMode(Context context) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { int value = android.provider.Settings.System.getInt(context.getContentResolver(), android.provider.Settings.System.AIRPLANE_MODE_ON, 0); return value != 0; From 0c646b55fcb65c88ee6a869311812c85c074cd1d Mon Sep 17 00:00:00 2001 From: Jens Date: Fri, 5 Nov 2021 22:47:48 +0100 Subject: [PATCH 02/51] Fixed infinite loop --- .../java/com/jens/automation2/Rule.java | 14 ++++++++++ .../activity_manage_trigger_notification.xml | 26 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 41 insertions(+) diff --git a/app/src/apkFlavor/java/com/jens/automation2/Rule.java b/app/src/apkFlavor/java/com/jens/automation2/Rule.java index fd26414..ef093a6 100644 --- a/app/src/apkFlavor/java/com/jens/automation2/Rule.java +++ b/app/src/apkFlavor/java/com/jens/automation2/Rule.java @@ -833,6 +833,13 @@ public class Rule implements Comparable continue; } } + else + { + if(myApp.equals(BuildConfig.APPLICATION_ID)) + { + return false; + } + } /* If there are multiple notifications ("stacked") title or text might be null: @@ -897,6 +904,13 @@ public class Rule implements Comparable if (!app.equalsIgnoreCase(myApp)) return false; } + else + { + if(myApp.equals(BuildConfig.APPLICATION_ID)) + { + return false; + } + } if (requiredTitle.length() > 0) { diff --git a/app/src/main/res/layout/activity_manage_trigger_notification.xml b/app/src/main/res/layout/activity_manage_trigger_notification.xml index 46b1f79..c2a259f 100644 --- a/app/src/main/res/layout/activity_manage_trigger_notification.xml +++ b/app/src/main/res/layout/activity_manage_trigger_notification.xml @@ -45,6 +45,18 @@ + + + + @@ -78,6 +90,13 @@ + + @@ -106,6 +125,13 @@ + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 52bd071..bff1170 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -702,4 +702,5 @@ Let nothing through Fine tuning (like allowing phone calls, picking specific numbers, etc.) can only be done from the system\'s settings. Your rules required permissions which cannot be requested from this installed flavor of Automation. + If you do not choose a specific app, but choose \"Any app\" notifications from Automation will be ignored to avoid loops. \ No newline at end of file From 31c4f6c1d120ce3e9bda3f0fe71922882c3dfd4d Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 7 Nov 2021 02:09:09 +0100 Subject: [PATCH 03/51] Fixed crash of edit wifi trigger --- .../java/com/jens/automation2/ActivityManageRule.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/ActivityManageRule.java b/app/src/main/java/com/jens/automation2/ActivityManageRule.java index 22081bb..73bfd7d 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageRule.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageRule.java @@ -1113,9 +1113,7 @@ public class ActivityManageRule extends Activity { //edit TimeFrame if(resultCode == RESULT_OK && ActivityManageTriggerTimeFrame.editedTimeFrameTrigger != null) - { this.refreshTriggerList(); - } else Miscellaneous.logEvent("w", "TimeFrameEdit", "No timeframe returned. Assuming abort.", 5); } @@ -1133,8 +1131,11 @@ public class ActivityManageRule extends Activity { if(resultCode == RESULT_OK) { - newTrigger.setTriggerParameter(data.getBooleanExtra("wifiState", false)); - newTrigger.setTriggerParameter2(data.getStringExtra("wifiName")); + Trigger editedTrigger = new Trigger(); + editedTrigger.setTriggerType(Trigger_Enum.wifiConnection); + editedTrigger.setTriggerParameter(data.getBooleanExtra("wifiState", false)); + editedTrigger.setTriggerParameter2(data.getStringExtra("wifiName")); + ruleToEdit.getTriggerSet().set(editIndex, editedTrigger); this.refreshTriggerList(); } } From 604ab0eb431b9113c73f28a506659db031253d02 Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 7 Nov 2021 15:38:42 +0100 Subject: [PATCH 04/51] miscellaneous --- .idea/deploymentTargetDropDown.xml | 2 +- .../jens/automation2/ActivityMaintenance.java | 27 ++++++++++++------- .../jens/automation2/AutomationService.java | 1 + 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 078aa39..c23aaba 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -12,6 +12,6 @@ - + \ No newline at end of file diff --git a/app/src/main/java/com/jens/automation2/ActivityMaintenance.java b/app/src/main/java/com/jens/automation2/ActivityMaintenance.java index 499e713..2f2759e 100644 --- a/app/src/main/java/com/jens/automation2/ActivityMaintenance.java +++ b/app/src/main/java/com/jens/automation2/ActivityMaintenance.java @@ -201,6 +201,9 @@ public class ActivityMaintenance extends Activity try { XmlFileInterface.readFile(); + ActivityMainPoi.getInstance().updateListView(); + ActivityMainRules.getInstance().updateListView(); + ActivityMainProfiles.getInstance().updateListView(); } catch (Exception e) { @@ -314,18 +317,9 @@ public class ActivityMaintenance extends Activity String subject = "Automation logs"; - StringBuilder emailBody = new StringBuilder(); - emailBody.append("Device details" + Miscellaneous.lineSeparator); - emailBody.append("OS version: " + System.getProperty("os.version") + Miscellaneous.lineSeparator); - emailBody.append("API Level: " + android.os.Build.VERSION.SDK + Miscellaneous.lineSeparator); - emailBody.append("Device: " + android.os.Build.DEVICE + Miscellaneous.lineSeparator); - emailBody.append("Model: " + android.os.Build.MODEL + Miscellaneous.lineSeparator); - emailBody.append("Product: " + android.os.Build.PRODUCT); - emailBody.append("Flavor: " + BuildConfig.FLAVOR); - Uri uri = Uri.parse("content://com.jens.automation2/" + Settings.zipFileName); - Miscellaneous.sendEmail(ActivityMaintenance.this, "android-development@gmx.de", "Automation logs", emailBody.toString(), uri); + Miscellaneous.sendEmail(ActivityMaintenance.this, "android-development@gmx.de", "Automation logs", getSystemInfo(), uri); } }); alertDialogBuilder.setNegativeButton(context.getResources().getString(R.string.no), null); @@ -334,6 +328,19 @@ public class ActivityMaintenance extends Activity return alertDialog; } + public static String getSystemInfo() + { + StringBuilder systemInfoText = new StringBuilder(); + 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); + systemInfoText.append("Flavor: " + BuildConfig.FLAVOR); + return systemInfoText.toString(); + } + @Override protected void onResume() { diff --git a/app/src/main/java/com/jens/automation2/AutomationService.java b/app/src/main/java/com/jens/automation2/AutomationService.java index 5c39d87..aae038f 100644 --- a/app/src/main/java/com/jens/automation2/AutomationService.java +++ b/app/src/main/java/com/jens/automation2/AutomationService.java @@ -199,6 +199,7 @@ public class AutomationService extends Service implements OnInitListener if (checkStartupRequirements(this, startAtBoot)) { Miscellaneous.logEvent("i", "Service", this.getResources().getString(R.string.logServiceStarting) + " VERSION_CODE: " + BuildConfig.VERSION_CODE + ", VERSION_NAME: " + BuildConfig.VERSION_NAME + ", flavor: " + BuildConfig.FLAVOR, 1); + Miscellaneous.logEvent("i", "Service", ActivityMaintenance.getSystemInfo(), 1); startUpRoutine(); From 658844345955e6574b0c7f5cb3b0d6a2f9cc5a76 Mon Sep 17 00:00:00 2001 From: jens Date: Sun, 7 Nov 2021 17:29:00 +0100 Subject: [PATCH 05/51] reoccuring time --- app/src/apkFlavor/AndroidManifest.xml | 2 +- app/src/fdroidFlavor/AndroidManifest.xml | 2 +- app/src/googlePlayFlavor/AndroidManifest.xml | 2 +- .../jens/automation2/ActivityMainRules.java | 4 +- .../ActivityManageTriggerTimeFrame.java | 68 ++++++++- .../jens/automation2/ReceiverCoordinator.java | 10 +- .../java/com/jens/automation2/TimeFrame.java | 143 ++++++++++-------- .../java/com/jens/automation2/Trigger.java | 6 +- ...armListener.java => DateTimeListener.java} | 20 +-- .../receivers/TimeZoneListener.java | 4 +- .../activity_manage_trigger_timeframe.xml | 28 ++++ app/src/main/res/values/strings.xml | 5 +- 12 files changed, 204 insertions(+), 90 deletions(-) rename app/src/main/java/com/jens/automation2/receivers/{AlarmListener.java => DateTimeListener.java} (94%) diff --git a/app/src/apkFlavor/AndroidManifest.xml b/app/src/apkFlavor/AndroidManifest.xml index acac67e..7364331 100644 --- a/app/src/apkFlavor/AndroidManifest.xml +++ b/app/src/apkFlavor/AndroidManifest.xml @@ -132,7 +132,7 @@ android:scheme="package" />--> - + diff --git a/app/src/fdroidFlavor/AndroidManifest.xml b/app/src/fdroidFlavor/AndroidManifest.xml index b43e4ff..3037bae 100644 --- a/app/src/fdroidFlavor/AndroidManifest.xml +++ b/app/src/fdroidFlavor/AndroidManifest.xml @@ -129,7 +129,7 @@ android:scheme="package" />--> - + diff --git a/app/src/googlePlayFlavor/AndroidManifest.xml b/app/src/googlePlayFlavor/AndroidManifest.xml index 71eee3e..1c45783 100644 --- a/app/src/googlePlayFlavor/AndroidManifest.xml +++ b/app/src/googlePlayFlavor/AndroidManifest.xml @@ -123,7 +123,7 @@ android:scheme="package" />--> - + diff --git a/app/src/main/java/com/jens/automation2/ActivityMainRules.java b/app/src/main/java/com/jens/automation2/ActivityMainRules.java index fa037e6..afcacbc 100644 --- a/app/src/main/java/com/jens/automation2/ActivityMainRules.java +++ b/app/src/main/java/com/jens/automation2/ActivityMainRules.java @@ -19,7 +19,7 @@ import android.widget.TextView; import android.widget.Toast; import com.jens.automation2.AutomationService.serviceCommands; -import com.jens.automation2.receivers.AlarmListener; +import com.jens.automation2.receivers.DateTimeListener; import java.util.ArrayList; @@ -254,7 +254,7 @@ public class ActivityMainRules extends ActivityGeneric try { if(AutomationService.isMyServiceRunning(this)) - AlarmListener.reloadAlarms(); + DateTimeListener.reloadAlarms(); } catch(NullPointerException e) { diff --git a/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java b/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java index c67edf7..9bbf606 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageTriggerTimeFrame.java @@ -6,11 +6,16 @@ import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.EditText; import android.widget.RadioButton; import android.widget.TimePicker; import android.widget.Toast; +import org.apache.commons.lang3.StringUtils; + import java.sql.Time; +import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; @@ -18,8 +23,9 @@ public class ActivityManageTriggerTimeFrame extends Activity { Button bSaveTimeFrame; TimePicker startPicker, stopPicker; - CheckBox checkMonday, checkTuesday, checkWednesday, checkThursday, checkFriday, checkSaturday, checkSunday; + CheckBox checkMonday, checkTuesday, checkWednesday, checkThursday, checkFriday, checkSaturday, checkSunday, chkRepeat; RadioButton radioTimeFrameEntering, radioTimeFrameLeaving; + EditText etRepeatEvery; public static Trigger editedTimeFrameTrigger = null; @@ -44,7 +50,9 @@ public class ActivityManageTriggerTimeFrame extends Activity checkSunday = (CheckBox)findViewById(R.id.checkSunday); radioTimeFrameEntering = (RadioButton)findViewById(R.id.radioTimeFrameEntering); radioTimeFrameLeaving = (RadioButton)findViewById(R.id.radioTimeFrameLeaving); - + chkRepeat = (CheckBox)findViewById(R.id.chkRepeat); + etRepeatEvery = (EditText)findViewById(R.id.etRepeatEvery); + bSaveTimeFrame.setOnClickListener(new OnClickListener() { @Override @@ -92,11 +100,43 @@ public class ActivityManageTriggerTimeFrame extends Activity { Toast.makeText(getBaseContext(), getResources().getString(R.string.selectOneDay), Toast.LENGTH_LONG).show(); return; - } + } + + boolean goOn = false; + if(chkRepeat.isChecked()) + { + if(!StringUtils.isEmpty(etRepeatEvery.getText().toString())) + { + try + { + long value = Long.parseLong(etRepeatEvery.getText().toString()); + if(value > 0) + { + goOn = true; + } + } + catch(Exception e) + { + } + } + } + else + goOn = true; + + if(!goOn) + { + Toast.makeText(getBaseContext(), getResources().getString(R.string.enterRepetitionTime), Toast.LENGTH_LONG).show(); + return; + } if(editedTimeFrameTrigger.getTimeFrame() == null) + { // add new one - editedTimeFrameTrigger.setTimeFrame(new TimeFrame(startTime, stopTime, dayList)); + if(chkRepeat.isChecked()) + editedTimeFrameTrigger.setTimeFrame(new TimeFrame(startTime, stopTime, dayList, Long.parseLong(etRepeatEvery.getText().toString()))); + else + editedTimeFrameTrigger.setTimeFrame(new TimeFrame(startTime, stopTime, dayList, 0)); + } else { // edit one @@ -104,6 +144,11 @@ public class ActivityManageTriggerTimeFrame extends Activity editedTimeFrameTrigger.getTimeFrame().setTriggerTimeStop(stopTime); editedTimeFrameTrigger.getTimeFrame().getDayList().clear(); editedTimeFrameTrigger.getTimeFrame().setDayList(dayList); + + if(chkRepeat.isChecked()) + editedTimeFrameTrigger.getTimeFrame().setRepetition(Long.parseLong(etRepeatEvery.getText().toString())); + else + editedTimeFrameTrigger.getTimeFrame().setRepetition(0); } editedTimeFrameTrigger.setTriggerParameter(radioTimeFrameEntering.isChecked()); @@ -112,6 +157,15 @@ public class ActivityManageTriggerTimeFrame extends Activity finish(); } }); + + chkRepeat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() + { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) + { + etRepeatEvery.setEnabled(isChecked); + } + }); if(editedTimeFrameTrigger.getTimeFrame() != null) loadVariableIntoGui(); @@ -158,6 +212,12 @@ public class ActivityManageTriggerTimeFrame extends Activity break; } } + + if(editedTimeFrameTrigger.getTimeFrame().getRepetition() > 0) + { + chkRepeat.setChecked(true); + etRepeatEvery.setText(String.valueOf(editedTimeFrameTrigger.getTimeFrame().getRepetition())); + } } } diff --git a/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java b/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java index 9921ba1..c36aefe 100644 --- a/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java +++ b/app/src/main/java/com/jens/automation2/ReceiverCoordinator.java @@ -5,7 +5,7 @@ import android.util.Log; import com.jens.automation2.location.CellLocationChangedReceiver; import com.jens.automation2.location.WifiBroadcastReceiver; -import com.jens.automation2.receivers.AlarmListener; +import com.jens.automation2.receivers.DateTimeListener; import com.jens.automation2.receivers.AutomationListenerInterface; import com.jens.automation2.receivers.BatteryReceiver; import com.jens.automation2.receivers.BluetoothReceiver; @@ -42,7 +42,7 @@ public class ReceiverCoordinator Class adClass = Class.forName("ActivityDetectionReceiver"); allImplementers = new Class[] { adClass, - AlarmListener.class, + DateTimeListener.class, BatteryReceiver.class, BluetoothReceiver.class, ConnectivityReceiver.class, @@ -59,7 +59,7 @@ public class ReceiverCoordinator // e.printStackTrace(); allImplementers = new Class[] { - AlarmListener.class, + DateTimeListener.class, BatteryReceiver.class, BluetoothReceiver.class, ConnectivityReceiver.class, @@ -155,7 +155,7 @@ public class ReceiverCoordinator BatteryReceiver.startBatteryReceiver(AutomationService.getInstance()); // startAlarmListener - AlarmListener.startAlarmListener(AutomationService.getInstance()); + DateTimeListener.startAlarmListener(AutomationService.getInstance()); TimeZoneListener.startTimeZoneListener(AutomationService.getInstance()); // startNoiseListener @@ -199,7 +199,7 @@ public class ReceiverCoordinator WifiBroadcastReceiver.stopWifiReceiver(); BatteryReceiver.stopBatteryReceiver(); TimeZoneListener.stopTimeZoneListener(); - AlarmListener.stopAlarmListener(AutomationService.getInstance()); + DateTimeListener.stopAlarmListener(AutomationService.getInstance()); NoiseListener.stopNoiseListener(); ProcessListener.stopProcessListener(AutomationService.getInstance()); diff --git a/app/src/main/java/com/jens/automation2/TimeFrame.java b/app/src/main/java/com/jens/automation2/TimeFrame.java index 757d85b..bde282d 100644 --- a/app/src/main/java/com/jens/automation2/TimeFrame.java +++ b/app/src/main/java/com/jens/automation2/TimeFrame.java @@ -6,70 +6,89 @@ import java.util.ArrayList; public class TimeFrame { // Defines a timeframe - private Time triggerTimeStart; - private Time triggerTimeStop; + protected Time triggerTimeStart; + protected Time triggerTimeStop; + protected long repetition; - private ArrayList dayList = new ArrayList(); - public ArrayList getDayList() + protected final static String separator = "/"; + + private ArrayList dayList = new ArrayList(); + public ArrayList getDayList() + { + return dayList; + } + public void setDayList(ArrayList dayList) + { + this.dayList = dayList; + } + public void setDayListFromString(String dayListString) + { +// Log.i("Parsing", "Full string: " + dayListString); + char[] dayListCharArray = dayListString.toCharArray(); + + dayList = new ArrayList(); + for(char item : dayListCharArray) { - return dayList; - } - public void setDayList(ArrayList dayList) - { - this.dayList = dayList; - } - public void setDayListFromString(String dayListString) - { -// Log.i("Parsing", "Full string: " + dayListString); - char[] dayListCharArray = dayListString.toCharArray(); - - dayList = new ArrayList(); - for(char item : dayListCharArray) - { // Log.i("Parsing", String.valueOf(item)); - dayList.add(Integer.parseInt(String.valueOf(item))); - } + dayList.add(Integer.parseInt(String.valueOf(item))); } + } - - public Time getTriggerTimeStart() - { - return triggerTimeStart; - } - public void setTriggerTimeStart(Time triggerTimeStart) - { - this.triggerTimeStart = triggerTimeStart; - } - public Time getTriggerTimeStop() - { - return triggerTimeStop; - } - public void setTriggerTimeStop(Time triggerTimeStop) - { - this.triggerTimeStop = triggerTimeStop; - } - - public TimeFrame (Time timeStart, Time timeEnd, ArrayList dayList2) - { - this.setTriggerTimeStart(timeStart); - this.setTriggerTimeStop(timeEnd); - this.setDayList(dayList2); - } - TimeFrame (String fileContent) - { - String[] dateArray = fileContent.split("/"); // example: timestart/timestop/days[int] - this.setTriggerTimeStart(Time.valueOf(dateArray[0])); - this.setTriggerTimeStop(Time.valueOf(dateArray[1])); - this.setDayListFromString(dateArray[2]); - } - @Override - public String toString() - { - String returnString = this.getTriggerTimeStart().toString() + "/" + this.getTriggerTimeStop().toString() + "/"; - - for(Integer oneDay : this.getDayList()) - returnString += String.valueOf(oneDay); - - return returnString; - } -} + public Time getTriggerTimeStart() + { + return triggerTimeStart; + } + public void setTriggerTimeStart(Time triggerTimeStart) + { + this.triggerTimeStart = triggerTimeStart; + } + + public Time getTriggerTimeStop() + { + return triggerTimeStop; + } + public void setTriggerTimeStop(Time triggerTimeStop) + { + this.triggerTimeStop = triggerTimeStop; + } + + public long getRepetition() + { + return repetition; + } + + public void setRepetition(long repetition) + { + this.repetition = repetition; + } + + public TimeFrame (Time timeStart, Time timeEnd, ArrayList dayList2, long repetition) + { + this.setTriggerTimeStart(timeStart); + this.setTriggerTimeStop(timeEnd); + this.setDayList(dayList2); + this.setRepetition(repetition); + } + + TimeFrame (String fileContent) + { + String[] dateArray = fileContent.split(separator); // example: timestart/timestop/days[int]/repetition + this.setTriggerTimeStart(Time.valueOf(dateArray[0])); + this.setTriggerTimeStop(Time.valueOf(dateArray[1])); + this.setDayListFromString(dateArray[2]); + this.setRepetition(Long.parseLong(dateArray[3])); + } + + @Override + public String toString() + { + String returnString = this.getTriggerTimeStart().toString() + separator + this.getTriggerTimeStop().toString() + separator; + + for(Integer oneDay : this.getDayList()) + returnString += String.valueOf(oneDay); + + returnString += separator + String.valueOf(repetition); + + return returnString; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jens/automation2/Trigger.java b/app/src/main/java/com/jens/automation2/Trigger.java index 04e4198..7f02e2a 100644 --- a/app/src/main/java/com/jens/automation2/Trigger.java +++ b/app/src/main/java/com/jens/automation2/Trigger.java @@ -294,7 +294,11 @@ public class Trigger else returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.leaving) + " "); - returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.triggerTimeFrame) + ": " + this.getTimeFrame().getTriggerTimeStart().toString() + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.until) + " " + this.getTimeFrame().getTriggerTimeStop().toString() + " on days " + this.getTimeFrame().getDayList().toString()); + String repeat = ", no repetition"; + if(this.getTimeFrame().getRepetition() > 0) + repeat = ", " + String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.repeatEveryXsecondsWithVariable), this.getTimeFrame().getRepetition()); + + returnString.append(Miscellaneous.getAnyContext().getResources().getString(R.string.triggerTimeFrame) + ": " + this.getTimeFrame().getTriggerTimeStart().toString() + " " + Miscellaneous.getAnyContext().getResources().getString(R.string.until) + " " + this.getTimeFrame().getTriggerTimeStop().toString() + " on days " + this.getTimeFrame().getDayList().toString() + repeat); break; case speed: if(getTriggerParameter()) diff --git a/app/src/main/java/com/jens/automation2/receivers/AlarmListener.java b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java similarity index 94% rename from app/src/main/java/com/jens/automation2/receivers/AlarmListener.java rename to app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java index 4c7bf10..86813e4 100644 --- a/app/src/main/java/com/jens/automation2/receivers/AlarmListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DateTimeListener.java @@ -18,7 +18,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; -public class AlarmListener extends BroadcastReceiver implements AutomationListenerInterface +public class DateTimeListener extends BroadcastReceiver implements AutomationListenerInterface { private static AutomationService automationServiceRef; private static AlarmManager centralAlarmManagerInstance; @@ -31,11 +31,11 @@ public class AlarmListener extends BroadcastReceiver implements AutomationListen public static void startAlarmListener(final AutomationService automationServiceRef) { - AlarmListener.startAlarmListenerInternal(automationServiceRef); + DateTimeListener.startAlarmListenerInternal(automationServiceRef); } public static void stopAlarmListener(Context context) { - AlarmListener.stopAlarmListenerInternal(); + DateTimeListener.stopAlarmListenerInternal(); } public static boolean isAlarmListenerActive() @@ -207,7 +207,7 @@ public class AlarmListener extends BroadcastReceiver implements AutomationListen } } - Intent alarmIntent = new Intent(automationServiceRef, AlarmListener.class); + Intent alarmIntent = new Intent(automationServiceRef, DateTimeListener.class); PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); centralAlarmManagerInstance.set(AlarmManager.RTC_WAKEUP, scheduleCandidate, alarmPendingIntent); @@ -224,7 +224,7 @@ public class AlarmListener extends BroadcastReceiver implements AutomationListen Miscellaneous.logEvent("i", "AlarmManager", "Clearing possibly standing alarms.", 4); for(int requestCode : requestCodeList) { - Intent alarmIntent = new Intent(automationServiceRef, AlarmListener.class); + Intent alarmIntent = new Intent(automationServiceRef, DateTimeListener.class); PendingIntent alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, requestCode, alarmIntent, 0); // Miscellaneous.logEvent("i", "AlarmManager", "Clearing alarm with request code: " + String.valueOf(requestCode)); centralAlarmManagerInstance.cancel(alarmPendingIntent); @@ -237,13 +237,13 @@ public class AlarmListener extends BroadcastReceiver implements AutomationListen if(!alarmListenerActive) { Miscellaneous.logEvent("i", "AlarmListener", "Starting alarm listener.", 4); - AlarmListener.automationServiceRef = givenAutomationServiceRef; + DateTimeListener.automationServiceRef = givenAutomationServiceRef; centralAlarmManagerInstance = (AlarmManager)automationServiceRef.getSystemService(automationServiceRef.ALARM_SERVICE); // alarmIntent = new Intent(automationServiceRef, AlarmListener.class); // alarmPendingIntent = PendingIntent.getBroadcast(automationServiceRef, 0, alarmIntent, 0); alarmListenerActive = true; Miscellaneous.logEvent("i", "AlarmListener", "Alarm listener started.", 4); - AlarmListener.setAlarms(); + DateTimeListener.setAlarms(); // // get a Calendar object with current time // Calendar cal = Calendar.getInstance(); @@ -269,17 +269,17 @@ public class AlarmListener extends BroadcastReceiver implements AutomationListen } public static void reloadAlarms() { - AlarmListener.setAlarms(); + DateTimeListener.setAlarms(); } @Override public void startListener(AutomationService automationService) { - AlarmListener.startAlarmListener(automationService); + DateTimeListener.startAlarmListener(automationService); } @Override public void stopListener(AutomationService automationService) { - AlarmListener.stopAlarmListener(automationService); + DateTimeListener.stopAlarmListener(automationService); } public static boolean haveAllPermission() diff --git a/app/src/main/java/com/jens/automation2/receivers/TimeZoneListener.java b/app/src/main/java/com/jens/automation2/receivers/TimeZoneListener.java index c2856f2..5961a98 100644 --- a/app/src/main/java/com/jens/automation2/receivers/TimeZoneListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/TimeZoneListener.java @@ -77,12 +77,12 @@ public class TimeZoneListener extends BroadcastReceiver implements AutomationLis if(action.equals(Intent.ACTION_TIMEZONE_CHANGED)) { Miscellaneous.logEvent("i", "TimeZoneListener", "Device timezone changed. Reloading alarms.", 3); - AlarmListener.reloadAlarms(); + DateTimeListener.reloadAlarms(); } else if(action.equals(Intent.ACTION_TIME_CHANGED)) { Miscellaneous.logEvent("i", "TimeZoneListener", "Device time changed. Reloading alarms.", 4); - AlarmListener.reloadAlarms(); + DateTimeListener.reloadAlarms(); } } @Override diff --git a/app/src/main/res/layout/activity_manage_trigger_timeframe.xml b/app/src/main/res/layout/activity_manage_trigger_timeframe.xml index a85659a..0553e16 100644 --- a/app/src/main/res/layout/activity_manage_trigger_timeframe.xml +++ b/app/src/main/res/layout/activity_manage_trigger_timeframe.xml @@ -119,6 +119,34 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/sunday" /> + + + + + + + + + +