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"/> + +