199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka/* 299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * Copyright (C) 2014 The Android Open Source Project 399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * 499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * you may not use this file except in compliance with the License. 699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * You may obtain a copy of the License at 799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * 899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * 1099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 1199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 1299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * See the License for the specific language governing permissions and 1499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * limitations under the License. 1599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka */ 1699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 1799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokapackage com.android.inputmethod.latin.settings; 1899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 1999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport android.content.Context; 2099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport android.content.Intent; 2199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport android.content.SharedPreferences; 2299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport android.content.res.Resources; 2399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport android.os.Bundle; 2499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport android.os.Process; 2599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport android.preference.Preference; 2699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport android.preference.Preference.OnPreferenceClickListener; 2799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport android.preference.PreferenceGroup; 2899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport android.preference.TwoStatePreference; 2999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 3099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport com.android.inputmethod.latin.DictionaryDumpBroadcastReceiver; 31ab6f3b36d0303bc4cc1ad0fbbc72a64ca2df0eb2Mario Tanevimport com.android.inputmethod.latin.DictionaryFacilitatorImpl; 3299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport com.android.inputmethod.latin.R; 3399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport com.android.inputmethod.latin.utils.ApplicationUtils; 3499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport com.android.inputmethod.latin.utils.ResourceUtils; 3599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 3699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokaimport java.util.Locale; 3799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 3899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka/** 3999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * "Debug mode" settings sub screen. 4099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * 4199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka * This settings sub screen handles a several preference options for debugging. 4299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka */ 4399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaokapublic final class DebugSettingsFragment extends SubScreenFragment 4499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka implements OnPreferenceClickListener { 4599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private static final String PREF_KEY_DUMP_DICTS = "pref_key_dump_dictionaries"; 4699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private static final String PREF_KEY_DUMP_DICT_PREFIX = "pref_key_dump_dictionaries"; 4799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 4899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private boolean mServiceNeedsRestart = false; 4999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private TwoStatePreference mDebugMode; 5099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 5199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 5299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public void onCreate(Bundle icicle) { 5399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka super.onCreate(icicle); 5499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka addPreferencesFromResource(R.xml.prefs_screen_debug); 5599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 566fb586a527e7ffe5da187c8b345cdf897b8481c7Tadashi G. Takaoka if (!Settings.SHOULD_SHOW_LXX_SUGGESTION_UI) { 576fb586a527e7ffe5da187c8b345cdf897b8481c7Tadashi G. Takaoka removePreference(DebugSettings.PREF_SHOULD_SHOW_LXX_SUGGESTION_UI); 58c225d2e29cfd85fb416952daa4bcebd4df48b57cTadashi G. Takaoka } 59c225d2e29cfd85fb416952daa4bcebd4df48b57cTadashi G. Takaoka 6099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final PreferenceGroup dictDumpPreferenceGroup = 6199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka (PreferenceGroup)findPreference(PREF_KEY_DUMP_DICTS); 62ab6f3b36d0303bc4cc1ad0fbbc72a64ca2df0eb2Mario Tanev for (final String dictName : DictionaryFacilitatorImpl.DICT_TYPE_TO_CLASS.keySet()) { 6399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final Preference pref = new DictDumpPreference(getActivity(), dictName); 6499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka pref.setOnPreferenceClickListener(this); 6599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka dictDumpPreferenceGroup.addPreference(pref); 6699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 6799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final Resources res = getResources(); 6899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka setupKeyPreviewAnimationDuration(DebugSettings.PREF_KEY_PREVIEW_SHOW_UP_DURATION, 6999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka res.getInteger(R.integer.config_key_preview_show_up_duration)); 7099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka setupKeyPreviewAnimationDuration(DebugSettings.PREF_KEY_PREVIEW_DISMISS_DURATION, 7199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka res.getInteger(R.integer.config_key_preview_dismiss_duration)); 72ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka final float defaultKeyPreviewShowUpStartScale = ResourceUtils.getFloatFromFraction( 73ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka res, R.fraction.config_key_preview_show_up_start_scale); 74ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka final float defaultKeyPreviewDismissEndScale = ResourceUtils.getFloatFromFraction( 75ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka res, R.fraction.config_key_preview_dismiss_end_scale); 76ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka setupKeyPreviewAnimationScale(DebugSettings.PREF_KEY_PREVIEW_SHOW_UP_START_X_SCALE, 77ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka defaultKeyPreviewShowUpStartScale); 78ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka setupKeyPreviewAnimationScale(DebugSettings.PREF_KEY_PREVIEW_SHOW_UP_START_Y_SCALE, 79ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka defaultKeyPreviewShowUpStartScale); 80ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka setupKeyPreviewAnimationScale(DebugSettings.PREF_KEY_PREVIEW_DISMISS_END_X_SCALE, 81ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka defaultKeyPreviewDismissEndScale); 82ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka setupKeyPreviewAnimationScale(DebugSettings.PREF_KEY_PREVIEW_DISMISS_END_Y_SCALE, 83ac88f3d8459e17236654aa38debea749ecb631d1Tadashi G. Takaoka defaultKeyPreviewDismissEndScale); 84be819dbe2b7a5c418530a2fa1182766a4d31d6d5Tadashi G. Takaoka setupKeyboardHeight( 85bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang DebugSettings.PREF_KEYBOARD_HEIGHT_SCALE, SettingsValues.DEFAULT_SIZE_SCALE); 8699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 8799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka mServiceNeedsRestart = false; 8899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka mDebugMode = (TwoStatePreference) findPreference(DebugSettings.PREF_DEBUG_MODE); 8999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka updateDebugMode(); 9099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 9199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 9299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private static class DictDumpPreference extends Preference { 9399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public final String mDictName; 9499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 9599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public DictDumpPreference(final Context context, final String dictName) { 9699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka super(context); 9799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka setKey(PREF_KEY_DUMP_DICT_PREFIX + dictName); 9899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka setTitle("Dump " + dictName + " dictionary"); 9999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka mDictName = dictName; 10099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 10199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 10299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 10399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 10499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public boolean onPreferenceClick(final Preference pref) { 10599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final Context context = getActivity(); 10699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka if (pref instanceof DictDumpPreference) { 10799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final DictDumpPreference dictDumpPref = (DictDumpPreference)pref; 10899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final String dictName = dictDumpPref.mDictName; 10999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final Intent intent = new Intent( 11099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka DictionaryDumpBroadcastReceiver.DICTIONARY_DUMP_INTENT_ACTION); 11199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka intent.putExtra(DictionaryDumpBroadcastReceiver.DICTIONARY_NAME_KEY, dictName); 11299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka context.sendBroadcast(intent); 11399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return true; 11499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 11599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return true; 11699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 11799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 11899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 11999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public void onStop() { 12099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka super.onStop(); 12199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka if (mServiceNeedsRestart) { 12299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka Process.killProcess(Process.myPid()); 12399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 12499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 12599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 12699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 12799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) { 12899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka if (key.equals(DebugSettings.PREF_DEBUG_MODE) && mDebugMode != null) { 12999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka mDebugMode.setChecked(prefs.getBoolean(DebugSettings.PREF_DEBUG_MODE, false)); 13099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka updateDebugMode(); 13199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka mServiceNeedsRestart = true; 13299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return; 13399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 134f7e01e866ffa89b4dd7e66c471ed9fc275a637a2Tadashi G. Takaoka if (key.equals(DebugSettings.PREF_FORCE_NON_DISTINCT_MULTITOUCH)) { 13599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka mServiceNeedsRestart = true; 13699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return; 13799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 13899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 13999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 14099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private void updateDebugMode() { 14199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka boolean isDebugMode = mDebugMode.isChecked(); 14299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final String version = getString( 14399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka R.string.version_text, ApplicationUtils.getVersionName(getActivity())); 14499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka if (!isDebugMode) { 14599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka mDebugMode.setTitle(version); 14699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka mDebugMode.setSummary(null); 14799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } else { 14899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka mDebugMode.setTitle(getString(R.string.prefs_debug_mode)); 14999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka mDebugMode.setSummary(version); 15099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 15199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 15299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 15399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private void setupKeyPreviewAnimationScale(final String prefKey, final float defaultValue) { 15499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final SharedPreferences prefs = getSharedPreferences(); 15599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final Resources res = getResources(); 15699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final SeekBarDialogPreference pref = (SeekBarDialogPreference)findPreference(prefKey); 15799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka if (pref == null) { 15899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return; 15999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 16099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka pref.setInterface(new SeekBarDialogPreference.ValueProxy() { 16199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private static final float PERCENTAGE_FLOAT = 100.0f; 16299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 16399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private float getValueFromPercentage(final int percentage) { 16499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return percentage / PERCENTAGE_FLOAT; 16599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 16699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 16799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private int getPercentageFromValue(final float floatValue) { 16899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return (int)(floatValue * PERCENTAGE_FLOAT); 16999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 17099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 17199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 17299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public void writeValue(final int value, final String key) { 17399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka prefs.edit().putFloat(key, getValueFromPercentage(value)).apply(); 17499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 17599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 17699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 17799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public void writeDefaultValue(final String key) { 17899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka prefs.edit().remove(key).apply(); 17999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 18099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 18199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 18299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public int readValue(final String key) { 18399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return getPercentageFromValue( 18499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka Settings.readKeyPreviewAnimationScale(prefs, key, defaultValue)); 18599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 18699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 18799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 18899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public int readDefaultValue(final String key) { 18999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return getPercentageFromValue(defaultValue); 19099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 19199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 19299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 19399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public String getValueText(final int value) { 19499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka if (value < 0) { 19599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return res.getString(R.string.settings_system_default); 19699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 19799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return String.format(Locale.ROOT, "%d%%", value); 19899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 19999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 20099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 20199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public void feedbackValue(final int value) {} 20299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka }); 20399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 20499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 20599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka private void setupKeyPreviewAnimationDuration(final String prefKey, final int defaultValue) { 20699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final SharedPreferences prefs = getSharedPreferences(); 20799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final Resources res = getResources(); 20899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka final SeekBarDialogPreference pref = (SeekBarDialogPreference)findPreference(prefKey); 20999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka if (pref == null) { 21099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return; 21199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 21299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka pref.setInterface(new SeekBarDialogPreference.ValueProxy() { 21399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 21499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public void writeValue(final int value, final String key) { 21599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka prefs.edit().putInt(key, value).apply(); 21699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 21799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 21899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 21999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public void writeDefaultValue(final String key) { 22099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka prefs.edit().remove(key).apply(); 22199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 22299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 22399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 22499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public int readValue(final String key) { 22599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return Settings.readKeyPreviewAnimationDuration(prefs, key, defaultValue); 22699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 22799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 22899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 22999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public int readDefaultValue(final String key) { 23099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return defaultValue; 23199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 23299295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 23399295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 23499295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public String getValueText(final int value) { 23599295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka return res.getString(R.string.abbreviation_unit_milliseconds, value); 23699295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 23799295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka 23899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka @Override 23999295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka public void feedbackValue(final int value) {} 24099295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka }); 24199295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka } 242bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang 243be819dbe2b7a5c418530a2fa1182766a4d31d6d5Tadashi G. Takaoka private void setupKeyboardHeight(final String prefKey, final float defaultValue) { 244bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang final SharedPreferences prefs = getSharedPreferences(); 245bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang final SeekBarDialogPreference pref = (SeekBarDialogPreference)findPreference(prefKey); 246bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang if (pref == null) { 247bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang return; 248bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang } 249bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang pref.setInterface(new SeekBarDialogPreference.ValueProxy() { 250bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang private static final float PERCENTAGE_FLOAT = 100.0f; 251bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang private float getValueFromPercentage(final int percentage) { 252bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang return percentage / PERCENTAGE_FLOAT; 253bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang } 254bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang 255bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang private int getPercentageFromValue(final float floatValue) { 256bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang return (int)(floatValue * PERCENTAGE_FLOAT); 257bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang } 258bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang 259bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang @Override 260bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang public void writeValue(final int value, final String key) { 261bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang prefs.edit().putFloat(key, getValueFromPercentage(value)).apply(); 262bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang } 263bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang 264bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang @Override 265bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang public void writeDefaultValue(final String key) { 266bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang prefs.edit().remove(key).apply(); 267bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang } 268bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang 269bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang @Override 270bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang public int readValue(final String key) { 271be819dbe2b7a5c418530a2fa1182766a4d31d6d5Tadashi G. Takaoka return getPercentageFromValue(Settings.readKeyboardHeight(prefs, defaultValue)); 272bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang } 273bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang 274bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang @Override 275bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang public int readDefaultValue(final String key) { 276bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang return getPercentageFromValue(defaultValue); 277bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang } 278bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang 279bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang @Override 280bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang public String getValueText(final int value) { 281bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang return String.format(Locale.ROOT, "%d%%", value); 282bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang } 283bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang 284bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang @Override 285bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang public void feedbackValue(final int value) {} 286bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang }); 287bb9400aebc4cb0291b4f0208ecbc9ddc01dc79e1Andy Wang } 28899295c8c5fe20509ef9fbd701e6c25d83d5166dfTadashi G. Takaoka} 289