Skip to content

Commit

Permalink
Option to control cursor in text fields using volume keys (frameworks)
Browse files Browse the repository at this point in the history
This feature is moved to framework so it also works with third party keyboards.
Patch Set 3: Added missin @hide statements

Change-Id: I8e20240e7bee5351ab20bb3d701eb95a5fd3e112
  • Loading branch information
KonstaT authored and knzy committed Sep 12, 2012
1 parent 1241bca commit 5f39782
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 1 deletion.
44 changes: 43 additions & 1 deletion core/java/android/inputmethodservice/InputMethodService.java
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,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;
Expand Down Expand Up @@ -1735,6 +1749,26 @@ public boolean onKeyDown(int keyCode, KeyEvent event) {
}
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);
}

Expand Down Expand Up @@ -1780,7 +1814,15 @@ public boolean onKeyUp(int keyCode, KeyEvent event) {
&& !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);
}

Expand Down
9 changes: 9 additions & 0 deletions core/java/android/provider/Settings.java
Original file line number Diff line number Diff line change
Expand Up @@ -2108,6 +2108,15 @@ public static void setShowGTalkServiceStatus(ContentResolver cr, boolean flag) {
*/
public static final String VOLBTN_MUSIC_CONTROLS = "volbtn_music_controls";

/**
* 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.
Expand Down

0 comments on commit 5f39782

Please sign in to comment.