diff --git a/app/src/main/java/com/jens/automation2/Actions.java b/app/src/main/java/com/jens/automation2/Actions.java index c023aa0..ac75830 100644 --- a/app/src/main/java/com/jens/automation2/Actions.java +++ b/app/src/main/java/com/jens/automation2/Actions.java @@ -1156,10 +1156,13 @@ public class Actions { Class c = Class.forName("android.os.PowerManager"); PowerManager mPowerManager = (PowerManager) this.getSystemService(Context.POWER_SERVICE); - for(Method m : c.getDeclaredMethods()){ - if(m.getName().equals("goToSleep")){ + for(Method m : c.getDeclaredMethods()) + { + if(m.getName().equals("goToSleep")) + { m.setAccessible(true); - if(m.getParameterTypes().length == 1){ + if(m.getParameterTypes().length == 1) + { m.invoke(mPowerManager,SystemClock.uptimeMillis()-2); } } diff --git a/app/src/main/java/com/jens/automation2/ActivityManageActionSendTextMessage.java b/app/src/main/java/com/jens/automation2/ActivityManageActionSendTextMessage.java index b7558f9..ab54925 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageActionSendTextMessage.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageActionSendTextMessage.java @@ -59,7 +59,7 @@ public class ActivityManageActionSendTextMessage extends Activity backToRuleManager(); } else - Toast.makeText(getBaseContext(), getResources().getString(R.string.textTooShort), Toast.LENGTH_LONG).show(); + Toast.makeText(getBaseContext(), getResources().getString(R.string.enterPhoneNumberAndText), Toast.LENGTH_LONG).show(); } }); diff --git a/app/src/main/java/com/jens/automation2/ActivityManageActionSpeakText.java b/app/src/main/java/com/jens/automation2/ActivityManageActionSpeakText.java index 9f9cf3f..cb23f2e 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManageActionSpeakText.java +++ b/app/src/main/java/com/jens/automation2/ActivityManageActionSpeakText.java @@ -44,7 +44,7 @@ public class ActivityManageActionSpeakText extends Activity backToRuleManager(); } else - Toast.makeText(getBaseContext(), getResources().getString(R.string.textTooShort), Toast.LENGTH_LONG).show(); + Toast.makeText(getBaseContext(), getResources().getString(R.string.enterPhoneNumberAndText), Toast.LENGTH_LONG).show(); } }); diff --git a/app/src/main/java/com/jens/automation2/Settings.java b/app/src/main/java/com/jens/automation2/Settings.java index 3219432..21d7a7b 100644 --- a/app/src/main/java/com/jens/automation2/Settings.java +++ b/app/src/main/java/com/jens/automation2/Settings.java @@ -56,6 +56,7 @@ public class Settings implements SharedPreferences public static boolean rememberLastActivePoi; public static int locationRingBufferSize; public static long timeBetweenProcessMonitorings; + public static long acceptDevicePositionSignalEveryX_MilliSeconds; public static int activityDetectionFrequency; public static int activityDetectionRequiredProbability; public static boolean privacyLocationing; @@ -113,6 +114,7 @@ public class Settings implements SharedPreferences protected static final boolean default_rememberLastActivePoi = true; protected static final int default_locationRingBufferSize=3; protected static final long default_timeBetweenProcessMonitorings = 60; + protected static final long default_acceptDevicePositionSignalEveryX_MilliSeconds = 1000; protected static final int default_activityDetectionFrequency = 60; protected static final int default_activityDetectionRequiredProbability = 75; protected static final boolean default_privacyLocationing = false; @@ -236,6 +238,7 @@ public class Settings implements SharedPreferences lengthOfNoiseLevelMeasurements = Long.parseLong(prefs.getString("lengthOfNoiseLevelMeasurements", String.valueOf(default_lengthOfNoiseLevelMeasurements))); referenceValueForNoiseLevelMeasurements = Long.parseLong(prefs.getString("referenceValueForNoiseLevelMeasurements", String.valueOf(default_referenceValueForNoiseLevelMeasurements))); timeBetweenProcessMonitorings = Long.parseLong(prefs.getString("timeBetweenProcessMonitorings", String.valueOf(default_timeBetweenProcessMonitorings))); + acceptDevicePositionSignalEveryX_MilliSeconds = Long.parseLong(prefs.getString("acceptDevicePositionSignalEveryX_MilliSeconds", String.valueOf(default_acceptDevicePositionSignalEveryX_MilliSeconds))); httpAcceptAllCertificates = prefs.getBoolean("httpAcceptAllCertificates", default_httpAcceptAllCertificates); httpAttempts = Integer.parseInt(prefs.getString("httpAttempts", String.valueOf(default_httpAttempts))); @@ -431,6 +434,9 @@ public class Settings implements SharedPreferences if(!prefs.contains("timeBetweenProcessMonitorings") | force) editor.putString("timeBetweenProcessMonitorings", String.valueOf(default_timeBetweenProcessMonitorings)); + if(!prefs.contains("acceptDevicePositionSignalEveryX_MilliSeconds") | force) + editor.putString("acceptDevicePositionSignalEveryX_MilliSeconds", String.valueOf(default_acceptDevicePositionSignalEveryX_MilliSeconds)); + if(!prefs.contains("activityDetectionFrequency") | force) editor.putString("activityDetectionFrequency", String.valueOf(default_activityDetectionFrequency)); @@ -526,6 +532,7 @@ public class Settings implements SharedPreferences editor.putString("httpAttemptGap", String.valueOf(httpAttemptGap)); editor.putString("locationRingBufferSize", String.valueOf(locationRingBufferSize)); editor.putString("timeBetweenProcessMonitorings", String.valueOf(timeBetweenProcessMonitorings)); + editor.putString("acceptDevicePositionSignalEveryX_MilliSeconds", String.valueOf(acceptDevicePositionSignalEveryX_MilliSeconds)); editor.putString("activityDetectionFrequency", String.valueOf(activityDetectionFrequency)); editor.putString("activityDetectionRequiredProbability", String.valueOf(activityDetectionRequiredProbability)); editor.putBoolean("privacyLocationing", privacyLocationing); diff --git a/app/src/main/java/com/jens/automation2/Trigger.java b/app/src/main/java/com/jens/automation2/Trigger.java index 4be1dc3..1d8d8a1 100644 --- a/app/src/main/java/com/jens/automation2/Trigger.java +++ b/app/src/main/java/com/jens/automation2/Trigger.java @@ -457,17 +457,17 @@ public class Trigger if( (elements[0].equals(Trigger.triggerPhoneCallStateRinging) && PhoneStatusListener.getCurrentState() == TelephonyManager.CALL_STATE_RINGING) || - (elements[0].equals(Trigger.triggerPhoneCallStateStarted) && PhoneStatusListener.getCurrentState() == TelephonyManager.CALL_STATE_OFFHOOK) + (elements[0].equals(Trigger.triggerPhoneCallStateStarted) && PhoneStatusListener.getCurrentState() == TelephonyManager.CALL_STATE_OFFHOOK) || - (elements[0].equals(Trigger.triggerPhoneCallStateStopped) && PhoneStatusListener.getCurrentState() == TelephonyManager.CALL_STATE_IDLE) + (elements[0].equals(Trigger.triggerPhoneCallStateStopped) && PhoneStatusListener.getCurrentState() == TelephonyManager.CALL_STATE_IDLE) ) { if( elements[1].equals(Trigger.triggerPhoneCallDirectionAny) || - (elements[1].equals(Trigger.triggerPhoneCallDirectionIncoming) && PhoneStatusListener.getLastPhoneDirection() == 1) + (elements[1].equals(Trigger.triggerPhoneCallDirectionIncoming) && PhoneStatusListener.getLastPhoneDirection() == 1) || - (elements[1].equals(Trigger.triggerPhoneCallDirectionOutgoing) && PhoneStatusListener.getLastPhoneDirection() == 2) + (elements[1].equals(Trigger.triggerPhoneCallDirectionOutgoing) && PhoneStatusListener.getLastPhoneDirection() == 2) ) { // Trigger conditions are met @@ -480,7 +480,7 @@ public class Trigger } else { - Miscellaneous.logEvent("i", "Rule", "A trigger of rule " + getParentRule().getName() + " doesn't apply. Wrong call status. Demanded: " + String.valueOf(this.getTriggerParameter()) + ", got: " + String.valueOf(PhoneStatusListener.isInACall()), 4); + Miscellaneous.logEvent("i", "Rule", "A trigger of rule " + getParentRule().getName() + " doesn't apply. Wrong call status. Demanded: " + elements[0] + ", got: " + String.valueOf(PhoneStatusListener.getCurrentState()) + " (0=idle, 1=ringing, 2=offhook)", 4); return false; } } diff --git a/app/src/main/java/com/jens/automation2/receivers/DevicePositionListener.java b/app/src/main/java/com/jens/automation2/receivers/DevicePositionListener.java index 8bc9323..316b2a3 100644 --- a/app/src/main/java/com/jens/automation2/receivers/DevicePositionListener.java +++ b/app/src/main/java/com/jens/automation2/receivers/DevicePositionListener.java @@ -13,9 +13,11 @@ import com.jens.automation2.ActivityManageTriggerDevicePosition; import com.jens.automation2.AutomationService; import com.jens.automation2.Miscellaneous; import com.jens.automation2.Rule; +import com.jens.automation2.Settings; import com.jens.automation2.Trigger; import java.util.ArrayList; +import java.util.Calendar; public class DevicePositionListener implements SensorEventListener, AutomationListenerInterface { @@ -28,6 +30,9 @@ public class DevicePositionListener implements SensorEventListener, AutomationLi static DevicePositionListener instance = null; boolean isRunning = false; + Calendar now = null; + static Calendar lastTimeSignalArrived = null; + // Gravity rotational data private float gravity[]; // Magnetic rotational data @@ -144,13 +149,18 @@ public class DevicePositionListener implements SensorEventListener, AutomationLi if(activityManageTriggerDevicePositionInstance != null) activityManageTriggerDevicePositionInstance.updateFields(azimuth, pitch, roll); - if(AutomationService.isMyServiceRunning(Miscellaneous.getAnyContext())) + now = Calendar.getInstance(); + if(lastTimeSignalArrived == null || now.getTimeInMillis() >= lastTimeSignalArrived.getTimeInMillis() + Settings.acceptDevicePositionSignalEveryX_MilliSeconds) { - ArrayList ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.devicePosition); - for (int i = 0; i < ruleCandidates.size(); i++) + lastTimeSignalArrived = now; + if (AutomationService.isMyServiceRunning(Miscellaneous.getAnyContext())) { - if(ruleCandidates.get(i).getsGreenLight(Miscellaneous.getAnyContext())) - ruleCandidates.get(i).activate(AutomationService.getInstance(), false); + ArrayList ruleCandidates = Rule.findRuleCandidates(Trigger.Trigger_Enum.devicePosition); + for (int i = 0; i < ruleCandidates.size(); i++) + { + if (ruleCandidates.get(i).getsGreenLight(Miscellaneous.getAnyContext())) + ruleCandidates.get(i).activate(AutomationService.getInstance(), false); + } } } } diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 20f04cd..f1ff782 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -262,6 +262,18 @@ android:inputType="number"> + + + + + + Aktiviere Regel %1$s Aktiviere Profil %1$s - Aktiviere Regel %1$s im Umschaltmodus + Aktiviere Regel %1$s im Umkehrmodus Ort hinzufügen Regel hinzufügen Orts-Liste: @@ -63,7 +63,7 @@ Deaktiviere Änderung des Bluetooth Status fehlgeschlagen. Verfügt dieses Gerät über Bluetooth? Die Adresse ist zu kurz. Sie muß aus mindestens 10 Buchstaben bestehen. - Der Text ist zu kurz. Er muß aus mindestens 10 Buchstaben bestehen. + Geben Sie eine Telefonnummer und einen Text ein. Welche Art von Auslöser betrete verlasse @@ -116,8 +116,8 @@ Zeiträume Wenn Sie eine Regel mit einem Zeitraum erstellen, haben Sie zwei Möglichkeiten. Sie können wählen, ob der Auslöser besagt, daß der Zeitraum entweder verlassen ODER betreten wird. In jedem Fall wird die Regel nur einmal ausgelöst. Wenn eine Regel z.B. besagt \"betrete timeframe xyz\" und das Klingeltonprofil in Vibration ändert, bedeutet das NICHT, daß das Gerät hinterher automatisch wieder zum normalen Klingelprofil zurückschaltet. Wenn das erwünscht ist, muß eine weitere Regel mit einem Folgezeitraum erstellen werden. Auf dem Hauptbildschirm können Sie die Funktion Tonänderunugen sperren benutzen, um vorrübergehend regelbasierte Tonänderungen zu deaktivieren. Z.B. könnten Sie in einer Situation oder an einem Ort sein, wo Klingeltöne normalerweise in Ordnung sind, aber dieses eine Mal würde es stören. Die Funktion wird automatisch wieder deaktiviert nachdem die eingestellte Zeit abgelaufen ist. Klicken Sie den + Knopf, um die angezeigte Zeit zur Frist hinzuzufügen. Sobald es aktiv ist, können Sie es mit dem Schalter rechts wieder abschalten (und so regelbasierte Tonänderungen wieder ermöglichen). - Umkehrbare Regeln - Regeln haben eine Einstellung namens \"Umschaltbar\". Das bedeutet: Wurde eine Regel ausgeführt und anschließend treten dieselben Auslöser wieder ein, wird die Regel nochmal in umgekehrter Weise ausgeführt, wo es möglich ist. Gegenwärtig funktioniert das nur im Zusammenspiel mit NFC Tags. Wenn Sie einen Tag zwei Mal berühren und es eine umschaltbare Regel zu diesem Tag gibt, wird das Programm das Gegenteil von gegenwärtigen Zustand tun, z.B. WLAN ausschalten, wenn es gegenwärtig eingeschaltet ist. + Unschaltbare Regeln + Regeln haben eine Einstellung namens \"Umkehrbar\". Das bedeutet: Wurde eine Regel ausgeführt und anschließend treten dieselben Auslöser wieder ein, wird die Regel nochmal in umgekehrter Weise ausgeführt, wo es möglich ist. Gegenwärtig funktioniert das nur im Zusammenspiel mit NFC Tags. Wenn Sie einen Tag zwei Mal berühren und es eine umkehrbare Regel zu diesem Tag gibt, wird das Programm das Gegenteil von gegenwärtigen Zustand tun, z.B. WLAN ausschalten, wenn es gegenwärtig eingeschaltet ist. Wenn Sie eine Regel mit einer Prozess Überwachung erstellen, wird die Anwendung in regelmäßigen Abständen nach diesem Prozess schauen. Wie häufig können Sie in den Einstellungen festlegen. Das mag zwar in vielen Fällen langsam reagieren, aber eine permanente Überwachung würde zuviel Akkuleistung kosten. Und das Betriebssystem stellt dafür keinen Broadcast zur Verfügung. Energiespareinstellungen Viele Gerätehersteller versuchen Energie zu sparen, indem die Hintergrundaktivitäten vieler Anwendungen eingeschränkt werden. Unglücklicherweise führt das häufig dazu, dass diese Anwendungen nicht mehr zufällig funktionieren; das gilt auch für Automation. Schauen Sie sich diese Seite an, um herauszufinden, wie Sie Automation auf Ihrem Gerät von dieser Behandlung ausschließen können. @@ -305,7 +305,7 @@ Aktuelle Bezeichnung: Tag Daten nicht nutzbar, neu schreiben Bringen Sie einen Tag in Reichweite, um ihn zu lesen. - Umschaltregel + Umkehrregel Schalte um umzuschalten Überschneidung mit Ort %1$s von %2$s Metern festgestellt. Reduzieren Sie den Radius um mindestens diesen Wert. @@ -337,7 +337,7 @@ Ausgehender Telefonanruf von %1$s. Text sprechen Zu sprechender Text - Die Umschaltfunktion ist momentan nur für Regeln erlaubt, die NFC Tags als Auslöser haben. Für weitere Informationen lesen Sie die Hilfe. + Die Umkehrfunktion ist momentan nur für Regeln erlaubt, die NFC Tags als Auslöser haben. Für weitere Informationen lesen Sie die Hilfe. Fehler beim Lesen von Orten und Regeln aus Datei. Es scheint als wären keine Datenänderungen gespeichert worden. Allerdings könnten Änderungen im Speicher sein, die zurückgenommen werden müssen. Daher wird die Einstellungsdatei neu geladen. Bluetooth Verbindung diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 2704f41..b31b4cc 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -333,7 +333,7 @@ Leer notificaciónes del sistema No pude activar o desactivar Bluetooth. Tiene el dispositvo Bluetooth? El url tiene que tener mínimo 10 caracteres. - El texto tiene que tener mínimo 10 caracteres. + Introduce un número de teléfono y un mensaje de texto. On/Off Usar TextToSpeech en un perfil normal Usar TextToSpeech en un perfil vibración diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 965c6dc..e07cdb0 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -500,7 +500,7 @@ Puoi inserire direttamente un numero di telefono. In alternativa usa l\'opzione contatti per sceglierne uno. Ma tieni presente che il numero verrà memorizzato qui, non nel contatto. Se cambi il numero di telefono di un contatto, dovrai aggiornarlo nella questa regola. Non si aggiorna da solo. Testo da inviare Testo da leggere - Il testo deve avere almeno 10 caratteri. + Inserisci un numero di telefono e un testo. Sono state negate le seguenti autorizzazioni: Queste sono le autorizzazioni necessarie: Giovedì diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 093f0b2..e8dde40 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -76,7 +76,7 @@ Deactivating Failed to trigger Bluetooth. Does this device have Bluetooth? The url has to have least 10 characters. - The text has to have least 10 characters. + Enter a phone number and a text. Select type of trigger entering leaving @@ -731,4 +731,7 @@ turn screen off Must apply If the checkbox is checked that means the device has to be in the position you specify. If it\'s not checked, any position that does NOT match your criteria will do. + Signal frequency + Accept new movement signals every x milliseconds + Device positioning settings \ No newline at end of file