diff --git a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java
index 55b145d8..62134da2 100644
--- a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java
+++ b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java
@@ -2,8 +2,12 @@ package com.beemdevelopment.aegis;
import android.content.Context;
import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.os.Build;
import android.preference.PreferenceManager;
+import java.util.Locale;
+
public class Preferences {
private SharedPreferences _prefs;
@@ -70,4 +74,18 @@ public class Preferences {
public int getTimeout() {
return _prefs.getInt("pref_timeout", -1);
}
+
+ public Locale getLocale() {
+ String lang = _prefs.getString("pref_lang", "system");
+
+ if (lang.equals("system")) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ return Resources.getSystem().getConfiguration().getLocales().get(0);
+ } else {
+ return Resources.getSystem().getConfiguration().locale;
+ }
+ }
+
+ return new Locale(lang);
+ }
}
diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/AegisActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/AegisActivity.java
index d5cb4cb0..e355e6ca 100644
--- a/app/src/main/java/com/beemdevelopment/aegis/ui/AegisActivity.java
+++ b/app/src/main/java/com/beemdevelopment/aegis/ui/AegisActivity.java
@@ -2,6 +2,7 @@ package com.beemdevelopment.aegis.ui;
import android.animation.ValueAnimator;
import android.content.Intent;
+import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
@@ -16,6 +17,8 @@ import com.beemdevelopment.aegis.Theme;
import androidx.annotation.CallSuper;
import androidx.appcompat.app.AppCompatActivity;
+import java.util.Locale;
+
public abstract class AegisActivity extends AppCompatActivity implements AegisApplication.LockListener {
private boolean _resumed;
private AegisApplication _app;
@@ -24,8 +27,10 @@ public abstract class AegisActivity extends AppCompatActivity implements AegisAp
protected void onCreate(Bundle savedInstanceState) {
_app = (AegisApplication) getApplication();
- // set the theme and create the activity
- setPreferredTheme(getPreferences().getCurrentTheme());
+ // set the theme and locale before creating the activity
+ Preferences prefs = getPreferences();
+ setPreferredTheme(prefs.getCurrentTheme());
+ setLocale(prefs.getLocale());
super.onCreate(savedInstanceState);
// if the app was killed, relaunch MainActivity and close everything else
@@ -97,6 +102,15 @@ public abstract class AegisActivity extends AppCompatActivity implements AegisAp
}
}
+ protected void setLocale(Locale locale) {
+ Locale.setDefault(locale);
+
+ Configuration config = new Configuration();
+ config.locale = locale;
+
+ getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
+ }
+
/**
* Reports whether this Activity has been resumed. (i.e. onResume was called)
*/
diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/PreferencesFragment.java b/app/src/main/java/com/beemdevelopment/aegis/ui/PreferencesFragment.java
index 9a32092d..0235b18e 100644
--- a/app/src/main/java/com/beemdevelopment/aegis/ui/PreferencesFragment.java
+++ b/app/src/main/java/com/beemdevelopment/aegis/ui/PreferencesFragment.java
@@ -117,6 +117,13 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
}
});
+ Preference langPreference = findPreference("pref_lang");
+ langPreference.setOnPreferenceChangeListener((preference, newValue) -> {
+ _result.putExtra("needsRecreate", true);
+ getActivity().recreate();
+ return true;
+ });
+
int currentViewMode = app.getPreferences().getCurrentViewMode().ordinal();
Preference viewModePreference = findPreference("pref_view_mode");
viewModePreference.setSummary(String.format("%s: %s", getString(R.string.selected), getResources().getStringArray(R.array.view_mode_titles)[currentViewMode]));
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 6bbd102f..74ae68ad 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -29,4 +29,21 @@
- @string/compact_mode_title
- @string/small_mode_title
+
+
+ - System default
+ - Dutch
+ - English
+ - French
+ - Russian
+
+
+
+ - system
+ - nl
+ - en
+ - fr
+ - ru
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 38fd48f6..b6e9a0c8 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -15,6 +15,7 @@
Tools
Theme
View mode
+ Language
Show the account name
Enable this to show the account name next to the issuer
Timeout
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 4c31dc90..4eca3bd9 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -19,6 +19,15 @@
android:title="@string/pref_view_mode_title"
app:iconSpaceReserved="false"/>
+
+