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