17898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/*
27898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
37898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
47898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * you may not use this file except in compliance with the License.
67898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * You may obtain a copy of the License at
77898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
87898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project *
107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * See the License for the specific language governing permissions and
147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * limitations under the License.
157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */
167898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
177898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpackage com.android.inputmethod.pinyin;
187898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
197898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport java.util.List;
207898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
217898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.os.Bundle;
227898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.preference.CheckBoxPreference;
237898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.preference.Preference;
247898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.preference.PreferenceActivity;
257898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.preference.PreferenceGroup;
267898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.preference.PreferenceManager;
277898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.preference.PreferenceScreen;
287898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport com.android.inputmethod.pinyin.Settings;
297898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.content.Intent;
307898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.content.pm.PackageManager;
317898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectimport android.content.pm.ResolveInfo;
327898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
337898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project/**
347898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project * Setting activity of Pinyin IME.
357898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project */
367898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Projectpublic class SettingsActivity extends PreferenceActivity implements
377898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        Preference.OnPreferenceChangeListener {
387898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
397898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private static String TAG = "SettingsActivity";
407898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
417898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private CheckBoxPreference mKeySoundPref;
427898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private CheckBoxPreference mVibratePref;
437898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private CheckBoxPreference mPredictionPref;
447898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
457898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    @Override
467898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    protected void onCreate(Bundle savedInstanceState) {
477898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        super.onCreate(savedInstanceState);
487898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        addPreferencesFromResource(R.xml.settings);
497898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
507898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        PreferenceScreen prefSet = getPreferenceScreen();
517898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
527898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mKeySoundPref = (CheckBoxPreference) prefSet
537898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .findPreference(getString(R.string.setting_sound_key));
547898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mVibratePref = (CheckBoxPreference) prefSet
557898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .findPreference(getString(R.string.setting_vibrate_key));
567898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mPredictionPref = (CheckBoxPreference) prefSet
577898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .findPreference(getString(R.string.setting_prediction_key));
587898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
597898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        prefSet.setOnPreferenceChangeListener(this);
607898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
617898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        Settings.getInstance(PreferenceManager
627898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                .getDefaultSharedPreferences(getApplicationContext()));
637898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
647898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        updatePreference(prefSet, getString(R.string.setting_advanced_key));
657898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
667898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        updateWidgets();
677898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
687898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
697898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    @Override
707898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    protected void onResume() {
717898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        super.onResume();
727898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        updateWidgets();
737898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
747898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
757898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    @Override
767898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    protected void onDestroy() {
777898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        Settings.releaseInstance();
787898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        super.onDestroy();
797898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
807898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
817898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    @Override
827898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    protected void onPause() {
837898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        super.onPause();
847898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        Settings.setKeySound(mKeySoundPref.isChecked());
857898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        Settings.setVibrate(mVibratePref.isChecked());
867898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        Settings.setPrediction(mPredictionPref.isChecked());
877898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
887898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        Settings.writeBack();
897898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
907898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
917898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public boolean onPreferenceChange(Preference preference, Object newValue) {
927898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        return true;
937898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
947898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
957898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    private void updateWidgets() {
967898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mKeySoundPref.setChecked(Settings.getKeySound());
977898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mVibratePref.setChecked(Settings.getVibrate());
987898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        mPredictionPref.setChecked(Settings.getPrediction());
997898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
1007898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project
1017898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    public void updatePreference(PreferenceGroup parentPref, String prefKey) {
1027898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        Preference preference = parentPref.findPreference(prefKey);
1037898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (preference == null) {
1047898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            return;
1057898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
1067898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        Intent intent = preference.getIntent();
1077898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        if (intent != null) {
1087898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            PackageManager pm = getPackageManager();
1097898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            List<ResolveInfo> list = pm.queryIntentActivities(intent, 0);
1107898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            int listSize = list.size();
1117898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project            if (listSize == 0)
1127898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project                parentPref.removePreference(preference);
1137898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project        }
1147898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project    }
1157898d76cc005bbe1c5893a9f57439561e0771ccThe Android Open Source Project}
116