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

Commit 5c53f7c7 authored by Ricardo Cerqueira's avatar Ricardo Cerqueira
Browse files

Port "Option to control cursor in text fields using volume keys (1/2)"

This feature is moved to framework so it also works with third party keyboards.
Patch Set 3: Added missin @hide statements

Change-Id: I8e20240e7bee5351ab20bb3d701eb95a5fd3e112

Conflicts:
	core/java/android/provider/Settings.java
parent d3dc2942
Loading
Loading
Loading
Loading
+43 −1
Original line number Diff line number Diff line
@@ -249,6 +249,20 @@ public class InputMethodService extends AbstractInputMethodService {
     */
    public static final int IME_VISIBLE = 0x2;

    int mVolumeKeyCursorControl = 0;
    /**
     * @hide
     */
    public static final int VOLUME_CURSOR_OFF = 0;
    /**
     * @hide
     */
    public static final int VOLUME_CURSOR_ON = 1;
    /**
     * @hide
     */
    public static final int VOLUME_CURSOR_ON_REVERSE = 2;

    InputMethodManager mImm;
    
    int mTheme = 0;
@@ -1773,6 +1787,26 @@ public class InputMethodService extends AbstractInputMethodService {
            }
            return false;
        }
        if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) {
            mVolumeKeyCursorControl = Settings.System.getInt(getContentResolver(),
                    Settings.System.VOLUME_KEY_CURSOR_CONTROL, 0);
            if (isInputViewShown() && (mVolumeKeyCursorControl != VOLUME_CURSOR_OFF)) {
                sendDownUpKeyEvents((mVolumeKeyCursorControl == VOLUME_CURSOR_ON_REVERSE)
                        ? KeyEvent.KEYCODE_DPAD_RIGHT : KeyEvent.KEYCODE_DPAD_LEFT);
                return true;
            }
            return false;
        }
        if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) {
            mVolumeKeyCursorControl = Settings.System.getInt(getContentResolver(),
                    Settings.System.VOLUME_KEY_CURSOR_CONTROL, 0);
            if (isInputViewShown() && (mVolumeKeyCursorControl != VOLUME_CURSOR_OFF)) {
                sendDownUpKeyEvents((mVolumeKeyCursorControl == VOLUME_CURSOR_ON_REVERSE)
                        ? KeyEvent.KEYCODE_DPAD_LEFT : KeyEvent.KEYCODE_DPAD_RIGHT);
                return true;
            }
            return false;
        }
        return doMovementKey(keyCode, event, MOVEMENT_DOWN);
    }

@@ -1818,7 +1852,15 @@ public class InputMethodService extends AbstractInputMethodService {
                && !event.isCanceled()) {
            return handleBack(true);
        }
        
        if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP
                 || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
            mVolumeKeyCursorControl = Settings.System.getInt(getContentResolver(),
                    Settings.System.VOLUME_KEY_CURSOR_CONTROL, 0);
            if (isInputViewShown() && (mVolumeKeyCursorControl != VOLUME_CURSOR_OFF)) {
                return true;
            }
            return false;
        }
        return doMovementKey(keyCode, event, MOVEMENT_UP);
    }

+9 −0
Original line number Diff line number Diff line
@@ -3063,6 +3063,15 @@ public final class Settings {
         */
        public static final String POWER_MENU_SILENT_ENABLED = "power_menu_silent_enabled";

        /**
          * Volume keys control cursor in text fields (default is 0)
          * 0 - Disabled
          * 1 - Volume up/down moves cursor left/right
          * 2 - Volume up/down moves cursor right/left
          * @hide
          */
         public static final String VOLUME_KEY_CURSOR_CONTROL = "volume_key_cursor_control";

        /**
         * Settings to backup. This is here so that it's in the same place as the settings
         * keys and easy to update.