@SuppressWarnings("deprecation")
public static Contextwrapper wrap(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String lang = prefs.getString(Constants.PREF_APP_LANGUAGE,"");
Locale locale = StringUtils.getLocale(lang);
locale = (locale == null) ? Locale.getDefault() : locale;
Configuration configuration = context.getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
LocaleList localeList = new LocaleList(locale);
LocaleList.setDefault(localeList);
Locale.setDefault(locale);
configuration.setLocale(locale);
configuration.setLocales(localeList);
context = context.createConfigurationContext(configuration);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(locale);
context = context.createConfigurationContext(configuration);
} else {
configuration.locale = locale;
context.getResources().updateConfiguration(configuration,null);
}
return new InventumContextwrapper(context);
}
@SuppressWarnings("deprecation")
public static Contextwrapper wrap(Context context,Locale newLocale)
{
final Resources res = context.getResources();
final Configuration configuration = res.getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
configuration.setLocale(newLocale);
LocaleList localeList = new LocaleList(newLocale);
LocaleList.setDefault(localeList);
configuration.setLocales(localeList);
context = context.createConfigurationContext(configuration);
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
{
configuration.setLocale(newLocale);
context = context.createConfigurationContext(configuration);
}
else
{
configuration.locale = newLocale;
res.updateConfiguration(configuration,res.getdisplayMetrics());
}
return new Contextwrapper(context);
}
public static void setLocale(@NonNull Context context) {
Locale locale = Preferences.get(context).getCurrentLocale();
Locale.setDefault(locale);
Configuration configuration = context.getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
LocaleList.setDefault(new LocaleList(locale));
configuration.setLocales(new LocaleList(locale));
configuration.setLocale(locale);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(locale);
} else {
configuration.locale = locale;
}
//Todo:
// Find out a solution to use context.createConfigurationContext(configuration);
// It breaks onConfigurationChanged()
// Still can't find a way to fix that
// No other options,better use deprecated code for Now
context.getResources().updateConfiguration(configuration,context.getResources().getdisplayMetrics());
}
public static void setLocale(@NonNull Context context) {
Locale locale = Preferences.get(context).getCurrentLocale();
Locale.setDefault(locale);
Configuration configuration = context.getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
LocaleList.setDefault(new LocaleList(locale));
configuration.setLocales(new LocaleList(locale));
configuration.setLocale(locale);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
configuration.setLocale(locale);
} else {
configuration.locale = locale;
}
//Todo:
// Find out a solution to use context.createConfigurationContext(configuration);
// It breaks onConfigurationChanged()
// Still can't find a way to fix that
// No other options,context.getResources().getdisplayMetrics());
}
@SuppressWarnings("deprecation")
public static Contextwrapper wrap(Context context) {
Locale newLocale;
Resources res = context.getResources();
Configuration configuration = res.getConfiguration();
if (Tools.getBoolean("forceenglish",false,context))
newLocale = new Locale("en_US");
else
newLocale = new Locale(Tools.sysLocale());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
configuration.setLocale(newLocale);
LocaleList localeList = new LocaleList(newLocale);
LocaleList.setDefault(localeList);
configuration.setLocales(localeList);
context = context.createConfigurationContext(configuration);
} else { //if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
configuration.setLocale(newLocale);
context = context.createConfigurationContext(configuration);
}
return new Contextwrapper(context);
}
public static List<Locale> getDefault(Context context,boolean getAllIfPossible) {
List<Locale> list = new ArrayList();
if (VERSION.SDK_INT >= 24) {
LocaleList locales = context.getResources().getConfiguration().getLocales();
for (int i = 0; i < locales.size(); i++) {
Locale locale = locales.get(i);
if (!getAllIfPossible) {
list.add(locale);
break;
}
list.add(locale);
}
} else {
list.add(context.getResources().getConfiguration().locale);
}
return list;
}
CharSequence getDateAsText() {
if (isDirectory) {
return "";
}
Locale currentLocale;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
@SuppressWarnings("deprecation")
Locale locale = MediaMonkeyApplication.getInstance().getResources().getConfiguration().locale;
currentLocale = locale;
} else {
Resources res = MediaMonkeyApplication.getInstance().getResources();
LocaleList locales = res.getConfiguration().getLocales();
currentLocale = locales.getFirstMatch(res.getAssets().getLocales());
}
DateFormat format = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT,currentLocale);
return format.format(new Date(file.lastModified()));
}
@NonNull
public static Resources getResources(@NonNull final Context context,@NonNull final Locale locale) {
Resources standardResources = context.getResources();
AssetManager assets = standardResources.getAssets();
displayMetrics metrics = standardResources.getdisplayMetrics();
Configuration config = new Configuration(standardResources.getConfiguration());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.setLocales(LocaleList.forLanguageTags(Locale.ENGLISH.toLanguageTag()));
} else {
//noinspection deprecation
config.locale = locale;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
return context.createConfigurationContext(config).getResources();
} else {
//noinspection deprecation
return new Resources(assets,metrics,config);
}
}
@SuppressWarnings("deprecation")
public static Contextwrapper wrap(Context context) {
Locale newLocale;
Resources res = context.getResources();
Configuration configuration = res.getConfiguration();
if (Utils.getBoolean("forceenglish",context))
newLocale = new Locale("en_US");
else
newLocale = new Locale(Utils.sysLocale());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
configuration.setLocale(newLocale);
LocaleList localeList = new LocaleList(newLocale);
LocaleList.setDefault(localeList);
configuration.setLocales(localeList);
context = context.createConfigurationContext(configuration);
} else { //if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
configuration.setLocale(newLocale);
context = context.createConfigurationContext(configuration);
}
return new Contextwrapper(context);
}
public static Context applyLocalizationContext(Context baseContext) {
Locale baseLocale = LocalizationUtility.getLocaleFromConfiguration(baseContext.getResources().getConfiguration());
Locale currentLocale = LanguageSetting.getLanguage(baseContext);
if (!baseLocale.toString().equalsIgnoreCase(currentLocale.toString())) {
LocalizationContext context = new LocalizationContext(baseContext);
Configuration config = context.getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.setLocale(currentLocale);
LocaleList localeList = new LocaleList(currentLocale);
LocaleList.setDefault(localeList);
config.setLocales(localeList);
return context.createConfigurationContext(config);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
config.setLocale(currentLocale);
return context.createConfigurationContext(config);
} else {
return context;
}
} else {
return baseContext;
}
}
public Context attachBaseContext(Context context) {
Locale locale = LanguageSetting.getLanguage(context);
Configuration config = context.getResources().getConfiguration();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.setLocale(locale);
LocaleList localeList = new LocaleList(locale);
LocaleList.setDefault(localeList);
config.setLocales(localeList);
return context.createConfigurationContext(config);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
config.setLocale(locale);
return context.createConfigurationContext(config);
} else {
return context;
}
}
AlphabeticIndexVN(Context context) {
LocaleList locales = context.getResources().getConfiguration().getLocales();
int localeCount = locales.size();
Locale primaryLocale = localeCount == 0 ? Locale.ENGLISH : locales.get(0);
AlphabeticIndex indexBuilder = new AlphabeticIndex(primaryLocale);
for (int i = 1; i < localeCount; i++) {
indexBuilder.addLabels(locales.get(i));
}
indexBuilder.addLabels(Locale.ENGLISH);
mAlphabeticIndex = indexBuilder.buildImmutableIndex();
}
protected String getSystemLanguage() {
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = LocaleList.getDefault().get(0);
} else {
locale = Locale.getDefault();
}
String language = locale.getLanguage() + "-" + locale.getCountry();
return language;
}
@RequiresApi(api = Build.VERSION_CODES.N)
private static List<Locale> mapTolistofLocales(LocaleList localeList) {
List<Locale> locales = new ArrayList<>();
for (int i = 0; i < localeList.size(); i++) {
locales.add(localeList.get(i));
}
return locales;
}
/**
* @see android.text.style.LocaleSpan#LocaleSpan(LocaleList)
*/
@RequiresApi(api = Build.VERSION_CODES.N)
public static Span locale(@NonNull final LocaleList localeList) {
return new Span(new SpanBuilder() {
@Override
public Object build() {
return new LocaleSpan(localeList);
}
});
}
public AlphabeticIndexVN(Context context) {
LocaleList locales = context.getResources().getConfiguration().getLocales();
int localeCount = locales.size();
Locale primaryLocale = localeCount == 0 ? Locale.ENGLISH : locales.get(0);
AlphabeticIndex indexBuilder = new AlphabeticIndex(primaryLocale);
for (int i = 1; i < localeCount; i++) {
indexBuilder.addLabels(locales.get(i));
}
indexBuilder.addLabels(Locale.ENGLISH);
mAlphabeticIndex = indexBuilder.buildImmutableIndex();
}
/**
* 获取真实系统首选语言
*
* @return 语言
*/
public static Locale getLocale() {
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = LocaleList.getDefault().get(0);
} else {
locale = Locale.getDefault();
}
return locale;
}
public AlphabeticIndexVN(Context context) {
LocaleList locales = context.getResources().getConfiguration().getLocales();
int localeCount = locales.size();
Locale primaryLocale = localeCount == 0 ? Locale.ENGLISH : locales.get(0);
AlphabeticIndex indexBuilder = new AlphabeticIndex(primaryLocale);
for (int i = 1; i < localeCount; i++) {
indexBuilder.addLabels(locales.get(i));
}
indexBuilder.addLabels(Locale.ENGLISH);
mAlphabeticIndex = indexBuilder.buildImmutableIndex();
}
@TargetApi(Build.VERSION_CODES.N)
private static Context updateResources(Context context) {
Resources resources = context.getResources();
Locale locale = getLocaleByLanguage(context);
Configuration configuration = resources.getConfiguration();
configuration.setLocale(locale);
configuration.setLocales(new LocaleList(locale));
return context.createConfigurationContext(configuration);
}
/**
* Converts LocaleList object to the comma separated BCP 47 compliant string format.
*
* @return a well-formed IETF BCP 47 language tag with language and country code that
* represents this locale list.
*/
@TargetApi(Build.VERSION_CODES.N)
public static String toLanguageTags(LocaleList localeList) {
ArrayList<String> newLocaleList = new ArrayList<>();
for (int i = 0; i < localeList.size(); i++) {
Locale locale = getUpdatedLocaleForChromium(localeList.get(i));
newLocaleList.add(toLanguageTag(locale));
}
return TextUtils.join(",",newLocaleList);
}
/**
* @return a comma separated language tags string that represents a default locale or locales.
* Each language tag is well-formed IETF BCP 47 language tag with language and country
* code.
*/
public static String getDefaultLocaleListString() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return toLanguageTags(LocaleList.getDefault());
}
return getDefaultLocaleString();
}
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.N)
public void apply(Activity activity) {
if (prevIoUsLocales != null && !prevIoUsLocales.isEmpty()) {
Resources resources = activity.getResources();
Configuration configuration = resources.getConfiguration();
if (C.API_NOUGAT) {
configuration.setLocales(new LocaleList(CommonUtils.toArray(prevIoUsLocales,Locale.class)));
} else {
configuration.locale = prevIoUsLocales.get(0);
}
resources.updateConfiguration(configuration,resources.getdisplayMetrics());
}
}
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.N)
private ArrayList<Locale> list(Configuration configuration) {
ArrayList<Locale> arrayList = new ArrayList<>();
if (C.API_NOUGAT) {
LocaleList localeList = configuration.getLocales();
for (int i = 0; i < localeList.size(); i++) {
arrayList.add(localeList.get(i));
}
} else {
arrayList.add(configuration.locale);
}
return arrayList;
}
private static LocaleDetails getLocaleDetails(final Context context) {
final Configuration config = context.getResources().getConfiguration();
if (config == null) {
return null;
}
Locale locale = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
final LocaleList locales = config.getLocales();
if (locales == null || locales.isEmpty()) {
return null;
}
locale = locales.get(0);
} else {
//noinspection deprecation
locale = config.locale;
}
if (locale == null) {
return null;
}
final LocaleDetails result = new LocaleDetails();
result.language = locale.getLanguage();
//The galaxy zoo files,such as ch_cn.json are lowercase,instead of having the
//country code in uppercase,such as ch_CN,like normal system locales.
final String country = locale.getCountry();
if (!TextUtils.isEmpty(country)) {
result.countryCode = country.toLowerCase(new Locale(Utils.STRING_LANGUAGE));
}
return result;
}
@TargetApi(Build.VERSION_CODES.N)
public PaintScript textLocales(@NonNull @Size(min = 1) LocaleList locales) {
paint.setTextLocales(locales);
return this;
}
@TargetApi(Build.VERSION_CODES.N)
public CanvasScript textLocales(@NonNull @Size(min = 1) LocaleList locales) {
createPaintIfNull();
currentPaint.setTextLocales(locales);
return this;
}
@Override
public void setLocaleList(LocaleList localeList) {}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。