diff --git a/mkspecs/android-clang/qmake.conf b/mkspecs/android-clang/qmake.conf index b665000..6ed5194 100644 --- a/mkspecs/android-clang/qmake.conf +++ b/mkspecs/android-clang/qmake.conf @@ -40,8 +40,8 @@ QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \ ANDROID_SOURCES_CXX_STL_LIBDIR = $$NDK_ROOT/sources/cxx-stl/llvm-libc++/libs/$$ANDROID_TARGET_ARCH ANDROID_STDCPP_PATH = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++_shared.so -ANDROID_CXX_STL_LIBS = -lc++ - +#ANDROID_CXX_STL_LIBS = -lc++ +ANDROID_CXX_STL_LIBS = -lc++_shared -lc++abi QMAKE_CFLAGS_OPTIMIZE_SIZE = -Oz include(../common/android-base-tail.conf) diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index fa75089..54cbaa1 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -1065,15 +1065,15 @@ public class QtActivityDelegate try { m_super_onConfigurationChanged.invoke(m_activity, configuration); } catch (Exception e) { - e.printStackTrace(); - } + throw new RuntimeException("Exception invoking m_super_onConfigurationChanged", e); + } finally { + int rotation = m_activity.getWindowManager().getDefaultDisplay().getRotation(); + if (rotation != m_currentRotation) { + QtNative.handleOrientationChanged(rotation, m_nativeOrientation); + } - int rotation = m_activity.getWindowManager().getDefaultDisplay().getRotation(); - if (rotation != m_currentRotation) { - QtNative.handleOrientationChanged(rotation, m_nativeOrientation); + m_currentRotation = rotation; } - - m_currentRotation = rotation; } public void onDestroy() diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java index 3348527..4172f4a 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivity.java @@ -112,7 +112,12 @@ public class QtActivity extends Activity public boolean dispatchKeyEvent(KeyEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.dispatchKeyEvent != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchKeyEvent, event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchKeyEvent, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.dispatchKeyEvent(event); + } else return super.dispatchKeyEvent(event); } @@ -126,7 +131,12 @@ public class QtActivity extends Activity public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.dispatchPopulateAccessibilityEvent != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchPopulateAccessibilityEvent, event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchPopulateAccessibilityEvent, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.dispatchPopulateAccessibilityEvent(event); + } else return super.dispatchPopulateAccessibilityEvent(event); } @@ -140,7 +150,12 @@ public class QtActivity extends Activity public boolean dispatchTouchEvent(MotionEvent ev) { if (QtApplication.m_delegateObject != null && QtApplication.dispatchTouchEvent != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchTouchEvent, ev); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchTouchEvent, ev); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.dispatchTouchEvent(ev); + } else return super.dispatchTouchEvent(ev); } @@ -154,7 +169,12 @@ public class QtActivity extends Activity public boolean dispatchTrackballEvent(MotionEvent ev) { if (QtApplication.m_delegateObject != null && QtApplication.dispatchTrackballEvent != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchTrackballEvent, ev); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchTrackballEvent, ev); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.dispatchTrackballEvent(ev); + } else return super.dispatchTrackballEvent(ev); } @@ -169,7 +189,12 @@ public class QtActivity extends Activity { if (QtApplication.m_delegateObject != null && QtApplication.onActivityResult != null) { - QtApplication.invokeDelegateMethod(QtApplication.onActivityResult, requestCode, resultCode, data); + try { + QtApplication.invokeDelegateMethod(QtApplication.onActivityResult, requestCode, resultCode, data); + } catch (RuntimeException e) { + e.printStackTrace(); + super.onActivityResult(requestCode, resultCode, data); + } return; } if (requestCode == QtLoader.MINISTRO_INSTALL_REQUEST_CODE) @@ -405,7 +430,12 @@ public class QtActivity extends Activity public boolean onKeyDown(int keyCode, KeyEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.onKeyDown != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyDown, keyCode, event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyDown, keyCode, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.onKeyDown(keyCode, event); + } else return super.onKeyDown(keyCode, event); } @@ -420,7 +450,12 @@ public class QtActivity extends Activity public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.onKeyMultiple != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyMultiple, keyCode, repeatCount, event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyMultiple, keyCode, repeatCount, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.onKeyMultiple(keyCode, repeatCount, event); + } else return super.onKeyMultiple(keyCode, repeatCount, event); } @@ -434,7 +469,12 @@ public class QtActivity extends Activity public boolean onKeyUp(int keyCode, KeyEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.onKeyUp != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyUp, keyCode, event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyUp, keyCode, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.onKeyUp(keyCode, event); + } else return super.onKeyUp(keyCode, event); } @@ -702,7 +742,12 @@ public class QtActivity extends Activity public boolean onTouchEvent(MotionEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.onTouchEvent != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onTouchEvent, event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onTouchEvent, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.onTouchEvent(event); + } else return super.onTouchEvent(event); } @@ -716,7 +761,12 @@ public class QtActivity extends Activity public boolean onTrackballEvent(MotionEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.onTrackballEvent != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onTrackballEvent, event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onTrackballEvent, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.onTrackballEvent(event); + } else return super.onTrackballEvent(event); } @@ -816,7 +866,12 @@ public class QtActivity extends Activity public boolean onKeyLongPress(int keyCode, KeyEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.onKeyLongPress != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyLongPress, keyCode, event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyLongPress, keyCode, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.onKeyLongPress(keyCode, event); + } else return super.onKeyLongPress(keyCode, event); } @@ -863,7 +918,12 @@ public class QtActivity extends Activity public boolean dispatchKeyShortcutEvent(KeyEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.dispatchKeyShortcutEvent != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchKeyShortcutEvent, event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchKeyShortcutEvent, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.dispatchKeyShortcutEvent(event); + } else return super.dispatchKeyShortcutEvent(event); } @@ -928,7 +988,12 @@ public class QtActivity extends Activity public boolean onKeyShortcut(int keyCode, KeyEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.onKeyShortcut != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyShortcut, keyCode,event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onKeyShortcut, keyCode, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.onKeyShortcut(keyCode, event); + } else return super.onKeyShortcut(keyCode, event); } @@ -960,7 +1025,12 @@ public class QtActivity extends Activity public boolean dispatchGenericMotionEvent(MotionEvent ev) { if (QtApplication.m_delegateObject != null && QtApplication.dispatchGenericMotionEvent != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchGenericMotionEvent, ev); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchGenericMotionEvent, ev); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.dispatchGenericMotionEvent(ev); + } else return super.dispatchGenericMotionEvent(ev); } @@ -974,7 +1044,12 @@ public class QtActivity extends Activity public boolean onGenericMotionEvent(MotionEvent event) { if (QtApplication.m_delegateObject != null && QtApplication.onGenericMotionEvent != null) - return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onGenericMotionEvent, event); + try { + return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onGenericMotionEvent, event); + } catch (RuntimeException e) { + e.printStackTrace(); + return super.onGenericMotionEvent(event); + } else return super.onGenericMotionEvent(event); } @@ -988,7 +1063,11 @@ public class QtActivity extends Activity public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (QtApplication.m_delegateObject != null && QtApplication.onRequestPermissionsResult != null) { - QtApplication.invokeDelegateMethod(QtApplication.onRequestPermissionsResult, requestCode , permissions, grantResults); + try { + QtApplication.invokeDelegateMethod(QtApplication.onRequestPermissionsResult, requestCode, permissions, grantResults); + } catch (RuntimeException e) { + e.printStackTrace(); + } return; } } diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java index 759daf4..d6a2ebe 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java @@ -158,8 +158,12 @@ public class QtActivityLoader extends QtLoader { m_activity.requestWindowFeature(Window.FEATURE_ACTION_BAR); if (QtApplication.m_delegateObject != null && QtApplication.onCreate != null) { - QtApplication.invokeDelegateMethod(QtApplication.onCreate, savedInstanceState); - return; + try { + QtApplication.invokeDelegateMethod(QtApplication.onCreate, savedInstanceState); + return; + } catch (RuntimeException e) { + e.printStackTrace(); + } } m_displayDensity = m_activity.getResources().getDisplayMetrics().densityDpi; diff --git a/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java b/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java index afc0432..11a630d 100644 --- a/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java +++ b/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java @@ -110,7 +110,11 @@ public class QtApplication extends Application @Override public void onTerminate() { if (m_delegateObject != null && m_delegateMethods.containsKey("onTerminate")) - invokeDelegateMethod(m_delegateMethods.get("onTerminate").get(0)); + try { + invokeDelegateMethod(m_delegateMethods.get("onTerminate").get(0)); + } catch (RuntimeException e) { + e.printStackTrace(); + } super.onTerminate(); } @@ -143,8 +147,12 @@ public class QtApplication extends Application for (Method m : m_delegateMethods.get(methodName)) { if (m.getParameterTypes().length == args.length) { - result.methodReturns = invokeDelegateMethod(m, args); - result.invoked = true; + try { + result.methodReturns = invokeDelegateMethod(m, args); + result.invoked = true; + } catch (RuntimeException e) { + e.printStackTrace(); + } return result; } } @@ -156,7 +164,7 @@ public class QtApplication extends Application try { return m.invoke(m_delegateObject, args); } catch (Exception e) { - e.printStackTrace(); + throw new RuntimeException(e); } return null; }