// Path: app/src/main/java/rkr/simplekeyboard/inputmethod/latin/AudioAndHapticFeedbackManager.java
// public final class AudioAndHapticFeedbackManager {
//     private AudioManager mAudioManager;
//     private Vibrator mVibrator;
// 
//     private SettingsValues mSettingsValues;
//     private boolean mSoundOn;
// 
//     private static final AudioAndHapticFeedbackManager sInstance =
//             new AudioAndHapticFeedbackManager();
// 
//     public static AudioAndHapticFeedbackManager getInstance() {
//         return sInstance;
//     }
// 
//     private AudioAndHapticFeedbackManager() {
//         // Intentional empty constructor for singleton.
//     }
// 
//     public static void init(final Context context) {
//         sInstance.initInternal(context);
//     }
// 
//     private void initInternal(final Context context) {
//         mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
//         mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
//     }
// 
//     public boolean hasVibrator() {
//         return mVibrator != null && mVibrator.hasVibrator();
//     }
// 
//     public void vibrate(final long milliseconds) {
//         if (mVibrator == null) {
//             return;
//         }
//         mVibrator.vibrate(milliseconds);
//     }
// 
//     private boolean reevaluateIfSoundIsOn() {
//         if (mSettingsValues == null || !mSettingsValues.mSoundOn || mAudioManager == null) {
//             return false;
//         }
//         return mAudioManager.getRingerMode() == AudioManager.RINGER_MODE_NORMAL;
//     }
// 
//     public void performAudioFeedback(final int code) {
//         // if mAudioManager is null, we can't play a sound anyway, so return
//         if (mAudioManager == null) {
//             return;
//         }
//         if (!mSoundOn) {
//             return;
//         }
//         final int sound;
//         switch (code) {
//         case Constants.CODE_DELETE:
//             sound = AudioManager.FX_KEYPRESS_DELETE;
//             break;
//         case Constants.CODE_ENTER:
//             sound = AudioManager.FX_KEYPRESS_RETURN;
//             break;
//         case Constants.CODE_SPACE:
//             sound = AudioManager.FX_KEYPRESS_SPACEBAR;
//             break;
//         default:
//             sound = AudioManager.FX_KEYPRESS_STANDARD;
//             break;
//         }
//         mAudioManager.playSoundEffect(sound, mSettingsValues.mKeypressSoundVolume);
//     }
// 
//     public void performHapticFeedback(final View viewToPerformHapticFeedbackOn) {
//         if (!mSettingsValues.mVibrateOn) {
//             return;
//         }
//         if (mSettingsValues.mKeypressVibrationDuration >= 0) {
//             vibrate(mSettingsValues.mKeypressVibrationDuration);
//             return;
//         }
//         // Go ahead with the system default
//         if (viewToPerformHapticFeedbackOn != null) {
//             viewToPerformHapticFeedbackOn.performHapticFeedback(
//                     HapticFeedbackConstants.KEYBOARD_TAP,
//                     HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
//         }
//     }
// 
//     public void onSettingsChanged(final SettingsValues settingsValues) {
//         mSettingsValues = settingsValues;
//         mSoundOn = reevaluateIfSoundIsOn();
//     }
// 
//     public void onRingerModeChanged() {
//         mSoundOn = reevaluateIfSoundIsOn();
//     }
// }


import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.media.AudioManager;
import android.os.Bundle;
import rkr.simplekeyboard.inputmethod.R;
import rkr.simplekeyboard.inputmethod.latin.AudioAndHapticFeedbackManager;
/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package rkr.simplekeyboard.inputmethod.latin.settings;



/**
 * "Preferences" settings sub screen.
 *
 * This settings sub screen handles the following input preferences.
 * - Vibrate on keypress
 * - Keypress vibration duration
 * - Sound on keypress
 * - Keypress sound volume
 * - Popup on keypress
 * - Key long press delay
 */
public final class KeyPressSettingsFragment extends SubScreenFragment {
    @Override
    public void onCreate(final Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.prefs_screen_key_press);

        final Context context = getActivity();

