-
-
Notifications
You must be signed in to change notification settings - Fork 316
Expand file tree
/
Copy pathDeviceLocales.java
More file actions
83 lines (74 loc) · 2.56 KB
/
DeviceLocales.java
File metadata and controls
83 lines (74 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package juloo.keyboard2;
import android.content.Context;
import android.os.Build.VERSION;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
import android.view.inputmethod.InputMethodSubtype;
import java.util.ArrayList;
import java.util.List;
public final class DeviceLocales
{
public final List<Loc> installed;
public final Loc default_;
public static DeviceLocales load(Context ctx)
{
InputMethodManager imm =
(InputMethodManager)ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
List<Loc> locs = get_installed_locales(ctx.getPackageName(), imm);
return new DeviceLocales(locs, current_locale(imm, locs));
}
/** Extra keys required by all the installed locales. */
public ExtraKeys extra_keys()
{
List<ExtraKeys> extra_keys = new ArrayList<ExtraKeys>();
for (Loc l : installed)
extra_keys.add(l.extra_keys);
return ExtraKeys.merge(extra_keys);
}
public static final class Loc
{
public final String lang_tag;
public final String script;
public final String default_layout; // Might be [null]
public final ExtraKeys extra_keys;
public Loc(InputMethodSubtype st)
{
lang_tag = st.getLanguageTag();
script = st.getExtraValueOf("script");
default_layout = st.getExtraValueOf("default_layout");
String extra_keys_s = st.getExtraValueOf("extra_keys");
extra_keys = (extra_keys_s != null) ?
ExtraKeys.parse(script, extra_keys_s) : ExtraKeys.EMPTY;
}
}
private DeviceLocales(List<Loc> locs, Loc def)
{ installed = locs; default_ = def; }
private static List<Loc> get_installed_locales(String pkg, InputMethodManager imm)
{
List<Loc> locs = new ArrayList<Loc>();
for (InputMethodInfo imi : imm.getEnabledInputMethodList())
if (imi.getPackageName().equals(pkg))
{
for (InputMethodSubtype subtype :
imm.getEnabledInputMethodSubtypeList(imi, true))
locs.add(new Loc(subtype));
break;
}
return locs;
}
private static Loc current_locale(InputMethodManager imm, List<Loc> installed)
{
// Android might return a random subtype, for example, the first in the
// list alphabetically.
InputMethodSubtype current_subtype = imm.getCurrentInputMethodSubtype();
if (current_subtype == null)
return null;
if (VERSION.SDK_INT < 24)
return new Loc(current_subtype);
String default_lang_tag = current_subtype.getLanguageTag();
for (Loc l : installed)
if (l.lang_tag.equals(default_lang_tag))
return l;
return null;
}
}