1d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka/* 2d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * Copyright (C) 2014 The Android Open Source Project 3d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * 4d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 5d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * you may not use this file except in compliance with the License. 6d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * You may obtain a copy of the License at 7d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * 8d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 9d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * 10d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 11d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 12d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * See the License for the specific language governing permissions and 14d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * limitations under the License. 15d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka */ 16d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka 17d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaokapackage com.android.settings.inputmethod; 18d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka 19d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaokaimport android.content.Context; 20d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaokaimport android.preference.Preference; 21d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaokaimport android.text.TextUtils; 2247a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaokaimport android.view.inputmethod.InputMethodInfo; 2347a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaokaimport android.view.inputmethod.InputMethodSubtype; 2447a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka 2547a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaokaimport com.android.internal.inputmethod.InputMethodUtils; 26d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka 27d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaokaimport java.text.Collator; 2847a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaokaimport java.util.Locale; 29d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka 30d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka/** 31d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * Input method subtype preference. 32d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * 33d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka * This preference represents a subtype of an IME. It is used to enable or disable the subtype. 34d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka */ 351f53937469095f268d4c7a21d93f821a341a151dTadashi G. Takaokaclass InputMethodSubtypePreference extends SwitchWithNoTextPreference { 36d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka private final boolean mIsSystemLocale; 37d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka private final boolean mIsSystemLanguage; 38d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka 3955aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka InputMethodSubtypePreference(final Context context, final InputMethodSubtype subtype, 4055aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka final InputMethodInfo imi) { 41d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka super(context); 423460a2683ca820d8d7d184bc1e98241ea3986a4aTadashi G. Takaoka setPersistent(false); 4347a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka setKey(imi.getId() + subtype.hashCode()); 4447a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka final CharSequence subtypeLabel = subtype.getDisplayName(context, 4547a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka imi.getPackageName(), imi.getServiceInfo().applicationInfo); 4647a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka setTitle(subtypeLabel); 4747a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka final String subtypeLocaleString = subtype.getLocale(); 4847a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka if (TextUtils.isEmpty(subtypeLocaleString)) { 49d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka mIsSystemLocale = false; 50d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka mIsSystemLanguage = false; 51d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } else { 5247a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka final Locale systemLocale = context.getResources().getConfiguration().locale; 5347a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka mIsSystemLocale = subtypeLocaleString.equals(systemLocale.toString()); 54d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka mIsSystemLanguage = mIsSystemLocale 5547a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka || InputMethodUtils.getLanguageFromLocaleString(subtypeLocaleString) 5647a359a7da2a22e96259ee422eba8ce893146d49Tadashi G. Takaoka .equals(systemLocale.getLanguage()); 57d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 58d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 59d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka 6055aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka int compareTo(final Preference rhs, final Collator collator) { 6155aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka if (this == rhs) { 6255aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka return 0; 6355aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka } 6455aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka if (rhs instanceof InputMethodSubtypePreference) { 6555aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka final InputMethodSubtypePreference pref = (InputMethodSubtypePreference) rhs; 66d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka final CharSequence t0 = getTitle(); 6755aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka final CharSequence t1 = rhs.getTitle(); 68d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka if (TextUtils.equals(t0, t1)) { 69d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka return 0; 70d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 71d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka if (mIsSystemLocale) { 72d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka return -1; 73d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 74d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka if (pref.mIsSystemLocale) { 75d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka return 1; 76d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 77d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka if (mIsSystemLanguage) { 78d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka return -1; 79d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 80d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka if (pref.mIsSystemLanguage) { 81d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka return 1; 82d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 83d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka if (TextUtils.isEmpty(t0)) { 84d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka return 1; 85d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 86d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka if (TextUtils.isEmpty(t1)) { 87d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka return -1; 88d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 8955aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka return collator.compare(t0.toString(), t1.toString()); 90d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 9155aee124063dc28e740efcfdadafa5738b0b538aTadashi G. Takaoka return super.compareTo(rhs); 92d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka } 93d3f4618f1d2816241f4deb1b4ea85d3a15a413c8Tadashi G. Takaoka} 94