        // When we are called from the Settings application but we are not already running, some
        // singleton and utility classes may not have been initialized.  We have to call
        // initialization method of these classes here. See {@link LatinIME#onCreate()}.
// Path: app/src/main/java/rkr/simplekeyboard/inputmethod/latin/AudioAndHapticFeedbackManager.java
// public final class AudioAndHapticFeedbackManager {
//     private AudioManager mAudioManager;
//     private Vibrator mVibrator;
// 
//     private SettingsValues mSettingsValues;
//     private boolean mSoundOn;
// 
//     private static final AudioAndHapticFeedbackManager sInstance =
//             new AudioAndHapticFeedbackManager();
// 
//     public static AudioAndHapticFeedbackManager getInstance() {
//         return sInstance;
//     }
// 
//     private AudioAndHapticFeedbackManager() {
//         // Intentional empty constructor for singleton.
//     }
// 
//     public static void init(final Context context) {
//         sInstance.initInternal(context);
//     }
// 
//     private void initInternal(final Context context) {
//         mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
//         mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
//     }
// 
//     public boolean hasVibrator() {
//         return mVibrator != null && mVibrator.hasVibrator();
//     }
// 
//     public void vibrate(final long milliseconds) {
//         if (mVibrator == null) {
//             return;
//         }
//         mVibrator.vibrate(milliseconds);
//     }
// 
//     private boolean reevaluateIfSoundIsOn() {
//         if (mSettingsValues == null || !mSettingsValues.mSoundOn || mAudioManager == null) {
//             return false;
//         }
//         return mAudioManager.getRingerMode() == AudioManager.RINGER_MODE_NORMAL;
//     }
// 
//     public void performAudioFeedback(final int code) {
//         // if mAudioManager is null, we can't play a sound anyway, so return
//         if (mAudioManager == null) {
//             return;
//         }
//         if (!mSoundOn) {
//             return;
//         }
//         final int sound;
//         switch (code) {
//         case Constants.CODE_DELETE:
//             sound = AudioManager.FX_KEYPRESS_DELETE;
//             break;
//         case Constants.CODE_ENTER:
//             sound = AudioManager.FX_KEYPRESS_RETURN;
//             break;
//         case Constants.CODE_SPACE:
//             sound = AudioManager.FX_KEYPRESS_SPACEBAR;
//             break;
//         default:
//             sound = AudioManager.FX_KEYPRESS_STANDARD;
//             break;
//         }
//         mAudioManager.playSoundEffect(sound, mSettingsValues.mKeypressSoundVolume);
//     }
// 
//     public void performHapticFeedback(final View viewToPerformHapticFeedbackOn) {
//         if (!mSettingsValues.mVibrateOn) {
//             return;
//         }
//         if (mSettingsValues.mKeypressVibrationDuration >= 0) {
//             vibrate(mSettingsValues.mKeypressVibrationDuration);
//             return;
//         }
//         // Go ahead with the system default
//         if (viewToPerformHapticFeedbackOn != null) {
//             viewToPerformHapticFeedbackOn.performHapticFeedback(
//                     HapticFeedbackConstants.KEYBOARD_TAP,
//                     HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
//         }
//     }
// 
//     public void onSettingsChanged(final SettingsValues settingsValues) {
//         mSettingsValues = settingsValues;
//         mSoundOn = reevaluateIfSoundIsOn();
//     }
// 
//     public void onRingerModeChanged() {
//         mSoundOn = reevaluateIfSoundIsOn();
//     }
// }


// Path: app/src/main/java/rkr/simplekeyboard/inputmethod/latin/settings/KeyPressSettingsFragment.java
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.media.AudioManager;
import android.os.Bundle;
import rkr.simplekeyboard.inputmethod.R;
import rkr.simplekeyboard.inputmethod.latin.AudioAndHapticFeedbackManager;

/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package rkr.simplekeyboard.inputmethod.latin.settings;



/**
 * "Preferences" settings sub screen.
 *
 * This settings sub screen handles the following input preferences.
 * - Vibrate on keypress
 * - Keypress vibration duration
 * - Sound on keypress
 * - Keypress sound volume
 * - Popup on keypress
 * - Key long press delay
 */
public final class KeyPressSettingsFragment extends SubScreenFragment {
    @Override
    public void onCreate(final Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.prefs_screen_key_press);

        final Context context = getActivity();

        // When we are called from the Settings application but we are not already running, some
        // singleton and utility classes may not have been initialized.  We have to call
        // initialization method of these classes here. See {@link LatinIME#onCreate()}.
        AudioAndHapticFeedbackManager.init(context);