master
jens 2021-06-23 20:20:38 +02:00
parent 07b0513eae
commit 24d05e6d87
8 changed files with 91 additions and 32 deletions

View File

@ -226,6 +226,19 @@ public class Rule implements Comparable<Rule>
return XmlFileInterface.writeFile();
}
public boolean cloneRule(Context context)
{
Rule newRule = new Rule();
newRule.setName(this.getName() + " - clone");
newRule.setRuleActive(this.isRuleActive());
newRule.setRuleToggle(this.isRuleToggle());
newRule.setTriggerSet(this.getTriggerSet());
newRule.setActionSet(this.getActionSet());
return newRule.create(context);
}
private boolean checkBeforeSaving(Context context, boolean changeExistingRule)
{

View File

@ -257,13 +257,23 @@ public class ActivityManagePoi extends Activity
getRadiusConfirmationDialog(text, defaultRadius).show();
}
else if( // we have a bad network signal
else if( // we have a bad network signal and nothing else, GPS result may still come in
locationNetwork != null
&&
Calendar.getInstance().getTimeInMillis()
<
(locationSearchStart.getTimeInMillis() + ((long)searchTimeout * 1000))
)
{
// Only a network location was found and it is also not very accurate.
}
else if( // we have a bad network signal and nothing else, timeout has expired, nothing else can possibly come in
locationNetwork != null
&&
Calendar.getInstance().getTimeInMillis()
>
(locationSearchStart.getTimeInMillis() + ((long)searchTimeout * 1000))
)
)
{
// Only a network location was found and it is also not very accurate.
@ -276,13 +286,14 @@ public class ActivityManagePoi extends Activity
}
else
{
String text = String.format(getResources().getString(R.string.noLocationCouldBeFound), searchTimeout);
String text = String.format(getResources().getString(R.string.noLocationCouldBeFound), String.valueOf(searchTimeout));
Miscellaneous.logEvent("i", "POI Manager", text, 2);
if(myLocationListenerNetwork != null)
myLocationManager.removeUpdates(myLocationListenerNetwork);
myLocationManager.removeUpdates(myLocationListenerGps);
progressDialog.dismiss();
getErrorDialog(text).show();
}
}
@ -348,7 +359,11 @@ public class ActivityManagePoi extends Activity
}
};
alertDialogBuilder.setMessage(text);
Looper.prepare();
alertDialogBuilder.setPositiveButton(getResources().getString(R.string.ok), null);
if (Looper.myLooper() == null)
Looper.prepare();
AlertDialog alertDialog = alertDialogBuilder.create();
return alertDialog;

View File

@ -2,9 +2,11 @@ package com.jens.automation2;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.NotificationManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@ -929,11 +931,21 @@ public class ActivityPermissions extends Activity
}
else if (s.equalsIgnoreCase(Manifest.permission.ACCESS_BACKGROUND_LOCATION) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
{
requiredPermissions.remove(s);
cachedPermissionsToRequest = requiredPermissions;
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, requestCodeForPermissionsBackgroundLocation);
AlertDialog dialog = Miscellaneous.messageBox(getResources().getString(R.string.readLocation), getResources().getString(R.string.pleaseGiveBgLocation), ActivityPermissions.this);
dialog.setOnDismissListener(new DialogInterface.OnDismissListener()
{
@Override
public void onDismiss(DialogInterface dialog)
{
requiredPermissions.remove(s);
cachedPermissionsToRequest = requiredPermissions;
Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, requestCodeForPermissionsBackgroundLocation);
}
});
dialog.show();
return;
}
}

View File

