From bfc0e3ac4fe1cf68431d19243645e67cec4ecadf Mon Sep 17 00:00:00 2001 From: Jens Date: Tue, 8 Jun 2021 23:14:09 +0200 Subject: [PATCH] Automatic update check for APK version. --- .../jens/automation2/ActivityMainScreen.java | 40 ++++++++++++++ .../jens/automation2/ActivitySettings.java | 8 +++ .../java/com/jens/automation2/AsyncTasks.java | 53 +++++++++++++++++++ .../main/java/com/jens/automation2/News.java | 2 +- .../java/com/jens/automation2/Settings.java | 16 ++++++ app/src/main/res/layout/activity_settings.xml | 6 +++ .../main/res/layout/activity_volume_test.xml | 2 +- app/src/main/res/values-de/strings.xml | 18 ------- app/src/main/res/values-es/strings.xml | 2 - app/src/main/res/values-it/strings.xml | 49 ----------------- app/src/main/res/values/strings.xml | 3 ++ 11 files changed, 128 insertions(+), 71 deletions(-) create mode 100644 app/src/main/java/com/jens/automation2/AsyncTasks.java diff --git a/app/src/main/java/com/jens/automation2/ActivityMainScreen.java b/app/src/main/java/com/jens/automation2/ActivityMainScreen.java index 20a5108..ef430af 100644 --- a/app/src/main/java/com/jens/automation2/ActivityMainScreen.java +++ b/app/src/main/java/com/jens/automation2/ActivityMainScreen.java @@ -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 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(); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/jens/automation2/ActivitySettings.java b/app/src/main/java/com/jens/automation2/ActivitySettings.java index 8cacc58..df8998b 100644 --- a/app/src/main/java/com/jens/automation2/ActivitySettings.java +++ b/app/src/main/java/com/jens/automation2/ActivitySettings.java @@ -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); + } } } diff --git a/app/src/main/java/com/jens/automation2/AsyncTasks.java b/app/src/main/java/com/jens/automation2/AsyncTasks.java new file mode 100644 index 0000000..ae71b07 --- /dev/null +++ b/app/src/main/java/com/jens/automation2/AsyncTasks.java @@ -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 + { + @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); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/jens/automation2/News.java b/app/src/main/java/com/jens/automation2/News.java index b7e2340..58df458 100644 --- a/app/src/main/java/com/jens/automation2/News.java +++ b/app/src/main/java/com/jens/automation2/News.java @@ -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); diff --git a/app/src/main/java/com/jens/automation2/Settings.java b/app/src/main/java/com/jens/automation2/Settings.java index 319bdc3..706481c 100644 --- a/app/src/main/java/com/jens/automation2/Settings.java +++ b/app/src/main/java/com/jens/automation2/Settings.java @@ -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 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)); diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 5efa0ed..9c6fd07 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -56,6 +56,12 @@ android:key="executeRulesAndProfilesWithSingleClick" android:title="@string/executeRulesAndProfilesWithSingleClickTitle" /> + + + android:layout_margin="@dimen/default_margin" > Dienst läuft nicht. 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 Ändern der Bildschirmrotation - Fehler bei der Statusprüfung des WLAN Routers - Fehler beim Aktivieren des WLAN Routers Fehler beim Ändern des Bluetooth Status. Hat dieses Gerät Bluetooth? - Versuche Download von - Fehler beim Anbinden an den connectionManager Dienst. Ändere nichts am Usb-Router Status. - Fehler beim Aufrufen des gegenwärtigen USB-Router Status. - Überprüfe routingfähiges Interface. - Stoppe beide LocationListener. - Starte Dienst nach Programm Aktualisierung. Er lief vor der Aktualisierung schon. - Starte Dienst nicht automatisch nach Programm Aktualisierung. Er lief davor nicht. - Starte Dienst nach Neustart des Telefons. - Starte Dienst nicht automatisch nach Neustart des Telefons. - Die Anwendung wurde aktualisiert. Dienst nach Anwendungsupdate automatisch wieder starten, wenn er vorher lief. Starte Dienst nach Update WLAN Verbindung @@ -254,12 +240,10 @@ Herunterschieben Das Objekt kann nicht weiter hochgeschoben werden. Das Objekt kann nicht weiter heruntergeschoben werden. - RuleCheck von %1$s Flugmodus Aktivieren Deaktivieren Seit Android Version 4.2 funktioniert diese Funktion - wenn überhaupt - nur noch mit gerooteten Geräten. - 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. Parameter-Paar hinzufügen Parameter Name Parameter Wert @@ -335,8 +319,6 @@ Einstellungen löschen Standard Einstellungen Sind sie sicher? - Mindestens Ort %1$s könnte im nahen Umkreis liegen, wenn nicht noch andere. - Kein Ort im näheren Umkreis. Aktivitätserkennung Erkannte Tätigkeit: In einem Fahrzeug (Auto/Bus) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 1b739c2..9cda739 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -376,8 +376,6 @@ Incluya las paréntecis en su texto.\n\n[uniqueid] - el número único de su dis Referencia fisicalo para ensayo de nivel ruido Nivel del registro (1=mínimo, 5=máximo) Nivel del registro - Ación inconocido especicado - Error cambiando rotación del monitor Error cambiando Bluetooth. El dispositivo tiene Bluetooth? Pedido HTTP Cantidad de los pruebos en caso pedidos HTTP fallan por razones de conexißon diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index bcdcd85..626ea20 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -96,10 +96,7 @@ qualsiasi numero qualsiasi wifi Automation richiede accesso alla memoria esterna per leggere le proprie impostazioni e regole. - Applicazione avviata. - Applicazione terminata. Applicazione - L\'applicazione è stata aggiornata. applica Sei sicuro? al @@ -121,7 +118,6 @@ Non posso spostare su l\'elemento. E\' già il primo. Impossibile eseguire le regole. Non posso fermarla. - Ripetitore modificato: %1$s Massimo tempo di inattività del ripetitore Modifica 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. @@ -139,8 +135,6 @@ continua ID corrente: Volume attuale - La informazione non può essere cambiata usando i permessi superuser. - La connessione è stata cambiata usando i permessi superuser. Disattivazione non attivo Disattivazione in corso @@ -182,7 +176,6 @@ inferiore Modifica Fine - Impedisce la localizzazione del provider e forza il GPS Inserisci un numero intero positivo Inserisci un nome! Definisci un nome per la coppia di intenzioni @@ -196,17 +189,11 @@ Azzera le impostazioni Errore Errore nell\'attivazione del profilo: - Errore nell\'attivazione del punto di accesso wifi - Errore nel ruotare lo schermo - Errore nel riconoscimento del punto di accesso wifi - Errore nell\'inizializzare le impostazioni nella memoria di massa. Errore nella lettura di regole e posizioni dal file. - Errore nel leggere le impostazioni C\'è stato un errore cercando di eseguire una regola. Errore nel\'avvio dell\'altra attività Errore nello scrivere la configurazione. È la memoria in sola lettura? Errore nella scrittura delle impostazioni. - Errore nella scrittura delle impostazioni nella memoria di massa. sta sorpassando è superiore Esegui regole/profili con un singolo click. @@ -217,8 +204,6 @@ Il file non esiste. 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. 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. - Aggiornamento forzato della posizione - Avendo raggiunto il timeout comparando le misure, sarà considerata valida l\'ultima posizione rilevata. Venerdì da Generale @@ -233,9 +218,6 @@ id della tua app Precisone del GPS [m] Comparazione GPS - Sto fermando la comparazione con il GPS a causa di un timeout. - Misurazione GPS - Misurazione GPS fermata per timeout. Sensazione tattile (vibrazione al tocco) Oppure Microfono @@ -297,7 +279,6 @@ Creare o modificare posizioni abbinando Questo messaggio non sarà mostrato più. - Il messaggio ricevuto attesta che il monitoraggio del processo è stato completato. Minimo intervallo (in metri) per aggiornare le posizioni GPS Minimo cambio della distanza per aggiornare la posizione dalla rete. Intervallo minimo in millisecondi per aggiornare la localizzazione @@ -342,12 +323,10 @@ Non c\'è nessuna wifi conosciuta sul tuo dispositivo. Non trovo un navigatore installato. Nessuna duplicazione di posizioni rilevata. - Nessuna posizione nel raggio specificato. Nessuna posizione indicata. Non hai specificato nessuna posizione. È necessario. Il profilo non può essere attivato. L\'ultimo profilo attivato è bloccato. Non c'è nessun profilo nella tua configurazione. Prima di tutto, creane uno. - Nessun nome della wifi specificato; devi inserirne uno. Nessuna cartella scrivibile trovata che permetta 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\" dalla schermata principale per calibrare il dispositivo. nessuno @@ -388,7 +367,6 @@ Indica almeno un\'azione. Indica almeno un evento. Posizione - Almeno la posizione %1$s potrebbe essere in zona, se non ne esistono altre in aggiunta. Elenco delle posizioni: Ci sono ancora regole che fanno riferimento a questa posizione (%1$s). Quindi non posso cancellarla ancora. Posizioni @@ -411,11 +389,8 @@ Il raggio deve essere un numero positivo. Raggio [m] Legge la posizione - Messaggio di riavvio del monitoraggio. Valore di riferimento fisico per la misura di rumore Riferimento per la misura di rumore - Attualizzando la lista dei processi. - Leggendo da file le impostazioni per ripristinarle in memoria. 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. Ricorda la ultima posizione attiva la notifica da %1$s rimossa @@ -425,27 +400,12 @@ Regola Attivando la regola %1$s Attivando la regola %1$s in modalità reversibile - Regola \"%1$s\" completa. Regola attiva - Controllo della regola %1$s - Impossibile applicare la regola. Attività \"%1$s\" rilevata, ma con una probabilità insufficente (%2$s %%), occorre almeno il %3$s %%. - Impossibile applicare la regola. L\'attività %1$s non è disponibile. - Impossibile applicare la regola: Livello della batteria superiore a - Impossibile applicare la regola: livello della batteria inferiore a Impossibile applicare la regola. Il dispositivo è in portata, ma non dovrebbe esserlo - Impossibile applicare la regola. È più forte di - Impossibile applicare la regola. È inferiore a - Impossibile applicare la regola. Non vi è alcuna etichetta tag o nessun tag. Impossibile applicare la regola. Indirizzo dispositivo bluetooth errato. Impossibile applicare la regola. Nome dispositivo bluetooth errato. - Impossibile applicare la regola. SSID errato (richiesto: \"%1$s\", ottenuto: \"%2$s\"). Impossibile applicare la regola. Stato errato - Impossibile applicare la regola. Velocità superiore a - Impossibile applicare la regola. Velocità inferiore a - Impossibile applicare la regola. Tipo di auricolare errato. - Impossibile applicare la regola. Etichetta Tag errata. Cronologia delle regole (dalla più recente): - La regola %1$s è disabilitata e non posso applicarla. Verde = abilitata, Rosso = disabilitata, Giallo = necessita ulteriori permessi Elenco delle regole: Nome della regola @@ -456,7 +416,6 @@ C\'è stato un errore nell\'importazione di regole e posizioni Le regole e le posizioni sono state importate con successo. Esecuzione manuale - App in esecuzione Precisione minima in metri quando la posizione è individuata via GPS Precisione minima quando la localizzazione è effettuata in metri attraverso i ripetitori Sabato @@ -536,14 +495,11 @@ Riavvio del servizio dopo l\'aggiornamento avviato avviando - Avviando timeout GPS - Avvio del sistema di monitoraggio periodico dei processi. Stato Stato Ancora in attesa della posizione terminatoo terminando - Arresto del sistema di monitoraggio periodico dei processi. Leggere e scrivere le impostazioni La stringa %1$s non è permessa. Domenica @@ -580,12 +536,10 @@ Posizione Velocità Intervallo - Hai chiesto di aggiungere una posizione alla tua URL. Purtroppo non ho ancora ricevuto nessuna posizione. connessione al computer (USB) Evento(i) (tutti gli eventi devono essere validi allo stesso tempo) Martedì - Azione non riconosciuta. Errore indeterminato. finchè 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 @@ -626,13 +580,10 @@ wifi Connessione wifi Nome wifi - Il nome della wifi combacia. La regola si applicherà. - Verifica della wifi indicata. Stato Wifi Questo non funziona più dato che sei su una versione superiore ad Android 7. con con etichetta Memorizza un file di log - Scrivo le impostazioni nella memoria interna. Si diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3425156..a3e6474 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -675,4 +675,7 @@ 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. There are no known wifis on your device. 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. + Check for updates + Only applies to APK version. + There\'s a new update available. Would you like opening the browser to download it? \ No newline at end of file