/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.inputmethod.latin.settings; import android.content.Context; import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.preference.Preference; import com.android.inputmethod.latin.AudioAndHapticFeedbackManager; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.RichInputMethodManager; /** * "Preferences" settings sub screen. * * This settings sub screen handles the following input preferences. * - Auto-capitalization * - Double-space period * - Vibrate on keypress * - Sound on keypress * - Popup on keypress * - Voice input key */ public final class PreferencesSettingsFragment extends SubScreenFragment { private static final boolean VOICE_IME_ENABLED = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; @Override public void onCreate(final Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.prefs_screen_preferences); final Resources res = getResources(); final Context context = getActivity(); // When we are called from the Settings application but we are not already running, some // singleton and utility classes may not have been initialized. We have to call // initialization method of these classes here. See {@link LatinIME#onCreate()}. RichInputMethodManager.init(context); final boolean showVoiceKeyOption = res.getBoolean( R.bool.config_enable_show_voice_key_option); if (!showVoiceKeyOption) { removePreference(Settings.PREF_VOICE_INPUT_KEY); } if (!AudioAndHapticFeedbackManager.getInstance().hasVibrator()) { removePreference(Settings.PREF_VIBRATE_ON); } if (!Settings.readFromBuildConfigIfToShowKeyPreviewPopupOption(res)) { removePreference(Settings.PREF_POPUP_ON); } refreshEnablingsOfKeypressSoundAndVibrationSettings(); } @Override public void onResume() { super.onResume(); final Preference voiceInputKeyOption = findPreference(Settings.PREF_VOICE_INPUT_KEY); if (voiceInputKeyOption != null) { RichInputMethodManager.getInstance().refreshSubtypeCaches(); voiceInputKeyOption.setEnabled(VOICE_IME_ENABLED); voiceInputKeyOption.setSummary(VOICE_IME_ENABLED ? null : getText(R.string.voice_input_disabled_summary)); } } @Override public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) { final Resources res = getResources(); if (key.equals(Settings.PREF_POPUP_ON)) { setPreferenceEnabled(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY, Settings.readKeyPreviewPopupEnabled(prefs, res)); } refreshEnablingsOfKeypressSoundAndVibrationSettings(); } private void refreshEnablingsOfKeypressSoundAndVibrationSettings() { final SharedPreferences prefs = getSharedPreferences(); final Resources res = getResources(); setPreferenceEnabled(Settings.PREF_VIBRATION_DURATION_SETTINGS, Settings.readVibrationEnabled(prefs, res)); setPreferenceEnabled(Settings.PREF_KEYPRESS_SOUND_VOLUME, Settings.readKeypressSoundEnabled(prefs, res)); } }