InputMethodAndLanguageSettings.java revision afc4ab2ffbb8327ddce9907961295a32cbf49d0f
1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License.
6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at
7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and
14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License.
15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings;
18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
19afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.ContentResolver;
20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context;
21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent;
22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.res.Configuration;
23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.SystemProperties;
25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.CheckBoxPreference;
26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference;
27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceActivity;
28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceGroup;
29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen;
30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings;
31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings.System;
32afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.TextUtils;
33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.inputmethod.InputMethodInfo;
34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.view.inputmethod.InputMethodManager;
35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.HashSet;
37afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.List;
38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpublic class LanguageSettings extends PreferenceActivity {
40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
41afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final String[] mSettingsUiKey = {
42afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            "auto_caps",
43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            "auto_replace",
44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            "auto_punctuate",
45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
46afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    // Note: Order of this array should correspond to the order of the above array
48afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final String[] mSettingsSystemId = {
49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            System.TEXT_AUTO_CAPS,
50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            System.TEXT_AUTO_REPLACE,
51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            System.TEXT_AUTO_PUNCTUATE,
52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
54afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    // Note: Order of this array should correspond to the order of the above array
55afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private final int[] mSettingsDefault = {
56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            1,
57afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            1,
58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            1,
59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
61afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private List<InputMethodInfo> mInputMethodProperties;
62afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    final TextUtils.SimpleStringSplitter mStringColonSplitter
64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            = new TextUtils.SimpleStringSplitter(':');
65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mLastInputMethodId;
67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mLastTickedInputMethodId;
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    static public String getInputMethodIdFromKey(String key) {
70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return key;
71afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
72afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
73afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
74afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onCreate(Bundle icicle) {
75afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
76afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.language_settings);
78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (getAssets().getLocales().length == 1) {
80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            getPreferenceScreen().
81afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                removePreference(findPreference("language_category"));
82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Configuration config = getResources().getConfiguration();
85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (config.keyboard != Configuration.KEYBOARD_QWERTY) {
86afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            getPreferenceScreen().removePreference(
87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    getPreferenceScreen().findPreference("hardkeyboard_category"));
88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            ContentResolver resolver = getContentResolver();
90afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            for (int i = 0; i < mSettingsUiKey.length; i++) {
91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                CheckBoxPreference pref = (CheckBoxPreference) findPreference(mSettingsUiKey[i]);
92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                pref.setChecked(System.getInt(resolver, mSettingsSystemId[i],
93afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                                              mSettingsDefault[i]) > 0);
94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        onCreateIMM();
98afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void onCreateIMM() {
101afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mInputMethodProperties = imm.getInputMethodList();
104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mLastInputMethodId = Settings.Secure.getString(getContentResolver(),
106afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Settings.Secure.DEFAULT_INPUT_METHOD);
107afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        PreferenceGroup textCategory = (PreferenceGroup) findPreference("text_category");
109afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
110afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int N = (mInputMethodProperties == null ? 0 : mInputMethodProperties
111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                .size());
112afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        for (int i = 0; i < N; ++i) {
113afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            InputMethodInfo property = mInputMethodProperties.get(i);
114afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            String prefKey = property.getId();
115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            CharSequence label = property.loadLabel(getPackageManager());
117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // Add a check box.
119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            CheckBoxPreference chkbxPref = new CheckBoxPreference(this);
120afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            chkbxPref.setKey(prefKey);
121afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            chkbxPref.setTitle(label);
122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            textCategory.addPreference(chkbxPref);
123afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
124afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // If setting activity is available, add a setting screen entry.
125afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (null != property.getSettingsActivity()) {
126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                PreferenceScreen prefScreen = new PreferenceScreen(this, null);
127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                prefScreen.setKey(property.getSettingsActivity());
128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                CharSequence settingsLabel = getResources().getString(
129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        R.string.input_methods_settings_label_format, label);
130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                prefScreen.setTitle(settingsLabel);
131afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                textCategory.addPreference(prefScreen);
132afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
134afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
135afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onResume() {
138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        final HashSet<String> enabled = new HashSet<String>();
141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String enabledStr = Settings.Secure.getString(getContentResolver(),
142afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.Secure.ENABLED_INPUT_METHODS);
143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (enabledStr != null) {
144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            final TextUtils.SimpleStringSplitter splitter = mStringColonSplitter;
145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            splitter.setString(enabledStr);
146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            while (splitter.hasNext()) {
147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                enabled.add(splitter.next());
148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
150afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
151afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Update the statuses of the Check Boxes.
152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int N = mInputMethodProperties.size();
153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        for (int i = 0; i < N; ++i) {
154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            final String id = mInputMethodProperties.get(i).getId();
155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            CheckBoxPreference pref = (CheckBoxPreference) findPreference(mInputMethodProperties
156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    .get(i).getId());
157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            pref.setChecked(enabled.contains(id));
158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mLastTickedInputMethodId = null;
160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
161afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
162afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
163afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    protected void onPause() {
164afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onPause();
165afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
166afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        StringBuilder builder = new StringBuilder(256);
167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
168afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        boolean haveLastInputMethod = false;
169afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
170afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int firstEnabled = -1;
171afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        int N = mInputMethodProperties.size();
172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        for (int i = 0; i < N; ++i) {
173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            final String id = mInputMethodProperties.get(i).getId();
174afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            CheckBoxPreference pref = (CheckBoxPreference) findPreference(id);
175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            boolean hasIt = id.equals(mLastInputMethodId);
176afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (pref.isChecked()) {
177afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                if (builder.length() > 0) builder.append(':');
178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                builder.append(id);
179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                if (firstEnabled < 0) {
180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    firstEnabled = i;
181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                }
182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                if (hasIt) haveLastInputMethod = true;
183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else if (hasIt) {
184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mLastInputMethodId = mLastTickedInputMethodId;
185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
187afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // If the last input method is unset, set it as the first enabled one.
189afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (null == mLastInputMethodId || "".equals(mLastInputMethodId)) {
190afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (firstEnabled >= 0) {
191afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mLastInputMethodId = mInputMethodProperties.get(firstEnabled).getId();
192afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else {
193afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mLastInputMethodId = null;
194afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
197afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Settings.Secure.putString(getContentResolver(),
198afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Settings.Secure.ENABLED_INPUT_METHODS, builder.toString());
199afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Settings.Secure.putString(getContentResolver(),
200afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Settings.Secure.DEFAULT_INPUT_METHOD, mLastInputMethodId);
201afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
204afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Physical keyboard stuff
207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        for (int i = 0; i < mSettingsUiKey.length; i++) {
208afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (mSettingsUiKey[i].equals(preference.getKey())) {
209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                System.putInt(getContentResolver(), mSettingsSystemId[i],
210afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        ((CheckBoxPreference)preference).isChecked()? 1 : 0);
211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                return true;
212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
215afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Input Method stuff
216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Those monkeys kept committing suicide, so we add this property
217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // to disable this functionality
218afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (!TextUtils.isEmpty(SystemProperties.get("ro.monkey"))) {
219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
222afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference instanceof CheckBoxPreference) {
223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            CheckBoxPreference chkPref = (CheckBoxPreference) preference;
224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            String id = getInputMethodIdFromKey(chkPref.getKey());
225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (chkPref.isChecked()) {
226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mLastTickedInputMethodId = id;
227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            } else if (id.equals(mLastTickedInputMethodId)) {
228afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mLastTickedInputMethodId = null;
229afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
230afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference instanceof PreferenceScreen) {
231afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            if (preference.getIntent() == null) {
232afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                PreferenceScreen pref = (PreferenceScreen) preference;
233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                String activityName = pref.getKey();
234afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                String packageName = activityName.substring(0, activityName
235afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        .lastIndexOf("."));
236afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                if (activityName.length() > 0) {
237afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    Intent i = new Intent(Intent.ACTION_MAIN);
238afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    i.setClassName(packageName, activityName);
239afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    startActivity(i);
240afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                }
241afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
242afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
243afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
244afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return super.onPreferenceTreeClick(preferenceScreen, preference);
245afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
248