Allow touch to use a key code to sync touch events

This is needed to make touch work on the x86-64 emulator target
though I have seen the key code used on other devices as a way to
synchronize touch events.

Change-Id: I31a3cc56e6470f2c707641b537140e44f5e686aa
diff --git a/gui/Android.mk b/gui/Android.mk
index 81cd559..afaa5da 100644
--- a/gui/Android.mk
+++ b/gui/Android.mk
@@ -39,7 +39,10 @@
 
 #TWRP_EVENT_LOGGING := true
 ifeq ($(TWRP_EVENT_LOGGING), true)
-LOCAL_CFLAGS += -D_EVENT_LOGGING
+    LOCAL_CFLAGS += -D_EVENT_LOGGING
+endif
+ifneq ($(TW_USE_KEY_CODE_TOUCH_SYNC),)
+    LOCAL_CFLAGS += -DTW_USE_KEY_CODE_TOUCH_SYNC=$(TW_USE_KEY_CODE_TOUCH_SYNC)
 endif
 
 ifneq ($(TW_NO_SCREEN_BLANK),)
@@ -49,7 +52,7 @@
     LOCAL_CFLAGS += -DTW_NO_SCREEN_TIMEOUT
 endif
 ifeq ($(HAVE_SELINUX), true)
-LOCAL_CFLAGS += -DHAVE_SELINUX
+    LOCAL_CFLAGS += -DHAVE_SELINUX
 endif
 ifeq ($(TW_OEM_BUILD), true)
     LOCAL_CFLAGS += -DTW_OEM_BUILD
diff --git a/gui/gui.cpp b/gui/gui.cpp
index 3aef983..c755a98 100644
--- a/gui/gui.cpp
+++ b/gui/gui.cpp
@@ -342,18 +342,22 @@
 
 	if (ev.code == 0)
 	{
+#ifndef TW_USE_KEY_CODE_TOUCH_SYNC
 		if (state == AS_IN_ACTION_AREA)
 		{
 			LOGEVENT("TOUCH_RELEASE: %d,%d\n", x, y);
 			PageManager::NotifyTouch(TOUCH_RELEASE, x, y);
 		}
 		touch_status = TS_NONE;
+#endif
 	}
 	else
 	{
 		if (!touch_status)
 		{
+#ifndef TW_USE_KEY_CODE_TOUCH_SYNC
 			doTouchStart();
+#endif
 		}
 		else
 		{
@@ -403,6 +407,13 @@
 			kb->KeyUp(KEY_BACK);
 	} else if (ev.value != 0) {
 		// This is a key press
+#ifdef TW_USE_KEY_CODE_TOUCH_SYNC
+		if (ev.code == TW_USE_KEY_CODE_TOUCH_SYNC) {
+			LOGEVENT("key code %i key press == touch start %i %i\n", TW_USE_KEY_CODE_TOUCH_SYNC, x, y);
+			doTouchStart();
+			return;
+		}
+#endif
 		if (kb->KeyDown(ev.code)) {
 			// Key repeat is enabled for this key
 			key_status = KS_KEY_PRESSED;
@@ -417,6 +428,12 @@
 		kb->KeyUp(ev.code);
 		key_status = KS_NONE;
 		touch_status = TS_NONE;
+#ifdef TW_USE_KEY_CODE_TOUCH_SYNC
+		if (ev.code == TW_USE_KEY_CODE_TOUCH_SYNC) {
+			LOGEVENT("key code %i key release == touch release %i %i\n", TW_USE_KEY_CODE_TOUCH_SYNC, x, y);
+			PageManager::NotifyTouch(TOUCH_RELEASE, x, y);
+		}
+#endif
 	}
 }