diff --git a/app/src/main/java/com/jens/automation2/Action.java b/app/src/main/java/com/jens/automation2/Action.java index 98b07843..c2407c43 100644 --- a/app/src/main/java/com/jens/automation2/Action.java +++ b/app/src/main/java/com/jens/automation2/Action.java @@ -2,7 +2,6 @@ package com.jens.automation2; import android.content.Context; import android.os.AsyncTask; -import android.text.style.TabStopSpan; import android.util.Log; import android.widget.Toast; @@ -460,7 +459,7 @@ public class Action } catch(Exception e) { - Miscellaneous.logEvent("e", "triggerUrl", context.getResources().getString(R.string.errorTriggeringUrl) + ": " + e.getMessage() + ", detailed: " + Log.getStackTraceString(e), 2); + Miscellaneous.logEvent("e", "triggerUrl", context.getResources().getString(R.string.logErrorTriggeringUrl) + ": " + e.getMessage() + ", detailed: " + Log.getStackTraceString(e), 2); } } diff --git a/app/src/main/java/com/jens/automation2/ActivityManagePoi.java b/app/src/main/java/com/jens/automation2/ActivityManagePoi.java index 4cc03329..d24085c6 100644 --- a/app/src/main/java/com/jens/automation2/ActivityManagePoi.java +++ b/app/src/main/java/com/jens/automation2/ActivityManagePoi.java @@ -172,7 +172,8 @@ public class ActivityManagePoi extends Activity double variance = locationGps.distanceTo(locationNetwork); - String text = getResources().getString(R.string.distanceBetween) + " " + String.valueOf(Math.round(variance)) + " " + getResources().getString(R.string.radiusSuggestion); + String text = String.format(getResources().getString(R.string.distanceBetween), Math.round(variance)); + // Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG).show(); Miscellaneous.logEvent("i", "POI Manager", text, 4); // if(variance > 50 && guiPoiRadius.getText().toString().length()>0 && Integer.parseInt(guiPoiRadius.getText().toString()) + * + * + * private class Policy extends eu.chainfire.libsuperuser.Policy { + * {@literal @}Override protected String[] getPolicies() { + * return new String[] { + * "allow sdcardd unlabeled dir { append create execute write relabelfrom link unlink ioctl getattr setattr read rename lock mounton quotaon swapon rmdir audit_access remove_name add_name reparent execmod search open }", + * "allow sdcardd unlabeled file { append create write relabelfrom link unlink ioctl getattr setattr read rename lock mounton quotaon swapon audit_access open }", + * "allow unlabeled unlabeled filesystem associate" + * }; + * } + * }; + * private Policy policy = new Policy(); + * + * public void someFunctionNotCalledOnMainThread() { + * policy.inject(); + * } + * + * + * + */ +@SuppressWarnings({"WeakerAccess", "UnusedReturnValue", "unused"}) +public abstract class Policy { + /** + * supolicy should be called as little as possible. We batch policies together. The command + * line is guaranteed to be able to take 4096 characters. Reduce by a bit for supolicy itself. + */ + private static final int MAX_POLICY_LENGTH = 4096 - 32; + + private static final Object synchronizer = new Object(); + @Nullable + private static volatile Boolean canInject = null; + private static volatile boolean injected = false; + + /** + * @return Have we injected our policies already? + */ + @AnyThread + public static boolean haveInjected() { + return injected; + } + + /** + * Reset policies-have-been-injected state, if you really need to inject them again. Extremely + * rare, you will probably never need this. + */ + @AnyThread + public static void resetInjected() { + synchronized (synchronizer) { + injected = false; + } + } + + /** + * Override this method to return a array of strings containing the policies you want to inject. + * + * @return Policies to inject + */ + @NonNull + protected abstract String[] getPolicies(); + + /** + * Detects availability of the supolicy tool. Only useful if Shell.SU.isSELinuxEnforcing() + * returns true. Caches return value, can safely be called from the UI thread if a + * a cached value exists. + * + * @see #resetCanInject() + * + * @return canInject? + */ + @SuppressWarnings({"deprecation", "ConstantConditions"}) + @WorkerThread // first call only + public static boolean canInject() { + synchronized (synchronizer) { + if (canInject != null) return canInject; + + canInject = false; + + // We are making the assumption here that if supolicy is called without parameters, + // it will return output (such as a usage notice) on STDOUT (not STDERR) that contains + // at least the word "supolicy". This is true at least for SuperSU. + + List result = Shell.run("sh", new String[] { "supolicy" }, null, false); + if (result != null) { + for (String line : result) { + if (line.contains("supolicy")) { + canInject = true; + break; + } + } + } + + return canInject; + } + } + + /** + * Reset cached can-inject state and force redetection on nect canInject() call + */ + @AnyThread + public static void resetCanInject() { + synchronized (synchronizer) { + canInject = null; + } + } + + /** + * Transform the policies defined by getPolicies() into a set of shell commands + * + * @return Possibly empty List of commands, or null + */ + @Nullable + protected List getInjectCommands() { + return getInjectCommands(true); + } + + /** + * Transform the policies defined by getPolicies() into a set of shell commands + * + * @param allowBlocking allow method to perform blocking I/O for extra checks + * @return Possibly empty List of commands, or null + */ + @Nullable + @SuppressWarnings("all") + @WorkerThread // if allowBlocking + protected List getInjectCommands(boolean allowBlocking) { + synchronized (synchronizer) { + // No reason to bother if we're in permissive mode + if (!Shell.SU.isSELinuxEnforcing()) return null; + + // If we can't inject, no use continuing + if (allowBlocking && !canInject()) return null; + + // Been there, done that + if (injected) return null; + + // Retrieve policies + String[] policies = getPolicies(); + if ((policies != null) && (policies.length > 0)) { + List commands = new ArrayList(); + + // Combine the policies into a minimal number of commands + String command = ""; + for (String policy : policies) { + if ((command.length() == 0) || (command.length() + policy.length() + 3 < MAX_POLICY_LENGTH)) { + command = command + " \"" + policy + "\""; + } else { + commands.add("supolicy --live" + command); + command = ""; + } + } + if (command.length() > 0) { + commands.add("supolicy --live" + command); + } + + return commands; + } + + // No policies + return null; + } + } + + /** + * Inject the policies defined by getPolicies(). Throws an exception if called from + * the main thread in debug mode. + */ + @SuppressWarnings({"deprecation"}) + @WorkerThread + public void inject() { + synchronized (synchronizer) { + // Get commands that inject our policies + List commands = getInjectCommands(); + + // Execute them, if any + if ((commands != null) && (commands.size() > 0)) { + Shell.SU.run(commands); + } + + // We survived without throwing + injected = true; + } + } + + /** + * Inject the policies defined by getPolicies(). Throws an exception if called from + * the main thread in debug mode if waitForIdle is true. If waitForIdle is false + * however, it cannot be guaranteed the command was executed and the policies injected + * upon return. + * + * @param shell Interactive shell to execute commands on + * @param waitForIdle wait for the command to complete before returning? + */ + @WorkerThread // if waitForIdle + public void inject(@NonNull Shell.Interactive shell, boolean waitForIdle) { + synchronized (synchronizer) { + // Get commands that inject our policies + List commands = getInjectCommands(waitForIdle); + + // Execute them, if any + if ((commands != null) && (commands.size() > 0)) { + shell.addCommand(commands); + if (waitForIdle) { + shell.waitForIdle(); + } + } + + // We survived without throwing + injected = true; + } + } +} diff --git a/app/src/main/java/eu/chainfire/libsuperuser/Toolbox.java b/app/src/main/java/eu/chainfire/libsuperuser/Toolbox.java new file mode 100644 index 00000000..0084f1f1 --- /dev/null +++ b/app/src/main/java/eu/chainfire/libsuperuser/Toolbox.java @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2012-2019 Jorrit "Chainfire" Jongma + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package eu.chainfire.libsuperuser; + +import android.os.Build; + +import java.util.List; +import java.util.Locale; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.WorkerThread; + +/** + * Utility class to decide between toolbox and toybox calls on M. + * Note that some calls (such as 'ls') are present in both, this + * class will favor toybox variants. + * + * This may not be what you want, as both syntax and output may + * differ between the variants. + * + * Very specific warning, the 'mount' included with toybox tends + * to segfault, at least on the first few 6.0 firmwares. + */ +@SuppressWarnings({"unused", "WeakerAccess", "deprecation"}) +public class Toolbox { + private static final int TOYBOX_SDK = 23; + + private static final Object synchronizer = new Object(); + @Nullable + private static volatile String toybox = null; + + /** + * Initialize. Asks toybox which commands it supports. Throws an exception if called from + * the main thread in debug mode. + */ + @SuppressWarnings("all") + @WorkerThread + public static void init() { + // already inited ? + if (toybox != null) return; + + // toybox is M+ + if (Build.VERSION.SDK_INT < TOYBOX_SDK) { + toybox = ""; + } else { + if (Debug.getSanityChecksEnabledEffective() && Debug.onMainThread()) { + Debug.log(Shell.ShellOnMainThreadException.EXCEPTION_TOOLBOX); + throw new Shell.ShellOnMainThreadException(Shell.ShellOnMainThreadException.EXCEPTION_TOOLBOX); + } + + // ask toybox which commands it has, and store the info + synchronized (synchronizer) { + toybox = ""; + + List output = Shell.SH.run("toybox"); + if (output != null) { + toybox = " "; + for (String line : output) { + toybox = toybox + line.trim() + " "; + } + } + } + } + } + + /** + * Format a command string, deciding on toolbox or toybox for its execution + * + * If init() has not already been called, it is called for you, which may throw an exception + * if we're in the main thread. + * + * Example: + * Toolbox.command("chmod 0.0 %s", "/some/file/somewhere"); + * + * Output: + * < M: "toolbox chmod 0.0 /some/file/somewhere" + * M+ : "toybox chmod 0.0 /some/file/somewhere" + * + * @param format String to format. First word is the applet name. + * @param args Arguments passed to String.format + * @return Formatted String prefixed with either toolbox or toybox + */ + @SuppressWarnings("ConstantConditions") + @WorkerThread // if init() not yet called + public static String command(@NonNull String format, Object... args) { + if (Build.VERSION.SDK_INT < TOYBOX_SDK) { + return String.format(Locale.ENGLISH, "toolbox " + format, args); + } + + if (toybox == null) init(); + + format = format.trim(); + String applet; + int p = format.indexOf(' '); + if (p >= 0) { + applet = format.substring(0, p); + } else { + applet = format; + } + + if (toybox.contains(" " + applet + " ")) { + return String.format(Locale.ENGLISH, "toybox " + format, args); + } else { + return String.format(Locale.ENGLISH, "toolbox " + format, args); + } + } +} diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b136c8c6..5d251018 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,6 +1,5 @@ - Automation Aktiviere Regel %1$s Aktiviere Profil %1$s Aktiviere Regel %1$s im Umschaltmodus @@ -14,28 +13,16 @@ Weder Orte noch Regeln sind definitiv. Dienst wird nicht starten. Automations-Dienst gestarted. Version %1$s. - Dienst wird gestartet. - Es stehen noch nicht alle Messwerte zur Verfügung. Es kann noch kein Vergleich vorgenommen werden. - Der Abstand zwischen GPS- und Mobilfunk-Position beträgt - Meter. Dies +1 sollte der minimale Radius sein. + Der Abstand zwischen GPS- und Mobilfunk-Position beträgt %1$d m. Dies +1 sollte der minimale Radius sein. Sowohl Netzwerk- als auch GPS Position sind bekannt. Vergleiche... - Kein brauchbarer Positionsanbieter verfügbar. Falls Sie in einem Gebäude sind wird empfohlen das Gerät in die Nähe eines Fensters zu bringen bis eine Position ermittelt werden konnte. Andernfalls kann es sehr lange dauern oder es funktioniert gar nicht. Position wird ermittelt. Bitte warten... - Position wird ermittelt mit Anbieter: Ja Nein - GPS Position erhalten. Genauigkeit: - Netzwerk Position erhalten. Genauigkeit: Bitte geben Sie einen gültigen Breitengrad an. Bitte geben Sie einen gültigen Längengrad an. Bitte geben Sie einen gültigen positiven Radius an. Bitte wählen Sie wenigstens einen Tag aus. - Versuche zum Dienst zu verbinden... - Versuche vom Dienst zu trennen... - Zum Dienst verbunden. - Vom Dienst getrennt. - Befehl zum Starten des Dienstes, aber er läuft bereits. Was soll mit der Regel gemacht werden? Was soll mit dem Ort gemacht werden? Was soll mit dem Profil gemacht werden? @@ -121,7 +108,7 @@ GPS Genauigkeit [m] Genauigkeit für Mobilfunk Änderungen in Metern Mobilfunk Genauigkeit [m] - Minimale Zeitänderung in Sekunden für Positionsupdates + Minimale Zeitänderung in Millisekunden für Positionsupdates Zeit für Updates [millisek] Ton Einstellungen Hilfe @@ -146,7 +133,7 @@ Länge einer Lautstärkemessung in Sekunden Physikalischer Referenzwert für Lautstärkemessungen Referenz für Lautstärkemessungen - Protokollierungsgrad (1=minimum, 5=maximum) + Protokollierungsgrad (1=Minimum, 5=Maximum) Protokollierungsgrad Regel aktiv Ort @@ -189,7 +176,6 @@ Allgemein Um dieses Programm zu benutzen, müssen Sie Regeln anlegen. Diese enthalten Auslöser (z.B. ob Sie ein bestimmtes Gebiet betreten oder eine bestimmte Zeitspanne beginnt). Nachdem Sie dies erledigt haben, klicken Sie auf den Ein/Aus Schalter auf dem Hauptbildschirm. Unbekannte Aktion definiert. - Fehler beim Aufrufen der URL Fehler beim Ändern der Bildschirmrotation Fehler bei der Statusprüfung des WLAN Routers Fehler beim Aktivieren des WLAN Routers @@ -666,4 +652,12 @@ Paketname Acitivity/Action name Warnung + Log level (1=minimum, 5=maximum) + klingelt + von + an + übereinstimmend + WLAN Liste laden + Es gibt keine bekannten WLANs auf Ihrem Gerät. + Die Liste von WLANs auf Ihrem Gerät könnte verwendet werden, um zu ermitteln, an welchen Orten Sie waren. Deshalb ist die Positions-Berechtigung nötig, um die Liste dieser WLANs zu laden. Wenn Sie eines aus der Liste auswählen möchten, müssen Sie diese Berechtigung gewähren. Wenn nicht, können Sie immer noch eines manuell eingeben. \ 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 fced3ac7..b462482d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,38 +1,30 @@ - Automation - Estoy activando regla %1$s + Estoy activando norma %1$s Estoy activando perfil %1$s - Estoy activando regla %1$s in el modo del inventir - Crear lugar - Crear regla - Listo de lugares: - Lista de reglas: - Inserta un nombre válido, por favor. - Inserta al menos un disparador, por favor. - Inserta al menos un acción, por favor. - No rules defined. Service won\'t start. - Automation service ha inicializado. + Estoy activando norma %1$s en el modo del invertir + Crear sitio + Crear norma + Lista de sitios: + Lista de normas: + Inserte un nombre válido, por favor. + Inserta al menos una condición, por favor. + Inserta al menos una acción, por favor. + No hay normas definidas. Servicio no enciende. + Automation servicio ha iniciado. Versión %1$s. - Inicializando servicio. - Todavia no tengo todo los ensayos des lugares. No puedo hacer comparación. - Distancia entre GPS lugar y network lugar esta - metros. Este +1 habia de estar el minimo. - Tengo tanto network como gps lugar. Estoy comparando... - No ha encontrado una adecuada compañía de lugares. - Si estas en un edificaión vaya cerca de una ventana hasta una posición ha sido encontrado. Si no podria durar mucho tiempo si es posible en absoluto. - Buscando posición. Esperaria, por favor... - Busco el posición de la compañía: + Distancia entre el sitio GPS y el sitio red está %1$d metros. Este +1m debe ser el minimo. + Tengo tanto sitio red como sitio gps. Estoy comparando... + Si está en una edificación vaya cerca de una ventana hasta que una posición haya sido encontrada. Sino podria durar mucho tiempo o no seria posible. + Buscando posición. Espere, por favor... Si No - He recibido una posición de GPS. Precisión: - He recibido una posición de network. Precisión: Lunes Martes - Miercoles + Miércoles Jueves Viernes - Sabado + Sábado Microfóno Que es eso? Solo usar localización privada @@ -54,7 +46,7 @@ Leer directorio Regla \"%1$s\" lo necesita. Enviar mensaje SMS - Importar numero del directorio + Importar número del directorio Edit Texto de enviar Contraseña @@ -62,70 +54,66 @@ Igual Domingo Por favor inserte un grado de latitud válido. - Por favor inserte un grade de longitud válido. + Por favor inserte un grado de longitud válido. Por favor inserte un radio válido. - Por favor selectar al menos un dia. - Intentando de connectar al servicio... - Intentando de disconnectar del servicio... - Connectado al servicio. - Separado del servicio. - Hacer que con la regla? - Hacer que con el lugar? + Por favor seleccione al menos un dia. + Hacer que con la norma? + Hacer que con el sitio? Hacer que con el perfil? - borrar - Borrar + eliminar + Eliminar Servicio automation terminado. Terminando servicio. Todavia buscando posición - Ultima regla: - al + Última norma: + el Servicio: - Buscar positión actual - Guardar lugar - Borrar posición + Buscar posición actual + Guardar sitio + Eliminar posición Latitud Longitud - Nombre de regla - Disparador(es) - y-connectado (todo tienen que applicar al mismo tiempo) - Añadir disparador + Nombre de la norma + Condición(es) + y-conectado (todo tiene que aplicar al mismo tiempo) + Añadir condición Acción(es) - (ejecutado in esta orden) + (ejecutado en esta orden) Añadir acción - Guardar regla + Guardar norma Inicio Final Guardar URL para ejecutar wifi - Estoy activando - Estoy desctivando + Activando + Desactivando entrando saliendo - Al primer tienes que crear lugares. - Seleccionar lugar - Selecte tipo the acción + Primero tiene que crear sitios. + Seleccionar sitio + Seleccione tipo de la acción connectado terminado - Commencado - separado - Selecte perfil de sonido - Hacer que con el disparador? + Comenzado + desconectado + Seleccione perfil de sonido + Hacer que con la condición? Hacer que con la acción? - Radio tiene que ser un numero positivo. - Todavia hay reglas cuales usan este lugar (%1$s). No puedo borrar el. - Reglajes generales. - Inicializar al boot. - Guardar un archivo protocolo + Radio tiene que ser un número positivo. + Todavia hay normas que usan este sitio (%1$s). No puedo eliminarlo. + Configuración general. + Iniciar al boot. + Escribir un archivo protocolo Estado wifi Descripción - Reglas + Normas Intervalo Configuración de ahorro de energia Tiempo en minutos exede es menos que - Lugar + sitio Intervalo Velocidad Wifi @@ -144,8 +132,8 @@ desactivar enrutador wifi encender modo de vuelo desactivar modo de vuelo - Lugar activo - Lugar mas cerca + sitio activo + sitio mas cerca Posición posiciónes Servicio not esta activo @@ -190,10 +178,10 @@ Localización desactivado Error Determinar su posición en el contexto - Crear p editar lugares + Crear p editar sitios Ventana incial Metodo de localización - Este móvil no tiene Bluetooth. Puede continuar pero probablemente no va a funciónar. + Este dispositivo no tiene Bluetooth. Puede continuar pero probablemente no va a funciónar. Leer protocolo de teléfono Leer calendario Determinar la posición exacta @@ -205,10 +193,10 @@ Modificar la configuración sonida Grabar audio Detecar llamados saliendos - Detecar el estado del móvil + Detecar el estado del dispositivo Leer la memoria Escribir a la memoria - Modificar la configuración del móvil + Modificar la configuración del dispositivo Determinar el estado de la batteria Modificar la conexión internet Exeder configuración no molestar @@ -226,7 +214,7 @@ Exportación completada con éxito No mánager archivo esta instalada No puedo buscar el archivo sonido %1$s, por eso no puedo tocar lo. - Regla activa + Norma activa Batteria esta cargando USB conexión a un computador Girar monitor @@ -243,7 +231,7 @@ no aparato Abrir jugador musica Perfiles - Historia de reglas (más ultimas al primero) + Historia de normas (más ultimas al primero) Bloquerar modificaciónes sonidas Estado Determinar el estado de la red @@ -254,7 +242,7 @@ Nombre invalido Hay otro perfil con lo mismo nombre. Error activando perfil: - Activar reglas/perfiles con 1 clic + Activar normas/perfiles con 1 clic Nombre Usar verificación de la autenticidad Radio [m] @@ -276,12 +264,12 @@ Direción de llamada Auriculares Elegir tipo de los auriculares - " Acelerómetro " + " Acelerómetro" GPS exactitud [m] - Ajustes sonidos + Configuración de sonido Medición de ruido fondo Esperar antes de la ación próxima - Desperatar móvil + Desperatar dispositivo Text para hablar Estado Poner luminosidad del monitor @@ -290,7 +278,7 @@ Activar luminosidad automatico Inserte luminosidad deseada (de 0 a 100). Si usa luminosidad automatica el valor probablemente no va a durar mucho tiempo. - Datos móviles + Datos dispositivoes Hablar texto Activar o desactivar activado @@ -300,7 +288,7 @@ Elija nivel del ruido fondo Elegir velocidad Elija tipo de actividad - Elija tipo de disparador + Elija tipo de condición Elija tipo de comienzo Cambiar ajusted Bluetooth Cambiar ajusted Bluetooth @@ -312,10 +300,10 @@ Valor del parámetro Añadir pareja intento Tipo del parámetro - Puedes entrar un numero, pero es opciónal. Si quieres usar un puedes elegir un de su directorio o entrar un manualmente. Adiciónalmente puedes usar expresiónes regulares. Para testar esos me gusta la pagina: - Rotación del monitor activado. - Rotación del monitor desactivado. - No hay lugares. + Puedes entrar un número, pero es opciónal. Si quieres usar un puedes elegir un de su directorio o entrar un manualmente. Adiciónalmente puedes usar expresiónes regulares. Para testar esos me gusta la pagina: + Rotación del monitor activado. + Rotación del monitor desactivado. + No hay sitios. inciendo terminando conectando @@ -326,15 +314,15 @@ Aceptar todo los certificados Omitir comprobar el validez de certificados (no es una bien idea) Timeout [sec] - Numero de pruebas HTTP - Timeout para HTTP requests [seconds] + Número de pruebas HTTP + Timeout de HTTP requests [segundos] Pausa [sec] Encender manualmente Para este ación el servicio tiene que estar activo Comparación GPS GPS timeout [sec] Silencio durante llamadas - Todavia hay otra regla con lo mismo nombre. + Todavia hay otra norma con lo mismo nombre. Monitoreo de procesos Secundos inter monitoreos de procesos Procesos @@ -348,6 +336,41 @@ a concordiando Cargar listo de wifis - No hay wifis conocidos en su móvil. Leer notificaciónes del systema + 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. + On/Off + Usar TextToSpeech en un perfil normal + Usar TextToSpeech en un perfil vibración + Usar TextToSpeech en un perfil silencioso + TTS en normal + TTS en vibración + TTS en silencioso + Configuración de buscar posición + Observar estado de wifi cuando es posible + Observar movimiento del dispositivo cuando wifi no está disponible + Usar acelerómetro despues x minutos sin cambio de torre telefónica + Tiempo inactivo de las torres telefónicas + Valor limite para movimientos acelerómetro + Valor acelerómetro + Posicionando valores + Minima distancia para cambio de GPS + Minimo cambio GPS [m] + Minima distancia para cambio de red telefonica + Minimo cambio red [m] + Exactitud necesaria para GPS en metros. + Exactitud necesaria para red en metros. + Red exactitud [m] + Tiempo minimo para cambio en milisegundos para actualizar posición + Tiempo de actualizar [milisegundos] + Variables: Puede usar esas variables. Mientras ejecuta van a sustituir con los valores correspondientes en su dispositivo. +Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dispositivo\n[serialnr] - el número de serie de su dispositivo\n[latitude] - su latitud\n[longitude] - su longitud\n[phonenr] - Ùltimo número de llamada realizada tanto de salida como entrante\n[d] - Dia del mes, 2 digitos con cero al comienzo\n[m] - número del mes, 2 digitos con cero al comienzo\n[Y] - Número del año, 4 digitos\n[h] - Hora, formato 12 horas con cero al comienzo\n[H] - Hora, formato 24 horas con cero al comienzo\n[i] - Minutos con cero al comienzo\n[s] - Segundos con cero al comienzo\n[ms] - milisegundos\n[notificationTitle] - Título de la última notificación\n[notificationText] - Texto de la última notificación + Rotación del monitor todavia esta activado. + Rotación del monitor todavia esta desactivado. + Se puede usar la lista de wifis conocidos para determinar los sitios a cuales estuve. Por eso el permiso locación esta necesaria para cargar la lista de wifis. Si quiere elegir un de la lista tiene que conceder el permiso. En caso contrario todavia puede entrar un nombre wifi manualmente. + No hay wifis conocidos en su dispositivo. + Controlar conexiones de la app wireguard + Enviar configuración y procotolo al developer (via email). + Necesita permiso root para este functión. Después encenda la función \"ejecutar norma manualmente\" para presentar el permiso superuser dialogo. Es necesita elegir \"siempre permitir root para esta app\". En caso contrario la norma no puede funcionar al fondo. \ 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 459d84d2..38bc61db 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -85,7 +85,6 @@ L\'applicazione è in esecuzione in modalità limitata a causa di autorizzazioni mancanti. App avviata. App terminata. - Automation Applicazione L\'applicazione è stata aggiornata. Applicazione delle impostazioni, regole e posizioni. @@ -93,8 +92,6 @@ il Almeno una regola ( \"%1$s\" ) sta usando una condizione di tipo \"%2$s\". Tentativo di dowload di - Tentativo di attivare il servizio... - Tentativo di disattivare il servizio... Audio alla selezione di cambio schermo livello della batteria Connessione Bluetooth @@ -103,7 +100,6 @@ Dispositivo Bluetooth %1$s non raggiungibile. Bluetooth connection to %1$s torn Impossibile attivare il Bluetooth. Questo dispositivo è dotato di Bluetooth? - Servizio impegnato. Abbandona Non è possibile scaricare nulla. La quantità di richieste HTTP è impostata inferiore a 1. Non posso abbassare l\'item. E\' già l\'ultimo. @@ -152,7 +148,7 @@ disconnesso dal wifi \"%1$s disconnessione in corso disconnesso dal dispositivo - La distanza tra la posizione GPS e la posizione di rete è + La distanza tra la posizione GPS e la posizione di rete è %1$d metri. Il raggio minimo è +1 ma puoi aumentare. Distanza per l\'aggiornamento del GPS [m] Distanza per l\'aggiornamento della rete [m] inferiore a @@ -178,7 +174,6 @@ Errore nella lettura di regole e posizioni dal file. Errore nel leggere le impostazioni Errore nel\'avvio dell\'altra attività - Errore di indirizzamento Errore nello scrivere la configurazione. La memoria è accessibile? Errore nella scrittura delle impostazioni. Errore nella memorizzazione delle impostazioni. @@ -195,10 +190,7 @@ Rileva la posizione attuale Sto cercando le applicazioni installate … Sto rilevando la posizione. Attendere prego ... - Richiesta posizione dal provider: id della tua app - GPS aggiornato. Precisione: - Rete aggiornata. Precisione: Precisone del GPS [m] Confronto col GPS Fermata la comparazione col GPS per timeout. @@ -256,7 +248,7 @@ Quindi, se si crea una regola che imposta il profilo su vibrazione nell\'interva Il messaggio ricevuto attesta che il monitoraggio del processo è completato. Minimo intervallo (im metri) per l\'aggiornamento GPS Minima distanza percorsa per aggiornare la posizione della rete. - Intervallo minimo in secondi per aggiornare la localizzazione + Intervallo minimo in millisecondi per aggiornare la localizzazione Lunedì Sposta verso il basso Sposta versol\'alto @@ -296,12 +288,10 @@ Quindi, se si crea una regola che imposta il profilo su vibrazione nell\'interva Non hai specificato nessuna posizione. E\' necessario. Il profilo non può essere attivato. Rimane attivo l\'ultimo profilo attivato. Non è specificato nessun profilo nella tua configurazione. Devi farlo prima. - Non posso localizzare attraverso il provider. Nessun SSID (nome della wifi) specificato; devi inserirne uno. Nessun folder disponibile per salvare il file di configurazione. Se pensi che la rilevazione del rumore non funzioni correttamente (in base al valore specificato) considera che ogni telefono è diverso. Quindi puoi tarare il "riferimento per la misurazione del rumore" nelle impostazioni. Consulta http://en.wikipedia.org/wiki/Decibel per maggiori informazioni. È possibile utilizzare la “Taratura audio” della schermata principale per calibrare il dispositivo. nessuno - P Permette la localizzazione da terzi e la normale ricerca del provider. Messaggio di mancato avvio del monitoraggio, è riciesto l\’arresto. Nessun servizio attivo dopo l’aggiornamento dell’App. @@ -360,7 +350,6 @@ Selezionare su “Continua” quando si è pronti a procedere. Attivazione del profilo %1$s Profili Il raggio deve avere valore positivo. - metri. Il raggio minimo è +1 ma puoi aumentare. Raggio [m] Legge la posizione Messaggio di riavvio del monitoraggio. @@ -433,12 +422,10 @@ Selezionare su “Continua” quando si è pronti a procedere. Seleziona il tipo per la coppia di Intent Seleziona il tipo di evento Stato: - Richiesta di attivazione sul servizio già attivo. Devi attivare il servizio. Servizio non attivo. Automation attivata. Versione %1$s. - Avvio del servizio Attività di Automation terminata. Arresto attività. Non c\'è nessuna regola. L\'attività non può iniziare. @@ -513,7 +500,6 @@ Selezionare su “Continua” quando si è pronti a procedere. evento(i) (le attive saranno applicate in AND) Martedì - Servizio disimpegnato. Azione non riconosciuta. Errore indeterminato. finchè diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 747df585..df38178e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - Automation + Automation Activating rule %1$s Activating profile %1$s Activating rule %1$s in Togglemode @@ -14,28 +14,27 @@ No rules defined. Service won\'t start. Automation Service started. Version %1$s. - Starting service. - Don\'t have all location measurings, yet. Can\'t do comparison. - Distance between GPS location and network location is - meters. This +1 should be the absolute minimum radius. + Starting service. + Don\'t have all location measurings, yet. Can\'t do comparison. + Distance between GPS location and network location is %1$d meters. This +1m should be the absolute minimum radius. Have both network and gps location. Comparing... - No suitable location providers could be used. + No suitable location providers could be used. If you are in a building it is strongly advised to place your device next to a window until a position has been found. Otherwise it may take a very long time if it is able to find one at all. Getting position. Please wait... - Requesting location using provider: + Requesting location using provider: Yes No - Got GPS update. Accuracy: - Got network update. Accuracy: + Got GPS update. Accuracy: + Got network update. Accuracy: Please enter a valid latitude. Please enter a valid longitude. Please enter a valid positive radius. Select at least one day. - Attempting to bind to service... - Attempting to unbind from service... - Bound to service. - Unbound from service. - Request to start service, but it is already running. + Attempting to bind to service... + Attempting to unbind from service... + Bound to service. + Unbound from service. + Request to start service, but it is already running. Do what with rule? Do what with location? Do what with profile? @@ -71,7 +70,7 @@ End Save URL to trigger: - Variables:\nYou can use the following variables. Upon triggering they will be replaced with the corresponding value on your device. Include the brackets in your text.\n\n[uniqueid] - Your device\'s unique id\n[serialnr] - Your device\'s serial number\n[latitude] - Your device\'s latitude\n[longitude] - Your device\'s longitude\n[phonenr] - Number of last incoming or outgoing call\n[d] - Day of the month, 2 digits with leading zeros\n[m] - Numeric representation of a month, with leading zeros\n[Y] - A full numeric representation of a year, 4 digits\n[h] - 12-hour format of an hour with leading zeros\n[H] - 24-hour format of an hour with leading zeros\n[i] - Minutes with leading zeros\n[s] - Seconds, with leading zeros\n[ms] - milliseconds\n[notificationTitle] - title of last notification\n[notificationText] - text of last notification + Variables: You can use the following variables. Upon triggering they will be replaced with the corresponding value on your device. Include the brackets in your text. [uniqueid] - Your device\'s unique id [serialnr] - Your device\'s serial number [latitude] - Your device\'s latitude [longitude] - Your device\'s longitude [phonenr] - Number of last incoming or outgoing call [d] - Day of the month, 2 digits with leading zeros [m] - Numeric representation of a month, with leading zeros [Y] - A full numeric representation of a year, 4 digits [h] - 12-hour format of an hour with leading zeros [H] - 24-hour format of an hour with leading zeros [i] - Minutes with leading zeros [s] - Seconds, with leading zeros [ms] - milliseconds [notificationTitle] - title of last notification [notificationText] - text of last notification wifi Activating Deactivating @@ -121,7 +120,7 @@ GPS accuracy [m] Satisfactory accuracy when getting location via cell towers in meters Network accuracy [m] - Minimum time change in seconds for location updates + Minimum time change in milliseconds for location updates Time for update [milliseconds] Sound settings Show help @@ -189,20 +188,20 @@ General To use this program you must setup rules. Those contain triggers, e.g. if you reach a specified area or you enter a certain time. After that\'s been done click the on/off button on the main screen. Unknown action specified - Error triggering URL + Error triggering URL Error changing screen rotation Error determining wifiAp state Error activating wifiAp Failed to trigger Bluetooth. Does this device have Bluetooth? - attempting download of - Error getting connectionManager service. Not doing anything to UsbTethering. - Error determining current UsbTethering state. - Detecting tetherable usb interface. - Clearing both location listeners. - Starting service after app update. - Not starting service after app update. - Starting service at phone boot. - Not starting service at phone boot. + attempting download of + Error getting connectionManager service. Not doing anything to UsbTethering. + Error determining current UsbTethering state. + Detecting tetherable usb interface. + Clearing both location listeners. + Starting service after app update. + Not starting service after app update. + Starting service at phone boot. + Not starting service at phone boot. Application has been updated. Start service automatically after app update if it has been running before. Start service after update