diff options
Diffstat (limited to 'src/android/jar/src/org/qtproject/qt5/android/QtNative.java')
-rw-r--r-- | src/android/jar/src/org/qtproject/qt5/android/QtNative.java | 112 |
1 files changed, 77 insertions, 35 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java index 040eba5e42..07ef6d657d 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java @@ -42,15 +42,20 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.os.Handler; +import android.os.Looper; import android.text.ClipboardManager; +import android.os.Build; import android.util.Log; import android.view.ContextMenu; +import android.view.KeyEvent; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import java.security.KeyStore; import java.security.cert.X509Certificate; +import java.util.Iterator; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; @@ -58,6 +63,7 @@ import javax.net.ssl.X509TrustManager; public class QtNative { private static Activity m_activity = null; + private static boolean m_activityPaused = false; private static QtActivityDelegate m_activityDelegate = null; public static Object m_mainActivityMutex = new Object(); // mutex used to synchronize runnable operations @@ -162,24 +168,33 @@ public class QtNative } } - static public ArrayList<Runnable> getLostActions() + public static void setApplicationState(int state) { - return m_lostActions; - } - - static public void clearLostActions() - { - m_lostActions.clear(); + synchronized (m_mainActivityMutex) { + switch (state) { + case QtActivityDelegate.ApplicationActive: + m_activityPaused = false; + Iterator<Runnable> itr = m_lostActions.iterator(); + while (itr.hasNext()) + runAction(itr.next()); + m_lostActions.clear(); + break; + default: + m_activityPaused = true; + break; + } + } + updateApplicationState(state); } - private static boolean runAction(Runnable action) + private static void runAction(Runnable action) { synchronized (m_mainActivityMutex) { - if (m_activity == null) + final Looper mainLooper = Looper.getMainLooper(); + final Handler handler = new Handler(mainLooper); + final boolean actionIsQueued = !m_activityPaused && m_activity != null && mainLooper != null && handler.post(action); + if (!actionIsQueued) m_lostActions.add(action); - else - m_activity.runOnUiThread(action); - return m_activity != null; } } @@ -301,32 +316,49 @@ public class QtNative static public void sendTouchEvent(MotionEvent event, int id) { - //@ANDROID-5 - touchBegin(id); - for (int i=0;i<event.getPointerCount();i++) { - touchAdd(id, - event.getPointerId(i), - getAction(i, event), - i == 0, - (int)event.getX(i), - (int)event.getY(i), - event.getSize(i), - event.getPressure(i)); - } + int pointerType = 0; - switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - touchEnd(id,0); + if (Build.VERSION.SDK_INT >= 14) { + switch (event.getToolType(0)) { + case MotionEvent.TOOL_TYPE_STYLUS: + pointerType = 1; // QTabletEvent::Pen break; - - case MotionEvent.ACTION_UP: - touchEnd(id,2); + case MotionEvent.TOOL_TYPE_ERASER: + pointerType = 3; // QTabletEvent::Eraser break; + // TODO TOOL_TYPE_MOUSE + } + } + + if (pointerType != 0) { + tabletEvent(id, event.getDeviceId(), event.getEventTime(), event.getAction(), pointerType, + event.getButtonState(), event.getX(), event.getY(), event.getPressure()); + } else { + touchBegin(id); + for (int i = 0; i < event.getPointerCount(); ++i) { + touchAdd(id, + event.getPointerId(i), + getAction(i, event), + i == 0, + (int)event.getX(i), + (int)event.getY(i), + event.getSize(i), + event.getPressure(i)); + } - default: - touchEnd(id,1); + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + touchEnd(id, 0); + break; + + case MotionEvent.ACTION_UP: + touchEnd(id, 2); + break; + + default: + touchEnd(id, 1); + } } - //@ANDROID-5 } static public void sendTrackballEvent(MotionEvent event, int id) @@ -371,12 +403,13 @@ public class QtNative final int y, final int width, final int height, - final int inputHints ) + final int inputHints, + final int enterKeyType) { runAction(new Runnable() { @Override public void run() { - m_activityDelegate.showSoftwareKeyboard(x, y, width, height, inputHints); + m_activityDelegate.showSoftwareKeyboard(x, y, width, height, inputHints, enterKeyType); } }); } @@ -602,12 +635,21 @@ public class QtNative public static native void longPress(int winId, int x, int y); // pointer methods + // tablet methods + public static native void tabletEvent(int winId, int deviceId, long time, int action, int pointerType, int buttonState, float x, float y, float pressure); + // tablet methods + // keyboard methods public static native void keyDown(int key, int unicode, int modifier, boolean autoRepeat); public static native void keyUp(int key, int unicode, int modifier, boolean autoRepeat); public static native void keyboardVisibilityChanged(boolean visibility); // keyboard methods + // dispatch events methods + public static native boolean dispatchGenericMotionEvent(MotionEvent ev); + public static native boolean dispatchKeyEvent(KeyEvent event); + // dispatch events methods + // surface methods public static native void setSurface(int id, Object surface, int w, int h); // surface methods |