Automatic update check for APK version.

This commit is contained in:
Jens 2021-06-08 23:14:09 +02:00
parent 23ded3a851
commit bfc0e3ac4f
11 changed files with 128 additions and 71 deletions

View File

@ -45,6 +45,7 @@ public class ActivityMainScreen extends ActivityGeneric
private ToggleButton toggleService, tbLockSound;
private Button bShowHelp, bPrivacy, bSettingsErase, bAddSoundLockTIme;
private TextView tvActivePoi, tvClosestPoi, tvLastRule, tvMainScreenNotePermissions, tvMainScreenNoteFeaturesFromOtherFlavor, tvMainScreenNoteLocationImpossibleBlameGoogle, tvMainScreenNoteNews, tvlockSoundDuration;
private static boolean updateNoteDisplayed = false;
private ListView lvRuleHistory;
private ArrayAdapter<Rule> ruleHistoryListViewAdapter;
@ -407,6 +408,15 @@ public class ActivityMainScreen extends ActivityGeneric
else
activityMainScreenInstance.checkForNews();
if(BuildConfig.FLAVOR.equals("apkFlavor") && Settings.automaticUpdateCheck)
{
Calendar now = Calendar.getInstance();
if (Settings.lastUpdateCheck == Settings.default_lastUpdateCheck || now.getTimeInMillis() >= Settings.lastUpdateCheck + (long)(Settings.updateCheckFrequencyDays * 24 * 60 * 60 * 1000))
{
activityMainScreenInstance.checkForUpdate();
}
}
Settings.considerDone(Settings.constNewsOptInDone);
Settings.writeSettings(Miscellaneous.getAnyContext());
}
@ -588,6 +598,15 @@ public class ActivityMainScreen extends ActivityGeneric
Miscellaneous.messageBox(title, text, ActivityMainScreen.getActivityMainScreenInstance());
}
synchronized void checkForUpdate()
{
if(Settings.automaticUpdateCheck)
{
AsyncTasks.AsyncTaskUpdateCheck updateCheckTask = new AsyncTasks.AsyncTaskUpdateCheck();
updateCheckTask.execute(ActivityMainScreen.this);
}
}
synchronized void checkForNews()
{
if(Settings.displayNewsOnMainScreen)
@ -617,4 +636,25 @@ public class ActivityMainScreen extends ActivityGeneric
Miscellaneous.logEvent("e", "Error displaying news", Log.getStackTraceString(e), 3);
}
}
public void processUpdateCheckResult(Boolean result)
{
if(result && !updateNoteDisplayed)
{
AlertDialog.Builder updateNoteBuilder = new AlertDialog.Builder(ActivityMainScreen.this);
updateNoteBuilder.setMessage(getResources().getString(R.string.updateAvailable));
updateNoteBuilder.setPositiveButton(getResources().getString(R.string.yes), new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i)
{
String url = "https://server47.de/automation/";
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(browserIntent);
}
});
updateNoteBuilder.setNegativeButton(getResources().getString(R.string.no), null);
updateNoteBuilder.show();
}
}
}

View File

@ -1,6 +1,7 @@
package com.jens.automation2;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.PreferenceActivity;
@ -9,11 +10,18 @@ import com.jens.automation2.R.layout;
public class ActivitySettings extends PreferenceActivity
{
ListPreference lpStartScreenOptionsValues;
CheckBoxPreference chkPrefUpdateCheck;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(layout.activity_settings);
if(BuildConfig.FLAVOR.equals("apkFlavor"))
{
chkPrefUpdateCheck = (CheckBoxPreference) findPreference("chkPrefUpdateCheck");
chkPrefUpdateCheck.setEnabled(true);
}
}
}

View File

