From e8e7e8824039222c254ccf2f60bb4955a2a682e5 Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Thu, 12 Nov 2020 18:52:07 +0700 Subject: [PATCH] Implements language changer --- .../kdt/pojavlaunch/DisplayableLocale.java | 25 ++++++++++ .../kdt/pojavlaunch/PojavLoginActivity.java | 49 +++++++++++++++---- .../prefs/LauncherPreferences.java | 5 +- app/src/main/res/values/strings.xml | 2 +- 4 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/net/kdt/pojavlaunch/DisplayableLocale.java diff --git a/app/src/main/java/net/kdt/pojavlaunch/DisplayableLocale.java b/app/src/main/java/net/kdt/pojavlaunch/DisplayableLocale.java new file mode 100644 index 000000000..19b95000a --- /dev/null +++ b/app/src/main/java/net/kdt/pojavlaunch/DisplayableLocale.java @@ -0,0 +1,25 @@ +package net.kdt.pojavlaunch; +import java.util.*; + +public class DisplayableLocale { + public final Locale mLocale; + public final CharSequence mName; + + public DisplayableLocale(Locale locale) { + this(locale, locale.getDisplayName(locale)); + } + + public DisplayableLocale(Locale locale, CharSequence name) { + mLocale = locale; + mName = name; + } + + public Locale toLocale() { + return mLocale; + } + + @Override + public String toString() { + return mName.toString(); + } +} diff --git a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java index 128d5b6bb..187028fc3 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java @@ -19,11 +19,13 @@ import com.kdt.filerapi.*; import com.kdt.mojangauth.*; import java.io.*; import java.util.*; +import java.util.zip.*; import net.kdt.pojavlaunch.customcontrols.*; import net.kdt.pojavlaunch.utils.*; import org.apache.commons.compress.archivers.tar.*; import org.apache.commons.compress.compressors.xz.*; import org.apache.commons.io.*; +import net.kdt.pojavlaunch.prefs.*; public class PojavLoginActivity extends AppCompatActivity // MineActivity @@ -186,6 +188,10 @@ public class PojavLoginActivity extends AppCompatActivity } private void uiInit() { + if (!LauncherPreferences.PREF_LANGUAGE.equals("default")) { + setLocale(new Locale(LauncherPreferences.PREF_LANGUAGE)); + } + setContentView(R.layout.launcher_login_v2); loginLayout = findViewById(R.id.login_layout_linear); @@ -202,11 +208,26 @@ public class PojavLoginActivity extends AppCompatActivity SpannableString defaultLangChar = new SpannableString(defaultLang); defaultLangChar.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, defaultLang.length(),0); - ArrayAdapter langAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item); - langAdapter.add(defaultLangChar); - for (Locale locale : Locale.getAvailableLocales()) { - langAdapter.add(locale.getDisplayLanguage()); + ArrayAdapter langAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item); + langAdapter.add(new DisplayableLocale(Locale.getDefault(), defaultLangChar)); + langAdapter.add(new DisplayableLocale(Locale.ENGLISH)); + + // TODO better way to read language list + try { + ZipFile thisApk = new ZipFile(getApplicationInfo().publicSourceDir); + Enumeration thisEntries = thisApk.entries(); + while (thisEntries.hasMoreElements()) { + File currFile = new File("/" + ((ZipEntry) thisEntries.nextElement()).getName()); + if (currFile.getAbsolutePath().startsWith("/res/values-") && currFile.getName().startsWith("values-")) { + // TODO use regex + Locale thisLocale = new Locale(currFile.getName().replace("values-", "").replace("-r", "-")); + langAdapter.add(new DisplayableLocale(thisLocale)); + } + } + } catch (IOException e) { + Tools.showError(this, e); } + langAdapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice); spinnerChgLang.setAdapter(langAdapter); @@ -217,14 +238,12 @@ public class PojavLoginActivity extends AppCompatActivity Locale locale; if (position == 0) { locale = Locale.getDefault(); + } else if (position == 1) { + locale = Locale.ENGLISH; } else { - locale = Locale.getAvailableLocales()[position - 1]; + locale = Locale.getAvailableLocales()[position - 2]; } - Locale.setDefault(locale); - Configuration config = new Configuration(); - config.setLocale(locale); - // TODO replace deprecated - getResources().updateConfiguration(config, getResources().getDisplayMetrics()); + setLocale(locale); } @Override @@ -264,6 +283,16 @@ public class PojavLoginActivity extends AppCompatActivity // Clear current profile PojavProfile.setCurrentProfile(this, null); } + + private void setLocale(Locale locale) { + LauncherPreferences.PREF_LANGUAGE = locale.getLanguage(); + LauncherPreferences.DEFAULT_PREF.edit().putString("language", LauncherPreferences.PREF_LANGUAGE).commit(); + Locale.setDefault(locale); + Configuration config = new Configuration(); + config.setLocale(locale); + // TODO replace deprecated + getResources().updateConfiguration(config, getResources().getDisplayMetrics()); + } private boolean isJavaRuntimeInstalled() { return firstLaunchPrefs.getBoolean(PREF_IS_INSTALLED_JAVARUNTIME, false); diff --git a/app/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java b/app/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java index 5b4c4a02d..93bcfd24d 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java +++ b/app/src/main/java/net/kdt/pojavlaunch/prefs/LauncherPreferences.java @@ -1,8 +1,8 @@ package net.kdt.pojavlaunch.prefs; import android.content.*; +import java.util.*; import net.kdt.pojavlaunch.*; -import android.os.*; public class LauncherPreferences { @@ -17,6 +17,7 @@ public class LauncherPreferences public static String PREF_DEFAULTCTRL_PATH = Tools.CTRLDEF_FILE; public static String PREF_CUSTOM_JAVA_ARGS; public static String PREF_CUSTOM_OPENGL_LIBNAME = "libgl04es.so"; + public static String PREF_LANGUAGE = "default"; public static void loadPreferences() { PREF_BUTTONSIZE = DEFAULT_PREF.getFloat("controlSize", 1f); @@ -27,6 +28,8 @@ public class LauncherPreferences PREF_VERTYPE_OLDBETA = DEFAULT_PREF.getBoolean("vertype_oldbeta", false); PREF_LONGPRESS_TRIGGER = DEFAULT_PREF.getInt("timeLongPressTrigger", 500); PREF_DEFAULTCTRL_PATH = DEFAULT_PREF.getString("defaultCtrl", Tools.CTRLDEF_FILE); + PREF_LANGUAGE = DEFAULT_PREF.getString("language", "default"); + // Get double of max Android heap to set default heap size int androidHeap = (int) (Runtime.getRuntime().maxMemory() / 1024l / 512l); int doubleAndroidHeap = androidHeap * 2; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f0ebdab7a..faa3c5551 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -100,7 +100,7 @@ How long will trigger after long press Change trigger time for long press in destroy block and drop item. Set control buttons size - JRE Launch arguments + JVM Launch arguments Be careful, this may make game crash if modified without knowledge. General settings Version type will be in version list