Merge "Support haptic feedback for virtual keys defined in key layout." into gingerbread
This commit is contained in:
@@ -73,6 +73,7 @@ public interface WindowManagerPolicy {
|
||||
public final static int FLAG_ALT_GR = 0x00000020;
|
||||
public final static int FLAG_MENU = 0x00000040;
|
||||
public final static int FLAG_LAUNCHER = 0x00000080;
|
||||
public final static int FLAG_VIRTUAL = 0x00000100;
|
||||
|
||||
public final static int FLAG_INJECTED = 0x01000000;
|
||||
|
||||
|
||||
@@ -73,7 +73,8 @@ namespace android {
|
||||
* policy decisions such as waking from device sleep.
|
||||
*/
|
||||
enum {
|
||||
/* These flags originate in RawEvents and are generally set in the key map. */
|
||||
/* These flags originate in RawEvents and are generally set in the key map.
|
||||
* See also labels for policy flags in KeycodeLabels.h. */
|
||||
|
||||
POLICY_FLAG_WAKE = 0x00000001,
|
||||
POLICY_FLAG_WAKE_DROPPED = 0x00000002,
|
||||
@@ -83,6 +84,7 @@ enum {
|
||||
POLICY_FLAG_ALT_GR = 0x00000020,
|
||||
POLICY_FLAG_MENU = 0x00000040,
|
||||
POLICY_FLAG_LAUNCHER = 0x00000080,
|
||||
POLICY_FLAG_VIRTUAL = 0x00000100,
|
||||
|
||||
POLICY_FLAG_RAW_MASK = 0x0000ffff,
|
||||
|
||||
|
||||
@@ -103,10 +103,6 @@ public:
|
||||
virtual bool getDisplayInfo(int32_t displayId,
|
||||
int32_t* width, int32_t* height, int32_t* orientation) = 0;
|
||||
|
||||
/* Provides feedback for a virtual key down.
|
||||
*/
|
||||
virtual void virtualKeyDownFeedback() = 0;
|
||||
|
||||
/* Intercepts a key event.
|
||||
* The policy can use this method as an opportunity to perform power management functions
|
||||
* and early event preprocessing such as updating policy flags.
|
||||
|
||||
@@ -142,6 +142,7 @@ static const KeycodeLabel KEYCODES[] = {
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
// See also policy flags in Input.h.
|
||||
static const KeycodeLabel FLAGS[] = {
|
||||
{ "WAKE", 0x00000001 },
|
||||
{ "WAKE_DROPPED", 0x00000002 },
|
||||
@@ -151,6 +152,7 @@ static const KeycodeLabel FLAGS[] = {
|
||||
{ "ALT_GR", 0x00000020 },
|
||||
{ "MENU", 0x00000040 },
|
||||
{ "LAUNCHER", 0x00000080 },
|
||||
{ "VIRTUAL", 0x00000100 },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
|
||||
@@ -993,7 +993,10 @@ void KeyboardInputMapper::applyPolicyAndDispatch(nsecs_t when, uint32_t policyFl
|
||||
int32_t keyEventAction = down ? AKEY_EVENT_ACTION_DOWN : AKEY_EVENT_ACTION_UP;
|
||||
int32_t keyEventFlags = AKEY_EVENT_FLAG_FROM_SYSTEM;
|
||||
if (policyFlags & POLICY_FLAG_WOKE_HERE) {
|
||||
keyEventFlags = keyEventFlags | AKEY_EVENT_FLAG_WOKE_HERE;
|
||||
keyEventFlags |= AKEY_EVENT_FLAG_WOKE_HERE;
|
||||
}
|
||||
if (policyFlags & POLICY_FLAG_VIRTUAL) {
|
||||
keyEventFlags |= AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY;
|
||||
}
|
||||
|
||||
getDispatcher()->notifyKey(when, getDeviceId(), AINPUT_SOURCE_KEYBOARD, policyFlags,
|
||||
@@ -2162,10 +2165,7 @@ void TouchInputMapper::applyPolicyAndDispatchVirtualKey(nsecs_t when, uint32_t p
|
||||
int32_t keyCode, int32_t scanCode, nsecs_t downTime) {
|
||||
int32_t metaState = mContext->getGlobalMetaState();
|
||||
|
||||
if (keyEventAction == AKEY_EVENT_ACTION_DOWN) {
|
||||
getPolicy()->virtualKeyDownFeedback();
|
||||
}
|
||||
|
||||
policyFlags |= POLICY_FLAG_VIRTUAL;
|
||||
int32_t policyActions = getPolicy()->interceptKey(when, getDeviceId(),
|
||||
keyEventAction == AKEY_EVENT_ACTION_DOWN, keyCode, scanCode, policyFlags);
|
||||
|
||||
|
||||
@@ -182,7 +182,6 @@ public:
|
||||
|
||||
virtual bool getDisplayInfo(int32_t displayId,
|
||||
int32_t* width, int32_t* height, int32_t* orientation);
|
||||
virtual void virtualKeyDownFeedback();
|
||||
virtual int32_t interceptKey(nsecs_t when, int32_t deviceId,
|
||||
bool down, int32_t keyCode, int32_t scanCode, uint32_t& policyFlags);
|
||||
virtual int32_t interceptSwitch(nsecs_t when, int32_t switchCode, int32_t switchValue,
|
||||
@@ -464,17 +463,6 @@ bool NativeInputManager::isScreenBright() {
|
||||
return android_server_PowerManagerService_isScreenBright();
|
||||
}
|
||||
|
||||
void NativeInputManager::virtualKeyDownFeedback() {
|
||||
#if DEBUG_INPUT_READER_POLICY
|
||||
LOGD("virtualKeyDownFeedback");
|
||||
#endif
|
||||
|
||||
JNIEnv* env = jniEnv();
|
||||
|
||||
env->CallVoidMethod(mCallbacksObj, gCallbacksClassInfo.virtualKeyDownFeedback);
|
||||
checkAndClearExceptionFromCallback(env, "virtualKeyDownFeedback");
|
||||
}
|
||||
|
||||
int32_t NativeInputManager::interceptKey(nsecs_t when,
|
||||
int32_t deviceId, bool down, int32_t keyCode, int32_t scanCode, uint32_t& policyFlags) {
|
||||
#if DEBUG_INPUT_READER_POLICY
|
||||
@@ -483,6 +471,12 @@ int32_t NativeInputManager::interceptKey(nsecs_t when,
|
||||
when, deviceId, down, keyCode, scanCode, policyFlags);
|
||||
#endif
|
||||
|
||||
if (down && (policyFlags & POLICY_FLAG_VIRTUAL)) {
|
||||
JNIEnv* env = jniEnv();
|
||||
env->CallVoidMethod(mCallbacksObj, gCallbacksClassInfo.virtualKeyDownFeedback);
|
||||
checkAndClearExceptionFromCallback(env, "virtualKeyDownFeedback");
|
||||
}
|
||||
|
||||
const int32_t WM_ACTION_PASS_TO_USER = 1;
|
||||
const int32_t WM_ACTION_POKE_USER_ACTIVITY = 2;
|
||||
const int32_t WM_ACTION_GO_TO_SLEEP = 4;
|
||||
|
||||
Reference in New Issue
Block a user