aboutsummaryrefslogtreecommitdiffstats
path: root/java/src
diff options
context:
space:
mode:
Diffstat (limited to 'java/src')
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java14
-rw-r--r--java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java14
-rw-r--r--java/src/com/android/inputmethod/latin/settings/InputSettingsFragment.java100
-rw-r--r--java/src/com/android/inputmethod/latin/settings/Settings.java4
-rw-r--r--java/src/com/android/inputmethod/latin/settings/SettingsActivity.java3
-rw-r--r--java/src/com/android/inputmethod/latin/settings/SettingsFragment.java22
-rw-r--r--java/src/com/android/inputmethod/latin/settings/SettingsValues.java63
-rw-r--r--java/src/com/android/inputmethod/latin/settings/SubScreenFragment.java118
-rw-r--r--java/src/com/android/inputmethod/latin/utils/FragmentUtils.java2
9 files changed, 262 insertions, 78 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index b641f3a8b..d2a2fbdd8 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -280,7 +280,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
return;
}
if (!latinIme.mSettings.getCurrent()
- .isCurrentOrientationAllowingSuggestionsPerUserSettings()) {
+ .isSuggestionsEnabledPerUserSettings()) {
return;
}
removeMessages(MSG_RESUME_SUGGESTIONS);
@@ -650,7 +650,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mDictionaryFacilitator.resetDictionaries(this /* context */, locale,
settingsValues.mUseContactsDict, settingsValues.mUsePersonalizedDicts,
false /* forceReloadMainDictionary */, this);
- if (settingsValues.mAutoCorrectionEnabled) {
+ if (settingsValues.mAutoCorrectionEnabledPerUserSettings) {
mInputLogic.mSuggest.setAutoCorrectionThreshold(
settingsValues.mAutoCorrectionThreshold);
}
@@ -862,7 +862,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mainKeyboardView.closing();
currentSettingsValues = mSettings.getCurrent();
- if (currentSettingsValues.mAutoCorrectionEnabled) {
+ if (currentSettingsValues.mAutoCorrectionEnabledPerUserSettings) {
suggest.setAutoCorrectionThreshold(
currentSettingsValues.mAutoCorrectionThreshold);
}
@@ -977,7 +977,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
*/
@Override
public void onExtractedTextClicked() {
- if (mSettings.getCurrent().isSuggestionsRequested()) {
+ if (mSettings.getCurrent().needsToLookupSuggestions()) {
return;
}
@@ -995,7 +995,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
*/
@Override
public void onExtractedCursorMovement(final int dx, final int dy) {
- if (mSettings.getCurrent().isSuggestionsRequested()) {
+ if (mSettings.getCurrent().needsToLookupSuggestions()) {
return;
}
@@ -1379,7 +1379,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
ImportantNoticeUtils.shouldShowImportantNotice(this);
final boolean shouldShowSuggestionCandidates =
currentSettingsValues.mInputAttributes.mShouldShowSuggestions
- && currentSettingsValues.isCurrentOrientationAllowingSuggestionsPerUserSettings();
+ && currentSettingsValues.isSuggestionsEnabledPerUserSettings();
final boolean shouldShowSuggestionsStripUnlessPassword = shouldShowImportantNotice
|| currentSettingsValues.mShowsVoiceInputKey
|| shouldShowSuggestionCandidates
@@ -1403,7 +1403,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
}
- if (currentSettingsValues.isCurrentOrientationAllowingSuggestionsPerUserSettings()
+ if (currentSettingsValues.isSuggestionsEnabledPerUserSettings()
// We should clear suggestions if there is no suggestion to show.
|| noSuggestionsToShow
|| currentSettingsValues.isApplicationSpecifiedCompletionsOn()) {
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 6588951df..74d879919 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -745,7 +745,7 @@ public final class InputLogic {
// a letter or a word connector.
&& settingsValues.isWordCodePoint(codePoint)
// We never go into composing state if suggestions are not requested.
- && settingsValues.isSuggestionsRequested() &&
+ && settingsValues.needsToLookupSuggestions() &&
// In languages with spaces, we only start composing a word when we are not already
// touching a word. In languages without spaces, the above conditions are sufficient.
(!mConnection.isCursorTouchingWord(settingsValues.mSpacingAndPunctuations)
@@ -810,7 +810,7 @@ public final class InputLogic {
}
// isComposingWord() may have changed since we stored wasComposing
if (mWordComposer.isComposingWord()) {
- if (settingsValues.mAutoCorrectionEnabled) {
+ if (settingsValues.mAutoCorrectionEnabledPerUserSettings) {
final String separator = shouldAvoidSendingCode ? LastComposedWord.NOT_A_SEPARATOR
: StringUtils.newSingleCodePointString(codePoint);
commitCurrentAutoCorrection(settingsValues, separator, handler);
@@ -1029,7 +1029,7 @@ public final class InputLogic {
}
}
if (inputTransaction.mSettingsValues
- .isCurrentOrientationAllowingSuggestionsPerUserSettings()
+ .isSuggestionsEnabledPerUserSettings()
&& inputTransaction.mSettingsValues.mSpacingAndPunctuations
.mCurrentLanguageHasSpaces
&& !mConnection.isCursorFollowedByWordCharacter(
@@ -1224,7 +1224,7 @@ public final class InputLogic {
// If correction is not enabled, we don't add words to the user history dictionary.
// That's to avoid unintended additions in some sensitive fields, or fields that
// expect to receive non-words.
- if (!settingsValues.mAutoCorrectionEnabled) return;
+ if (!settingsValues.mAutoCorrectionEnabledPerUserSettings) return;
if (TextUtils.isEmpty(suggestion)) return;
final boolean wasAutoCapitalized =
@@ -1237,7 +1237,7 @@ public final class InputLogic {
public void performUpdateSuggestionStripSync(final SettingsValues settingsValues) {
// Check if we have a suggestion engine attached.
- if (!settingsValues.isSuggestionsRequested()) {
+ if (!settingsValues.needsToLookupSuggestions()) {
if (mWordComposer.isComposingWord()) {
Log.w(TAG, "Called updateSuggestionsOrPredictions but suggestions were not "
+ "requested!");
@@ -1299,7 +1299,7 @@ public final class InputLogic {
// how to segment them yet.
|| !settingsValues.mSpacingAndPunctuations.mCurrentLanguageHasSpaces
// If no suggestions are requested, don't try restarting suggestions.
- || !settingsValues.isSuggestionsRequested()
+ || !settingsValues.needsToLookupSuggestions()
// If we are currently in a batch input, we must not resume suggestions, or the result
// of the batch input will replace the new composition. This may happen in the corner case
// that the app moves the cursor on its own accord during a batch input.
@@ -2003,7 +2003,7 @@ public final class InputLogic {
new SettingsValuesForSuggestion(settingsValues.mBlockPotentiallyOffensive,
settingsValues.mPhraseGestureEnabled,
settingsValues.mAdditionalFeaturesSettingValues),
- settingsValues.mAutoCorrectionEnabled,
+ settingsValues.mAutoCorrectionEnabledPerUserSettings,
sessionId, sequenceNumber, callback);
}
}
diff --git a/java/src/com/android/inputmethod/latin/settings/InputSettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/InputSettingsFragment.java
new file mode 100644
index 000000000..f459d68dd
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/settings/InputSettingsFragment.java
@@ -0,0 +1,100 @@
+/*
+ * 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.Bundle;
+import android.preference.Preference;
+
+import com.android.inputmethod.latin.AudioAndHapticFeedbackManager;
+import com.android.inputmethod.latin.R;
+import com.android.inputmethod.latin.SubtypeSwitcher;
+
+/**
+ * "Input 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 InputSettingsFragment extends SubScreenFragment {
+ @Override
+ public void onCreate(final Bundle icicle) {
+ super.onCreate(icicle);
+ addPreferencesFromResource(R.xml.prefs_screen_input);
+
+ 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()}.
+ SubtypeSwitcher.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) {
+ final boolean isShortcutImeEnabled = SubtypeSwitcher.getInstance()
+ .isShortcutImeEnabled();
+ voiceInputKeyOption.setEnabled(isShortcutImeEnabled);
+ voiceInputKeyOption.setSummary(
+ isShortcutImeEnabled ? 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));
+ }
+}
diff --git a/java/src/com/android/inputmethod/latin/settings/Settings.java b/java/src/com/android/inputmethod/latin/settings/Settings.java
index fb1a210bb..0e6a15a7e 100644
--- a/java/src/com/android/inputmethod/latin/settings/Settings.java
+++ b/java/src/com/android/inputmethod/latin/settings/Settings.java
@@ -57,7 +57,9 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_EDIT_PERSONAL_DICTIONARY = "edit_personal_dictionary";
public static final String PREF_CONFIGURE_DICTIONARIES_KEY = "configure_dictionaries_key";
public static final String PREF_AUTO_CORRECTION_THRESHOLD = "auto_correction_threshold";
- public static final String PREF_SHOW_SUGGESTIONS_SETTING = "show_suggestions_setting";
+ // PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE is obsolete. Use PREF_SHOW_SUGGESTIONS instead.
+ public static final String PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE = "show_suggestions_setting";
+ public static final String PREF_SHOW_SUGGESTIONS = "show_suggestions";
public static final String PREF_KEY_USE_CONTACTS_DICT = "pref_key_use_contacts_dict";
public static final String PREF_KEY_USE_PERSONALIZED_DICTS = "pref_key_use_personalized_dicts";
public static final String PREF_KEY_USE_DOUBLE_SPACE_PERIOD =
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsActivity.java b/java/src/com/android/inputmethod/latin/settings/SettingsActivity.java
index c899507e3..c7b9dcdd9 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsActivity.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsActivity.java
@@ -35,8 +35,7 @@ public final class SettingsActivity extends PreferenceActivity {
return intent;
}
- // TODO: Uncomment the override annotation once we start using SDK version 19.
- // @Override
+ @Override
public boolean isValidFragment(String fragmentName) {
return FragmentUtils.isValidFragment(fragmentName);
}
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
index ac5d71c0b..ec842eff2 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
@@ -42,7 +42,6 @@ import com.android.inputmethod.dictionarypack.DictionarySettingsActivity;
import com.android.inputmethod.keyboard.KeyboardTheme;
import com.android.inputmethod.latin.AudioAndHapticFeedbackManager;
import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.SubtypeSwitcher;
import com.android.inputmethod.latin.define.ProductionFlags;
import com.android.inputmethod.latin.setup.LauncherIconVisibilityManager;
import com.android.inputmethod.latin.userdictionary.UserDictionaryList;
@@ -114,7 +113,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment
// 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()}.
- SubtypeSwitcher.init(context);
SubtypeLocaleUtils.init(context);
AudioAndHapticFeedbackManager.init(context);
@@ -123,8 +121,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment
ensureConsistencyOfAutoCorrectionSettings();
- final PreferenceScreen inputScreen =
- (PreferenceScreen) findPreference(Settings.SCREEN_INPUT);
final PreferenceScreen multiLingualScreen =
(PreferenceScreen) findPreference(Settings.SCREEN_MULTI_LINGUAL);
final PreferenceScreen gestureScreen =
@@ -140,14 +136,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment
advancedScreen.removePreference(debugScreen);
}
- final boolean showVoiceKeyOption = res.getBoolean(
- R.bool.config_enable_show_voice_key_option);
- if (!showVoiceKeyOption) {
- removePreference(Settings.PREF_VOICE_INPUT_KEY, inputScreen);
- }
-
if (!AudioAndHapticFeedbackManager.getInstance().hasVibrator()) {
- removePreference(Settings.PREF_VIBRATE_ON, inputScreen);
removePreference(Settings.PREF_VIBRATION_DURATION_SETTINGS, advancedScreen);
}
if (!Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS) {
@@ -158,7 +147,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment
// TODO: consolidate key preview dismiss delay with the key preview animation parameters.
if (!Settings.readFromBuildConfigIfToShowKeyPreviewPopupOption(res)) {
- removePreference(Settings.PREF_POPUP_ON, inputScreen);
removePreference(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY, advancedScreen);
} else {
// TODO: Cleanup this setup.
@@ -234,20 +222,11 @@ public final class SettingsFragment extends InputMethodSettingsFragment
super.onResume();
final SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
final Resources res = getResources();
- final Preference voiceInputKeyOption = findPreference(Settings.PREF_VOICE_INPUT_KEY);
- if (voiceInputKeyOption != null) {
- final boolean isShortcutImeEnabled = SubtypeSwitcher.getInstance()
- .isShortcutImeEnabled();
- voiceInputKeyOption.setEnabled(isShortcutImeEnabled);
- voiceInputKeyOption.setSummary(isShortcutImeEnabled ? null
- : res.getText(R.string.voice_input_disabled_summary));
- }
final TwoStatePreference showSetupWizardIcon =
(TwoStatePreference)findPreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON);
if (showSetupWizardIcon != null) {
showSetupWizardIcon.setChecked(Settings.readShowSetupWizardIcon(prefs, getActivity()));
}
- updateListPreferenceSummaryToCurrentValue(Settings.PREF_SHOW_SUGGESTIONS_SETTING);
updateListPreferenceSummaryToCurrentValue(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY);
final ListPreference keyboardThemePref = (ListPreference)findPreference(
Settings.PREF_KEYBOARD_THEME);
@@ -298,7 +277,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment
LauncherIconVisibilityManager.updateSetupWizardIconVisibility(getActivity());
}
ensureConsistencyOfAutoCorrectionSettings();
- updateListPreferenceSummaryToCurrentValue(Settings.PREF_SHOW_SUGGESTIONS_SETTING);
updateListPreferenceSummaryToCurrentValue(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY);
updateListPreferenceSummaryToCurrentValue(Settings.PREF_KEYBOARD_THEME);
refreshEnablingsOfKeypressSoundAndVibrationSettings(prefs, getResources());
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
index 8de5fed07..39e834f84 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
@@ -85,9 +85,8 @@ public final class SettingsValues {
public final int mKeyPreviewPopupDismissDelay;
private final boolean mAutoCorrectEnabled;
public final float mAutoCorrectionThreshold;
- // TODO: Rename this to mAutoCorrectionEnabledPerUserSettings.
- public final boolean mAutoCorrectionEnabled;
- public final int mSuggestionVisibility;
+ public final boolean mAutoCorrectionEnabledPerUserSettings;
+ private final boolean mSuggestionsEnabledPerUserSettings;
public final int mDisplayOrientation;
private final AsyncResultHolder<AppWorkaroundsUtils> mAppWorkarounds;
@@ -155,11 +154,9 @@ public final class SettingsValues {
mGestureFloatingPreviewTextEnabled = prefs.getBoolean(
Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, true);
mPhraseGestureEnabled = Settings.readPhraseGestureEnabled(prefs, res);
- mAutoCorrectionEnabled = mAutoCorrectEnabled && !mInputAttributes.mInputTypeNoAutoCorrect;
- final String showSuggestionsSetting = prefs.getString(
- Settings.PREF_SHOW_SUGGESTIONS_SETTING,
- res.getString(R.string.prefs_suggestion_visibility_default_value));
- mSuggestionVisibility = createSuggestionVisibility(res, showSuggestionsSetting);
+ mAutoCorrectionEnabledPerUserSettings = mAutoCorrectEnabled
+ && !mInputAttributes.mInputTypeNoAutoCorrect;
+ mSuggestionsEnabledPerUserSettings = readSuggestionsEnabled(prefs);
AdditionalFeaturesSettingUtils.readAdditionalFeaturesPreferencesIntoArray(
prefs, mAdditionalFeaturesSettingValues);
mIsInternal = Settings.isInternal(prefs);
@@ -193,17 +190,13 @@ public final class SettingsValues {
return mInputAttributes.mApplicationSpecifiedCompletionOn;
}
- // TODO: Rename this to needsToLookupSuggestions().
- public boolean isSuggestionsRequested() {
+ public boolean needsToLookupSuggestions() {
return mInputAttributes.mShouldShowSuggestions
- && (mAutoCorrectionEnabled
- || isCurrentOrientationAllowingSuggestionsPerUserSettings());
+ && (mAutoCorrectionEnabledPerUserSettings || isSuggestionsEnabledPerUserSettings());
}
- public boolean isCurrentOrientationAllowingSuggestionsPerUserSettings() {
- return (mSuggestionVisibility == SUGGESTION_VISIBILITY_SHOW_VALUE)
- || (mSuggestionVisibility == SUGGESTION_VISIBILITY_SHOW_ONLY_PORTRAIT_VALUE
- && mDisplayOrientation == Configuration.ORIENTATION_PORTRAIT);
+ public boolean isSuggestionsEnabledPerUserSettings() {
+ return mSuggestionsEnabledPerUserSettings;
}
public boolean isWordSeparator(final int code) {
@@ -263,26 +256,18 @@ public final class SettingsValues {
return null == appWorkaroundUtils ? false : appWorkaroundUtils.isBrokenByRecorrection();
}
- private static final int SUGGESTION_VISIBILITY_SHOW_VALUE =
- R.string.prefs_suggestion_visibility_show_value;
- private static final int SUGGESTION_VISIBILITY_SHOW_ONLY_PORTRAIT_VALUE =
- R.string.prefs_suggestion_visibility_show_only_portrait_value;
- private static final int SUGGESTION_VISIBILITY_HIDE_VALUE =
- R.string.prefs_suggestion_visibility_hide_value;
- private static final int[] SUGGESTION_VISIBILITY_VALUE_ARRAY = new int[] {
- SUGGESTION_VISIBILITY_SHOW_VALUE,
- SUGGESTION_VISIBILITY_SHOW_ONLY_PORTRAIT_VALUE,
- SUGGESTION_VISIBILITY_HIDE_VALUE
- };
-
- private static int createSuggestionVisibility(final Resources res,
- final String suggestionVisiblityStr) {
- for (int visibility : SUGGESTION_VISIBILITY_VALUE_ARRAY) {
- if (suggestionVisiblityStr.equals(res.getString(visibility))) {
- return visibility;
- }
+ private static final String SUGGESTIONS_VISIBILITY_HIDE_VALUE_OBSOLETE = "2";
+
+ private static boolean readSuggestionsEnabled(final SharedPreferences prefs) {
+ if (prefs.contains(Settings.PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE)) {
+ final boolean alwaysHide = SUGGESTIONS_VISIBILITY_HIDE_VALUE_OBSOLETE.equals(
+ prefs.getString(Settings.PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE, null));
+ prefs.edit()
+ .remove(Settings.PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE)
+ .putBoolean(Settings.PREF_SHOW_SUGGESTIONS, !alwaysHide)
+ .apply();
}
- throw new RuntimeException("Bug: visibility string is not configured correctly");
+ return prefs.getBoolean(Settings.PREF_SHOW_SUGGESTIONS, true);
}
private static boolean readBigramPredictionEnabled(final SharedPreferences prefs,
@@ -396,10 +381,10 @@ public final class SettingsValues {
sb.append("" + mAutoCorrectEnabled);
sb.append("\n mAutoCorrectionThreshold = ");
sb.append("" + mAutoCorrectionThreshold);
- sb.append("\n mAutoCorrectionEnabled = ");
- sb.append("" + mAutoCorrectionEnabled);
- sb.append("\n mSuggestionVisibility = ");
- sb.append("" + mSuggestionVisibility);
+ sb.append("\n mAutoCorrectionEnabledPerUserSettings = ");
+ sb.append("" + mAutoCorrectionEnabledPerUserSettings);
+ sb.append("\n mSuggestionsEnabledPerUserSettings = ");
+ sb.append("" + mSuggestionsEnabledPerUserSettings);
sb.append("\n mDisplayOrientation = ");
sb.append("" + mDisplayOrientation);
sb.append("\n mAppWorkarounds = ");
diff --git a/java/src/com/android/inputmethod/latin/settings/SubScreenFragment.java b/java/src/com/android/inputmethod/latin/settings/SubScreenFragment.java
new file mode 100644
index 000000000..c70bf2997
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/settings/SubScreenFragment.java
@@ -0,0 +1,118 @@
+/*
+ * 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.app.backup.BackupManager;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.os.Bundle;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceScreen;
+import android.util.Log;
+
+/**
+ * A base abstract class for a {@link PreferenceFragment} that implements a nested
+ * {@link PreferenceScreen} of the main preference screen.
+ */
+abstract class SubScreenFragment extends PreferenceFragment
+ implements OnSharedPreferenceChangeListener {
+ private OnSharedPreferenceChangeListener mSharedPreferenceChangeListener;
+
+ static void setPreferenceEnabled(final String prefKey, final boolean enabled,
+ final PreferenceScreen screen) {
+ final Preference preference = screen.findPreference(prefKey);
+ if (preference != null) {
+ preference.setEnabled(enabled);
+ }
+ }
+
+ static void removePreference(final String prefKey, final PreferenceScreen screen) {
+ final Preference preference = screen.findPreference(prefKey);
+ if (preference != null) {
+ screen.removePreference(preference);
+ }
+ }
+
+ static void updateListPreferenceSummaryToCurrentValue(final String prefKey,
+ final PreferenceScreen screen) {
+ // Because the "%s" summary trick of {@link ListPreference} doesn't work properly before
+ // KitKat, we need to update the summary programmatically.
+ final ListPreference listPreference = (ListPreference)screen.findPreference(prefKey);
+ if (listPreference == null) {
+ return;
+ }
+ final CharSequence entries[] = listPreference.getEntries();
+ final int entryIndex = listPreference.findIndexOfValue(listPreference.getValue());
+ listPreference.setSummary(entryIndex < 0 ? null : entries[entryIndex]);
+ }
+
+ final void setPreferenceEnabled(final String prefKey, final boolean enabled) {
+ setPreferenceEnabled(prefKey, enabled, getPreferenceScreen());
+ }
+
+ final void removePreference(final String prefKey) {
+ removePreference(prefKey, getPreferenceScreen());
+ }
+
+ final void updateListPreferenceSummaryToCurrentValue(final String prefKey) {
+ updateListPreferenceSummaryToCurrentValue(prefKey, getPreferenceScreen());
+ }
+
+ final SharedPreferences getSharedPreferences() {
+ return getPreferenceManager().getSharedPreferences();
+ }
+
+ @Override
+ public void addPreferencesFromResource(final int preferencesResId) {
+ super.addPreferencesFromResource(preferencesResId);
+ TwoStatePreferenceHelper.replaceCheckBoxPreferencesBySwitchPreferences(
+ getPreferenceScreen());
+ }
+
+ @Override
+ public void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mSharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
+ @Override
+ public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) {
+ final SubScreenFragment fragment = SubScreenFragment.this;
+ final Context context = fragment.getActivity();
+ if (context == null || fragment.getPreferenceScreen() == null) {
+ final String tag = fragment.getClass().getSimpleName();
+ // TODO: Introduce a static function to register this class and ensure that
+ // onCreate must be called before "onSharedPreferenceChanged" is called.
+ Log.w(tag, "onSharedPreferenceChanged called before activity starts.");
+ return;
+ }
+ new BackupManager(context).dataChanged();
+ fragment.onSharedPreferenceChanged(prefs, key);
+ }
+ };
+ getSharedPreferences().registerOnSharedPreferenceChangeListener(
+ mSharedPreferenceChangeListener);
+ }
+
+ @Override
+ public void onDestroy() {
+ getSharedPreferences().unregisterOnSharedPreferenceChangeListener(
+ mSharedPreferenceChangeListener);
+ super.onDestroy();
+ }
+}
diff --git a/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java b/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java
index e300bd1d3..5d77097b2 100644
--- a/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java
@@ -20,6 +20,7 @@ import com.android.inputmethod.dictionarypack.DictionarySettingsFragment;
import com.android.inputmethod.latin.about.AboutPreferences;
import com.android.inputmethod.latin.settings.AdditionalSubtypeSettings;
import com.android.inputmethod.latin.settings.DebugSettings;
+import com.android.inputmethod.latin.settings.InputSettingsFragment;
import com.android.inputmethod.latin.settings.SettingsFragment;
import com.android.inputmethod.latin.spellcheck.SpellCheckerSettingsFragment;
import com.android.inputmethod.latin.userdictionary.UserDictionaryAddWordFragment;
@@ -34,6 +35,7 @@ public class FragmentUtils {
static {
sLatinImeFragments.add(DictionarySettingsFragment.class.getName());
sLatinImeFragments.add(AboutPreferences.class.getName());
+ sLatinImeFragments.add(InputSettingsFragment.class.getName());
sLatinImeFragments.add(AdditionalSubtypeSettings.class.getName());
sLatinImeFragments.add(DebugSettings.class.getName());
sLatinImeFragments.add(SettingsFragment.class.getName());