@ -343,6 +343,9 @@ public class AutomationService extends Service implements OnInitListener
{
boolean displayNotification = false;
String rule = "";
outerLoop:
for(Rule r : Rule.getRuleCollection())
{
if(r.isRuleActive())
@ -355,7 +358,11 @@ public class AutomationService extends Service implements OnInitListener
// r.setRuleActive(false);
// r.change(AutomationService.this);
if(!displayNotification)
{
displayNotification = true;
rule = r.getName();
break outerLoop;
}
}
}
}
@ -363,18 +370,16 @@ public class AutomationService extends Service implements OnInitListener
if(displayNotification)
{
// Toast.makeText(Miscellaneous.getAnyContext(), "Require more permissions.", Toast.LENGTH_LONG).show();
// Update notification or show new one that notifiies of the lack or permissions.
Intent intent = new Intent(AutomationService.this, ActivityPermissions.class);
PendingIntent pi = PendingIntent.getActivity(AutomationService.this, 0, intent, 0);
Miscellaneous.logEvent("w", "Features disabled", "Features disabled because of rule " + rule, 5);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
Miscellaneous.createDismissableNotificationWithDelay(1010, getResources().getString(R.string.featuresDisabled), ActivityPermissions.notificationIdPermissions, pi);
else
Miscellaneous.createDismissableNotification(getResources().getString(R.string.featuresDisabled), ActivityPermissions.notificationIdPermissions, pi);
}
// else
// Toast.makeText(Miscellaneous.getAnyContext(), "Have all required permissions.", Toast.LENGTH_LONG).show();
}
}
@ -391,6 +396,9 @@ public class AutomationService extends Service implements OnInitListener
Intent intent = new Intent(AutomationService.this, ActivityMainTabLayout.class);
PendingIntent pi = PendingIntent.getActivity(AutomationService.this, 0, intent, 0);
// Miscellaneous.createDismissableNotification(getResources().getString(R.string.settingsReferringToRestrictedFeatures), ActivityPermissions.notificationIdPermissions, pi);
Miscellaneous.logEvent("w", "Features disabled", "Background location disabled because Google to blame.", 5);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
Miscellaneous.createDismissableNotificationWithDelay(3300, getResources().getString(R.string.featuresDisabled), notificationIdRestrictions, pi);
else
@ -406,6 +414,8 @@ public class AutomationService extends Service implements OnInitListener
Intent intent = new Intent(AutomationService.this, ActivityMainTabLayout.class);
PendingIntent pi = PendingIntent.getActivity(AutomationService.this, 0, intent, 0);
Miscellaneous.logEvent("w", "Features disabled", "Background location disabled because Google to blame.", 5);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1)
Miscellaneous.createDismissableNotificationWithDelay(2200, getResources().getString(R.string.featuresDisabled), notificationIdLocationRestriction, pi);
else

View File

@ -436,7 +436,6 @@
<string name="appRequiresPermissiontoAccessExternalStorage">Automation benötigt Rechte, um auf den Speicher zuzugreifen, um seine Konfiguration und Regeln lesen zu können.</string>
<string name="mainScreenPermissionNote">Automation benötigt mehr Rechte, um vollständig funktionsfähig zu sein. Klicken Sie auf diesen Text, um mehr zu erfahren und die fehlenden Rechte zu beantragen.</string>
<string name="invalidDevice">Ungültiges Gerät</string>
<string name="google_app_id">your app id</string>
<string name="logFileMaxSizeSummary">Maximale Größe der Protokolldatei in Megabyte. Wenn sie größer wird, wird sie rotiert.</string>
<string name="logFileMaxSizeTitle">Maximale Größe des Protokolls [Mb]</string>
<string name="android.permission.READ_CALL_LOG">Telefonprotokoll lesen</string>

View File

