diff --git a/app/src/main/java/net/kdt/pojavlaunch/BaseActivity.java b/app/src/main/java/net/kdt/pojavlaunch/BaseActivity.java index 2d0fa683e..4e47f70e8 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/BaseActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/BaseActivity.java @@ -1,7 +1,9 @@ package net.kdt.pojavlaunch; -import android.support.v7.app.*; +import android.content.*; import android.os.*; +import android.support.v7.app.*; +import net.kdt.pojavlaunch.utils.*; public class BaseActivity extends AppCompatActivity { @@ -11,4 +13,9 @@ public class BaseActivity extends AppCompatActivity Tools.setFullscreen(this); Tools.updateWindowSize(this); } + + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleUtils.setLocale(base)); + } } diff --git a/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java b/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java index 8870860ff..da80f4504 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/CustomControlsActivity.java @@ -208,7 +208,7 @@ public class CustomControlsActivity extends BaseActivity selectedName = new File(path).getName(); // Remove `.json` - selectedName = selectedName.substring(0, selectedName.length() - 5); + selectedName = selectedName.substring(0, selectedName.length() - ControlData.getSpecialButtons().length); } catch (Exception e) { Tools.showError(CustomControlsActivity.this, e); } diff --git a/app/src/main/java/net/kdt/pojavlaunch/PojavApplication.java b/app/src/main/java/net/kdt/pojavlaunch/PojavApplication.java index 393f29216..2d627f195 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/PojavApplication.java +++ b/app/src/main/java/net/kdt/pojavlaunch/PojavApplication.java @@ -1,21 +1,18 @@ package net.kdt.pojavlaunch; -import android.app.Application; -import android.os.*; -import android.content.pm.PackageManager.*; -import android.content.pm.*; -import android.support.v7.preference.*; +import android.app.*; import android.content.*; +import android.content.pm.*; +import android.content.res.*; +import android.os.*; import android.support.v4.app.*; +import android.support.v7.preference.*; import android.util.*; - import java.io.*; -import java.time.*; import java.text.*; import java.util.*; - import net.kdt.pojavlaunch.prefs.*; -import net.kdt.pojavlaunch.customcontrols.*; +import net.kdt.pojavlaunch.utils.*; public class PojavApplication extends Application { @@ -67,9 +64,6 @@ public class PojavApplication extends Application case "x86": Tools.currentArch = "x86/i*86"; break; case "x86_64": Tools.currentArch = "x86_64/amd64"; break; } - - LauncherPreferences.DEFAULT_PREF = PreferenceManager.getDefaultSharedPreferences(this); - LauncherPreferences.loadPreferences(); FontChanger.initFonts(this); } catch (Throwable th) { @@ -78,4 +72,15 @@ public class PojavApplication extends Application startActivity(ferrorIntent); } } + + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(LocaleUtils.setLocale(base)); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + LocaleUtils.setLocale(this); + } } diff --git a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java index 1037c818d..9b8c580d8 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java +++ b/app/src/main/java/net/kdt/pojavlaunch/PojavLoginActivity.java @@ -45,22 +45,15 @@ public class PojavLoginActivity extends BaseActivity private SharedPreferences firstLaunchPrefs; - private Locale mDefaultLocale; + private boolean isSkipInit = false; // private final String PREF_IS_DONOTSHOWAGAIN_WARN = "isWarnDoNotShowAgain"; public static final String PREF_IS_INSTALLED_JAVARUNTIME = "isJavaRuntimeInstalled"; - private boolean isInitCalled = false; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); // false); - mDefaultLocale = Locale.getDefault(); - - if (!LauncherPreferences.PREF_LANGUAGE.equals("default")) { - setLocale(new Locale(LauncherPreferences.PREF_LANGUAGE)); - } - Tools.updateWindowSize(this); ControlData.pixelOf2dp = (int) Tools.dpToPx(this, 2); @@ -74,18 +67,13 @@ public class PojavLoginActivity extends BaseActivity specialButtons[3].name = getString(R.string.control_secondary); specialButtons[4].name = getString(R.string.control_mouse); - if (!isInitCalled) { - init(); - isInitCalled = true; - } - } - - private void init() { firstLaunchPrefs = getSharedPreferences("pojav_extract", MODE_PRIVATE); - new InitTask().execute(); + new InitTask().execute(isSkipInit); + + isSkipInit = true; } - private class InitTask extends AsyncTask{ + private class InitTask extends AsyncTask{ private AlertDialog startAle; private ProgressBar progress; @@ -120,8 +108,12 @@ public class PojavLoginActivity extends BaseActivity private int revokeCount = -1; @Override - protected Integer doInBackground(Void[] p1) - { + protected Integer doInBackground(Boolean[] params) { + // If trigger a quick restart + if (params[0] == true) { + return 0; + } + try { Thread.sleep(2000); } catch (InterruptedException e) {} @@ -209,12 +201,12 @@ public class PojavLoginActivity extends BaseActivity } }, 100); - String defaultLang = mDefaultLocale.getDisplayName(); + String defaultLang = LocaleUtils.DEFAULT_LOCALE.getDisplayName(); SpannableString defaultLangChar = new SpannableString(defaultLang); defaultLangChar.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, defaultLang.length(), 0); final ArrayAdapter langAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item); - langAdapter.add(new DisplayableLocale(mDefaultLocale, defaultLangChar)); + langAdapter.add(new DisplayableLocale(LocaleUtils.DEFAULT_LOCALE, defaultLangChar)); langAdapter.add(new DisplayableLocale(Locale.ENGLISH)); try { @@ -248,7 +240,13 @@ public class PojavLoginActivity extends BaseActivity } else { locale = langAdapter.getItem(position).mLocale; } - setLocale(locale); + + LauncherPreferences.PREF_LANGUAGE = locale.getLanguage(); + LauncherPreferences.DEFAULT_PREF.edit().putString("language", LauncherPreferences.PREF_LANGUAGE).commit(); + + // Restart to apply language change + finish(); + startActivity(getIntent()); } @Override @@ -288,16 +286,6 @@ public class PojavLoginActivity extends BaseActivity // 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 = getResources().getConfiguration(); - 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/customcontrols/ControlData.java b/app/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java index 7194a5ad3..a4f2008ed 100644 --- a/app/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java +++ b/app/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlData.java @@ -43,9 +43,10 @@ public class ControlData implements Cloneable new ControlData("Keyboard", SPECIALBTN_KEYBOARD, "${margin} * 3 + ${width} * 2", "${margin}", false), new ControlData("GUI", SPECIALBTN_TOGGLECTRL, "${margin}", "${bottom} - ${margin}"), new ControlData("PRI", SPECIALBTN_MOUSEPRI, "${margin}", "${screen_height} - ${margin} * 3 - ${height} * 3"), - new ControlData("MID", SPECIALBTN_MOUSEMID, "${margin}", "${margin}"), new ControlData("SEC", SPECIALBTN_MOUSESEC, "${margin} * 3 + ${width} * 2", "${screen_height} - ${margin} * 3 - ${height} * 3"), - new ControlData("Mouse", SPECIALBTN_VIRTUALMOUSE, "${right}", "${margin}", false) + new ControlData("Mouse", SPECIALBTN_VIRTUALMOUSE, "${right}", "${margin}", false), + + new ControlData("MID", SPECIALBTN_MOUSEMID, "${margin}", "${margin}") }; SPECIAL_BUTTONS = specialButtons; } diff --git a/app/src/main/java/net/kdt/pojavlaunch/utils/LocaleUtils.java b/app/src/main/java/net/kdt/pojavlaunch/utils/LocaleUtils.java new file mode 100644 index 000000000..c14c5e0b1 --- /dev/null +++ b/app/src/main/java/net/kdt/pojavlaunch/utils/LocaleUtils.java @@ -0,0 +1,31 @@ +package net.kdt.pojavlaunch.utils; + +import android.content.*; +import android.content.res.*; +import android.support.v7.preference.*; +import java.util.*; +import net.kdt.pojavlaunch.prefs.*; + +public class LocaleUtils { + public static final Locale DEFAULT_LOCALE; + + static { + DEFAULT_LOCALE = Locale.getDefault(); + } + + public static Context setLocale(Context context) { + if (LauncherPreferences.DEFAULT_PREF == null) { + LauncherPreferences.DEFAULT_PREF = PreferenceManager.getDefaultSharedPreferences(context); + LauncherPreferences.loadPreferences(); + } + + Locale locale = new Locale(LauncherPreferences.PREF_LANGUAGE); + Locale.setDefault(locale); + + Resources res = context.getResources(); + Configuration config = new Configuration(res.getConfiguration()); + config.setLocale(locale); + context = context.createConfigurationContext(config); + return context; + } +}