Better method to change Locale

This commit is contained in:
topjohnwu 2019-01-31 03:48:45 -05:00
parent af88b7c807
commit 749df5dacd
4 changed files with 13 additions and 23 deletions

View File

@ -28,8 +28,6 @@ public class App extends ContainerApp {
public MagiskDB mDB;
public RepoDatabaseHelper repoDB;
private Resources mResource;
static {
Shell.Config.setFlags(Shell.FLAG_MOUNT_MASTER | Shell.FLAG_USE_MAGISK_BUSYBOX);
Shell.Config.verboseLogging(BuildConfig.DEBUG);
@ -41,7 +39,6 @@ public class App extends ContainerApp {
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
self = this;
mResource = base.getResources();
prefs = PreferenceManager.getDefaultSharedPreferences(this);
mDB = new MagiskDB(this);
@ -51,15 +48,6 @@ public class App extends ContainerApp {
LocaleManager.setLocale(this);
}
@Override
public Resources getResources() {
return mResource;
}
public void setResources(Resources res) {
mResource = res;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);

View File

@ -1,6 +1,7 @@
package com.topjohnwu.magisk.utils;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
@ -8,6 +9,7 @@ import android.os.Build;
import com.topjohnwu.magisk.App;
import com.topjohnwu.magisk.Config;
import com.topjohnwu.superuser.Shell;
import com.topjohnwu.superuser.internal.InternalUtils;
import java.util.ArrayList;
import java.util.Collections;
@ -86,7 +88,7 @@ public class LocaleManager {
}
}
public static void setLocale(App app) {
public static void setLocale(ContextWrapper wrapper) {
String localeConfig = Config.get(Config.Key.LOCALE);
if (localeConfig.isEmpty()) {
locale = defaultLocale;
@ -94,13 +96,17 @@ public class LocaleManager {
locale = forLanguageTag(localeConfig);
}
Locale.setDefault(locale);
app.setResources(getLocaleContext(locale).getResources());
InternalUtils.replaceBaseContext(wrapper, getLocaleContext(locale));
}
public static Context getLocaleContext(Context context, Locale locale) {
Configuration config = new Configuration(context.getResources().getConfiguration());
config.setLocale(locale);
return context.createConfigurationContext(config);
}
public static Context getLocaleContext(Locale locale) {
Configuration config = new Configuration(App.self.getBaseContext().getResources().getConfiguration());
config.setLocale(locale);
return App.self.createConfigurationContext(config);
return getLocaleContext(App.self.getBaseContext(), locale);
}
public static String getString(Locale locale, @StringRes int id) {

View File

@ -63,8 +63,7 @@ public class ApplicationAdapter extends RecyclerView.Adapter<ApplicationAdapter.
boolean ah = hideList.contains(a.packageName);
boolean bh = hideList.contains(b.packageName);
if (ah == bh) {
return Utils.getAppLabel(a, pm).toLowerCase()
.compareTo(Utils.getAppLabel(b, pm).toLowerCase());
return Utils.getAppLabel(a, pm).compareToIgnoreCase(Utils.getAppLabel(b, pm));
} else if (ah) {
return -1;
} else {

View File

@ -53,10 +53,7 @@ public abstract class BaseActivity extends AppCompatActivity implements Topic.Au
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
Configuration config = base.getResources().getConfiguration();
config.setLocale(LocaleManager.locale);
applyOverrideConfiguration(config);
super.attachBaseContext(LocaleManager.getLocaleContext(base, LocaleManager.locale));
}
@Override