diff options
| author | Dianne Hackborn <hackbod@google.com> | 2009-07-23 19:01:31 -0700 |
|---|---|---|
| committer | Dianne Hackborn <hackbod@google.com> | 2009-07-24 17:30:15 -0700 |
| commit | ddca3ee3e86fbaa05c1528bd72afd955f0fb4ee6 (patch) | |
| tree | 8ebc21b041c8abb73e648ff9edc31a665901ae15 /core/java/android | |
| parent | 8e4ac7140a038ca135c5981700efc75a0ad59765 (diff) | |
Add support for power keys, improve behavior of virtual keys.
The platform now knows how to deal with a platform key, which at this
point is "just like end call, but don't end a call."
Also improve the handling of virtual keys, to allow for canceling when
sliding off into the display and providing haptic feedback.
Finally fixes a bug where the raw x and y in motion event were not
always set which caused the status bar to not work.
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/HapticFeedbackConstants.java | 9 | ||||
| -rw-r--r-- | core/java/android/view/KeyEvent.java | 27 | ||||
| -rw-r--r-- | core/java/android/view/MotionEvent.java | 3 | ||||
| -rw-r--r-- | core/java/android/view/ViewRoot.java | 4 | ||||
| -rw-r--r-- | core/java/android/view/WindowManagerPolicy.java | 12 |
5 files changed, 51 insertions, 4 deletions
diff --git a/core/java/android/view/HapticFeedbackConstants.java b/core/java/android/view/HapticFeedbackConstants.java index 841066c7ba52..f936f65cef52 100644 --- a/core/java/android/view/HapticFeedbackConstants.java +++ b/core/java/android/view/HapticFeedbackConstants.java @@ -24,9 +24,18 @@ public class HapticFeedbackConstants { private HapticFeedbackConstants() {} + /** + * The user has performed a long press on an object that is resulting + * in an action being performed. + */ public static final int LONG_PRESS = 0; /** + * The user has pressed on a virtual on-screen key. + */ + public static final int VIRTUAL_KEY = 1; + + /** * Flag for {@link View#performHapticFeedback(int, int) * View.performHapticFeedback(int, int)}: Ignore the setting in the * view for whether to perform haptic feedback, do it always. diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index 6349288b7e4b..f9b16fc9f1a5 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -258,6 +258,25 @@ public class KeyEvent implements Parcelable { public static final int FLAG_EDITOR_ACTION = 0x10; /** + * When associated with up key events, this indicates that the key press + * has been canceled. Typically this is used with virtual touch screen + * keys, where the user can slide from the virtual key area on to the + * display: in that case, the application will receive a canceled up + * event and should not perform the action normally associated with the + * key. Note that for this to work, the application can not perform an + * action for a key until it receives an up or the long press timeout has + * expired. + */ + public static final int FLAG_CANCELED = 0x20; + + /** + * This key event was generated by a virtual (on-screen) hard key area. + * Typically this is an area of the touchscreen, outside of the regular + * display, dedicated to "hardware" buttons. + */ + public static final int FLAG_VIRTUAL_HARD_KEY = 0x40; + + /** * Returns the maximum keycode. */ public static int getMaxKeyCode() { @@ -694,6 +713,14 @@ public class KeyEvent implements Parcelable { } /** + * For {@link #ACTION_UP} events, indicates that the event has been + * canceled as per {@link #FLAG_CANCELED}. + */ + public final boolean isCanceled() { + return (mFlags&FLAG_CANCELED) != 0; + } + + /** * Retrieve the key code of the key event. This is the physical key that * was pressed, <em>not</em> the Unicode character. * diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java index 52f1a97c17f5..89b721d85435 100644 --- a/core/java/android/view/MotionEvent.java +++ b/core/java/android/view/MotionEvent.java @@ -288,9 +288,10 @@ public final class MotionEvent implements Parcelable { ev.mEventTimeNano = eventTimeNano; ev.mAction = action; ev.mMetaState = metaState; + ev.mRawX = inData[SAMPLE_X]; + ev.mRawY = inData[SAMPLE_Y]; ev.mXPrecision = xPrecision; ev.mYPrecision = yPrecision; - ev.mNumPointers = pointers; ev.mNumSamples = 1; diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java index cacf7a2528c3..884950ffeacb 100644 --- a/core/java/android/view/ViewRoot.java +++ b/core/java/android/view/ViewRoot.java @@ -1665,7 +1665,9 @@ public final class ViewRoot extends Handler implements ViewParent, if(Config.LOGV) { captureMotionLog("captureDispatchPointer", event); } - event.offsetLocation(0, mCurScrollY); + if (mCurScrollY != 0) { + event.offsetLocation(0, mCurScrollY); + } if (MEASURE_LATENCY) { lt.sample("A Dispatching TouchEvents", System.nanoTime() - event.getEventTimeNano()); } diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index 13719323cb68..f4e9900db8b8 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -533,14 +533,15 @@ public interface WindowManagerPolicy { * @param win The window that currently has focus. This is where the key * event will normally go. * @param code Key code. - * @param metaKeys TODO + * @param metaKeys bit mask of meta keys that are held. * @param down Is this a key press (true) or release (false)? * @param repeatCount Number of times a key down has repeated. + * @param flags event's flags. * @return Returns true if the policy consumed the event and it should * not be further dispatched. */ public boolean interceptKeyTi(WindowState win, int code, - int metaKeys, boolean down, int repeatCount); + int metaKeys, boolean down, int repeatCount, int flags); /** * Called when layout of the windows is about to start. @@ -792,6 +793,13 @@ public interface WindowManagerPolicy { public boolean performHapticFeedbackLw(WindowState win, int effectId, boolean always); /** + * A special function that is called from the very low-level input queue + * to provide feedback to the user. Currently only called for virtual + * keys. + */ + public void keyFeedbackFromInput(KeyEvent event); + + /** * Called when we have stopped keeping the screen on because a window * requesting this is no longer visible. */ |