@ -43,7 +43,7 @@
<string name="sendTextMessage">Enviar mensaje SMS</string>
<string name="importNumberFromContacts">Importar número del directorio</string>
<string name="edit">Editar</string>
<string name="textToSend">Texto de enviar</string>
<string name="textToSend">Texto para enviar</string>
<string name="password">Contraseña</string>
<string name="showOnMap">Mostrar en un mapa</string>
<string name="headphoneAny">Cualquier</string>
@ -177,7 +177,7 @@
<string name="startScreen">Ventana incial</string>
<string name="positioningEngine">Metodo de localización</string>
<string name="deviceDoesNotHaveBluetooth">Este dispositivo no tiene Bluetooth. Puede continuar pero probablemente no va a funciónar.</string>
<string name="android.permission.READ_CALL_LOG">Leer protocolo de teléfono</string>
<string name="android.permission.READ_CALL_LOG">Leer protocolo de llamadas</string>
<string name="android.permission.READ_CALENDAR">Leer calendario</string>
<string name="android.permission.ACCESS_FINE_LOCATION">Determinar la posición exacta</string>
<string name="android.permission.ACCESS_COARSE_LOCATION">Determinar la posición aproximada</string>
@ -187,15 +187,15 @@
<string name="android.permission.VIBRATE">Vibrar</string>
<string name="android.permission.MODIFY_AUDIO_SETTINGS">Modificar la configuración sonida</string>
<string name="android.permission.RECORD_AUDIO">Grabar audio</string>
<string name="android.permission.PROCESS_OUTGOING_CALLS">Detecar llamados saliendos</string>
<string name="android.permission.READ_PHONE_STATE">Detecar el estado del dispositivo</string>
<string name="android.permission.READ_EXTERNAL_STORAGE">Leer la memoria</string>
<string name="android.permission.WRITE_EXTERNAL_STORAGE">Escribir a la memoria</string>
<string name="android.permission.PROCESS_OUTGOING_CALLS">Detectar llamadas salientes</string>
<string name="android.permission.READ_PHONE_STATE">Detectar el estado del dispositivo</string>
<string name="android.permission.READ_EXTERNAL_STORAGE">Leer la almacenamiento</string>
<string name="android.permission.WRITE_EXTERNAL_STORAGE">Escribir en el almacenamiento</string>
<string name="android.permission.WRITE_SETTINGS">Modificar la configuración del dispositivo</string>
<string name="android.permission.BATTERY_STATS">Determinar el estado de la batteria</string>
<string name="android.permission.BATTERY_STATS">Determinar el estado de la bateria</string>
<string name="android.permission.CHANGE_BACKGROUND_DATA_SETTING">Modificar la conexión internet</string>
<string name="android.permission.ACCESS_NOTIFICATION_POLICY">Exeder configuración no molestar</string>
<string name="android.permission.WRITE_SECURE_SETTINGS">Escribir a la memoria</string>
<string name="android.permission.WRITE_SECURE_SETTINGS">Escribir en el almacenamiento</string>
<string name="apply">acplicar</string>
<string name="publishedOn">publicitado el</string>
<string name="postsNotification">%1$s crea notificación</string>
@ -284,8 +284,8 @@
<string name="selectTypeOfActivity">Elija tipo de actividad</string>
<string name="selectTypeOfTrigger">Elija tipo de condición</string>
<string name="startAppStartType">Elija tipo de comienzo</string>
<string name="android.permission.BLUETOOTH">Cambiar ajusted Bluetooth</string>
<string name="android.permission.BLUETOOTH_ADMIN">Cambiar ajusted Bluetooth</string>
<string name="android.permission.BLUETOOTH">Cambiar ajustes Bluetooth</string>
<string name="android.permission.BLUETOOTH_ADMIN">Cambiar ajustes Bluetooth</string>
<string name="moreSettings">Mas ajustes</string>
<string name="openExamplesPage">Abrir página con ejemplos</string>
<string name="activityOrActionName">Nombre del la\nactivitdad or la action</string>
@ -478,12 +478,12 @@ Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dis
<string name="disabledFeatures">Funciones desactivadas</string>
<string name="invalidDevice">Dispositivo no valido.</string>
<string name="android.permission.ACCESS_WIFI_STATE">Determinar estado de wifi</string>
<string name="android.permission.WAKE_LOCK">Tener dispositivo despierto</string>
<string name="android.permission.WAKE_LOCK">Mantener dispositivo activado</string>
<string name="android.permission.MODIFY_PHONE_STATE">Cambiar ajustes del dispositivo</string>
<string name="android.permission.GET_TASKS">Determinar procesos activados</string>
<string name="android.permission.GET_TASKS">Determinar procesos activos</string>
<string name="android.permission.RECEIVE_BOOT_COMPLETED">Detectar reinicio del dispositivo</string>
<string name="helpTextActivityDetection">Esta función puede detecar su estado de movimiento (en pie, en bicicleta, en vehiculo). La función no es un parte de Automation, pero de Google Play Services. Técnicamente no da un si/no resultado, pero una certeza con que el estado es probable. Puede configurar el percentaje del cual Automation va a aceptar un resultado. Dos comentarios: 1) Mas de un estado se puede aplicar al mismo tiempo. Por ejemplo puede esta en pie en un autobus. 2) Esta sensor es relativamente caro (bateria). Si posible considere alternativas, por ejemplo bluetooth conexción a tu coche en vez de \"en vehiculo\".</string>
<string name="textMessageAnnotations">Puede insertar un numero de llamada. Alternativamente puede importar un numero de su directorio. Pero tenga en cuenta: El numero va a serar guardado, no el contacto. Si cambias el numero en su directoria tiene que cambiar la regla tambien.</string>
<string name="helpTextActivityDetection">Esta función puede detectar su estado de movimiento (a pie, en bicicleta, en vehiculo). La función no es parte de Automation, pero de Google Play Services. Técnicamente no da un \"si\" o \"no\" resultado, pero una probabilidad. Puede configurar este porcentaje del cual Automation va a aceptar un resultado. Dos comentarios: 1) Mas de un estado se puede aplicar al mismo tiempo. Por ejemplo puede estar a pie en un autobus. 2) Este sensor es relativamente caro (bateria). Si es posible considere alternativas, por ejemplo bluetooth conexión a su coche en vez de \"en vehiculo\".</string>
<string name="textMessageAnnotations">Puede insertar un numero de llamada. Alternativamente puede importar un numero de su directorio. Pero tenga en cuenta: El número será guardado, no el contacto. Si cambias el número en su directorio tiene que cambiar la regla también.</string>
<string name="startAutomationAsService">Encender automation como un servicio</string>
<string name="startScreenSummary">Elija la pantalla con que automation enciende.</string>
<string name="useExistingTag">Use existente tag NFC</string>
@ -548,4 +548,14 @@ Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dis
<string name="permissionsExplanationSmall">Para activar la función que será usada, mas permisos son necesarios. Cliquee continuar para los requisitos.</string>
<string name="storeSettings">Leer y guardar configuración.</string>
<string name="featuresDisabled">CUIDADO: Funciones estan desactivadas, Automation esta en modo limitado. Cliquee aqui para mas informacion.</string>
<string name="volumeTesterExplanation">Para calcular un valor dB para determinar el nivel del ruido de fondo tiene que especificar un valor de referencia fisico. Por favor lea el articulo en Wikipedia para mas información. Este valor será probablemente diferente para todos los dispositivos. Mueva el regulador para cambiar el valor. Cuanto mas alto el valor de referencia menos será el valor dB. Las mediciónes se harán cada %1$s segundos y el resultado aparecerá abajo. Presione atrás cuando encuentre un valor indicado.</string>
<string name="systemSettingsNote1">El permiso para cambiar ajustes del OS es necesario (incluso cosas simples como activar bluetooth o wifi). Despues de cliquear continuar una ventana aparecerá en la cual tiene que activar eso para Automation. Entonces cliquee el boton atrás.</string>
<string name="systemSettingsNote2">Mas permisos serán requeridos en un segundo dialogo luego.</string>
<string name="appRequiresPermissiontoAccessExternalStorage">Automation necesita acceso al almacenamiento externo para leer su configuración y reglas.</string>
<string name="mainScreenPermissionNote">" Automation necesita mas permisos para funcionar en su totalidad. Cliquee en este texto para encontrar mas y requerirlos."</string>
<string name="logFileMaxSizeSummary">Maximo tamaño del archivo log. Será alternado si es mas alto.</string>
<string name="logFileMaxSizeTitle">Maximo tamaño del archivo log [Mb]</string>
<string name="theseAreThePermissionsRequired">Esos son los permisos necesarios.</string>
<string name="android9RecordAudioNotice">Si usa la condición nivel del ruido fondo: Desafortunadamente iniciando con Android 9 (Pie) Google decidió prohibir aplicaciones de fondo usando el micrófono. Por eso esta condición no tendrá un efecto y no iniciará algo.</string>
<string name="android10WifiToggleNotice">Si usa la condición nivel del ruido fondo: Desafortunadamente iniciando con Android 9 (Pie) Google decidió prohibir aplicaciones de fondo usando el micrófono. Por eso esta condición no tendrá un efecto y no iniciará algo.</string>
</resources>

