diff options
author | Michael Wright <michaelwr@google.com> | 2013-08-16 15:08:35 -0700 |
---|---|---|
committer | Michael Wright <michaelwr@google.com> | 2013-08-26 12:27:37 -0700 |
commit | 4567e40eb04589d211af82f2dcb16cb3955c605e (patch) | |
tree | 205c81725c9bd5ec58ddf1f2cf56a2e49797adf5 | |
parent | 0ccb7d117fa13933cb0d7820387e00f3d1aff18d (diff) | |
download | frameworks_base-4567e40eb04589d211af82f2dcb16cb3955c605e.zip frameworks_base-4567e40eb04589d211af82f2dcb16cb3955c605e.tar.gz frameworks_base-4567e40eb04589d211af82f2dcb16cb3955c605e.tar.bz2 |
Special case game controller fallback keys for Japan
Bug: 10306633
Change-Id: I647fc5286678ddd85599a00e68e2fd70c2c3db49
-rw-r--r-- | core/java/android/view/ViewRootImpl.java | 73 | ||||
-rw-r--r-- | core/res/res/values-ja/bools.xml | 20 | ||||
-rw-r--r-- | core/res/res/values/bools.xml | 1 | ||||
-rwxr-xr-x | core/res/res/values/symbols.xml | 1 | ||||
-rw-r--r-- | data/keyboards/Generic.kcm | 126 |
5 files changed, 95 insertions, 126 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 354e815..6346d1c 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -81,6 +81,7 @@ import java.io.OutputStream; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashSet; +import java.util.Locale; /** * The top of a view hierarchy, implementing the needed protocol between View @@ -230,6 +231,8 @@ public final class ViewRootImpl implements ViewParent, InputStage mFirstPostImeInputStage; SyntheticInputStage mSyntheticInputStage; + boolean mFlipControllerFallbackKeys; + boolean mWindowAttributesChanged = false; int mWindowAttributesChangesFlag = 0; @@ -366,6 +369,8 @@ public final class ViewRootImpl implements ViewParent, mNoncompatDensity = context.getResources().getDisplayMetrics().noncompatDensityDpi; mFallbackEventHandler = PolicyManager.makeNewFallbackEventHandler(context); mChoreographer = Choreographer.getInstance(); + mFlipControllerFallbackKeys = + context.getResources().getBoolean(R.bool.flip_controller_fallback_keys); PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mAttachInfo.mScreenOn = powerManager.isScreenOn(); @@ -2873,8 +2878,11 @@ public final class ViewRootImpl implements ViewParent, mView.dispatchConfigurationChanged(config); } } + + mFlipControllerFallbackKeys = + mContext.getResources().getBoolean(R.bool.flip_controller_fallback_keys); } - + /** * Return true if child is an ancestor of parent, (or equal to the parent). */ @@ -3904,6 +3912,7 @@ public final class ViewRootImpl implements ViewParent, private final SyntheticJoystickHandler mJoystick = new SyntheticJoystickHandler(); private final SyntheticTouchNavigationHandler mTouchNavigation = new SyntheticTouchNavigationHandler(); + private final SyntheticKeyHandler mKeys = new SyntheticKeyHandler(); public SyntheticInputStage() { super(null); @@ -3926,7 +3935,12 @@ public final class ViewRootImpl implements ViewParent, mTouchNavigation.process(event); return FINISH_HANDLED; } + } else if (q.mEvent instanceof KeyEvent) { + if (mKeys.process((KeyEvent) q.mEvent)) { + return FINISH_HANDLED; + } } + return FORWARD; } @@ -4802,6 +4816,63 @@ public final class ViewRootImpl implements ViewParent, }; } + final class SyntheticKeyHandler { + + public boolean process(KeyEvent event) { + // In some locales (like Japan) controllers use B for confirm and A for back, rather + // than vice versa, so we need to special case this here since the input system itself + // is not locale-aware. + int keyCode; + switch(event.getKeyCode()) { + case KeyEvent.KEYCODE_BUTTON_A: + case KeyEvent.KEYCODE_BUTTON_C: + case KeyEvent.KEYCODE_BUTTON_X: + case KeyEvent.KEYCODE_BUTTON_Z: + keyCode = mFlipControllerFallbackKeys ? + KeyEvent.KEYCODE_BACK : KeyEvent.KEYCODE_DPAD_CENTER; + break; + case KeyEvent.KEYCODE_BUTTON_B: + case KeyEvent.KEYCODE_BUTTON_Y: + keyCode = mFlipControllerFallbackKeys ? + KeyEvent.KEYCODE_DPAD_CENTER : KeyEvent.KEYCODE_BACK; + break; + case KeyEvent.KEYCODE_BUTTON_THUMBL: + case KeyEvent.KEYCODE_BUTTON_THUMBR: + case KeyEvent.KEYCODE_BUTTON_START: + case KeyEvent.KEYCODE_BUTTON_1: + case KeyEvent.KEYCODE_BUTTON_2: + case KeyEvent.KEYCODE_BUTTON_3: + case KeyEvent.KEYCODE_BUTTON_4: + case KeyEvent.KEYCODE_BUTTON_5: + case KeyEvent.KEYCODE_BUTTON_6: + case KeyEvent.KEYCODE_BUTTON_7: + case KeyEvent.KEYCODE_BUTTON_8: + case KeyEvent.KEYCODE_BUTTON_9: + case KeyEvent.KEYCODE_BUTTON_10: + case KeyEvent.KEYCODE_BUTTON_11: + case KeyEvent.KEYCODE_BUTTON_12: + case KeyEvent.KEYCODE_BUTTON_13: + case KeyEvent.KEYCODE_BUTTON_14: + case KeyEvent.KEYCODE_BUTTON_15: + case KeyEvent.KEYCODE_BUTTON_16: + keyCode = KeyEvent.KEYCODE_DPAD_CENTER; + break; + case KeyEvent.KEYCODE_BUTTON_SELECT: + case KeyEvent.KEYCODE_BUTTON_MODE: + keyCode = KeyEvent.KEYCODE_MENU; + default: + return false; + } + + enqueueInputEvent(new KeyEvent(event.getDownTime(), event.getEventTime(), + event.getAction(), keyCode, event.getRepeatCount(), event.getMetaState(), + event.getScanCode(), event.getFlags() | KeyEvent.FLAG_FALLBACK, + event.getSource())); + return true; + } + + } + /** * Returns true if the key is used for keyboard navigation. * @param keyEvent The key event. diff --git a/core/res/res/values-ja/bools.xml b/core/res/res/values-ja/bools.xml new file mode 100644 index 0000000..59cf744 --- /dev/null +++ b/core/res/res/values-ja/bools.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2013 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. +--> + +<resources> + <bool name="flip_controller_fallback_keys">true</bool> +</resources> + diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml index 18e4f2f..10a5d85 100644 --- a/core/res/res/values/bools.xml +++ b/core/res/res/values/bools.xml @@ -26,4 +26,5 @@ <bool name="show_ongoing_ime_switcher">true</bool> <bool name="action_bar_expanded_action_views_exclusive">true</bool> <bool name="target_honeycomb_needs_options_menu">true</bool> + <bool name="flip_controller_fallback_keys">false</bool> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index a9c812e..2c560a5 100755 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -282,6 +282,7 @@ <java-symbol type="bool" name="config_useFixedVolume" /> <java-symbol type="bool" name="config_forceDefaultOrientation" /> <java-symbol type="bool" name="config_wifi_batched_scan_supported" /> + <java-symbol type="bool" name="flip_controller_fallback_keys" /> <java-symbol type="integer" name="config_cursorWindowSize" /> <java-symbol type="integer" name="config_extraFreeKbytesAdjust" /> diff --git a/data/keyboards/Generic.kcm b/data/keyboards/Generic.kcm index 01d22ee..695a74f 100644 --- a/data/keyboards/Generic.kcm +++ b/data/keyboards/Generic.kcm @@ -477,128 +477,4 @@ key ESCAPE { ctrl: fallback MENU } -### Gamepad buttons ### - -key BUTTON_A { - base: fallback DPAD_CENTER -} - -key BUTTON_B { - base: fallback BACK -} - -key BUTTON_C { - base: fallback DPAD_CENTER -} - -key BUTTON_X { - base: fallback DPAD_CENTER -} - -key BUTTON_Y { - base: fallback BACK -} - -key BUTTON_Z { - base: fallback DPAD_CENTER -} - -key BUTTON_L1 { - base: none -} - -key BUTTON_R1 { - base: none -} - -key BUTTON_L2 { - base: none -} - -key BUTTON_R2 { - base: none -} - -key BUTTON_THUMBL { - base: fallback DPAD_CENTER -} - -key BUTTON_THUMBR { - base: fallback DPAD_CENTER -} - -key BUTTON_START { - base: fallback DPAD_CENTER -} - -key BUTTON_SELECT { - base: fallback MENU -} - -key BUTTON_MODE { - base: fallback MENU -} - -key BUTTON_1 { - base: fallback DPAD_CENTER -} - -key BUTTON_2 { - base: fallback DPAD_CENTER -} - -key BUTTON_3 { - base: fallback DPAD_CENTER -} - -key BUTTON_4 { - base: fallback DPAD_CENTER -} - -key BUTTON_5 { - base: fallback DPAD_CENTER -} - -key BUTTON_6 { - base: fallback DPAD_CENTER -} - -key BUTTON_7 { - base: fallback DPAD_CENTER -} - -key BUTTON_8 { - base: fallback DPAD_CENTER -} - -key BUTTON_9 { - base: fallback DPAD_CENTER -} - -key BUTTON_10 { - base: fallback DPAD_CENTER -} - -key BUTTON_11 { - base: fallback DPAD_CENTER -} - -key BUTTON_12 { - base: fallback DPAD_CENTER -} - -key BUTTON_13 { - base: fallback DPAD_CENTER -} - -key BUTTON_14 { - base: fallback DPAD_CENTER -} - -key BUTTON_15 { - base: fallback DPAD_CENTER -} - -key BUTTON_16 { - base: fallback DPAD_CENTER -} +### Gamepad buttons are handled by the view root ### |