Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e7828805 authored by Steve Kondik's avatar Steve Kondik Committed by Gerrit Code Review
Browse files

Merge "New option "Haptic Feedback" in the notificatin power widget is...

Merge "New option "Haptic Feedback" in the notificatin power widget is registered and implemented: The option controls whether the phone vibrates or not when the sound profiles are changed when using the SoundButton of the power widget. Options:    - On    - Off    - Global Setting (=Settings->Sound->Haptic Feedback)" into gingerbread
parents e2bf4809 0f71bef5
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -2653,6 +2653,13 @@ public final class Settings {
         */
        public static final String EXPANDED_HIDE_INDICATOR = "expanded_hide_indicator";

        /**
         * Haptic feedback in power widget
         *
         * @hide
         */
        public static final String EXPANDED_HAPTIC_FEEDBACK = "expanded_haptic_feedback";

        /**
         * Notification Indicator Color
         *
+5 −0
Original line number Diff line number Diff line
@@ -252,6 +252,11 @@ public class PowerWidget extends FrameLayout {
                    Settings.System.getUriFor(Settings.System.EXPANDED_HIDE_SCROLLBAR),
                            false, this);

            // watch for haptic feedback
            resolver.registerContentObserver(
                    Settings.System.getUriFor(Settings.System.EXPANDED_HAPTIC_FEEDBACK),
                            false, this);

            // watch for changes in buttons
            resolver.registerContentObserver(
                    Settings.System.getUriFor(Settings.System.WIDGET_BUTTONS),
+73 −96
Original line number Diff line number Diff line
@@ -67,130 +67,68 @@ public class SoundButton extends PowerButton {
            // order of check: soundvib sound vib silent
            case RINGER_MODE_SOUND_AND_VIBRATE:
                if (supports(RINGER_MODE_SOUND_ONLY)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ONLY_SILENT);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ONLY_SILENT,
                            AudioManager.RINGER_MODE_NORMAL, false);
                } else if (supports(RINGER_MODE_VIBRATE_ONLY)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ON);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
                    VIBRATOR.vibrate(VIBRATE_DURATION);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ON,
                            AudioManager.RINGER_MODE_VIBRATE, true);
                } else if (supports(RINGER_MODE_SILENT)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 0);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_OFF);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                    updateSettings(context, 0, AudioManager.VIBRATE_SETTING_OFF,
                            AudioManager.RINGER_MODE_SILENT, false);
                } else { // Fall Back
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ON);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
                    VIBRATOR.vibrate(VIBRATE_DURATION);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ON,
                            AudioManager.RINGER_MODE_VIBRATE, true);
                }
                break;
            case RINGER_MODE_SOUND_ONLY:
                if (supports(RINGER_MODE_VIBRATE_ONLY)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ONLY_SILENT);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
                    VIBRATOR.vibrate(VIBRATE_DURATION);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ONLY_SILENT,
                            AudioManager.RINGER_MODE_VIBRATE, true);
                } else if (supports(RINGER_MODE_SILENT)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 0);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_OFF);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                    updateSettings(context, 0, AudioManager.VIBRATE_SETTING_OFF,
                            AudioManager.RINGER_MODE_SILENT, false);
                } else if (supports(RINGER_MODE_SOUND_AND_VIBRATE)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ON);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                    VIBRATOR.vibrate(VIBRATE_DURATION);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ON,
                            AudioManager.RINGER_MODE_NORMAL, true);
                } else { // Fall back
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ON);
                    VIBRATOR.vibrate(VIBRATE_DURATION);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ON,
                            AudioManager.RINGER_MODE_VIBRATE, true);
                }
                break;

            case RINGER_MODE_VIBRATE_ONLY:
                if (supports(RINGER_MODE_SILENT)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 0);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_OFF);
                    updateSettings(context, 0, AudioManager.VIBRATE_SETTING_OFF,
                            AudioManager.RINGER_MODE_SILENT, false);
                } else if (supports(RINGER_MODE_SOUND_AND_VIBRATE)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ON);
                    VIBRATOR.vibrate(VIBRATE_DURATION);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ON,
                            AudioManager.RINGER_MODE_NORMAL, true);
                } else if (supports(RINGER_MODE_SOUND_ONLY)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ONLY_SILENT);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ONLY_SILENT,
                            AudioManager.RINGER_MODE_NORMAL, false);
                } else { // Fall Back
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ON);
                    VIBRATOR.vibrate(VIBRATE_DURATION);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ON,
                            AudioManager.RINGER_MODE_NORMAL, true);
                }
                break;
            case RINGER_MODE_SILENT:
                if (supports(RINGER_MODE_SOUND_AND_VIBRATE)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ON);
                    VIBRATOR.vibrate(VIBRATE_DURATION);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ON,
                            AudioManager.RINGER_MODE_NORMAL, true);
                } else if (supports(RINGER_MODE_SOUND_ONLY)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ONLY_SILENT);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ONLY_SILENT,
                            AudioManager.RINGER_MODE_NORMAL, false);
                } else if (supports(RINGER_MODE_VIBRATE_ONLY)) {
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ONLY_SILENT);
                    VIBRATOR.vibrate(VIBRATE_DURATION);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ONLY_SILENT,
                            AudioManager.RINGER_MODE_VIBRATE, true);
                } else { // Fall Back
                    Settings.System.putInt(context.getContentResolver(),
                            Settings.System.VIBRATE_IN_SILENT, 1);
                    AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                    AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                            AudioManager.VIBRATE_SETTING_ON);
                    VIBRATOR.vibrate(VIBRATE_DURATION);
                    updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ON,
                            AudioManager.RINGER_MODE_NORMAL, true);
                }
                break;
            default:
                Settings.System.putInt(context.getContentResolver(),
                        Settings.System.VIBRATE_IN_SILENT, 1);
                AUDIO_MANAGER.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                        AudioManager.VIBRATE_SETTING_ON);
                VIBRATOR.vibrate(VIBRATE_DURATION);
                updateSettings(context, 1, AudioManager.VIBRATE_SETTING_ON,
                        AudioManager.RINGER_MODE_NORMAL, true);
        }
    }

@@ -280,4 +218,43 @@ public class SoundButton extends PowerButton {
                Settings.System.EXPANDED_RING_MODE,
                CM_MODE_SOUNDVIB_SOUND_VIB_SILENT);
    }

    private static void updateSettings(Context context, int vibrateInSilence,
            int amVibrateSetting, int amRingerMode, boolean doHapticFeedback)
    {
        Settings.System.putInt(context.getContentResolver(),
                Settings.System.VIBRATE_IN_SILENT, vibrateInSilence);
        AUDIO_MANAGER.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
                amVibrateSetting);
        AUDIO_MANAGER.setRingerMode(amRingerMode);

        // Give haptic feedback if requested and enabled in settings
        if(doHapticFeedback && hapticFeedbackEnabled(context)) {
            VIBRATOR.vibrate(VIBRATE_DURATION);
        }
    }

    // Helper function to determine if haptic feedback is enabled.
    private static boolean hapticFeedbackEnabled(Context context)
    {
        int hfPwrWidg;
        int hfGlobl;
        boolean hf;

        // Retrieve haptic feedback option from notification power widget's options
        hfPwrWidg = Settings.System.getInt(context.getContentResolver(),
                Settings.System.EXPANDED_HAPTIC_FEEDBACK, 2);

        if(hfPwrWidg == 2) {    // Obey global setting
            // Retrieve haptic feedback option from global settings
            hfGlobl = Settings.System.getInt(context.getContentResolver(),
                    Settings.System.HAPTIC_FEEDBACK_ENABLED, 1);

            hf = (hfGlobl == 1);
        } else {    // HF forced on/off in widget's settings
            hf = (hfPwrWidg == 1);
        }

        return hf;
    }
}