View File

@ -214,7 +214,6 @@
<string name="googleLocationChicanery">Questa applicazione accumula dati di localizzazione per abilitare regole basate sulla posizione insieme al rilevamento della velocità anche quando l\'applicazione è chiusa o non in uso.</string>
<string name="googleLocationChicaneryOld">Questa applicazione accumula dati di localizzazione per determinare se sei attualmente ad una delle posizioni che hai creato. Inoltre, questa funzione è usata per determinare la tua velocità attuale se tale evento è stato attivato nelle regole. Questi rilevamenti sono effettuati anche quando l\'applicazione è chiusa o non in uso (ma solo se il servizio è attivato).</string>
<string name="googleSarcasm">Grazie alla infinita sapienza di Google e continui sforzi per proteggere la nostra privacy, nelle regole che possano inviare SMS o coinvolgere lo stato del telefono, sono state rimossi eventi ed azioni rilevanti.</string>
<string name="google_app_id">id della tua app</string>
<string name="gpsAccuracy">Precisone del GPS [m]</string>
<string name="gpsComparison">Comparazione GPS</string>
<string name="hapticFeedback">Sensazione tattile (vibrazione al tocco)</string>

View File

@ -530,7 +530,7 @@
<string name="appRequiresPermissiontoAccessExternalStorage">Automation requires access to external storage to read its settings and rules.</string>
<string name="mainScreenPermissionNote">Automation requires more permissions to fully function. Click on this text to find out more and request them.</string>
<string name="invalidDevice">Invalid device</string>
<string name="google_app_id">your app id</string>
<string name="google_app_id" translatable="false">your app id</string>
<string name="logFileMaxSizeSummary">Maximum log file size in Megabyte. Will be rotated if bigger.</string>
<string name="logFileMaxSizeTitle">Maximum log file size [Mb]</string>
<string name="android.permission.READ_CALL_LOG">Read phone log</string>
@ -680,5 +680,6 @@
<string name="locationFound">Location found. The suggested minimum radius for locations is %1$d m.</string>
<string name="locationFoundInaccurate">Only a location with a limited accuracy could be found. It might not work reliably. The suggested minimum radius for locations is %1$d."</string>
<string name="clone">Clone</string>
<string name="noLocationCouldBeFound">No position could be found after a timeout of %1$o seconds.</string>
<string name="noLocationCouldBeFound">No position could be found after a timeout of %1$s seconds.</string>
<string name="pleaseGiveBgLocation">In the next screen please go to permissions, then location. There select \"Allow all the time\" to allow Automation to determine your location in the background.</string>
</resources>