@ -0,0 +1,53 @@
package com.jens.automation2;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import java.util.ArrayList;
import java.util.Calendar;
public class AsyncTasks
{
public static class AsyncTaskUpdateCheck extends AsyncTask<Context, Void, Boolean>
{
@Override
protected Boolean doInBackground(Context... contexts)
{
try
{
String result = Miscellaneous.downloadURL("https://server47.de/automation/?action=getLatestVersionCode", null, null);
int latestVersion = Integer.parseInt(result);
if (latestVersion > BuildConfig.VERSION_CODE)
{
// There's a new update
return true;
}
}
catch (Exception e)
{
Miscellaneous.logEvent("e", "Error checking for update", Log.getStackTraceString(e), 3);
}
return false;
}
@Override
protected void onPostExecute(Boolean result)
{
try
{
ActivityMainScreen.getActivityMainScreenInstance().processUpdateCheckResult(result);
}
catch (NullPointerException e)
{
Miscellaneous.logEvent("e", "NewsDownload", "There was a problem displaying the already downloded news, probably ActivityMainScreen isn't currently shown: " + Log.getStackTraceString(e), 2);
}
catch (Exception e)
{
Miscellaneous.logEvent("e", "NewsDownload", "There was a problem displaying the already downloded news: " + Log.getStackTraceString(e), 2);
}
}
}
}

View File

