Configurable language, part 1
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
package i2p.bote.android.config;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.preference.PreferenceFragment;
|
||||
|
||||
import i2p.bote.android.R;
|
||||
|
||||
public class AppearancePreferenceFragment extends PreferenceFragment {
|
||||
@Override
|
||||
public void onCreate(Bundle paramBundle) {
|
||||
super.onCreate(paramBundle);
|
||||
addPreferencesFromResource(R.xml.settings_appearance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(
|
||||
(SettingsActivity) getActivity()
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
((SettingsActivity) getActivity()).getSupportActionBar().setTitle(R.string.settings_label_appearance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(
|
||||
(SettingsActivity) getActivity()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package i2p.bote.android.config;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.preference.Preference;
|
||||
import android.support.v4.app.Fragment;
|
||||
@@ -13,12 +14,17 @@ import i2p.bote.android.EmailListActivity;
|
||||
import i2p.bote.android.InitActivities;
|
||||
import i2p.bote.android.R;
|
||||
import i2p.bote.android.identities.IdentityListActivity;
|
||||
import i2p.bote.android.util.LocaleManager;
|
||||
|
||||
public class SettingsActivity extends AppCompatActivity {
|
||||
public class SettingsActivity extends AppCompatActivity implements
|
||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
public static final String PREFERENCE_CATEGORY = "preference_category";
|
||||
public static final String PREFERENCE_CATEGORY_GENERAL = "preference_category_general";
|
||||
public static final String PREFERENCE_CATEGORY_CHANGE_PASSWORD = "preference_category_change_password";
|
||||
public static final String PREFERENCE_CATEGORY_IDENTITIES = "preference_category_identities";
|
||||
public static final String PREFERENCE_CATEGORY_APPEARANCE = "preference_category_appearance";
|
||||
|
||||
private final LocaleManager localeManager = new LocaleManager();
|
||||
|
||||
|
||||
//
|
||||
@@ -27,6 +33,7 @@ public class SettingsActivity extends AppCompatActivity {
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
localeManager.onCreate(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_toolbar);
|
||||
|
||||
@@ -51,6 +58,12 @@ public class SettingsActivity extends AppCompatActivity {
|
||||
.commit();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
localeManager.onResume(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onSupportNavigateUp() {
|
||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
||||
@@ -65,6 +78,13 @@ public class SettingsActivity extends AppCompatActivity {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||
if (key.equals("pref_language")) {
|
||||
localeManager.onResume(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Settings pages
|
||||
@@ -82,6 +102,8 @@ public class SettingsActivity extends AppCompatActivity {
|
||||
.setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_CHANGE_PASSWORD));
|
||||
findPreference(PREFERENCE_CATEGORY_IDENTITIES)
|
||||
.setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_IDENTITIES));
|
||||
findPreference(PREFERENCE_CATEGORY_APPEARANCE)
|
||||
.setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_APPEARANCE));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -127,6 +149,8 @@ public class SettingsActivity extends AppCompatActivity {
|
||||
switch (category) {
|
||||
case PREFERENCE_CATEGORY_GENERAL:
|
||||
return new GeneralPreferenceFragment();
|
||||
case PREFERENCE_CATEGORY_APPEARANCE:
|
||||
return new AppearancePreferenceFragment();
|
||||
default:
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
62
app/src/main/java/i2p/bote/android/util/LocaleManager.java
Normal file
62
app/src/main/java/i2p/bote/android/util/LocaleManager.java
Normal file
@@ -0,0 +1,62 @@
|
||||
package i2p.bote.android.util;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Service;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class LocaleManager {
|
||||
private Locale currentLocale;
|
||||
|
||||
public void onCreate(Activity activity) {
|
||||
currentLocale = getSelectedLocale(activity);
|
||||
setContextLocale(activity, currentLocale);
|
||||
}
|
||||
|
||||
public void onResume(Activity activity) {
|
||||
// If the activity has the incorrect locale, restart it
|
||||
if (!currentLocale.equals(getSelectedLocale(activity))) {
|
||||
Intent intent = activity.getIntent();
|
||||
activity.finish();
|
||||
activity.overridePendingTransition(0, 0);
|
||||
activity.startActivity(intent);
|
||||
activity.overridePendingTransition(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateServiceLocale(Service service) {
|
||||
currentLocale = getSelectedLocale(service);
|
||||
setContextLocale(service, currentLocale);
|
||||
}
|
||||
|
||||
private static Locale getSelectedLocale(Context context) {
|
||||
String defaultLanguage = "zz";
|
||||
String selectedLanguage = PreferenceManager.getDefaultSharedPreferences(context).getString(
|
||||
"pref_language", defaultLanguage
|
||||
);
|
||||
String language[] = TextUtils.split(selectedLanguage, "_");
|
||||
|
||||
if (language[0].equals(defaultLanguage))
|
||||
return Locale.getDefault();
|
||||
else if (language.length == 2)
|
||||
return new Locale(language[0], language[1]);
|
||||
else
|
||||
return new Locale(language[0]);
|
||||
}
|
||||
|
||||
private static void setContextLocale(Context context, Locale selectedLocale) {
|
||||
Configuration configuration = context.getResources().getConfiguration();
|
||||
if (!configuration.locale.equals(selectedLocale)) {
|
||||
configuration.locale = selectedLocale;
|
||||
context.getResources().updateConfiguration(
|
||||
configuration,
|
||||
context.getResources().getDisplayMetrics()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,4 +16,36 @@
|
||||
<item>I2P Android</item>
|
||||
<item>@string/remote_i2p_router</item>
|
||||
</string-array>
|
||||
<string-array name="languages">
|
||||
<item>zz</item>
|
||||
<item>en</item>
|
||||
<item>zh</item>
|
||||
<item>de</item>
|
||||
<item>es</item>
|
||||
<item>fr</item>
|
||||
<item>in</item>
|
||||
<item>nb</item>
|
||||
<item>nl</item>
|
||||
<item>pl</item>
|
||||
<item>pt</item>
|
||||
<item>ro</item>
|
||||
<item>ru</item>
|
||||
<item>sq</item>
|
||||
</string-array>
|
||||
<string-array name="language_names">
|
||||
<item>@string/settings_default</item>
|
||||
<item>English</item>
|
||||
<item>Chinese 中国的</item>
|
||||
<item>Deutsch</item>
|
||||
<item>Español</item>
|
||||
<item>Français</item>
|
||||
<item>Indonesia</item>
|
||||
<item>Norwegian Bokmål</item>
|
||||
<item>Nederlands</item>
|
||||
<item>Polski</item>
|
||||
<item>Português</item>
|
||||
<item>Română</item>
|
||||
<item>Russian Pусский</item>
|
||||
<item>Shqip</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
|
||||
@@ -213,6 +213,9 @@
|
||||
<string name="pref_dialog_title_router">Router to use</string>
|
||||
<string name="pref_title_i2cp_host">I2CP host</string>
|
||||
<string name="pref_title_i2cp_port">I2CP port</string>
|
||||
<string name="settings_label_appearance">Appearance</string>
|
||||
<string name="settings_label_language">Language</string>
|
||||
<string name="settings_default">Default</string>
|
||||
<string name="pref_title_change_password">Change password</string>
|
||||
<string name="old_password">Old password</string>
|
||||
<string name="new_password">New password</string>
|
||||
|
||||
@@ -9,4 +9,7 @@
|
||||
<Preference
|
||||
android:key="preference_category_identities"
|
||||
android:title="@string/pref_title_identities"/>
|
||||
<Preference
|
||||
android:key="preference_category_appearance"
|
||||
android:title="@string/settings_label_appearance" />
|
||||
</PreferenceScreen>
|
||||
10
app/src/main/res/xml/settings_appearance.xml
Normal file
10
app/src/main/res/xml/settings_appearance.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<ListPreference
|
||||
android:defaultValue="zz"
|
||||
android:entries="@array/language_names"
|
||||
android:entryValues="@array/languages"
|
||||
android:key="pref_language"
|
||||
android:summary="%s"
|
||||
android:title="@string/settings_label_language" />
|
||||
</PreferenceScreen>
|
||||
Reference in New Issue
Block a user