Loading core/java/android/hardware/input/KeyboardLayout.java +9 −21 Original line number Diff line number Diff line Loading @@ -16,8 +16,10 @@ package android.hardware.input; import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; import android.util.LocaleList; import java.util.Locale; Loading @@ -32,7 +34,8 @@ public final class KeyboardLayout implements Parcelable, private final String mLabel; private final String mCollection; private final int mPriority; private final Locale[] mLocales; @NonNull private final LocaleList mLocales; private final int mVendorId; private final int mProductId; Loading @@ -47,16 +50,12 @@ public final class KeyboardLayout implements Parcelable, }; public KeyboardLayout(String descriptor, String label, String collection, int priority, Locale[] locales, int vid, int pid) { LocaleList locales, int vid, int pid) { mDescriptor = descriptor; mLabel = label; mCollection = collection; mPriority = priority; if (locales != null) { mLocales = locales; } else { mLocales = new Locale[0]; } mVendorId = vid; mProductId = pid; } Loading @@ -66,11 +65,7 @@ public final class KeyboardLayout implements Parcelable, mLabel = source.readString(); mCollection = source.readString(); mPriority = source.readInt(); int N = source.readInt(); mLocales = new Locale[N]; for (int i = 0; i < N; i++) { mLocales[i] = Locale.forLanguageTag(source.readString()); } mLocales = LocaleList.CREATOR.createFromParcel(source); mVendorId = source.readInt(); mProductId = source.readInt(); } Loading Loading @@ -108,7 +103,7 @@ public final class KeyboardLayout implements Parcelable, * This may be empty if a locale has not been assigned to this keyboard layout. * @return The keyboard layout's intended locale. */ public Locale[] getLocales() { public LocaleList getLocales() { return mLocales; } Loading Loading @@ -141,14 +136,7 @@ public final class KeyboardLayout implements Parcelable, dest.writeString(mLabel); dest.writeString(mCollection); dest.writeInt(mPriority); if (mLocales != null) { dest.writeInt(mLocales.length); for (Locale l : mLocales) { dest.writeString(l.toLanguageTag()); } } else { dest.writeInt(0); } mLocales.writeToParcel(dest, 0); dest.writeInt(mVendorId); dest.writeInt(mProductId); } Loading services/core/java/com/android/server/input/InputManagerService.java +22 −16 Original line number Diff line number Diff line Loading @@ -16,7 +16,9 @@ package com.android.server.input; import android.annotation.NonNull; import android.annotation.Nullable; import android.util.LocaleList; import android.view.Display; import com.android.internal.inputmethod.InputMethodSubtypeHandle; import com.android.internal.os.SomeArgs; Loading Loading @@ -780,8 +782,10 @@ public class InputManagerService extends IInputManager.Stub || layout.getProductId() != d.getProductId()) { return; } for (Locale l : layout.getLocales()) { if (isCompatibleLocale(systemLocale, l)) { final LocaleList locales = layout.getLocales(); final int numLocales = locales.size(); for (int localeIndex = 0; localeIndex < numLocales; ++localeIndex) { if (isCompatibleLocale(systemLocale, locales.get(localeIndex))) { layouts.add(layout); break; } Loading @@ -799,9 +803,12 @@ public class InputManagerService extends IInputManager.Stub final int N = layouts.size(); for (int i = 0; i < N; i++) { KeyboardLayout layout = layouts.get(i); for (Locale l : layout.getLocales()) { if (l.getCountry().equals(systemLocale.getCountry()) && l.getVariant().equals(systemLocale.getVariant())) { final LocaleList locales = layout.getLocales(); final int numLocales = locales.size(); for (int localeIndex = 0; localeIndex < numLocales; ++localeIndex) { final Locale locale = locales.get(localeIndex); if (locale.getCountry().equals(systemLocale.getCountry()) && locale.getVariant().equals(systemLocale.getVariant())) { return layout.getDescriptor(); } } Loading @@ -809,8 +816,11 @@ public class InputManagerService extends IInputManager.Stub // Then try an exact match of language and country for (int i = 0; i < N; i++) { KeyboardLayout layout = layouts.get(i); for (Locale l : layout.getLocales()) { if (l.getCountry().equals(systemLocale.getCountry())) { final LocaleList locales = layout.getLocales(); final int numLocales = locales.size(); for (int localeIndex = 0; localeIndex < numLocales; ++localeIndex) { final Locale locale = locales.get(localeIndex); if (locale.getCountry().equals(systemLocale.getCountry())) { return layout.getDescriptor(); } } Loading Loading @@ -1170,7 +1180,7 @@ public class InputManagerService extends IInputManager.Stub 0); String languageTags = a.getString( com.android.internal.R.styleable.KeyboardLayout_locale); Locale[] locales = getLocalesFromLanguageTags(languageTags); LocaleList locales = getLocalesFromLanguageTags(languageTags); int vid = a.getInt( com.android.internal.R.styleable.KeyboardLayout_vendorId, -1); int pid = a.getInt( Loading Loading @@ -1210,16 +1220,12 @@ public class InputManagerService extends IInputManager.Stub } } private static Locale[] getLocalesFromLanguageTags(String languageTags) { @NonNull private static LocaleList getLocalesFromLanguageTags(String languageTags) { if (TextUtils.isEmpty(languageTags)) { return new Locale[0]; return LocaleList.getEmptyLocaleList(); } String[] tags = languageTags.split("\\|"); Locale[] locales = new Locale[tags.length]; for (int i = 0; i < tags.length; i++) { locales[i] = Locale.forLanguageTag(tags[i]); } return locales; return LocaleList.forLanguageTags(languageTags.replace('|', ',')); } /** Loading Loading
core/java/android/hardware/input/KeyboardLayout.java +9 −21 Original line number Diff line number Diff line Loading @@ -16,8 +16,10 @@ package android.hardware.input; import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; import android.util.LocaleList; import java.util.Locale; Loading @@ -32,7 +34,8 @@ public final class KeyboardLayout implements Parcelable, private final String mLabel; private final String mCollection; private final int mPriority; private final Locale[] mLocales; @NonNull private final LocaleList mLocales; private final int mVendorId; private final int mProductId; Loading @@ -47,16 +50,12 @@ public final class KeyboardLayout implements Parcelable, }; public KeyboardLayout(String descriptor, String label, String collection, int priority, Locale[] locales, int vid, int pid) { LocaleList locales, int vid, int pid) { mDescriptor = descriptor; mLabel = label; mCollection = collection; mPriority = priority; if (locales != null) { mLocales = locales; } else { mLocales = new Locale[0]; } mVendorId = vid; mProductId = pid; } Loading @@ -66,11 +65,7 @@ public final class KeyboardLayout implements Parcelable, mLabel = source.readString(); mCollection = source.readString(); mPriority = source.readInt(); int N = source.readInt(); mLocales = new Locale[N]; for (int i = 0; i < N; i++) { mLocales[i] = Locale.forLanguageTag(source.readString()); } mLocales = LocaleList.CREATOR.createFromParcel(source); mVendorId = source.readInt(); mProductId = source.readInt(); } Loading Loading @@ -108,7 +103,7 @@ public final class KeyboardLayout implements Parcelable, * This may be empty if a locale has not been assigned to this keyboard layout. * @return The keyboard layout's intended locale. */ public Locale[] getLocales() { public LocaleList getLocales() { return mLocales; } Loading Loading @@ -141,14 +136,7 @@ public final class KeyboardLayout implements Parcelable, dest.writeString(mLabel); dest.writeString(mCollection); dest.writeInt(mPriority); if (mLocales != null) { dest.writeInt(mLocales.length); for (Locale l : mLocales) { dest.writeString(l.toLanguageTag()); } } else { dest.writeInt(0); } mLocales.writeToParcel(dest, 0); dest.writeInt(mVendorId); dest.writeInt(mProductId); } Loading
services/core/java/com/android/server/input/InputManagerService.java +22 −16 Original line number Diff line number Diff line Loading @@ -16,7 +16,9 @@ package com.android.server.input; import android.annotation.NonNull; import android.annotation.Nullable; import android.util.LocaleList; import android.view.Display; import com.android.internal.inputmethod.InputMethodSubtypeHandle; import com.android.internal.os.SomeArgs; Loading Loading @@ -780,8 +782,10 @@ public class InputManagerService extends IInputManager.Stub || layout.getProductId() != d.getProductId()) { return; } for (Locale l : layout.getLocales()) { if (isCompatibleLocale(systemLocale, l)) { final LocaleList locales = layout.getLocales(); final int numLocales = locales.size(); for (int localeIndex = 0; localeIndex < numLocales; ++localeIndex) { if (isCompatibleLocale(systemLocale, locales.get(localeIndex))) { layouts.add(layout); break; } Loading @@ -799,9 +803,12 @@ public class InputManagerService extends IInputManager.Stub final int N = layouts.size(); for (int i = 0; i < N; i++) { KeyboardLayout layout = layouts.get(i); for (Locale l : layout.getLocales()) { if (l.getCountry().equals(systemLocale.getCountry()) && l.getVariant().equals(systemLocale.getVariant())) { final LocaleList locales = layout.getLocales(); final int numLocales = locales.size(); for (int localeIndex = 0; localeIndex < numLocales; ++localeIndex) { final Locale locale = locales.get(localeIndex); if (locale.getCountry().equals(systemLocale.getCountry()) && locale.getVariant().equals(systemLocale.getVariant())) { return layout.getDescriptor(); } } Loading @@ -809,8 +816,11 @@ public class InputManagerService extends IInputManager.Stub // Then try an exact match of language and country for (int i = 0; i < N; i++) { KeyboardLayout layout = layouts.get(i); for (Locale l : layout.getLocales()) { if (l.getCountry().equals(systemLocale.getCountry())) { final LocaleList locales = layout.getLocales(); final int numLocales = locales.size(); for (int localeIndex = 0; localeIndex < numLocales; ++localeIndex) { final Locale locale = locales.get(localeIndex); if (locale.getCountry().equals(systemLocale.getCountry())) { return layout.getDescriptor(); } } Loading Loading @@ -1170,7 +1180,7 @@ public class InputManagerService extends IInputManager.Stub 0); String languageTags = a.getString( com.android.internal.R.styleable.KeyboardLayout_locale); Locale[] locales = getLocalesFromLanguageTags(languageTags); LocaleList locales = getLocalesFromLanguageTags(languageTags); int vid = a.getInt( com.android.internal.R.styleable.KeyboardLayout_vendorId, -1); int pid = a.getInt( Loading Loading @@ -1210,16 +1220,12 @@ public class InputManagerService extends IInputManager.Stub } } private static Locale[] getLocalesFromLanguageTags(String languageTags) { @NonNull private static LocaleList getLocalesFromLanguageTags(String languageTags) { if (TextUtils.isEmpty(languageTags)) { return new Locale[0]; return LocaleList.getEmptyLocaleList(); } String[] tags = languageTags.split("\\|"); Locale[] locales = new Locale[tags.length]; for (int i = 0; i < tags.length; i++) { locales[i] = Locale.forLanguageTag(tags[i]); } return locales; return LocaleList.forLanguageTags(languageTags.replace('|', ',')); } /** Loading