From e5433bf2ec97468950a3a664dc8a2bc5d592d31b Mon Sep 17 00:00:00 2001 From: Jens Date: Sun, 26 Feb 2023 18:12:47 +0100 Subject: [PATCH] Possibility to pick custom language --- .../com/jens/automation2/ActivityMainPoi.java | 1 + .../automation2/ActivityMainProfiles.java | 1 + .../jens/automation2/ActivityMainRules.java | 3 +- .../jens/automation2/ActivityMainScreen.java | 5 ++++ .../automation2/ActivityMainTabLayout.java | 7 ++++- .../jens/automation2/AutomationService.java | 5 ++++ .../com/jens/automation2/Miscellaneous.java | 18 +++++++++++ .../java/com/jens/automation2/Settings.java | 8 +++++ app/src/main/res/layout/activity_settings.xml | 7 +++++ app/src/main/res/values-de/strings.xml | 11 +++++++ app/src/main/res/values-es/strings.xml | 10 +++++++ app/src/main/res/values-fr/strings.xml | 10 +++++++ app/src/main/res/values-it/strings.xml | 10 +++++++ app/src/main/res/values-nl/strings.xml | 10 +++++++ app/src/main/res/values-ru/strings.xml | 10 +++++++ app/src/main/res/values/arrays.xml | 30 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 ++ .../metadata/android/en-US/changelogs/127.txt | 3 +- 18 files changed, 148 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/jens/automation2/ActivityMainPoi.java b/app/src/main/java/com/jens/automation2/ActivityMainPoi.java index 27d119899..2d8a1f738 100644 --- a/app/src/main/java/com/jens/automation2/ActivityMainPoi.java +++ b/app/src/main/java/com/jens/automation2/ActivityMainPoi.java @@ -44,6 +44,7 @@ public class ActivityMainPoi extends ActivityGeneric protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Miscellaneous.setDisplayLanguage(ActivityMainPoi.this); setContentView(R.layout.main_poi_layout); instance = this; diff --git a/app/src/main/java/com/jens/automation2/ActivityMainProfiles.java b/app/src/main/java/com/jens/automation2/ActivityMainProfiles.java index 17a20d6fb..cca512733 100644 --- a/app/src/main/java/com/jens/automation2/ActivityMainProfiles.java +++ b/app/src/main/java/com/jens/automation2/ActivityMainProfiles.java @@ -40,6 +40,7 @@ public class ActivityMainProfiles extends ActivityGeneric protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Miscellaneous.setDisplayLanguage(ActivityMainProfiles.this); setContentView(R.layout.main_profile_layout); instance = this; diff --git a/app/src/main/java/com/jens/automation2/ActivityMainRules.java b/app/src/main/java/com/jens/automation2/ActivityMainRules.java index ed5bb7413..d49648b3c 100644 --- a/app/src/main/java/com/jens/automation2/ActivityMainRules.java +++ b/app/src/main/java/com/jens/automation2/ActivityMainRules.java @@ -47,7 +47,8 @@ public class ActivityMainRules extends ActivityGeneric @Override protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); + super.onCreate(savedInstanceState); + Miscellaneous.setDisplayLanguage(ActivityMainRules.this); setContentView(R.layout.main_rule_layout); instance = this; diff --git a/app/src/main/java/com/jens/automation2/ActivityMainScreen.java b/app/src/main/java/com/jens/automation2/ActivityMainScreen.java index ea9df837b..4b3cef9c3 100644 --- a/app/src/main/java/com/jens/automation2/ActivityMainScreen.java +++ b/app/src/main/java/com/jens/automation2/ActivityMainScreen.java @@ -6,9 +6,12 @@ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.res.Configuration; +import android.content.res.Resources; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import android.view.View; @@ -31,6 +34,7 @@ import com.jens.automation2.location.LocationProvider; import java.util.ArrayList; import java.util.Calendar; +import java.util.Locale; @SuppressLint("NewApi") public class ActivityMainScreen extends ActivityGeneric @@ -51,6 +55,7 @@ public class ActivityMainScreen extends ActivityGeneric public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + Miscellaneous.setDisplayLanguage(ActivityMainScreen.this); setContentView(R.layout.main_overview_layout); activityMainScreenInstance = this; diff --git a/app/src/main/java/com/jens/automation2/ActivityMainTabLayout.java b/app/src/main/java/com/jens/automation2/ActivityMainTabLayout.java index 11ab97f5b..bbdf5df1b 100644 --- a/app/src/main/java/com/jens/automation2/ActivityMainTabLayout.java +++ b/app/src/main/java/com/jens/automation2/ActivityMainTabLayout.java @@ -3,12 +3,17 @@ package com.jens.automation2; import android.annotation.SuppressLint; import android.app.TabActivity; import android.content.Intent; +import android.content.res.Configuration; +import android.content.res.Resources; import android.os.Bundle; +import android.util.DisplayMetrics; import android.widget.TabHost; import android.widget.TabHost.TabSpec; import com.jens.automation2.receivers.NfcReceiver; +import java.util.Locale; + @SuppressLint("NewApi") public class ActivityMainTabLayout extends TabActivity @@ -17,8 +22,8 @@ public class ActivityMainTabLayout extends TabActivity protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - Settings.readFromPersistentStorage(ActivityMainTabLayout.this); + Miscellaneous.setDisplayLanguage(ActivityMainTabLayout.this); if(Settings.tabsPlacement == 1) setContentView(R.layout.main_tab_layout_tabs_at_bottom); diff --git a/app/src/main/java/com/jens/automation2/AutomationService.java b/app/src/main/java/com/jens/automation2/AutomationService.java index 0119b5f7a..9fb03a4e8 100644 --- a/app/src/main/java/com/jens/automation2/AutomationService.java +++ b/app/src/main/java/com/jens/automation2/AutomationService.java @@ -12,6 +12,8 @@ import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; +import android.content.res.Configuration; +import android.content.res.Resources; import android.media.AudioManager; import android.os.Binder; import android.os.Build; @@ -20,6 +22,7 @@ import android.os.Environment; import android.os.IBinder; import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.OnInitListener; +import android.util.DisplayMetrics; import android.util.Log; import android.widget.Toast; @@ -127,6 +130,8 @@ public class AutomationService extends Service implements OnInitListener // Store a reference to myself. Other classes often need a context or something, this can provide that. centralInstance = this; + + Miscellaneous.setDisplayLanguage(AutomationService.this); } public boolean checkStartupRequirements(Context context, boolean startAtBoot) diff --git a/app/src/main/java/com/jens/automation2/Miscellaneous.java b/app/src/main/java/com/jens/automation2/Miscellaneous.java index 7006c41cf..ef838767a 100644 --- a/app/src/main/java/com/jens/automation2/Miscellaneous.java +++ b/app/src/main/java/com/jens/automation2/Miscellaneous.java @@ -15,6 +15,7 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; +import android.content.res.Resources; import android.database.Cursor; import android.media.AudioAttributes; import android.media.RingtoneManager; @@ -31,6 +32,7 @@ import android.provider.Settings.Secure; import android.telephony.PhoneNumberUtils; import android.telephony.TelephonyManager; import android.util.Base64; +import android.util.DisplayMetrics; import android.util.Log; import android.widget.Toast; @@ -1985,4 +1987,20 @@ public class Miscellaneous extends Service { return context.getApplicationContext().getApplicationInfo().targetSdkVersion; } + + public static void setDisplayLanguage(Context context) + { + if(!Settings.displayLanguage.equals(Settings.default_displayLanguage)) + { + Locale myLocale = new Locale(Settings.displayLanguage); + Resources res = context.getResources(); + DisplayMetrics dm = res.getDisplayMetrics(); + Configuration conf = res.getConfiguration(); + conf.locale = myLocale; + res.updateConfiguration(conf, dm); + //Intent refresh = new Intent(this, AndroidLocalize.class); + //finish(); + //startActivity(refresh); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/jens/automation2/Settings.java b/app/src/main/java/com/jens/automation2/Settings.java index 895a81b94..8717d3890 100644 --- a/app/src/main/java/com/jens/automation2/Settings.java +++ b/app/src/main/java/com/jens/automation2/Settings.java @@ -68,6 +68,7 @@ public class Settings implements SharedPreferences public static boolean showToasts; public static boolean automaticUpdateCheck; public static long musicCheckFrequency; + public static String displayLanguage; public static boolean lockSoundChanges; public static boolean noticeAndroid9MicrophoneShown; @@ -138,6 +139,7 @@ public class Settings implements SharedPreferences public static final long default_lastNewsPolltime = -1; public static final long default_lastUpdateCheck = -1; public static final long default_musicCheckFrequency = 2500; + public static final String default_displayLanguage = "systemDefaultLanguage"; @Override public boolean contains(String arg0) @@ -273,6 +275,7 @@ public class Settings implements SharedPreferences tabsPlacement = Integer.parseInt(prefs.getString("tabsPlacement", String.valueOf(default_tabsPlacement))); musicCheckFrequency = Long.parseLong(prefs.getString("musicCheckFrequency", String.valueOf(default_musicCheckFrequency))); + displayLanguage = prefs.getString("displayLanguage", default_displayLanguage); if(Settings.musicCheckFrequency == 0) Settings.musicCheckFrequency = Settings.default_musicCheckFrequency; @@ -482,6 +485,9 @@ public class Settings implements SharedPreferences if(!prefs.contains("musicCheckFrequency") || force) editor.putLong("musicCheckFrequency", default_musicCheckFrequency); + if(!prefs.contains("displayLanguage") || force) + editor.putString("displayLanguage", default_displayLanguage); + if(!prefs.contains("lockSoundChanges") || force) editor.putBoolean("lockSoundChanges", default_lockSoundChanges); @@ -568,6 +574,8 @@ public class Settings implements SharedPreferences Settings.musicCheckFrequency = Settings.default_musicCheckFrequency; editor.putString("musicCheckFrequency", String.valueOf(musicCheckFrequency)); + editor.putString("displayLanguage", displayLanguage); + editor.putBoolean("lockSoundChanges", lockSoundChanges); editor.putBoolean("noticeAndroid9MicrophoneShown", noticeAndroid9MicrophoneShown); editor.putBoolean("noticeAndroid10WifiShown", noticeAndroid10WifiShown); diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 5eec7a1b5..8ce9375b2 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -59,6 +59,13 @@ android:entries="@array/tabsPlacementOptions" android:entryValues="@array/tabsPlacementOptionsValues" /> + + diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 8e12ecb3c..2aa457c83 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,5 +1,13 @@ + System Standard + Englisch + Deutsch + Italienisch + Spanisch + Niederländisch + Russisch + Französisch Aktiviere Regel %1$s Aktiviere Profil %1$s Aktiviere Regel %1$s im Umkehrmodus @@ -780,4 +788,7 @@ Toasts anzeigen Popups anzeigen, wenn Ereignisse wie Regelausführungen auftreten Nachdem Sie auf OK geklickt haben, wählen Sie Automatisierung, dann \"Benachrichtigungszugriff zulassen\" und dann \"Zulassen\". + Anzeigesprache + Bestimmte Anzeigesprache wählen + B \ 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 4caccedda..c2859098e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,5 +1,13 @@ + Predeterminado + Inglés + Alemán + Italiano + Español + Holandés + Ruso + Francés Estoy activando regla %1$s Estoy activando perfil %1$s Estoy activando regla %1$s en el modo de invertir @@ -779,4 +787,6 @@ Mostrar toasts Mostrar notificaciones del sistema cuando se producen eventos como ejecuciones de reglas Después de hacer clcliquear en OK, seleccione Automation, luego seleccione \"Permitir acceso a notificaciones\", luego \"Permitir\". + Idioma de visualización + Establecer un idioma personalizado para la aplicación \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index a2ca330e1..3d96a930c 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,5 +1,13 @@ + Valeur par défaut du système + Anglais + Allemand + Italien + Espagnol + Néerlandais + Russe + Français Activation de la règle %1$s Activation du profil %1$s Activation de la règle %1$s en mode alternatif @@ -779,4 +787,6 @@ Afficher les toasts Afficher les toasts lorsque des événements tels que des exécutions de règles se produisent Après avoir cliqué sur OK, sélectionnez Automatisation, puis sélectionnez « Autoriser l\'accès aux notifications », puis « Autoriser ». + Langue d\'affichage + Définir une langue personnalisée pour l\'application diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 0cb7d36ce..b1747eb10 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -396,6 +396,14 @@ Roaming È necessario avere i permessi di root per utilizzare questa funzione. Una volta abilitato l\'accesso root, dovrai \"eseguire la regola manualmente\" per attivare la richiesta di autorizzazione come superuser. Nella finestra di popup di superuser, bisognerà consentire sempre l\'esecuzione dell\'applicazione con questi permessi. In caso contrario, la regola non potrà funzionare quando il telefono è inattivo. Regola + Impostazione predefinita del sistema + Inglese + Tedesco + Italiano + Spagnolo + Olandese + Russo + Francese Attivando la regola %1$s Attivando la regola %1$s in modalità reversibile Regola attiva @@ -780,4 +788,6 @@ Mostra toast Mostrare gli avvisi popup quando si verificano eventi come le esecuzioni di regole Dopo aver fatto clic su OK, selezionare Automazione, quindi selezionare \"Consenti accesso alle notifiche\", quindi \"Consenti\". + Lingua di visualizzazione + Set a custom language for the application diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index e8fac35db..ed213a2c6 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -1,4 +1,12 @@ + Systeemstandaard + Engels + Duits + Italiaans + Spaans + Nederlands + Russisch + Frans Activering regel %1$s Activeren profiel %1$s Activeren regel %1$s in Togglemode @@ -778,5 +786,7 @@ Toon toasts Pop-ups weergeven wanneer gebeurtenissen zoals regeluitvoeringen plaatsvinden Nadat u op OK hebt geklikt, selecteert u Automatisering, selecteert u vervolgens \"Toegang tot meldingen toestaan\" en vervolgens \"toestaan\". + Taal weergeven + Een aangepaste taal instellen voor de toepassing diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 13084154b..4fe55d720 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -1,5 +1,13 @@ + Системное значение по умолчанию + Английский + Немецкий + Итальянский + Испанский + Нидерландский + русский + Французский Активация правила %1$s Активация профиля %1$s Активация правила %1$s в режиме переключения @@ -837,4 +845,6 @@ Показать тосты Отображение всплывающих уведомлений при таких событиях, как выполнение правил После нажатия кнопки «ОК» выберите «Автоматизация», затем выберите «Разрешить доступ к уведомлениям», затем «Разрешить». + Язык интерфейса + Язык интерфейса diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 2fdce81c1..19212da56 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -22,6 +22,28 @@ 3 + + @string/languageSystemDefault + @string/languageEnglish + @string/languageGerman + @string/languageItalian + @string/languageSpanish + @string/languageDutch + @string/languageRussian + @string/languageFrench + + + + systemDefaultLanguage + en + de + it + es + nl + ru + fr + + @string/top @string/bottom @@ -33,4 +55,12 @@ 3 + System default + English + German + Italian + Spanish + Dutch + Russian + French \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ab0e9db48..39964fc20 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -877,4 +877,6 @@ Show toasts Show toasts when events like rule executions occur After clicking ok, select Automation, then select \"Allow notification access\", then \"allow\". + Display language + Set a custom language for the application \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/127.txt b/fastlane/metadata/android/en-US/changelogs/127.txt index ae24b570b..1b90ec029 100644 --- a/fastlane/metadata/android/en-US/changelogs/127.txt +++ b/fastlane/metadata/android/en-US/changelogs/127.txt @@ -1 +1,2 @@ -* Fixed: Editing variable action was not possible \ No newline at end of file +* Fixed: Editing variable action was not possible +* Added: Possibility to pick a custom language in settings \ No newline at end of file