Merge "Add dispatch key shortcut window callback."
diff --git a/api/current.xml b/api/current.xml
index d869da6..d4e6b05 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -22724,6 +22724,19 @@
<parameter name="event" type="android.view.KeyEvent">
</parameter>
</method>
+<method name="dispatchKeyShortcutEvent"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="android.view.KeyEvent">
+</parameter>
+</method>
<method name="dispatchPopulateAccessibilityEvent"
return="boolean"
abstract="false"
@@ -23601,6 +23614,21 @@
<parameter name="event" type="android.view.KeyEvent">
</parameter>
</method>
+<method name="onKeyShortcut"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="keyCode" type="int">
+</parameter>
+<parameter name="event" type="android.view.KeyEvent">
+</parameter>
+</method>
<method name="onKeyUp"
return="boolean"
abstract="false"
@@ -27475,6 +27503,19 @@
<parameter name="event" type="android.view.KeyEvent">
</parameter>
</method>
+<method name="dispatchKeyShortcutEvent"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="android.view.KeyEvent">
+</parameter>
+</method>
<method name="dispatchPopulateAccessibilityEvent"
return="boolean"
abstract="false"
@@ -27851,6 +27892,21 @@
<parameter name="event" type="android.view.KeyEvent">
</parameter>
</method>
+<method name="onKeyShortcut"
+ return="boolean"
+ abstract="false"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="keyCode" type="int">
+</parameter>
+<parameter name="event" type="android.view.KeyEvent">
+</parameter>
+</method>
<method name="onKeyUp"
return="boolean"
abstract="false"
@@ -207218,6 +207274,17 @@
visibility="public"
>
</field>
+<field name="META_ALT_MASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="50"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="META_ALT_ON"
type="int"
transient="false"
@@ -207262,6 +207329,17 @@
visibility="public"
>
</field>
+<field name="META_CTRL_MASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="28672"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="META_CTRL_ON"
type="int"
transient="false"
@@ -207306,6 +207384,17 @@
visibility="public"
>
</field>
+<field name="META_META_MASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="458752"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="META_META_ON"
type="int"
transient="false"
@@ -207361,6 +207450,17 @@
visibility="public"
>
</field>
+<field name="META_SHIFT_MASK"
+ type="int"
+ transient="false"
+ volatile="false"
+ value="193"
+ static="true"
+ final="true"
+ deprecated="not deprecated"
+ visibility="public"
+>
+</field>
<field name="META_SHIFT_ON"
type="int"
transient="false"
@@ -221457,6 +221557,19 @@
<parameter name="event" type="android.view.KeyEvent">
</parameter>
</method>
+<method name="superDispatchKeyShortcutEvent"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="android.view.KeyEvent">
+</parameter>
+</method>
<method name="superDispatchTouchEvent"
return="boolean"
abstract="true"
@@ -221789,6 +221902,19 @@
<parameter name="event" type="android.view.KeyEvent">
</parameter>
</method>
+<method name="dispatchKeyShortcutEvent"
+ return="boolean"
+ abstract="true"
+ native="false"
+ synchronized="false"
+ static="false"
+ final="false"
+ deprecated="not deprecated"
+ visibility="public"
+>
+<parameter name="event" type="android.view.KeyEvent">
+</parameter>
+</method>
<method name="dispatchPopulateAccessibilityEvent"
return="boolean"
abstract="true"
@@ -257785,7 +257911,7 @@
deprecated="not deprecated"
visibility="public"
>
-<parameter name="t" type="T">
+<parameter name="arg0" type="T">
</parameter>
</method>
</interface>
@@ -262244,7 +262370,7 @@
return="void"
abstract="false"
native="false"
- synchronized="true"
+ synchronized="false"
static="false"
final="false"
deprecated="not deprecated"
@@ -262259,7 +262385,7 @@
return="void"
abstract="false"
native="false"
- synchronized="true"
+ synchronized="false"
static="false"
final="false"
deprecated="not deprecated"
@@ -262393,7 +262519,7 @@
return="java.beans.PropertyChangeListener[]"
abstract="false"
native="false"
- synchronized="true"
+ synchronized="false"
static="false"
final="false"
deprecated="not deprecated"
@@ -262406,7 +262532,7 @@
return="java.beans.PropertyChangeListener[]"
abstract="false"
native="false"
- synchronized="true"
+ synchronized="false"
static="false"
final="false"
deprecated="not deprecated"
@@ -262417,7 +262543,7 @@
return="boolean"
abstract="false"
native="false"
- synchronized="true"
+ synchronized="false"
static="false"
final="false"
deprecated="not deprecated"
@@ -262430,7 +262556,7 @@
return="void"
abstract="false"
native="false"
- synchronized="true"
+ synchronized="false"
static="false"
final="false"
deprecated="not deprecated"
@@ -262445,7 +262571,7 @@
return="void"
abstract="false"
native="false"
- synchronized="true"
+ synchronized="false"
static="false"
final="false"
deprecated="not deprecated"
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 77cbe0a..938c47d 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -2071,7 +2071,21 @@
finish();
}
}
-
+
+ /**
+ * Called when a key shortcut event is not handled by any of the views in the Activity.
+ * Override this method to implement global key shortcuts for the Activity.
+ * Key shortcuts can also be implemented by setting the
+ * {@link MenuItem#setShortcut(char, char) shortcut} property of menu items.
+ *
+ * @param keyCode The value in event.getKeyCode().
+ * @param event Description of the key event.
+ * @return True if the key shortcut was handled.
+ */
+ public boolean onKeyShortcut(int keyCode, KeyEvent event) {
+ return false;
+ }
+
/**
* Called when a touch screen event was not handled by any of the views
* under it. This is most useful to process touch events that happen
@@ -2232,6 +2246,23 @@
}
/**
+ * Called to process a key shortcut event.
+ * You can override this to intercept all key shortcut events before they are
+ * dispatched to the window. Be sure to call this implementation for key shortcut
+ * events that should be handled normally.
+ *
+ * @param event The key shortcut event.
+ * @return True if this event was consumed.
+ */
+ public boolean dispatchKeyShortcutEvent(KeyEvent event) {
+ onUserInteraction();
+ if (getWindow().superDispatchKeyShortcutEvent(event)) {
+ return true;
+ }
+ return onKeyShortcut(event.getKeyCode(), event);
+ }
+
+ /**
* Called to process touch screen events. You can override this to
* intercept all touch screen events before they are dispatched to the
* window. Be sure to call this implementation for touch screen events
diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java
index e69e664..6791400 100644
--- a/core/java/android/app/Dialog.java
+++ b/core/java/android/app/Dialog.java
@@ -571,7 +571,21 @@
cancel();
}
}
-
+
+ /**
+ * Called when an key shortcut event is not handled by any of the views in the Dialog.
+ * Override this method to implement global key shortcuts for the Dialog.
+ * Key shortcuts can also be implemented by setting the
+ * {@link MenuItem#setShortcut(char, char) shortcut} property of menu items.
+ *
+ * @param keyCode The value in event.getKeyCode().
+ * @param event Description of the key event.
+ * @return True if the key shortcut was handled.
+ */
+ public boolean onKeyShortcut(int keyCode, KeyEvent event) {
+ return false;
+ }
+
/**
* Called when a touch screen event was not handled by any of the views
* under it. This is most useful to process touch events that happen outside
@@ -659,6 +673,22 @@
}
/**
+ * Called to process a key shortcut event.
+ * You can override this to intercept all key shortcut events before they are
+ * dispatched to the window. Be sure to call this implementation for key shortcut
+ * events that should be handled normally.
+ *
+ * @param event The key shortcut event.
+ * @return True if this event was consumed.
+ */
+ public boolean dispatchKeyShortcutEvent(KeyEvent event) {
+ if (mWindow.superDispatchKeyShortcutEvent(event)) {
+ return true;
+ }
+ return onKeyShortcut(event.getKeyCode(), event);
+ }
+
+ /**
* Called to process touch screen events. You can override this to
* intercept all touch screen events before they are dispatched to the
* window. Be sure to call this implementation for touch screen events
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index 3a3d1d8..ecf1aef 100755
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -990,20 +990,32 @@
*/
public static final int META_SCROLL_LOCK_ON = 0x400000;
- /** {@hide} */
+ /**
+ * This mask is a combination of {@link #META_SHIFT_ON}, {@link #META_SHIFT_LEFT_ON}
+ * and {@link #META_SHIFT_RIGHT_ON}.
+ */
public static final int META_SHIFT_MASK = META_SHIFT_ON
| META_SHIFT_LEFT_ON | META_SHIFT_RIGHT_ON;
- /** {@hide} */
+ /**
+ * This mask is a combination of {@link #META_ALT_ON}, {@link #META_ALT_LEFT_ON}
+ * and {@link #META_ALT_RIGHT_ON}.
+ */
public static final int META_ALT_MASK = META_ALT_ON
| META_ALT_LEFT_ON | META_ALT_RIGHT_ON;
- /** {@hide} */
+ /**
+ * This mask is a combination of {@link #META_CTRL_ON}, {@link #META_CTRL_LEFT_ON}
+ * and {@link #META_CTRL_RIGHT_ON}.
+ */
public static final int META_CTRL_MASK = META_CTRL_ON
| META_CTRL_LEFT_ON | META_CTRL_RIGHT_ON;
- /** {@hide} */
- public static final int META_META_MASK = META_ALT_ON
+ /**
+ * This mask is a combination of {@link #META_META_ON}, {@link #META_META_LEFT_ON}
+ * and {@link #META_META_RIGHT_ON}.
+ */
+ public static final int META_META_MASK = META_META_ON
| META_META_LEFT_ON | META_META_RIGHT_ON;
/**
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 9550090..48f9e81 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4768,7 +4768,10 @@
}
/**
- * Called when an unhandled key shortcut event occurs.
+ * Called on the focused view when a key shortcut event is not handled.
+ * Override this method to implement local key shortcuts for the View.
+ * Key shortcuts can also be implemented by setting the
+ * {@link MenuItem#setShortcut(char, char) shortcut} property of menu items.
*
* @param keyCode The value in event.getKeyCode().
* @param event Description of the key event.
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index 8446a8f..2f27935 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -150,6 +150,17 @@
public boolean dispatchKeyEvent(KeyEvent event);
/**
+ * Called to process a key shortcut event.
+ * At the very least your implementation must call
+ * {@link android.view.Window#superDispatchKeyShortcutEvent} to do the
+ * standard key shortcut processing.
+ *
+ * @param event The key shortcut event.
+ * @return True if this event was consumed.
+ */
+ public boolean dispatchKeyShortcutEvent(KeyEvent event);
+
+ /**
* Called to process touch screen events. At the very least your
* implementation must call
* {@link android.view.Window#superDispatchTouchEvent} to do the
@@ -1028,6 +1039,14 @@
public abstract boolean superDispatchKeyEvent(KeyEvent event);
/**
+ * Used by custom windows, such as Dialog, to pass the key shortcut press event
+ * further down the view hierarchy. Application developers should
+ * not need to implement or call this.
+ *
+ */
+ public abstract boolean superDispatchKeyShortcutEvent(KeyEvent event);
+
+ /**
* Used by custom windows, such as Dialog, to pass the touch screen event
* further down the view hierarchy. Application developers should
* not need to implement or call this.
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 5faece7..3b2aeaf 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -1237,6 +1237,11 @@
}
@Override
+ public boolean superDispatchKeyShortcutEvent(KeyEvent event) {
+ return mDecor.superDispatchKeyShortcutEvent(event);
+ }
+
+ @Override
public boolean superDispatchTouchEvent(MotionEvent event) {
return mDecor.superDispatchTouchEvent(event);
}
@@ -1643,6 +1648,13 @@
}
@Override
+ public boolean dispatchKeyShortcutEvent(KeyEvent ev) {
+ final Callback cb = getCallback();
+ return cb != null && mFeatureId < 0 ? cb.dispatchKeyShortcutEvent(ev) : super
+ .dispatchKeyShortcutEvent(ev);
+ }
+
+ @Override
public boolean dispatchTouchEvent(MotionEvent ev) {
final Callback cb = getCallback();
return cb != null && mFeatureId < 0 ? cb.dispatchTouchEvent(ev) : super
@@ -1660,6 +1672,10 @@
return super.dispatchKeyEvent(event);
}
+ public boolean superDispatchKeyShortcutEvent(KeyEvent event) {
+ return super.dispatchKeyShortcutEvent(event);
+ }
+
public boolean superDispatchTouchEvent(MotionEvent event) {
return super.dispatchTouchEvent(event);
}