@ -76,7 +76,7 @@ public class News
if(oldFilePath.exists())
oldFilePath.delete();
if (!(new File(filePath)).exists() || Settings.lastNewsPolltime == -1 || now.getTimeInMillis() >= Settings.lastNewsPolltime + (long)(Settings.newsDisplayForXDays * 24 * 60 * 60 * 1000))
if (!(new File(filePath)).exists() || Settings.lastNewsPolltime == Settings.default_lastNewsPolltime || now.getTimeInMillis() >= Settings.lastNewsPolltime + (long)(Settings.newsDisplayForXDays * 24 * 60 * 60 * 1000))
{
String newsUrl = "https://server47.de/automation/appNews.php";
newsContent = Miscellaneous.downloadURL(newsUrl, null, null);

View File

@ -15,6 +15,7 @@ public class Settings implements SharedPreferences
public final static int lockSoundChangesInterval = 15;
public static final int newsPollEveryXDays = 3;
public static final int newsDisplayForXDays = 3;
public static final int updateCheckFrequencyDays = 7;
public static final String folderName = "Automation";
public static final String zipFileName = "automation.zip";
@ -61,10 +62,13 @@ public class Settings implements SharedPreferences
public static int startScreen;
public static boolean executeRulesAndProfilesWithSingleClick;
public static boolean displayNewsOnMainScreen;
public static boolean automaticUpdateCheck;
public static boolean lockSoundChanges;
public static boolean noticeAndroid9MicrophoneShown;
public static boolean noticeAndroid10WifiShown;
public static long lastNewsPolltime;
public static long lastUpdateCheck;
public static ArrayList<String> whatHasBeenDone;
@ -114,8 +118,10 @@ public class Settings implements SharedPreferences
protected static final int default_startScreen = 0;
protected static final boolean default_executeRulesAndProfilesWithSingleClick = false;
protected static final boolean default_displayNewsOnMainScreen = false;
protected static final boolean default_automaticUpdateCheck = false;
protected static final boolean default_lockSoundChanges = false;
protected static final long default_lastNewsPolltime = -1;
protected static final long default_lastUpdateCheck = -1;
@Override
public boolean contains(String arg0)
@ -249,6 +255,7 @@ public class Settings implements SharedPreferences
startScreen = Integer.parseInt(prefs.getString("startScreen", String.valueOf(default_startScreen)));
executeRulesAndProfilesWithSingleClick = prefs.getBoolean("executeRulesAndProfilesWithSingleClick", default_executeRulesAndProfilesWithSingleClick);
automaticUpdateCheck = prefs.getBoolean("chkPrefUpdateCheck", default_automaticUpdateCheck);
displayNewsOnMainScreen = prefs.getBoolean("displayNewsOnMainScreen", default_displayNewsOnMainScreen);
lockSoundChanges = prefs.getBoolean("lockSoundChanges", default_lockSoundChanges);
@ -256,6 +263,7 @@ public class Settings implements SharedPreferences
noticeAndroid10WifiShown = prefs.getBoolean("noticeAndroid10WifiShown", false);
lastNewsPolltime = prefs.getLong("lastNewsPolltime", default_lastNewsPolltime);
lastUpdateCheck = prefs.getLong("lastUpdateCheck", default_lastUpdateCheck);
String whbdString = prefs.getString("whatHasBeenDone", "");
if(whbdString != null && whbdString.length() > 0)
@ -435,6 +443,9 @@ public class Settings implements SharedPreferences
if(!prefs.contains("executeRulesAndProfilesWithSingleClick") | force)
editor.putBoolean("executeRulesAndProfilesWithSingleClick", default_executeRulesAndProfilesWithSingleClick);
if(!prefs.contains("automaticUpdateCheck") | force)
editor.putBoolean("automaticUpdateCheck", default_automaticUpdateCheck);
if(!prefs.contains("displayNewsOnMainScreen") | force)
editor.putBoolean("displayNewsOnMainScreen", default_displayNewsOnMainScreen);
@ -447,6 +458,9 @@ public class Settings implements SharedPreferences
if(!prefs.contains("lastNewsPolltime") | force)
editor.putLong("lastNewsPolltime", default_lastNewsPolltime);
if(!prefs.contains("lastUpdateCheck") | force)
editor.putLong("lastUpdateCheck", default_lastUpdateCheck);
if(!prefs.contains("whatHasBeenDone") | force)
editor.putString("whatHasBeenDone", "");
@ -511,6 +525,7 @@ public class Settings implements SharedPreferences
editor.putBoolean("privacyLocationing", privacyLocationing);
editor.putString("startScreen", String.valueOf(startScreen));
editor.putBoolean("executeRulesAndProfilesWithSingleClick", executeRulesAndProfilesWithSingleClick);
editor.putBoolean("automaticUpdateCheck", automaticUpdateCheck);
editor.putBoolean("displayNewsOnMainScreen", displayNewsOnMainScreen);
editor.putBoolean("lockSoundChanges", lockSoundChanges);
@ -518,6 +533,7 @@ public class Settings implements SharedPreferences
editor.putBoolean("noticeAndroid10WifiShown", noticeAndroid10WifiShown);
editor.putLong("lastNewsPolltime", lastNewsPolltime);
editor.putLong("lastUpdateCheck", lastUpdateCheck);
editor.putString("whatHasBeenDone", Miscellaneous.explode(";", whatHasBeenDone));

View File

@ -56,6 +56,12 @@
android:key="executeRulesAndProfilesWithSingleClick"
android:title="@string/executeRulesAndProfilesWithSingleClickTitle" />
<CheckBoxPreference
android:id="@+id/chkPrefUpdateCheck"
android:enabled="false"
android:title="@string/automaticUpdateCheck"
android:summary="@string/automaticUpdateCheckSummary"/>
<CheckBoxPreference
android:key="displayNewsOnMainScreen"
android:title="@string/displayNewsOnMainScreen"

View File

@ -3,7 +3,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="10dp" >
android:layout_margin="@dimen/default_margin" >
<TextView
android:id="@+id/tvVolumeTestExplanation"

View File

@ -175,21 +175,7 @@
<string name="serviceNotRunning">Dienst läuft nicht.</string>
<string name="general">Allgemein</string>
<string name="generalText">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.</string>
<string name="unknownActionSpecified">Unbekannte Aktion definiert.</string>
<string name="errorChangingScreenRotation">Fehler beim Ändern der Bildschirmrotation</string>
<string name="errorDeterminingWifiApState">Fehler bei der Statusprüfung des WLAN Routers</string>
<string name="errorActivatingWifiAp">Fehler beim Aktivieren des WLAN Routers</string>
<string name="failedToTriggerBluetooth">Fehler beim Ändern des Bluetooth Status. Hat dieses Gerät Bluetooth?</string>
<string name="logAttemptingDownloadOf">Versuche Download von</string>
<string name="logErrorGettingConnectionManagerService">Fehler beim Anbinden an den connectionManager Dienst. Ändere nichts am Usb-Router Status.</string>
<string name="logErrorDeterminingCurrentUsbTetheringState">Fehler beim Aufrufen des gegenwärtigen USB-Router Status.</string>
<string name="logDetectingTetherableUsbInterface">Überprüfe routingfähiges Interface.</string>
<string name="logClearingBothLocationListeners">Stoppe beide LocationListener.</string>
<string name="logStartingServiceAfterAppUpdate">Starte Dienst nach Programm Aktualisierung. Er lief vor der Aktualisierung schon.</string>
<string name="logNotStartingServiceAfterAppUpdate">Starte Dienst nicht automatisch nach Programm Aktualisierung. Er lief davor nicht.</string>
<string name="logStartingServiceAtPhoneBoot">Starte Dienst nach Neustart des Telefons.</string>
<string name="logNotStartingServiceAtPhoneBoot">Starte Dienst nicht automatisch nach Neustart des Telefons.</string>
<string name="applicationHasBeenUpdated">Die Anwendung wurde aktualisiert.</string>
<string name="startServiceAfterAppUpdate">Dienst nach Anwendungsupdate automatisch wieder starten, wenn er vorher lief.</string>
<string name="startServiceAfterAppUpdateShort">Starte Dienst nach Update</string>
<string name="wifiConnection">WLAN Verbindung</string>
@ -254,12 +240,10 @@
<string name="moveDown">Herunterschieben</string>
<string name="cantMoveUp">Das Objekt kann nicht weiter hochgeschoben werden.</string>
<string name="cantMoveDown">Das Objekt kann nicht weiter heruntergeschoben werden.</string>
<string name="ruleCheckOf">RuleCheck von %1$s</string>
<string name="airplaneMode">Flugmodus</string>
<string name="activate">Aktivieren</string>
<string name="deactivate">Deaktivieren</string>
<string name="airplaneModeSdk17Warning">Seit Android Version 4.2 funktioniert diese Funktion - wenn überhaupt - nur noch mit gerooteten Geräten.</string>
<string name="triggerUrlReplacementPositionError">Laut Ihren Einstellungen sollte der aufzurufenden Adresse eine Position hinzugefügt werden. Leider ist der im Moment nicht möglich, daß noch keine Position bekannt ist.</string>
<string name="addIntentValue">Parameter-Paar hinzufügen</string>
<string name="parameterName">Parameter Name</string>
<string name="parameterValue">Parameter Wert</string>
@ -335,8 +319,6 @@
<string name="eraseSettings">Einstellungen löschen</string>
<string name="defaultSettings">Standard Einstellungen</string>
<string name="areYouSure">Sind sie sicher?</string>
<string name="poiCouldBeInRange">Mindestens Ort %1$s könnte im nahen Umkreis liegen, wenn nicht noch andere.</string>
<string name="noPoiInRelevantRange">Kein Ort im näheren Umkreis.</string>
<string name="activityDetection">Aktivitätserkennung</string>
<string name="detectedActivity">Erkannte Tätigkeit:</string>
<string name="detectedActivityInVehicle">In einem Fahrzeug (Auto/Bus)</string>

View File

@ -376,8 +376,6 @@ Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dis
<string name="referenceValueForNoiseLevelMeasurementsTitle">Referencia fisicalo para ensayo de nivel ruido</string>
<string name="logLevelSummary">Nivel del registro (1=mínimo, 5=máximo)</string>
<string name="logLevelTitle">Nivel del registro</string>
<string name="unknownActionSpecified">Ación inconocido especicado</string>
<string name="errorChangingScreenRotation">Error cambiando rotación del monitor</string>
<string name="failedToTriggerBluetooth">Error cambiando Bluetooth. El dispositivo tiene Bluetooth?</string>
<string name="settingsCategoryHttp">Pedido HTTP</string>
<string name="httpAttemptsSummary">Cantidad de los pruebos en caso pedidos HTTP fallan por razones de conexißon</string>

View File

@ -96,10 +96,7 @@
<string name="anyNumber">qualsiasi numero</string>
<string name="anyWifi">qualsiasi wifi</string>
<string name="appRequiresPermissiontoAccessExternalStorage">Automation richiede accesso alla memoria esterna per leggere le proprie impostazioni e regole.</string>
<string name="appStarted">Applicazione avviata.</string>
<string name="appStopped">Applicazione terminata.</string>
<string name="application">Applicazione</string>
<string name="applicationHasBeenUpdated">L\'applicazione è stata aggiornata.</string>
<string name="apply">applica</string>
<string name="areYouSure">Sei sicuro?</string>
<string name="at">al</string>
@ -121,7 +118,6 @@
<string name="cantMoveUp">Non posso spostare su l\'elemento. E\' già il primo.</string>
<string name="cantRunRule">Impossibile eseguire le regole.</string>
<string name="cantStopIt">Non posso fermarla.</string>
<string name="cellMastChanged">Ripetitore modificato: %1$s</string>
<string name="cellMastIdleTime">Massimo tempo di inattività del ripetitore</string>
<string name="change">Modifica</string>
<string name="chooseActivityHint">In questa ultima selezione dovrai selezionare una attività specifica. Praticamente, questa è come una finestra dell'applicazione desiderata. Se non sai qual è, si raccomanda scegliere quella che ha \"main\" o \"launcher\" nel suo nome.</string>
@ -139,8 +135,6 @@
<string name="continueText">continua</string>
<string name="currentId">ID corrente:</string>
<string name="currentVolume">Volume attuale</string>
<string name="dataConWithRootFail">La informazione non può essere cambiata usando i permessi superuser.</string>
<string name="dataConWithRootSuccess">La connessione è stata cambiata usando i permessi superuser. </string>
<string name="deactivate">Disattivazione</string>
<string name="deactivated">non attivo</string>
<string name="deactivating">Disattivazione in corso</string>
@ -182,7 +176,6 @@
<string name="dropsBelow">inferiore</string>
<string name="edit">Modifica</string>
<string name="end">Fine</string>
<string name="enforcingGps">Impedisce la localizzazione del provider e forza il GPS</string>
<string name="enterAPositiveValidNonDecimalNumber">Inserisci un numero intero positivo</string>
<string name="enterAname">Inserisci un nome!</string>
<string name="enterNameForIntentPair">Definisci un nome per la coppia di intenzioni</string>
@ -196,17 +189,11 @@
<string name="eraseSettings">Azzera le impostazioni</string>
<string name="error">Errore</string>
<string name="errorActivatingProfile">Errore nell\'attivazione del profilo:</string>
<string name="errorActivatingWifiAp">Errore nell\'attivazione del punto di accesso wifi</string>
<string name="errorChangingScreenRotation">Errore nel ruotare lo schermo</string>
<string name="errorDeterminingWifiApState">Errore nel riconoscimento del punto di accesso wifi</string>
<string name="errorInitializingSettingsToPersistentMemory">Errore nell\'inizializzare le impostazioni nella memoria di massa.</string>
<string name="errorReadingPoisAndRulesFromFile">Errore nella lettura di regole e posizioni dal file.</string>
<string name="errorReadingSettings">Errore nel leggere le impostazioni</string>
<string name="errorRunningRule">C\'è stato un errore cercando di eseguire una regola.</string>
<string name="errorStartingOtherActivity">Errore nel\'avvio dell\'altra attività</string>
<string name="errorWritingConfig">Errore nello scrivere la configurazione. È la memoria in sola lettura?</string>
<string name="errorWritingFile">Errore nella scrittura delle impostazioni.</string>
<string name="errorWritingSettingsToPersistentMemory">Errore nella scrittura delle impostazioni nella memoria di massa.</string>
<string name="exceeding">sta sorpassando</string>
<string name="exceeds">è superiore</string>
<string name="executeRulesAndProfilesWithSingleClickTitle">Esegui regole/profili con un singolo click.</string>
@ -217,8 +204,6 @@
<string name="fileDoesNotExist">Il file non esiste.</string>
<string name="filesHaveBeenMovedTo">Automation usa adesso un percorso nuovo per salvare i tuoi files. Tutti i files di Automation sono stati mossi qui: \"%s\". I permessi di accesso alla memoria esterna non sono più necessari e si possono revocare. Questo verrà permanentemente rimosso in una versione futura.</string>
<string name="filesStoredAt">I files di configurazione e log sono salvati nella cartella %1$s. Clicca su questo testo per aprire l\'esploratore di files. Sfortunatamente, questo solo funziona su un dispositivo con accesso root.\n\nPER TUTTI GLI ALTRI DISPOSITIVI: basta usare il bottone \'esporta\' per fare un backup.</string>
<string name="forcedLocationUpdate">Aggiornamento forzato della posizione</string>
<string name="forcedLocationUpdateLong">Avendo raggiunto il timeout comparando le misure, sarà considerata valida l\'ultima posizione rilevata.</string>
<string name="friday">Venerdì</string>
<string name="from">da</string>
<string name="general">Generale</string>
@ -233,9 +218,6 @@
<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="gpsComparisonTimeoutStop">Sto fermando la comparazione con il GPS a causa di un timeout.</string>
<string name="gpsMeasurement">Misurazione GPS</string>
<string name="gpsMeasurementTimeout">Misurazione GPS fermata per timeout.</string>
<string name="hapticFeedback">Sensazione tattile (vibrazione al tocco)</string>
<string name="headphoneAny">Oppure</string>
<string name="headphoneMicrophone">Microfono</string>
@ -297,7 +279,6 @@
<string name="manageLocations">Creare o modificare posizioni</string>
<string name="matching">abbinando</string>
<string name="messageNotShownAgain">Questo messaggio non sarà mostrato più.</string>
<string name="messageReceivedStatingProcessMonitoringIsComplete">Il messaggio ricevuto attesta che il monitoraggio del processo è stato completato.</string>
<string name="minimumDistanceChangeForGpsLocationUpdates">Minimo intervallo (in metri) per aggiornare le posizioni GPS </string>
<string name="minimumDistanceChangeForNetworkLocationUpdates">Minimo cambio della distanza per aggiornare la posizione dalla rete.</string>
<string name="minimumTimeForLocationUpdates">Intervallo minimo in millisecondi per aggiornare la localizzazione</string>
@ -342,12 +323,10 @@
<string name="noKnownWifis">Non c\'è nessuna wifi conosciuta sul tuo dispositivo.</string>
<string name="noMapsApplicationFound">Non trovo un navigatore installato.</string>
<string name="noOverLap">Nessuna duplicazione di posizioni rilevata.</string>
<string name="noPoiInRelevantRange">Nessuna posizione nel raggio specificato.</string>
<string name="noPoisDefinedShort">Nessuna posizione indicata.</string>
<string name="noPoisSpecified">Non hai specificato nessuna posizione. È necessario.</string>
<string name="noProfileChangeSoundLocked">Il profilo non può essere attivato. L\'ultimo profilo attivato è bloccato.</string>
<string name="noProfilesCreateOneFirst">Non c'è nessun profilo nella tua configurazione. Prima di tutto, creane uno.</string>
<string name="noWifiNameSpecifiedAnyWillDo">Nessun nome della wifi specificato; devi inserirne uno.</string>
<string name="noWritableFolderFound">Nessuna cartella scrivibile trovata che permetta salvare il file di configurazione.</string>
<string name="noiseDetectionHint">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\" dalla schermata principale per calibrare il dispositivo.</string>
<string name="none">nessuno</string>
@ -388,7 +367,6 @@
<string name="pleaseSpecifiyAction">Indica almeno un\'azione.</string>
<string name="pleaseSpecifiyTrigger">Indica almeno un evento.</string>
<string name="poi">Posizione</string>
<string name="poiCouldBeInRange">Almeno la posizione %1$s potrebbe essere in zona, se non ne esistono altre in aggiunta.</string>
<string name="poiList">Elenco delle posizioni:</string>
<string name="poiStillReferenced">Ci sono ancora regole che fanno riferimento a questa posizione (%1$s). Quindi non posso cancellarla ancora.</string>
<string name="pois">Posizioni</string>
@ -411,11 +389,8 @@
<string name="radiusHasToBePositive">Il raggio deve essere un numero positivo.</string>
<string name="radiusWithUnit">Raggio [m]</string>
<string name="readLocation">Legge la posizione</string>
<string name="rearmingProcessMonitoringMessage">Messaggio di riavvio del monitoraggio.</string>
<string name="referenceValueForNoiseLevelMeasurementsSummary">Valore di riferimento fisico per la misura di rumore</string>
<string name="referenceValueForNoiseLevelMeasurementsTitle">Riferimento per la misura di rumore</string>
<string name="refreshingProcessList">Attualizzando la lista dei processi.</string>
<string name="refreshingSettingsFromFileToMemory">Leggendo da file le impostazioni per ripristinarle in memoria.</string>
<string name="rememberLastActivePoiSummary">Se sei in una posizione, riavvia il tuo dispositivo o l\'applicazione e lascia la posizione. L'\applicazione eseguirà le regole associate alla uscita dal luogo al suo prossimo avvio.</string>
<string name="rememberLastActivePoiTitle">Ricorda la ultima posizione attiva</string>
<string name="removedNotification">la notifica da %1$s rimossa</string>
@ -425,27 +400,12 @@
<string name="rule">Regola</string>
<string name="ruleActivate">Attivando la regola %1$s</string>
<string name="ruleActivateToggle">Attivando la regola %1$s in modalità reversibile</string>
<string name="ruleActivationComplete">Regola \"%1$s\" completa.</string>
<string name="ruleActive">Regola attiva</string>
<string name="ruleCheckOf">Controllo della regola %1$s</string>
<string name="ruleDoesntApplyActivityGivenButTooLowProbability">Impossibile applicare la regola. Attività \"%1$s\" rilevata, ma con una probabilità insufficente (%2$s %%), occorre almeno il %3$s %%.</string>
<string name="ruleDoesntApplyActivityNotPresent">Impossibile applicare la regola. L\'attività %1$s non è disponibile.</string>
<string name="ruleDoesntApplyBatteryHigherThan">Impossibile applicare la regola: Livello della batteria superiore a</string>
<string name="ruleDoesntApplyBatteryLowerThan">Impossibile applicare la regola: livello della batteria inferiore a</string>
<string name="ruleDoesntApplyDeviceInRangeButShouldNotBe">Impossibile applicare la regola. Il dispositivo è in portata, ma non dovrebbe esserlo</string>
<string name="ruleDoesntApplyItsLouderThan">Impossibile applicare la regola. È più forte di</string>
<string name="ruleDoesntApplyItsQuieterThan">Impossibile applicare la regola. È inferiore a</string>
<string name="ruleDoesntApplyNoTagLabel">Impossibile applicare la regola. Non vi è alcuna etichetta tag o nessun tag. </string>
<string name="ruleDoesntApplyNotTheCorrectDeviceAddress">Impossibile applicare la regola. Indirizzo dispositivo bluetooth errato.</string>
<string name="ruleDoesntApplyNotTheCorrectDeviceName">Impossibile applicare la regola. Nome dispositivo bluetooth errato.</string>
<string name="ruleDoesntApplyNotTheCorrectSsid">Impossibile applicare la regola. SSID errato (richiesto: \"%1$s\", ottenuto: \"%2$s\").</string>
<string name="ruleDoesntApplyStateNotCorrect">Impossibile applicare la regola. Stato errato</string>
<string name="ruleDoesntApplyWeAreFasterThan">Impossibile applicare la regola. Velocità superiore a</string>
<string name="ruleDoesntApplyWeAreSlowerThan">Impossibile applicare la regola. Velocità inferiore a</string>
<string name="ruleDoesntApplyWrongHeadphoneType">Impossibile applicare la regola. Tipo di auricolare errato.</string>
<string name="ruleDoesntApplyWrongTagLabel">Impossibile applicare la regola. Etichetta Tag errata.</string>
<string name="ruleHistory">Cronologia delle regole (dalla più recente):</string>
<string name="ruleIsDeactivatedCantApply">La regola %1$s è disabilitata e non posso applicarla.</string>
<string name="ruleLegend">Verde = abilitata, Rosso = disabilitata, Giallo = necessita ulteriori permessi</string>
<string name="ruleList">Elenco delle regole:</string>
<string name="ruleName">Nome della regola</string>
@ -456,7 +416,6 @@
<string name="rulesImportError">C\'è stato un errore nell\'importazione di regole e posizioni</string>
<string name="rulesImportedSuccessfully">Le regole e le posizioni sono state importate con successo.</string>
<string name="runManually">Esecuzione manuale</string>
<string name="runningApp">App in esecuzione</string>
<string name="satisfactoryAccuracyGps">Precisione minima in metri quando la posizione è individuata via GPS</string>
<string name="satisfactoryAccuracyNetwork">Precisione minima quando la localizzazione è effettuata in metri attraverso i ripetitori</string>
<string name="saturday">Sabato</string>
@ -536,14 +495,11 @@
<string name="startServiceAfterAppUpdateShort">Riavvio del servizio dopo l\'aggiornamento</string>
<string name="started">avviato</string>
<string name="starting">avviando</string>
<string name="startingGpsTimeout">Avviando timeout GPS</string>
<string name="startingPeriodicProcessMonitoringEngine">Avvio del sistema di monitoraggio periodico dei processi.</string>
<string name="status">Stato</string>
<string name="status">Stato</string>
<string name="stillGettingPosition">Ancora in attesa della posizione</string>
<string name="stopped">terminatoo</string>
<string name="stopping">terminando</string>
<string name="stoppingPeriodicProcessMonitoringEngine">Arresto del sistema di monitoraggio periodico dei processi.</string>
<string name="storeSettings">Leggere e scrivere le impostazioni</string>
<string name="stringNotAllowed">La stringa %1$s non è permessa.</string>
<string name="sunday">Domenica</string>
@ -580,12 +536,10 @@
<string name="triggerPointOfInterest">Posizione</string>
<string name="triggerSpeed">Velocità</string>
<string name="triggerTimeFrame">Intervallo</string>
<string name="triggerUrlReplacementPositionError">Hai chiesto di aggiungere una posizione alla tua URL. Purtroppo non ho ancora ricevuto nessuna posizione.</string>
<string name="triggerUsb_host_connection">connessione al computer (USB)</string>
<string name="triggers">Evento(i)</string>
<string name="triggersComment">(tutti gli eventi devono essere validi allo stesso tempo)</string>
<string name="tuesday">Martedì</string>
<string name="unknownActionSpecified">Azione non riconosciuta.</string>
<string name="unknownError">Errore indeterminato.</string>
<string name="until">finchè</string>
<string name="urlLegend">Variabili:\n È possibile utilizzare le seguenti variabili. All\'attivazione saranno sostituite con il valore corrispondente sul dispositivo. Includi le parentesi nel tuo testo.\n\n[uniqueid] - Il numero di serie del tuo dispositivo\n[serialnr] - Il serial number del tuo dispositivio\n[latitude] - La latitudine del tuo dispositivo\n[longitude] - La longitudine del tuo dispositivo\n[phonenr] - Numero dell\'ultima chiamata (entrante o uscente)\n[d] - Il giorno del mese, sempre 2 cifre\n[m] - Mese in formato numerico, sempre 2 cifre\n[Y] - L\anno, sempre 4 cifre\n[h] - Ore in formato 12 ore, sempre 2 cifre con due punti\n[H] - Ore in formato 24 ore, sempre 2 cifre con due punti\n[i] - Minuti, sempre 2 cifre\n[s] - Secondi, sempre 2 cifre\n[ms] - millisecondi, sempre 3 cifre [notificationTitle] - titolo dell'ultima notifica [notificationText] - testo dell'ultima notifica</string>
@ -626,13 +580,10 @@
<string name="wifi">wifi</string>
<string name="wifiConnection">Connessione wifi</string>
<string name="wifiName">Nome wifi</string>
<string name="wifiNameMatchesRuleWillApply">Il nome della wifi combacia. La regola si applicherà.</string>
<string name="wifiNameSpecifiedCheckingThat">Verifica della wifi indicata.</string>
<string name="wifiState">Stato Wifi</string>
<string name="wifiTetheringFailForAboveNougat">Questo non funziona più dato che sei su una versione superiore ad Android 7.</string>
<string name="with">con</string>
<string name="withLabel">con etichetta</string>
<string name="writeLogFile">Memorizza un file di log</string>
<string name="writingSettingsToPersistentMemory">Scrivo le impostazioni nella memoria interna.</string>
<string name="yes">Si</string>
</resources>

View File

@ -675,4 +675,7 @@
<string name="needLocationPermForWifiList">The list of wifis your device has been connected to could be used to determine which places you have been to. That\'s why the location permission is required to load the list of wifis. If you want to be able to pick one from the list you need to grant that permission. If not you can still enter your wifi name manually.</string>
<string name="noKnownWifis">There are no known wifis on your device.</string>
<string name="urlToTriggerExplanation">This feature does NOT open a browser, but triggers a URL in the background. You can use this e.g. to send commands to your home automation.</string>
<string name="automaticUpdateCheck">Check for updates</string>
<string name="automaticUpdateCheckSummary">Only applies to APK version.</string>
<string name="updateAvailable">There\'s a new update available. Would you like opening the browser to download it?</string>
</resources>