73 lines
2.2 KiB
Java
73 lines
2.2 KiB
Java
|
package androidx.core.text;
|
||
|
|
||
|
import android.icu.util.ULocale;
|
||
|
import android.os.Build;
|
||
|
import android.util.Log;
|
||
|
import androidx.annotation.Nullable;
|
||
|
import java.lang.reflect.InvocationTargetException;
|
||
|
import java.lang.reflect.Method;
|
||
|
import java.util.Locale;
|
||
|
public final class ICUCompat {
|
||
|
private static final String TAG = "ICUCompat";
|
||
|
private static Method sAddLikelySubtagsMethod;
|
||
|
private static Method sGetScriptMethod;
|
||
|
|
||
|
static {
|
||
|
if (Build.VERSION.SDK_INT < 24) {
|
||
|
try {
|
||
|
sAddLikelySubtagsMethod = Class.forName("libcore.icu.ICU").getMethod("addLikelySubtags", Locale.class);
|
||
|
} catch (Exception e) {
|
||
|
throw new IllegalStateException(e);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private ICUCompat() {
|
||
|
}
|
||
|
|
||
|
private static String addLikelySubtags(Locale locale) {
|
||
|
String locale2 = locale.toString();
|
||
|
try {
|
||
|
Method method = sAddLikelySubtagsMethod;
|
||
|
if (method != null) {
|
||
|
return (String) method.invoke(null, locale2);
|
||
|
}
|
||
|
} catch (IllegalAccessException e) {
|
||
|
Log.w("ICUCompat", e);
|
||
|
} catch (InvocationTargetException e2) {
|
||
|
Log.w("ICUCompat", e2);
|
||
|
}
|
||
|
return locale2;
|
||
|
}
|
||
|
|
||
|
private static String getScript(String str) {
|
||
|
try {
|
||
|
Method method = sGetScriptMethod;
|
||
|
if (method != null) {
|
||
|
return (String) method.invoke(null, str);
|
||
|
}
|
||
|
} catch (IllegalAccessException e) {
|
||
|
Log.w("ICUCompat", e);
|
||
|
} catch (InvocationTargetException e2) {
|
||
|
Log.w("ICUCompat", e2);
|
||
|
}
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
@Nullable
|
||
|
public static String maximizeAndGetScript(Locale locale) {
|
||
|
if (Build.VERSION.SDK_INT >= 24) {
|
||
|
return ULocale.addLikelySubtags(ULocale.forLocale(locale)).getScript();
|
||
|
}
|
||
|
try {
|
||
|
return ((Locale) sAddLikelySubtagsMethod.invoke(null, locale)).getScript();
|
||
|
} catch (InvocationTargetException e) {
|
||
|
Log.w("ICUCompat", e);
|
||
|
return locale.getScript();
|
||
|
} catch (IllegalAccessException e2) {
|
||
|
Log.w("ICUCompat", e2);
|
||
|
return locale.getScript();
|
||
|
}
|
||
|
}
|
||
|
}
|