From 088d01fa89ca43276eb9dc6c3eb6e5b028ef97a7 Mon Sep 17 00:00:00 2001 From: Floens Date: Sat, 17 Nov 2018 21:03:06 +0100 Subject: [PATCH] i18n: add setting to force English language usage of the app. --- .../src/main/java/org/floens/chan/Chan.java | 3 ++ .../chan/core/settings/ChanSettings.java | 3 ++ .../chan/ui/activity/StartActivity.java | 3 ++ .../BehaviourSettingsController.java | 17 +++++++++++ .../org/floens/chan/utils/LocaleUtils.java | 30 +++++++++++++++++++ Clover/app/src/main/res/values/strings.xml | 2 ++ 6 files changed, 58 insertions(+) create mode 100644 Clover/app/src/main/java/org/floens/chan/utils/LocaleUtils.java diff --git a/Clover/app/src/main/java/org/floens/chan/Chan.java b/Clover/app/src/main/java/org/floens/chan/Chan.java index 3a2d404b..792892fb 100644 --- a/Clover/app/src/main/java/org/floens/chan/Chan.java +++ b/Clover/app/src/main/java/org/floens/chan/Chan.java @@ -34,6 +34,7 @@ import org.floens.chan.core.di.UserAgentProvider; import org.floens.chan.core.manager.BoardManager; import org.floens.chan.core.site.SiteService; import org.floens.chan.utils.AndroidUtils; +import org.floens.chan.utils.LocaleUtils; import org.floens.chan.utils.Logger; import org.floens.chan.utils.Time; @@ -89,6 +90,8 @@ public class Chan extends Application implements UserAgentProvider, Application. } public void initialize() { + LocaleUtils.overrideLocaleToEnglishIfNeeded(this); + final long startTime = Time.startTiming(); registerActivityLifecycleCallbacks(this); diff --git a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java index fe98acc0..44f6d9ed 100644 --- a/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java +++ b/Clover/app/src/main/java/org/floens/chan/core/settings/ChanSettings.java @@ -90,6 +90,7 @@ public class ChanSettings { private static Proxy proxy; + public static final BooleanSetting forceEnglishLocale; private static final StringSetting theme; public static final OptionsSetting layoutMode; public static final StringSetting fontSize; @@ -162,6 +163,8 @@ public class ChanSettings { static { SettingProvider p = new SharedPreferencesSettingProvider(AndroidUtils.getPreferences()); + forceEnglishLocale = new BooleanSetting(p, "preference_force_english_locale", false); + theme = new StringSetting(p, "preference_theme", "yotsuba"); layoutMode = new OptionsSetting<>(p, "preference_layout_mode", LayoutMode.class, LayoutMode.AUTO); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java b/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java index b8418cd1..c26f04a5 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/activity/StartActivity.java @@ -60,6 +60,7 @@ import org.floens.chan.ui.helper.VersionHandler; import org.floens.chan.ui.state.ChanState; import org.floens.chan.ui.theme.ThemeHelper; import org.floens.chan.utils.AndroidUtils; +import org.floens.chan.utils.LocaleUtils; import org.floens.chan.utils.Logger; import java.util.ArrayList; @@ -108,6 +109,8 @@ public class StartActivity extends AppCompatActivity implements NfcAdapter.Creat return; } + LocaleUtils.overrideLocaleToEnglishIfNeeded(this); + ThemeHelper.getInstance().setupContext(this); imagePickDelegate = new ImagePickDelegate(this); diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/BehaviourSettingsController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/BehaviourSettingsController.java index 1651eab4..5dfb4b3c 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/BehaviourSettingsController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/BehaviourSettingsController.java @@ -28,6 +28,7 @@ import org.floens.chan.ui.helper.RefreshUIMessage; import org.floens.chan.ui.settings.BooleanSettingView; import org.floens.chan.ui.settings.IntegerSettingView; import org.floens.chan.ui.settings.LinkSettingView; +import org.floens.chan.ui.settings.SettingView; import org.floens.chan.ui.settings.SettingsController; import org.floens.chan.ui.settings.SettingsGroup; import org.floens.chan.ui.settings.StringSettingView; @@ -37,6 +38,8 @@ import de.greenrobot.event.EventBus; import static org.floens.chan.Chan.injector; public class BehaviourSettingsController extends SettingsController { + private SettingView forceEnglishSetting; + public BehaviourSettingsController(Context context) { super(context); } @@ -54,11 +57,25 @@ public class BehaviourSettingsController extends SettingsController { buildPreferences(); } + @Override + public void onPreferenceChange(SettingView item) { + super.onPreferenceChange(item); + if (item == forceEnglishSetting) { + Toast.makeText(context, R.string.setting_force_english_locale_toggle_notice, + Toast.LENGTH_LONG).show(); + } + } + private void populatePreferences() { // General group { SettingsGroup general = new SettingsGroup(R.string.settings_group_general); + forceEnglishSetting = general.add(new BooleanSettingView(this, + ChanSettings.forceEnglishLocale, + R.string.setting_force_english_locale, + R.string.setting_force_english_locale_toggle_notice)); + general.add(new BooleanSettingView(this, ChanSettings.autoRefreshThread, R.string.setting_auto_refresh_thread, 0)); diff --git a/Clover/app/src/main/java/org/floens/chan/utils/LocaleUtils.java b/Clover/app/src/main/java/org/floens/chan/utils/LocaleUtils.java new file mode 100644 index 00000000..44f26812 --- /dev/null +++ b/Clover/app/src/main/java/org/floens/chan/utils/LocaleUtils.java @@ -0,0 +1,30 @@ +package org.floens.chan.utils; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Build; + +import org.floens.chan.core.settings.ChanSettings; + +import java.util.Locale; + +public class LocaleUtils { + public static void overrideLocaleToEnglishIfNeeded(Context context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && + ChanSettings.forceEnglishLocale.get()) { + setLocaleToEnglish(context); + } + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) + private static void setLocaleToEnglish(Context context) { + Resources resources = context.getResources(); + Configuration configuration = resources.getConfiguration(); + + configuration.setLocale(Locale.ENGLISH); + + resources.updateConfiguration(configuration, resources.getDisplayMetrics()); + } +} diff --git a/Clover/app/src/main/res/values/strings.xml b/Clover/app/src/main/res/values/strings.xml index 641e9703..702b7c14 100644 --- a/Clover/app/src/main/res/values/strings.xml +++ b/Clover/app/src/main/res/values/strings.xml @@ -459,6 +459,8 @@ Crash reports do not collect any personally identifiable information." General + Always use English for the language of the app + Language will be applied on the next app start. Auto refresh threads Confirm before exit Allow screens to be swiped away