17a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard/* 27a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard * Copyright (C) 2011 The Android Open Source Project 37a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard * 48aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 58aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * you may not use this file except in compliance with the License. 68aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * You may obtain a copy of the License at 77a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard * 88aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 97a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard * 107a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard * Unless required by applicable law or agreed to in writing, software 118aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 128aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * See the License for the specific language governing permissions and 148aa9963a895f9dd5bb1bc92ab2e4f461e058f87aTadashi G. Takaoka * limitations under the License. 157a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard */ 167a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 17a7d2fc6befa1b16883200a653fc01deb4d94944dKen Wakasapackage com.android.inputmethod.latin.settings; 187a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 191404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport android.content.Context; 207a16a061e622539e54d7d649dcb8d4965aea575aJean Chalardimport android.content.SharedPreferences; 211404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport android.content.pm.PackageInfo; 22d2736972598eda61a8e40a3d5b26156136e78d66Jean Chalardimport android.content.res.Configuration; 237a16a061e622539e54d7d649dcb8d4965aea575aJean Chalardimport android.content.res.Resources; 245254c01d4cc024527479d4dc5fab2ed2516c395cDan Zivkovicimport android.os.Build; 257a16a061e622539e54d7d649dcb8d4965aea575aJean Chalardimport android.util.Log; 267a16a061e622539e54d7d649dcb8d4965aea575aJean Chalardimport android.view.inputmethod.EditorInfo; 277a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 281404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport com.android.inputmethod.compat.AppWorkaroundsUtils; 29a7d2fc6befa1b16883200a653fc01deb4d94944dKen Wakasaimport com.android.inputmethod.latin.InputAttributes; 30a7d2fc6befa1b16883200a653fc01deb4d94944dKen Wakasaimport com.android.inputmethod.latin.R; 31a7d2fc6befa1b16883200a653fc01deb4d94944dKen Wakasaimport com.android.inputmethod.latin.RichInputMethodManager; 321404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport com.android.inputmethod.latin.utils.AsyncResultHolder; 33276b1a2ebc6d5ea3fa36fa9271cdc6310db34021Tadashi G. Takaokaimport com.android.inputmethod.latin.utils.ResourceUtils; 341404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalardimport com.android.inputmethod.latin.utils.TargetPackageInfoGetterTask; 357a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 367a16a061e622539e54d7d649dcb8d4965aea575aJean Chalardimport java.util.Arrays; 37c5c226c4243509c67af84d89e50013eaa3cc6033Jean Chalardimport java.util.Locale; 387a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 39d3a4c5132422b189c8dbb94dbbe84a9b9761b0a8Tadashi G. Takaokaimport javax.annotation.Nonnull; 40bc4ae6bdc0249f9282efea5d1fe7ccfefd6f93b0Jatin Mataniimport javax.annotation.Nullable; 41d3a4c5132422b189c8dbb94dbbe84a9b9761b0a8Tadashi G. Takaoka 4216c6f355700ee5cdaa029f4a25b8b3d40718e6abTadashi G. Takaoka/** 4316c6f355700ee5cdaa029f4a25b8b3d40718e6abTadashi G. Takaoka * When you call the constructor of this class, you may want to change the current system locale by 440c3a9b549c3ff9bdf47c52cf59347f7e111dd183Tadashi G. Takaoka * using {@link com.android.inputmethod.latin.utils.RunInLocale}. 4516c6f355700ee5cdaa029f4a25b8b3d40718e6abTadashi G. Takaoka */ 460807c897f40f22ee4df5d425a8c7f7c207000718Jatin Matani// Non-final for testing via mock library. 470807c897f40f22ee4df5d425a8c7f7c207000718Jatin Matanipublic class SettingsValues { 487a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard private static final String TAG = SettingsValues.class.getSimpleName(); 49fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa // "floatMaxValue" and "floatNegativeInfinity" are special marker strings for 50fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa // Float.NEGATIVE_INFINITE and Float.MAX_VALUE. Currently used for auto-correction settings. 51fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa private static final String FLOAT_MAX_VALUE_MARKER_STRING = "floatMaxValue"; 5270f2762e285fe85676de4270edee97de54674879Satoshi Kataoka private static final String FLOAT_NEGATIVE_INFINITY_MARKER_STRING = "floatNegativeInfinity"; 531404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard private static final int TIMEOUT_TO_GET_TARGET_PACKAGE = 5; // seconds 54bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang public static final float DEFAULT_SIZE_SCALE = 1.0f; // 100% 557a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 567a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard // From resources: 57b90fa0fb2ce195cfaec878dea9702261290176c2Jean Chalard public final SpacingAndPunctuations mSpacingAndPunctuations; 58a61b7245b030395451b4c42ec218a946aa95e030Yohei Yukawa public final int mDelayInMillisecondsToUpdateOldSuggestions; 59554346e94c852222a16b8ade732832158cbd34afJean Chalard public final long mDoubleSpacePeriodTimeout; 606bb6d30344259b41387f15f0e05df2388beb1d1cJean Chalard // From configuration: 616bb6d30344259b41387f15f0e05df2388beb1d1cJean Chalard public final Locale mLocale; 626bb6d30344259b41387f15f0e05df2388beb1d1cJean Chalard public final boolean mHasHardwareKeyboard; 636bb6d30344259b41387f15f0e05df2388beb1d1cJean Chalard public final int mDisplayOrientation; 64837b109f278d9e3be9b12e87dff4b3e6bdc97defJean Chalard // From preferences, in the same order as xml/prefs.xml: 65837b109f278d9e3be9b12e87dff4b3e6bdc97defJean Chalard public final boolean mAutoCap; 667a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard public final boolean mVibrateOn; 67837b109f278d9e3be9b12e87dff4b3e6bdc97defJean Chalard public final boolean mSoundOn; 687a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard public final boolean mKeyPreviewPopupOn; 692fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa public final boolean mShowsVoiceInputKey; 7081d4e3cd66a9388c47c7dba55240ddf849b31934Tadashi G. Takaoka public final boolean mIncludesOtherImesInLanguageSwitchList; 711a4aa7e307e6090011449446c2c6770b6a0cc987Tadashi G. Takaoka public final boolean mShowsLanguageSwitchKey; 72837b109f278d9e3be9b12e87dff4b3e6bdc97defJean Chalard public final boolean mUseContactsDict; 73d4bb7df412e13197570436e9b8ec7db4f1199a06Keisuke Kuroyanagi public final boolean mUsePersonalizedDicts; 74139bd83f0c552e3fdb5f763b5f6fe25ad138802bKen Wakasa public final boolean mUseDoubleSpacePeriod; 75bb61293675234f6e5e1312db70618be985b37a83Jean Chalard public final boolean mBlockPotentiallyOffensive; 765455179b54eb8230577f518db082796a3055685aDan Zivkovic // Use bigrams to predict the next word when there is no input for it yet 775455179b54eb8230577f518db082796a3055685aDan Zivkovic public final boolean mBigramPredictionEnabled; 7862b8dddb6ddb057555a1665759f9cf197e480c9fTadashi G. Takaoka public final boolean mGestureInputEnabled; 79724db044957eb3544323c9814cbb4f20e81b8594Ken Wakasa public final boolean mGestureTrailEnabled; 8047e2bf329882ea45294ea6e6dd80b4d4eb3789e6Tadashi G. Takaoka public final boolean mGestureFloatingPreviewTextEnabled; 81ff961ddf8c58df569c97684bfd83a01b2a9470aaTadashi G. Takaoka public final boolean mSlidingKeyInputPreviewEnabled; 82cc5e4a444524f73a112d7223d7940d41cf60d1f4Tadashi G. Takaoka public final int mKeyLongpressTimeout; 83f7e01e866ffa89b4dd7e66c471ed9fc275a637a2Tadashi G. Takaoka public final boolean mEnableEmojiAltPhysicalKey; 84a2376cd2b4fea6b655fdcdf794cf16b7bbe1a161Chieu Nguyen public final boolean mShowAppIcon; 85a2376cd2b4fea6b655fdcdf794cf16b7bbe1a161Chieu Nguyen public final boolean mIsShowAppIconSettingInPreferences; 8693205b17ffb135f792dede75aaf2b5f6c6d5b56aChieu Nguyen public final boolean mCloudSyncEnabled; 879aa7f66a15b7db2c0bf8924ba17ae9fe463441b5Yohei Yukawa public final boolean mEnableMetricsLogging; 886fb586a527e7ffe5da187c8b345cdf897b8481c7Tadashi G. Takaoka public final boolean mShouldShowLxxSuggestionUi; 89a5d4cb7769dce162c35573a806533af585063a82Jatin Matani // Use split layout for keyboard. 90a5d4cb7769dce162c35573a806533af585063a82Jatin Matani public final boolean mIsSplitKeyboardEnabled; 91a5d4cb7769dce162c35573a806533af585063a82Jatin Matani public final int mScreenMetrics; 927a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 93dca729fddd69f03d8eaca238c62478a7fd77db96Jean Chalard // From the input box 94d3a4c5132422b189c8dbb94dbbe84a9b9761b0a8Tadashi G. Takaoka @Nonnull 95ff0735ada807239abeb4c6105b7d01d2bcea0aedTadashi G. Takaoka public final InputAttributes mInputAttributes; 96dca729fddd69f03d8eaca238c62478a7fd77db96Jean Chalard 97c207e0a7dad0bdae054be47cafe878698f9401fcJean Chalard // Deduced settings 98c207e0a7dad0bdae054be47cafe878698f9401fcJean Chalard public final int mKeypressVibrationDuration; 99d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka public final float mKeypressSoundVolume; 100837b109f278d9e3be9b12e87dff4b3e6bdc97defJean Chalard public final int mKeyPreviewPopupDismissDelay; 101140adf204bdf68e25a760b371516e23f6ac51cf2Jean Chalard private final boolean mAutoCorrectEnabled; 1020028ed3627ff4f37a62a80f3b2c857e373cd5090satok public final float mAutoCorrectionThreshold; 10356577461d63ad3618598ceddfb9a73b797917061Jean Chalard public final float mPlausibilityThreshold; 104ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka public final boolean mAutoCorrectionEnabledPerUserSettings; 105ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka private final boolean mSuggestionsEnabledPerUserSettings; 1061404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard private final AsyncResultHolder<AppWorkaroundsUtils> mAppWorkarounds; 107c207e0a7dad0bdae054be47cafe878698f9401fcJean Chalard 108756791e6bf80c1fd86f9a236f4ba8da770a7305fSatoshi Kataoka // Debug settings 109756791e6bf80c1fd86f9a236f4ba8da770a7305fSatoshi Kataoka public final boolean mIsInternal; 110ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka public final boolean mHasCustomKeyPreviewAnimationParams; 111bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang public final boolean mHasKeyboardResize; 112bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang public final float mKeyboardHeightScale; 113276b1a2ebc6d5ea3fa36fa9271cdc6310db34021Tadashi G. Takaoka public final int mKeyPreviewShowUpDuration; 114276b1a2ebc6d5ea3fa36fa9271cdc6310db34021Tadashi G. Takaoka public final int mKeyPreviewDismissDuration; 115ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka public final float mKeyPreviewShowUpStartXScale; 116ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka public final float mKeyPreviewShowUpStartYScale; 117ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka public final float mKeyPreviewDismissEndXScale; 118ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka public final float mKeyPreviewDismissEndYScale; 119756791e6bf80c1fd86f9a236f4ba8da770a7305fSatoshi Kataoka 120bc4ae6bdc0249f9282efea5d1fe7ccfefd6f93b0Jatin Matani @Nullable public final String mAccount; 121bc4ae6bdc0249f9282efea5d1fe7ccfefd6f93b0Jatin Matani 122860c3b8e8cc65e2a2b26b4da0356b5bcff6450e6Tadashi G. Takaoka public SettingsValues(final Context context, final SharedPreferences prefs, final Resources res, 123d3a4c5132422b189c8dbb94dbbe84a9b9761b0a8Tadashi G. Takaoka @Nonnull final InputAttributes inputAttributes) { 124860c3b8e8cc65e2a2b26b4da0356b5bcff6450e6Tadashi G. Takaoka mLocale = res.getConfiguration().locale; 1257a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard // Get the resources 126a61b7245b030395451b4c42ec218a946aa95e030Yohei Yukawa mDelayInMillisecondsToUpdateOldSuggestions = 127a61b7245b030395451b4c42ec218a946aa95e030Yohei Yukawa res.getInteger(R.integer.config_delay_in_milliseconds_to_update_old_suggestions); 128b90fa0fb2ce195cfaec878dea9702261290176c2Jean Chalard mSpacingAndPunctuations = new SpacingAndPunctuations(res); 1297a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 130dca729fddd69f03d8eaca238c62478a7fd77db96Jean Chalard // Store the input attributes 131d3a4c5132422b189c8dbb94dbbe84a9b9761b0a8Tadashi G. Takaoka mInputAttributes = inputAttributes; 132dca729fddd69f03d8eaca238c62478a7fd77db96Jean Chalard 1337a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard // Get the settings preferences 134c40b807ca420123d90cd9479a453051f975b7629Jean Chalard mAutoCap = prefs.getBoolean(Settings.PREF_AUTO_CAP, true); 135ce875664e0564f3e26d130a4d3e8b8e9a2e8a368Tadashi G. Takaoka mVibrateOn = Settings.readVibrationEnabled(prefs, res); 136ce875664e0564f3e26d130a4d3e8b8e9a2e8a368Tadashi G. Takaoka mSoundOn = Settings.readKeypressSoundEnabled(prefs, res); 137d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka mKeyPreviewPopupOn = Settings.readKeyPreviewPopupEnabled(prefs, res); 138ff961ddf8c58df569c97684bfd83a01b2a9470aaTadashi G. Takaoka mSlidingKeyInputPreviewEnabled = prefs.getBoolean( 139a3920c7e6af852764a3b5a6eecd27f51ab83f244Tadashi G. Takaoka DebugSettings.PREF_SLIDING_KEY_INPUT_PREVIEW, true); 140aa4b2c71270576f25e7c80a4b63a1956cec5f4e2Tadashi G. Takaoka mShowsVoiceInputKey = needsToShowVoiceInputKey(prefs, res) 1410351b816327ebddef0c4c1f95834645a4fab96feTadashi G. Takaoka && mInputAttributes.mShouldShowVoiceInputKey 1425254c01d4cc024527479d4dc5fab2ed2516c395cDan Zivkovic && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN; 1437ed40a13cc8d8a616fd131e5644238cd41aba84dTadashi G. Takaoka mIncludesOtherImesInLanguageSwitchList = Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS 1447ed40a13cc8d8a616fd131e5644238cd41aba84dTadashi G. Takaoka ? prefs.getBoolean(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, false) 1457ed40a13cc8d8a616fd131e5644238cd41aba84dTadashi G. Takaoka : true /* forcibly */; 1467ed40a13cc8d8a616fd131e5644238cd41aba84dTadashi G. Takaoka mShowsLanguageSwitchKey = Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS 1477ed40a13cc8d8a616fd131e5644238cd41aba84dTadashi G. Takaoka ? Settings.readShowsLanguageSwitchKey(prefs) : true /* forcibly */; 148c40b807ca420123d90cd9479a453051f975b7629Jean Chalard mUseContactsDict = prefs.getBoolean(Settings.PREF_KEY_USE_CONTACTS_DICT, true); 149c2ba73ab41caf208123618c153e066180eb32c01Tadashi G. Takaoka mUsePersonalizedDicts = prefs.getBoolean(Settings.PREF_KEY_USE_PERSONALIZED_DICTS, true); 1507aa47cb3748d82b6f8bf3713c3c9e05b3fca8979Jean Chalard mUseDoubleSpacePeriod = prefs.getBoolean(Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, true) 1517aa47cb3748d82b6f8bf3713c3c9e05b3fca8979Jean Chalard && inputAttributes.mIsGeneralTextInput; 152bb61293675234f6e5e1312db70618be985b37a83Jean Chalard mBlockPotentiallyOffensive = Settings.readBlockPotentiallyOffensive(prefs, res); 153116e58c437526ea2503564317e2731b8126acaa4Chieu Nguyen mAutoCorrectEnabled = Settings.readAutoCorrectEnabled(prefs, res); 154116e58c437526ea2503564317e2731b8126acaa4Chieu Nguyen final String autoCorrectionThresholdRawValue = mAutoCorrectEnabled 155116e58c437526ea2503564317e2731b8126acaa4Chieu Nguyen ? res.getString(R.string.auto_correction_threshold_mode_index_modest) 156116e58c437526ea2503564317e2731b8126acaa4Chieu Nguyen : res.getString(R.string.auto_correction_threshold_mode_index_off); 1575455179b54eb8230577f518db082796a3055685aDan Zivkovic mBigramPredictionEnabled = readBigramPredictionEnabled(prefs, res); 158554346e94c852222a16b8ade732832158cbd34afJean Chalard mDoubleSpacePeriodTimeout = res.getInteger(R.integer.config_double_space_period_timeout); 1596bb6d30344259b41387f15f0e05df2388beb1d1cJean Chalard mHasHardwareKeyboard = Settings.readHasHardwareKeyboard(res.getConfiguration()); 1609aa7f66a15b7db2c0bf8924ba17ae9fe463441b5Yohei Yukawa mEnableMetricsLogging = prefs.getBoolean(Settings.PREF_ENABLE_METRICS_LOGGING, true); 161a5d4cb7769dce162c35573a806533af585063a82Jatin Matani mIsSplitKeyboardEnabled = prefs.getBoolean(Settings.PREF_ENABLE_SPLIT_KEYBOARD, false); 162395009c03eeda42b2b2114d005c3ed8d7e4bfd4bTadashi G. Takaoka mScreenMetrics = Settings.readScreenMetrics(res); 163a5d4cb7769dce162c35573a806533af585063a82Jatin Matani 1646fb586a527e7ffe5da187c8b345cdf897b8481c7Tadashi G. Takaoka mShouldShowLxxSuggestionUi = Settings.SHOULD_SHOW_LXX_SUGGESTION_UI 1656fb586a527e7ffe5da187c8b345cdf897b8481c7Tadashi G. Takaoka && prefs.getBoolean(DebugSettings.PREF_SHOULD_SHOW_LXX_SUGGESTION_UI, true); 166c40b807ca420123d90cd9479a453051f975b7629Jean Chalard // Compute other readable settings 167cc5e4a444524f73a112d7223d7940d41cf60d1f4Tadashi G. Takaoka mKeyLongpressTimeout = Settings.readKeyLongpressTimeout(prefs, res); 168a7a7f4e00277b2d3c1c38d2b6fe558e177e1e8d2Tadashi G. Takaoka mKeypressVibrationDuration = Settings.readKeypressVibrationDuration(prefs, res); 169d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka mKeypressSoundVolume = Settings.readKeypressSoundVolume(prefs, res); 170d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka mKeyPreviewPopupDismissDelay = Settings.readKeyPreviewPopupDismissDelay(prefs, res); 171f7e01e866ffa89b4dd7e66c471ed9fc275a637a2Tadashi G. Takaoka mEnableEmojiAltPhysicalKey = prefs.getBoolean( 172f7e01e866ffa89b4dd7e66c471ed9fc275a637a2Tadashi G. Takaoka Settings.PREF_ENABLE_EMOJI_ALT_PHYSICAL_KEY, true); 173a2376cd2b4fea6b655fdcdf794cf16b7bbe1a161Chieu Nguyen mShowAppIcon = Settings.readShowSetupWizardIcon(prefs, context); 174a2376cd2b4fea6b655fdcdf794cf16b7bbe1a161Chieu Nguyen mIsShowAppIconSettingInPreferences = prefs.contains(Settings.PREF_SHOW_SETUP_WIZARD_ICON); 175d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka mAutoCorrectionThreshold = readAutoCorrectionThreshold(res, 1761aa547d94a379691ecca994d92bf3c2f212bad13Tadashi G. Takaoka autoCorrectionThresholdRawValue); 17756577461d63ad3618598ceddfb9a73b797917061Jean Chalard mPlausibilityThreshold = Settings.readPlausibilityThreshold(res); 178ce875664e0564f3e26d130a4d3e8b8e9a2e8a368Tadashi G. Takaoka mGestureInputEnabled = Settings.readGestureInputEnabled(prefs, res); 179724db044957eb3544323c9814cbb4f20e81b8594Ken Wakasa mGestureTrailEnabled = prefs.getBoolean(Settings.PREF_GESTURE_PREVIEW_TRAIL, true); 18093205b17ffb135f792dede75aaf2b5f6c6d5b56aChieu Nguyen mCloudSyncEnabled = prefs.getBoolean(LocalSettingsConstants.PREF_ENABLE_CLOUD_SYNC, false); 181bc4ae6bdc0249f9282efea5d1fe7ccfefd6f93b0Jatin Matani mAccount = prefs.getString(LocalSettingsConstants.PREF_ACCOUNT_NAME, 182bc4ae6bdc0249f9282efea5d1fe7ccfefd6f93b0Jatin Matani null /* default */); 18395b7bd3ba5bc76dedb964f0fb9a858e072ea4e91David Faden mGestureFloatingPreviewTextEnabled = !mInputAttributes.mDisableGestureFloatingPreviewText 18495b7bd3ba5bc76dedb964f0fb9a858e072ea4e91David Faden && prefs.getBoolean(Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, true); 185ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka mAutoCorrectionEnabledPerUserSettings = mAutoCorrectEnabled 186ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka && !mInputAttributes.mInputTypeNoAutoCorrect; 187ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka mSuggestionsEnabledPerUserSettings = readSuggestionsEnabled(prefs); 188756791e6bf80c1fd86f9a236f4ba8da770a7305fSatoshi Kataoka mIsInternal = Settings.isInternal(prefs); 189ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka mHasCustomKeyPreviewAnimationParams = prefs.getBoolean( 190ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka DebugSettings.PREF_HAS_CUSTOM_KEY_PREVIEW_ANIMATION_PARAMS, false); 191bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang mHasKeyboardResize = prefs.getBoolean(DebugSettings.PREF_RESIZE_KEYBOARD, false); 192be819dbe2b7a5c418530a2fa1182766a4d31d6d5Tadashi G. Takaoka mKeyboardHeightScale = Settings.readKeyboardHeight(prefs, DEFAULT_SIZE_SCALE); 193276b1a2ebc6d5ea3fa36fa9271cdc6310db34021Tadashi G. Takaoka mKeyPreviewShowUpDuration = Settings.readKeyPreviewAnimationDuration( 194276b1a2ebc6d5ea3fa36fa9271cdc6310db34021Tadashi G. Takaoka prefs, DebugSettings.PREF_KEY_PREVIEW_SHOW_UP_DURATION, 195276b1a2ebc6d5ea3fa36fa9271cdc6310db34021Tadashi G. Takaoka res.getInteger(R.integer.config_key_preview_show_up_duration)); 196276b1a2ebc6d5ea3fa36fa9271cdc6310db34021Tadashi G. Takaoka mKeyPreviewDismissDuration = Settings.readKeyPreviewAnimationDuration( 197276b1a2ebc6d5ea3fa36fa9271cdc6310db34021Tadashi G. Takaoka prefs, DebugSettings.PREF_KEY_PREVIEW_DISMISS_DURATION, 198276b1a2ebc6d5ea3fa36fa9271cdc6310db34021Tadashi G. Takaoka res.getInteger(R.integer.config_key_preview_dismiss_duration)); 199ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka final float defaultKeyPreviewShowUpStartScale = ResourceUtils.getFloatFromFraction( 200ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka res, R.fraction.config_key_preview_show_up_start_scale); 201ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka final float defaultKeyPreviewDismissEndScale = ResourceUtils.getFloatFromFraction( 202ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka res, R.fraction.config_key_preview_dismiss_end_scale); 203ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka mKeyPreviewShowUpStartXScale = Settings.readKeyPreviewAnimationScale( 204ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka prefs, DebugSettings.PREF_KEY_PREVIEW_SHOW_UP_START_X_SCALE, 205ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka defaultKeyPreviewShowUpStartScale); 206ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka mKeyPreviewShowUpStartYScale = Settings.readKeyPreviewAnimationScale( 207ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka prefs, DebugSettings.PREF_KEY_PREVIEW_SHOW_UP_START_Y_SCALE, 208ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka defaultKeyPreviewShowUpStartScale); 209ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka mKeyPreviewDismissEndXScale = Settings.readKeyPreviewAnimationScale( 210ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka prefs, DebugSettings.PREF_KEY_PREVIEW_DISMISS_END_X_SCALE, 211ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka defaultKeyPreviewDismissEndScale); 212ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka mKeyPreviewDismissEndYScale = Settings.readKeyPreviewAnimationScale( 213ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka prefs, DebugSettings.PREF_KEY_PREVIEW_DISMISS_END_Y_SCALE, 214ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka defaultKeyPreviewDismissEndScale); 215aa161eb371d8042ef4c1f9207648b3aeacb65e4eJean Chalard mDisplayOrientation = res.getConfiguration().orientation; 2165a53505fe4c0ae5d04bfcb3612908d3c93be90b1Dan Zivkovic mAppWorkarounds = new AsyncResultHolder<>("AppWorkarounds"); 2171404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard final PackageInfo packageInfo = TargetPackageInfoGetterTask.getCachedPackageInfo( 2181404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard mInputAttributes.mTargetApplicationPackageName); 2191404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard if (null != packageInfo) { 2201404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard mAppWorkarounds.set(new AppWorkaroundsUtils(packageInfo)); 2211404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard } else { 2221404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard new TargetPackageInfoGetterTask(context, mAppWorkarounds) 2231404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard .execute(mInputAttributes.mTargetApplicationPackageName); 2241404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard } 2257a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard } 2267a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 2270807c897f40f22ee4df5d425a8c7f7c207000718Jatin Matani public boolean isMetricsLoggingEnabled() { 2280807c897f40f22ee4df5d425a8c7f7c207000718Jatin Matani return mEnableMetricsLogging; 2290807c897f40f22ee4df5d425a8c7f7c207000718Jatin Matani } 2300807c897f40f22ee4df5d425a8c7f7c207000718Jatin Matani 231dca729fddd69f03d8eaca238c62478a7fd77db96Jean Chalard public boolean isApplicationSpecifiedCompletionsOn() { 232dca729fddd69f03d8eaca238c62478a7fd77db96Jean Chalard return mInputAttributes.mApplicationSpecifiedCompletionOn; 233dca729fddd69f03d8eaca238c62478a7fd77db96Jean Chalard } 234dca729fddd69f03d8eaca238c62478a7fd77db96Jean Chalard 235ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka public boolean needsToLookupSuggestions() { 2362e32e37d5bf95743eb56ef1b9560ffc5032bccf3Tadashi G. Takaoka return mInputAttributes.mShouldShowSuggestions 237ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka && (mAutoCorrectionEnabledPerUserSettings || isSuggestionsEnabledPerUserSettings()); 2382010aad741bc1a7266913bcb8b8348d6e401c95bJean Chalard } 2392010aad741bc1a7266913bcb8b8348d6e401c95bJean Chalard 240ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka public boolean isSuggestionsEnabledPerUserSettings() { 241ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka return mSuggestionsEnabledPerUserSettings; 242d2736972598eda61a8e40a3d5b26156136e78d66Jean Chalard } 243d2736972598eda61a8e40a3d5b26156136e78d66Jean Chalard 2448ec36026c93d13c1118eda936ac12325e0085561Chieu Nguyen public boolean isPersonalizationEnabled() { 2458ec36026c93d13c1118eda936ac12325e0085561Chieu Nguyen return mUsePersonalizedDicts; 2468ec36026c93d13c1118eda936ac12325e0085561Chieu Nguyen } 2478ec36026c93d13c1118eda936ac12325e0085561Chieu Nguyen 248848331222ea15d928faa1dd9422f5efba6be5092Tadashi G. Takaoka public boolean isWordSeparator(final int code) { 249b90fa0fb2ce195cfaec878dea9702261290176c2Jean Chalard return mSpacingAndPunctuations.isWordSeparator(code); 2507a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard } 2517a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 252ae3b96b26ef86a9f342b4aeb2047abdaac5e57a5Jean Chalard public boolean isWordConnector(final int code) { 253b90fa0fb2ce195cfaec878dea9702261290176c2Jean Chalard return mSpacingAndPunctuations.isWordConnector(code); 2547a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard } 2557a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 256af5fbe70ac9eff6979f444c3d938d28a0ec76ebdJean Chalard public boolean isWordCodePoint(final int code) { 257281dbc397317707dfb55e4508815f8e906b66bb4Jean Chalard return Character.isLetter(code) || isWordConnector(code) 258281dbc397317707dfb55e4508815f8e906b66bb4Jean Chalard || Character.COMBINING_SPACING_MARK == Character.getType(code); 259af5fbe70ac9eff6979f444c3d938d28a0ec76ebdJean Chalard } 260af5fbe70ac9eff6979f444c3d938d28a0ec76ebdJean Chalard 261ae3b96b26ef86a9f342b4aeb2047abdaac5e57a5Jean Chalard public boolean isUsuallyPrecededBySpace(final int code) { 262b90fa0fb2ce195cfaec878dea9702261290176c2Jean Chalard return mSpacingAndPunctuations.isUsuallyPrecededBySpace(code); 2637a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard } 2647a16a061e622539e54d7d649dcb8d4965aea575aJean Chalard 265ae3b96b26ef86a9f342b4aeb2047abdaac5e57a5Jean Chalard public boolean isUsuallyFollowedBySpace(final int code) { 266b90fa0fb2ce195cfaec878dea9702261290176c2Jean Chalard return mSpacingAndPunctuations.isUsuallyFollowedBySpace(code); 26700ed3be95cee472685bcba1ea861ac75c61db690Jean Chalard } 26800ed3be95cee472685bcba1ea861ac75c61db690Jean Chalard 269ec60d60078b4837b657dc207bdbde1748749199eJean Chalard public boolean shouldInsertSpacesAutomatically() { 270ec60d60078b4837b657dc207bdbde1748749199eJean Chalard return mInputAttributes.mShouldInsertSpacesAutomatically; 271ec60d60078b4837b657dc207bdbde1748749199eJean Chalard } 272ec60d60078b4837b657dc207bdbde1748749199eJean Chalard 2736fbbab3b8442ad010c53dc53a09535f7b0ef0323Tadashi G. Takaoka public boolean isLanguageSwitchKeyEnabled() { 2741a4aa7e307e6090011449446c2c6770b6a0cc987Tadashi G. Takaoka if (!mShowsLanguageSwitchKey) { 27581d4e3cd66a9388c47c7dba55240ddf849b31934Tadashi G. Takaoka return false; 27681d4e3cd66a9388c47c7dba55240ddf849b31934Tadashi G. Takaoka } 2776fbbab3b8442ad010c53dc53a09535f7b0ef0323Tadashi G. Takaoka final RichInputMethodManager imm = RichInputMethodManager.getInstance(); 27881d4e3cd66a9388c47c7dba55240ddf849b31934Tadashi G. Takaoka if (mIncludesOtherImesInLanguageSwitchList) { 2796fbbab3b8442ad010c53dc53a09535f7b0ef0323Tadashi G. Takaoka return imm.hasMultipleEnabledIMEsOrSubtypes(false /* include aux subtypes */); 28081d4e3cd66a9388c47c7dba55240ddf849b31934Tadashi G. Takaoka } 2815f00fe09e9a611b647592188316e5999465df4d3Tadashi G. Takaoka return imm.hasMultipleEnabledSubtypesInThisIme(false /* include aux subtypes */); 28281d4e3cd66a9388c47c7dba55240ddf849b31934Tadashi G. Takaoka } 28381d4e3cd66a9388c47c7dba55240ddf849b31934Tadashi G. Takaoka 284d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka public boolean isSameInputType(final EditorInfo editorInfo) { 285d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka return mInputAttributes.isSameInputType(editorInfo); 2869751a626ec9b2e771afa5b3757e8f8498a328683Tadashi G. Takaoka } 2879751a626ec9b2e771afa5b3757e8f8498a328683Tadashi G. Takaoka 288aa161eb371d8042ef4c1f9207648b3aeacb65e4eJean Chalard public boolean hasSameOrientation(final Configuration configuration) { 289aa161eb371d8042ef4c1f9207648b3aeacb65e4eJean Chalard return mDisplayOrientation == configuration.orientation; 290aa161eb371d8042ef4c1f9207648b3aeacb65e4eJean Chalard } 291aa161eb371d8042ef4c1f9207648b3aeacb65e4eJean Chalard 2921404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard public boolean isBeforeJellyBean() { 29392392b21f2003e76a309d81b12ace2839d4783f9Jean Chalard final AppWorkaroundsUtils appWorkaroundUtils 29492392b21f2003e76a309d81b12ace2839d4783f9Jean Chalard = mAppWorkarounds.get(null, TIMEOUT_TO_GET_TARGET_PACKAGE); 29592392b21f2003e76a309d81b12ace2839d4783f9Jean Chalard return null == appWorkaroundUtils ? false : appWorkaroundUtils.isBeforeJellyBean(); 2961404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard } 2971404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard 2981404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard public boolean isBrokenByRecorrection() { 29992392b21f2003e76a309d81b12ace2839d4783f9Jean Chalard final AppWorkaroundsUtils appWorkaroundUtils 30092392b21f2003e76a309d81b12ace2839d4783f9Jean Chalard = mAppWorkarounds.get(null, TIMEOUT_TO_GET_TARGET_PACKAGE); 301605caf1b5fca04f348fae92f4db1a8f10ac7df92Keisuke Kuroyanagi return null == appWorkaroundUtils ? false : appWorkaroundUtils.isBrokenByRecorrection(); 3021404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard } 3031404c1af850236da4fe4ed3825b70cb228a1da5bJean Chalard 304ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka private static final String SUGGESTIONS_VISIBILITY_HIDE_VALUE_OBSOLETE = "2"; 305ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka 306ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka private static boolean readSuggestionsEnabled(final SharedPreferences prefs) { 307ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka if (prefs.contains(Settings.PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE)) { 308ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka final boolean alwaysHide = SUGGESTIONS_VISIBILITY_HIDE_VALUE_OBSOLETE.equals( 309ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka prefs.getString(Settings.PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE, null)); 310ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka prefs.edit() 311ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka .remove(Settings.PREF_SHOW_SUGGESTIONS_SETTING_OBSOLETE) 312ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka .putBoolean(Settings.PREF_SHOW_SUGGESTIONS, !alwaysHide) 313ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka .apply(); 314ed432962175a6f783428bbdcd7168d20097ec05dJean Chalard } 315ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka return prefs.getBoolean(Settings.PREF_SHOW_SUGGESTIONS, true); 316ed432962175a6f783428bbdcd7168d20097ec05dJean Chalard } 3170fe3611bee5095e7bd0fff2d0fdf8d5a13379132Jean Chalard 3185455179b54eb8230577f518db082796a3055685aDan Zivkovic private static boolean readBigramPredictionEnabled(final SharedPreferences prefs, 3195455179b54eb8230577f518db082796a3055685aDan Zivkovic final Resources res) { 3205455179b54eb8230577f518db082796a3055685aDan Zivkovic return prefs.getBoolean(Settings.PREF_BIGRAM_PREDICTIONS, res.getBoolean( 3215455179b54eb8230577f518db082796a3055685aDan Zivkovic R.bool.config_default_next_word_prediction)); 3225455179b54eb8230577f518db082796a3055685aDan Zivkovic } 3235455179b54eb8230577f518db082796a3055685aDan Zivkovic 324d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka private static float readAutoCorrectionThreshold(final Resources res, 325d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka final String currentAutoCorrectionSetting) { 326d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka final String[] autoCorrectionThresholdValues = res.getStringArray( 327d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka R.array.auto_correction_threshold_values); 328d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka // When autoCorrectionThreshold is greater than 1.0, it's like auto correction is off. 329fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa final float autoCorrectionThreshold; 330d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka try { 331d2c6151d4d78e5e7d09080efd14e0a8f5933afb9Tadashi G. Takaoka final int arrayIndex = Integer.parseInt(currentAutoCorrectionSetting); 332d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka if (arrayIndex >= 0 && arrayIndex < autoCorrectionThresholdValues.length) { 33370f2762e285fe85676de4270edee97de54674879Satoshi Kataoka final String val = autoCorrectionThresholdValues[arrayIndex]; 334fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa if (FLOAT_MAX_VALUE_MARKER_STRING.equals(val)) { 335fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa autoCorrectionThreshold = Float.MAX_VALUE; 336fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa } else if (FLOAT_NEGATIVE_INFINITY_MARKER_STRING.equals(val)) { 33770f2762e285fe85676de4270edee97de54674879Satoshi Kataoka autoCorrectionThreshold = Float.NEGATIVE_INFINITY; 33870f2762e285fe85676de4270edee97de54674879Satoshi Kataoka } else { 33970f2762e285fe85676de4270edee97de54674879Satoshi Kataoka autoCorrectionThreshold = Float.parseFloat(val); 34070f2762e285fe85676de4270edee97de54674879Satoshi Kataoka } 341fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa } else { 342fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa autoCorrectionThreshold = Float.MAX_VALUE; 343d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka } 344fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa } catch (final NumberFormatException e) { 345d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka // Whenever the threshold settings are correct, never come here. 346d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka Log.w(TAG, "Cannot load auto correction threshold setting." 347d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka + " currentAutoCorrectionSetting: " + currentAutoCorrectionSetting 348d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka + ", autoCorrectionThresholdValues: " 34970f2762e285fe85676de4270edee97de54674879Satoshi Kataoka + Arrays.toString(autoCorrectionThresholdValues), e); 350fba1bd0ec4198fc227bffcdb9c90bb7a36baa5c8Ken Wakasa return Float.MAX_VALUE; 351d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka } 352d3b0ecec22cda883150851dced32c1eda2910a66Tadashi G. Takaoka return autoCorrectionThreshold; 353e234aed4288efd7b4336f3755a958c25a1540b98Jean Chalard } 35421a89c1137cba469ad664a63259be370d1650a56Satoshi Kataoka 3552fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa private static boolean needsToShowVoiceInputKey(final SharedPreferences prefs, 3562fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final Resources res) { 357fcaf47f007ebbaba4e65e2b7c0ec0e2983990bffTadashi G. Takaoka // Migrate preference from {@link Settings#PREF_VOICE_MODE_OBSOLETE} to 358fcaf47f007ebbaba4e65e2b7c0ec0e2983990bffTadashi G. Takaoka // {@link Settings#PREF_VOICE_INPUT_KEY}. 359fcaf47f007ebbaba4e65e2b7c0ec0e2983990bffTadashi G. Takaoka if (prefs.contains(Settings.PREF_VOICE_MODE_OBSOLETE)) { 3602fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final String voiceModeMain = res.getString(R.string.voice_mode_main); 3612fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final String voiceMode = prefs.getString( 3622fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa Settings.PREF_VOICE_MODE_OBSOLETE, voiceModeMain); 3632fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final boolean shouldShowVoiceInputKey = voiceModeMain.equals(voiceMode); 364fcaf47f007ebbaba4e65e2b7c0ec0e2983990bffTadashi G. Takaoka prefs.edit() 365fcaf47f007ebbaba4e65e2b7c0ec0e2983990bffTadashi G. Takaoka .putBoolean(Settings.PREF_VOICE_INPUT_KEY, shouldShowVoiceInputKey) 366fcaf47f007ebbaba4e65e2b7c0ec0e2983990bffTadashi G. Takaoka // Remove the obsolete preference if exists. 367fcaf47f007ebbaba4e65e2b7c0ec0e2983990bffTadashi G. Takaoka .remove(Settings.PREF_VOICE_MODE_OBSOLETE) 368fcaf47f007ebbaba4e65e2b7c0ec0e2983990bffTadashi G. Takaoka .apply(); 36921a89c1137cba469ad664a63259be370d1650a56Satoshi Kataoka } 37021a89c1137cba469ad664a63259be370d1650a56Satoshi Kataoka return prefs.getBoolean(Settings.PREF_VOICE_INPUT_KEY, true); 37121a89c1137cba469ad664a63259be370d1650a56Satoshi Kataoka } 372367a35d377076e387a542560f033434959d72d1dJean Chalard 373367a35d377076e387a542560f033434959d72d1dJean Chalard public String dump() { 374367a35d377076e387a542560f033434959d72d1dJean Chalard final StringBuilder sb = new StringBuilder("Current settings :"); 375367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mSpacingAndPunctuations = "); 376367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mSpacingAndPunctuations.dump()); 377a61b7245b030395451b4c42ec218a946aa95e030Yohei Yukawa sb.append("\n mDelayInMillisecondsToUpdateOldSuggestions = "); 378a61b7245b030395451b4c42ec218a946aa95e030Yohei Yukawa sb.append("" + mDelayInMillisecondsToUpdateOldSuggestions); 379367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mAutoCap = "); 380367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mAutoCap); 381367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mVibrateOn = "); 382367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mVibrateOn); 383367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mSoundOn = "); 384367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mSoundOn); 385367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mKeyPreviewPopupOn = "); 386367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mKeyPreviewPopupOn); 387367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mShowsVoiceInputKey = "); 388367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mShowsVoiceInputKey); 389367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mIncludesOtherImesInLanguageSwitchList = "); 390367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mIncludesOtherImesInLanguageSwitchList); 391367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mShowsLanguageSwitchKey = "); 392367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mShowsLanguageSwitchKey); 393367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mUseContactsDict = "); 394367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mUseContactsDict); 395367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mUsePersonalizedDicts = "); 396367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mUsePersonalizedDicts); 397367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mUseDoubleSpacePeriod = "); 398367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mUseDoubleSpacePeriod); 399367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mBlockPotentiallyOffensive = "); 400367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mBlockPotentiallyOffensive); 4015455179b54eb8230577f518db082796a3055685aDan Zivkovic sb.append("\n mBigramPredictionEnabled = "); 4025455179b54eb8230577f518db082796a3055685aDan Zivkovic sb.append("" + mBigramPredictionEnabled); 403367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mGestureInputEnabled = "); 404367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mGestureInputEnabled); 405367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mGestureTrailEnabled = "); 406367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mGestureTrailEnabled); 407367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mGestureFloatingPreviewTextEnabled = "); 408367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mGestureFloatingPreviewTextEnabled); 409367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mSlidingKeyInputPreviewEnabled = "); 410367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mSlidingKeyInputPreviewEnabled); 411367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mKeyLongpressTimeout = "); 412367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mKeyLongpressTimeout); 413367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mLocale = "); 414367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mLocale); 415367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mInputAttributes = "); 416367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mInputAttributes); 417367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mKeypressVibrationDuration = "); 418367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mKeypressVibrationDuration); 419367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mKeypressSoundVolume = "); 420367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mKeypressSoundVolume); 421367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mKeyPreviewPopupDismissDelay = "); 422367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mKeyPreviewPopupDismissDelay); 423367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mAutoCorrectEnabled = "); 424367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mAutoCorrectEnabled); 425367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mAutoCorrectionThreshold = "); 426367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mAutoCorrectionThreshold); 427ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka sb.append("\n mAutoCorrectionEnabledPerUserSettings = "); 428ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka sb.append("" + mAutoCorrectionEnabledPerUserSettings); 429ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka sb.append("\n mSuggestionsEnabledPerUserSettings = "); 430ab661e3ef886a36b02fe094864ae4be6a3260f71Tadashi G. Takaoka sb.append("" + mSuggestionsEnabledPerUserSettings); 431367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mDisplayOrientation = "); 432367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mDisplayOrientation); 433367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mAppWorkarounds = "); 434367a35d377076e387a542560f033434959d72d1dJean Chalard final AppWorkaroundsUtils awu = mAppWorkarounds.get(null, 0); 435367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + (null == awu ? "null" : awu.toString())); 436367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mIsInternal = "); 437367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mIsInternal); 438367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mKeyPreviewShowUpDuration = "); 439367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mKeyPreviewShowUpDuration); 440367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("\n mKeyPreviewDismissDuration = "); 441367a35d377076e387a542560f033434959d72d1dJean Chalard sb.append("" + mKeyPreviewDismissDuration); 442ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka sb.append("\n mKeyPreviewShowUpStartScaleX = "); 443ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka sb.append("" + mKeyPreviewShowUpStartXScale); 444ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka sb.append("\n mKeyPreviewShowUpStartScaleY = "); 445ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka sb.append("" + mKeyPreviewShowUpStartYScale); 446ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka sb.append("\n mKeyPreviewDismissEndScaleX = "); 447ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka sb.append("" + mKeyPreviewDismissEndXScale); 448ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka sb.append("\n mKeyPreviewDismissEndScaleY = "); 449ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka sb.append("" + mKeyPreviewDismissEndYScale); 450367a35d377076e387a542560f033434959d72d1dJean Chalard return sb.toString(); 451367a35d377076e387a542560f033434959d72d1dJean Chalard } 452ed432962175a6f783428bbdcd7168d20097ec05dJean Chalard} 453