19bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka/* 29bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * Copyright (C) 2014 The Android Open Source Project 39bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * 49bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 59bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * you may not use this file except in compliance with the License. 69bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * You may obtain a copy of the License at 79bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * 89bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 99bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * 109bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 119bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 129bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * See the License for the specific language governing permissions and 149bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * limitations under the License. 159bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka */ 169bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 179bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokapackage com.android.inputmethod.latin.settings; 189bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 199bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokaimport android.content.Context; 209bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokaimport android.content.SharedPreferences; 219bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokaimport android.content.res.Resources; 229bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokaimport android.media.AudioManager; 239bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokaimport android.os.Bundle; 249bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokaimport android.preference.ListPreference; 259bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokaimport android.preference.Preference; 269bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 279bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokaimport com.android.inputmethod.latin.AudioAndHapticFeedbackManager; 289bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokaimport com.android.inputmethod.latin.R; 29767c0bf71b9c0af7f8451d7d355f6efad21a6e5bChieu Nguyenimport com.android.inputmethod.latin.SystemBroadcastReceiver; 309bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokaimport com.android.inputmethod.latin.define.ProductionFlags; 319bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 329bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka/** 339bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * "Advanced" settings sub screen. 349bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * 359bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * This settings sub screen handles the following advanced preferences. 369bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * - Key popup dismiss delay 379bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * - Keypress vibration duration 389bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * - Keypress sound volume 399bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * - Show app icon 409bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * - Improve keyboard 419bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka * - Debug settings 429bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka */ 439bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaokapublic final class AdvancedSettingsFragment extends SubScreenFragment { 449bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 459bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public void onCreate(final Bundle icicle) { 469bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka super.onCreate(icicle); 479bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka addPreferencesFromResource(R.xml.prefs_screen_advanced); 489bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 499bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final Resources res = getResources(); 509bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final Context context = getActivity(); 519bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 529bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka // When we are called from the Settings application but we are not already running, some 539bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka // singleton and utility classes may not have been initialized. We have to call 549bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka // initialization method of these classes here. See {@link LatinIME#onCreate()}. 559bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka AudioAndHapticFeedbackManager.init(context); 569bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 579bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final SharedPreferences prefs = getPreferenceManager().getSharedPreferences(); 589bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 599bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka if (!Settings.isInternal(prefs)) { 609bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka removePreference(Settings.SCREEN_DEBUG); 619bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 629bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 639bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka if (!AudioAndHapticFeedbackManager.getInstance().hasVibrator()) { 649bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka removePreference(Settings.PREF_VIBRATION_DURATION_SETTINGS); 659bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 669bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 679bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka // TODO: consolidate key preview dismiss delay with the key preview animation parameters. 689bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka if (!Settings.readFromBuildConfigIfToShowKeyPreviewPopupOption(res)) { 699bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka removePreference(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY); 709bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } else { 719bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka // TODO: Cleanup this setup. 729bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final ListPreference keyPreviewPopupDismissDelay = 739bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka (ListPreference) findPreference(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY); 749bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final String popupDismissDelayDefaultValue = Integer.toString(res.getInteger( 759bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka R.integer.config_key_preview_linger_timeout)); 769bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka keyPreviewPopupDismissDelay.setEntries(new String[] { 779bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka res.getString(R.string.key_preview_popup_dismiss_no_delay), 789bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka res.getString(R.string.key_preview_popup_dismiss_default_delay), 799bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka }); 809bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka keyPreviewPopupDismissDelay.setEntryValues(new String[] { 819bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka "0", 829bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka popupDismissDelayDefaultValue 839bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka }); 849bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka if (null == keyPreviewPopupDismissDelay.getValue()) { 859bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka keyPreviewPopupDismissDelay.setValue(popupDismissDelayDefaultValue); 869bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 879bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka keyPreviewPopupDismissDelay.setEnabled( 889bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka Settings.readKeyPreviewPopupEnabled(prefs, res)); 899bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 909bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 919bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka setupKeypressVibrationDurationSettings(); 929bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka setupKeypressSoundVolumeSettings(); 93ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka setupKeyLongpressTimeoutSettings(); 949bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka refreshEnablingsOfKeypressSoundAndVibrationSettings(); 959bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 969bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 979bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 989bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public void onResume() { 999bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka super.onResume(); 1009bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final SharedPreferences prefs = getPreferenceManager().getSharedPreferences(); 1019bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka updateListPreferenceSummaryToCurrentValue(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY); 1029bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1039bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1049bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 1059bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) { 1069bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final Resources res = getResources(); 1079bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka if (key.equals(Settings.PREF_POPUP_ON)) { 1089bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka setPreferenceEnabled(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY, 1099bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka Settings.readKeyPreviewPopupEnabled(prefs, res)); 110767c0bf71b9c0af7f8451d7d355f6efad21a6e5bChieu Nguyen } else if (key.equals(Settings.PREF_SHOW_SETUP_WIZARD_ICON)) { 111767c0bf71b9c0af7f8451d7d355f6efad21a6e5bChieu Nguyen SystemBroadcastReceiver.toggleAppIcon(getActivity()); 1129bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1139bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka updateListPreferenceSummaryToCurrentValue(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY); 1149bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka refreshEnablingsOfKeypressSoundAndVibrationSettings(); 1159bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1169bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1179bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka private void refreshEnablingsOfKeypressSoundAndVibrationSettings() { 1189bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final SharedPreferences prefs = getSharedPreferences(); 1199bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final Resources res = getResources(); 1209bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka setPreferenceEnabled(Settings.PREF_VIBRATION_DURATION_SETTINGS, 1219bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka Settings.readVibrationEnabled(prefs, res)); 1229bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka setPreferenceEnabled(Settings.PREF_KEYPRESS_SOUND_VOLUME, 1239bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka Settings.readKeypressSoundEnabled(prefs, res)); 1249bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1259bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1269bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka private void setupKeypressVibrationDurationSettings() { 1279bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final SeekBarDialogPreference pref = (SeekBarDialogPreference)findPreference( 1289bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka Settings.PREF_VIBRATION_DURATION_SETTINGS); 1299bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka if (pref == null) { 1309bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return; 1319bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1329bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final SharedPreferences prefs = getSharedPreferences(); 1339bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final Resources res = getResources(); 1349bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka pref.setInterface(new SeekBarDialogPreference.ValueProxy() { 1359bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 1369bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public void writeValue(final int value, final String key) { 1379bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka prefs.edit().putInt(key, value).apply(); 1389bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1399bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1409bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 1419bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public void writeDefaultValue(final String key) { 1429bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka prefs.edit().remove(key).apply(); 1439bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1449bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1459bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 1469bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public int readValue(final String key) { 1479bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return Settings.readKeypressVibrationDuration(prefs, res); 1489bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1499bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1509bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 1519bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public int readDefaultValue(final String key) { 1529bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return Settings.readDefaultKeypressVibrationDuration(res); 1539bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1549bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1559bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 1569bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public void feedbackValue(final int value) { 1579bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka AudioAndHapticFeedbackManager.getInstance().vibrate(value); 1589bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1599bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1609bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 1619bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public String getValueText(final int value) { 1629bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka if (value < 0) { 1639bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return res.getString(R.string.settings_system_default); 1649bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1659bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return res.getString(R.string.abbreviation_unit_milliseconds, value); 1669bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1679bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka }); 1689bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1699bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1709bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka private void setupKeypressSoundVolumeSettings() { 1719bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final SeekBarDialogPreference pref = (SeekBarDialogPreference)findPreference( 1729bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka Settings.PREF_KEYPRESS_SOUND_VOLUME); 1739bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka if (pref == null) { 1749bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return; 1759bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1769bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final SharedPreferences prefs = getSharedPreferences(); 1779bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final Resources res = getResources(); 1789bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka final AudioManager am = (AudioManager)getActivity().getSystemService(Context.AUDIO_SERVICE); 1799bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka pref.setInterface(new SeekBarDialogPreference.ValueProxy() { 1809bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka private static final float PERCENTAGE_FLOAT = 100.0f; 1819bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1829bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka private float getValueFromPercentage(final int percentage) { 1839bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return percentage / PERCENTAGE_FLOAT; 1849bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1859bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1869bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka private int getPercentageFromValue(final float floatValue) { 1879bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return (int)(floatValue * PERCENTAGE_FLOAT); 1889bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1899bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1909bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 1919bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public void writeValue(final int value, final String key) { 1929bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka prefs.edit().putFloat(key, getValueFromPercentage(value)).apply(); 1939bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1949bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 1959bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 1969bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public void writeDefaultValue(final String key) { 1979bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka prefs.edit().remove(key).apply(); 1989bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 1999bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 2009bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 2019bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public int readValue(final String key) { 2029bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return getPercentageFromValue(Settings.readKeypressSoundVolume(prefs, res)); 2039bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 2049bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 2059bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 2069bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public int readDefaultValue(final String key) { 2079bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return getPercentageFromValue(Settings.readDefaultKeypressSoundVolume(res)); 2089bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 2099bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 2109bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 2119bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public String getValueText(final int value) { 2129bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka if (value < 0) { 2139bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return res.getString(R.string.settings_system_default); 2149bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 2159bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka return Integer.toString(value); 2169bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 2179bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka 2189bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka @Override 2199bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka public void feedbackValue(final int value) { 2209bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka am.playSoundEffect( 2219bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka AudioManager.FX_KEYPRESS_STANDARD, getValueFromPercentage(value)); 2229bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 2239bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka }); 2249bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka } 225ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka 226ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka private void setupKeyLongpressTimeoutSettings() { 227ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka final SharedPreferences prefs = getSharedPreferences(); 228ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka final Resources res = getResources(); 229ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka final SeekBarDialogPreference pref = (SeekBarDialogPreference)findPreference( 230ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka Settings.PREF_KEY_LONGPRESS_TIMEOUT); 231ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka if (pref == null) { 232ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka return; 233ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka } 234ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka pref.setInterface(new SeekBarDialogPreference.ValueProxy() { 235ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka @Override 236ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka public void writeValue(final int value, final String key) { 237ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka prefs.edit().putInt(key, value).apply(); 238ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka } 239ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka 240ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka @Override 241ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka public void writeDefaultValue(final String key) { 242ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka prefs.edit().remove(key).apply(); 243ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka } 244ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka 245ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka @Override 246ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka public int readValue(final String key) { 247ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka return Settings.readKeyLongpressTimeout(prefs, res); 248ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka } 249ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka 250ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka @Override 251ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka public int readDefaultValue(final String key) { 252ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka return Settings.readDefaultKeyLongpressTimeout(res); 253ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka } 254ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka 255ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka @Override 256ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka public String getValueText(final int value) { 257ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka return res.getString(R.string.abbreviation_unit_milliseconds, value); 258ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka } 259ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka 260ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka @Override 261ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka public void feedbackValue(final int value) {} 262ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka }); 263ad2f695083ce8495f99ab52bfc6abf17e1e3b5ddTadashi G. Takaoka } 2649bdcb131602aa614db37d817d7fe1220ab6271b8Tadashi G. Takaoka} 265