diff options
Diffstat (limited to 'src/android/jar/src/org/qtproject/qt/android/QtNative.java')
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/QtNative.java | 110 |
1 files changed, 58 insertions, 52 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java index 97a45ef8fa..17e1386efb 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java @@ -30,15 +30,16 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; -class QtNative +// ### Qt7: make private and find new API for onNewIntent() +public class QtNative { private static WeakReference<Activity> m_activity = null; private static WeakReference<Service> m_service = null; - public static final Object m_mainActivityMutex = new Object(); // mutex used to synchronize runnable operations + private static final Object m_mainActivityMutex = new Object(); // mutex used to synchronize runnable operations private static final ApplicationStateDetails m_stateDetails = new ApplicationStateDetails(); - public static final String QtTAG = "Qt JAVA"; + static final String QtTAG = "Qt JAVA"; // a list containing all actions which could not be performed (e.g. the main activity is destroyed, etc.) private static final ArrayList<Runnable> m_lostActions = new ArrayList<>(); @@ -51,24 +52,24 @@ class QtNative private static final Object m_appStateListenersLock = new Object(); @UsedFromNativeCode - public static ClassLoader classLoader() + static ClassLoader classLoader() { return m_classLoader; } - public static void setClassLoader(ClassLoader classLoader) + static void setClassLoader(ClassLoader classLoader) { m_classLoader = classLoader; } - public static void setActivity(Activity qtMainActivity) + static void setActivity(Activity qtMainActivity) { synchronized (m_mainActivityMutex) { m_activity = new WeakReference<>(qtMainActivity); } } - public static void setService(Service qtMainService) + static void setService(Service qtMainService) { synchronized (m_mainActivityMutex) { m_service = new WeakReference<>(qtMainService); @@ -76,40 +77,40 @@ class QtNative } @UsedFromNativeCode - public static Activity activity() + static Activity activity() { synchronized (m_mainActivityMutex) { return m_activity != null ? m_activity.get() : null; } } - public static boolean isActivityValid() + static boolean isActivityValid() { return m_activity != null && m_activity.get() != null; } @UsedFromNativeCode - public static Service service() + static Service service() { synchronized (m_mainActivityMutex) { return m_service != null ? m_service.get() : null; } } - public static boolean isServiceValid() + static boolean isServiceValid() { return m_service != null && m_service.get() != null; } @UsedFromNativeCode - public static Context getContext() { + static Context getContext() { if (isActivityValid()) return m_activity.get(); return service(); } @UsedFromNativeCode - public static String[] getStringArray(String joinedString) + static String[] getStringArray(String joinedString) { return joinedString.split(","); } @@ -162,7 +163,7 @@ class QtNative } @UsedFromNativeCode - public static boolean openURL(Context context, String url, String mime) + static boolean openURL(Context context, String url, String mime) { final Uri uri = getUriWithValidPermission(context, url, "r"); if (uri == null) { @@ -196,42 +197,44 @@ class QtNative } interface AppStateDetailsListener { - void onAppStateDetailsChanged(ApplicationStateDetails details); + default void onAppStateDetailsChanged(ApplicationStateDetails details) {} + default void onNativePluginIntegrationReadyChanged(boolean ready) {} } // Keep in sync with src/corelib/global/qnamespace.h - public static class ApplicationState { + static class ApplicationState { static final int ApplicationSuspended = 0x0; static final int ApplicationHidden = 0x1; static final int ApplicationInactive = 0x2; static final int ApplicationActive = 0x4; } - public static class ApplicationStateDetails { + static class ApplicationStateDetails { int state = ApplicationState.ApplicationSuspended; boolean nativePluginIntegrationReady = false; boolean isStarted = false; } - public static ApplicationStateDetails getStateDetails() + static ApplicationStateDetails getStateDetails() { return m_stateDetails; } - public static void setStarted(boolean started) + static void setStarted(boolean started) { m_stateDetails.isStarted = started; notifyAppStateDetailsChanged(m_stateDetails); } @UsedFromNativeCode - public static void notifyNativePluginIntegrationReady(boolean ready) + static void notifyNativePluginIntegrationReady(boolean ready) { m_stateDetails.nativePluginIntegrationReady = ready; + notifyNativePluginIntegrationReadyChanged(ready); notifyAppStateDetailsChanged(m_stateDetails); } - public static void setApplicationState(int state) + static void setApplicationState(int state) { synchronized (m_mainActivityMutex) { m_stateDetails.state = state; @@ -258,6 +261,13 @@ class QtNative } } + static void notifyNativePluginIntegrationReadyChanged(boolean ready) { + synchronized (m_appStateListenersLock) { + for (final AppStateDetailsListener listener : m_appStateListeners) + listener.onNativePluginIntegrationReadyChanged(ready); + } + } + static void notifyAppStateDetailsChanged(ApplicationStateDetails details) { synchronized (m_appStateListenersLock) { for (AppStateDetailsListener listener : m_appStateListeners) @@ -267,12 +277,12 @@ class QtNative // Post a runnable to Main (UI) Thread if the app is active, // otherwise, queue it to be posted when the the app is active again - public static void runAction(Runnable action) + static void runAction(Runnable action) { runAction(action, true); } - public static void runAction(Runnable action, boolean queueWhenInactive) + static void runAction(Runnable action, boolean queueWhenInactive) { synchronized (m_mainActivityMutex) { final Looper mainLooper = Looper.getMainLooper(); @@ -319,7 +329,7 @@ class QtNative runAction(() -> view.setVisibility(visible ? View.VISIBLE : View.GONE)); } - public static void startApplication(String params, String mainLib) + static void startApplication(String params, String mainLib) { synchronized (m_mainActivityMutex) { m_qtThread.run(() -> { @@ -334,7 +344,7 @@ class QtNative } } - public static void quitApp() + static void quitApp() { runAction(() -> { quitQtAndroidPlugin(); @@ -343,12 +353,12 @@ class QtNative if (isServiceValid()) m_service.get().stopSelf(); m_stateDetails.isStarted = false; - // Likely no use to call notifyAppStateDetailsChanged at this point since we are exiting + notifyAppStateDetailsChanged(m_stateDetails); }); } @UsedFromNativeCode - public static int checkSelfPermission(String permission) + static int checkSelfPermission(String permission) { synchronized (m_mainActivityMutex) { Context context = getContext(); @@ -410,47 +420,43 @@ class QtNative } // application methods - public static native boolean startQtAndroidPlugin(String params); - public static native void startQtApplication(); - public static native void waitForServiceSetup(); - public static native void quitQtCoreApplication(); - public static native void quitQtAndroidPlugin(); - public static native void terminateQt(); - public static native boolean updateNativeActivity(); + static native boolean startQtAndroidPlugin(String params); + static native void startQtApplication(); + static native void waitForServiceSetup(); + static native void quitQtCoreApplication(); + static native void quitQtAndroidPlugin(); + static native void terminateQt(); + static native boolean updateNativeActivity(); // application methods - // surface methods - public static native void setSurface(int id, Object surface); - // surface methods - // window methods - public static native void updateWindow(); + static native void updateWindow(); // window methods // application methods - public static native void updateApplicationState(int state); + static native void updateApplicationState(int state); // menu methods - public static native boolean onPrepareOptionsMenu(Menu menu); - public static native boolean onOptionsItemSelected(int itemId, boolean checked); - public static native void onOptionsMenuClosed(Menu menu); - - public static native void onCreateContextMenu(ContextMenu menu); - public static native void fillContextMenu(Menu menu); - public static native boolean onContextItemSelected(int itemId, boolean checked); - public static native void onContextMenuClosed(Menu menu); + static native boolean onPrepareOptionsMenu(Menu menu); + static native boolean onOptionsItemSelected(int itemId, boolean checked); + static native void onOptionsMenuClosed(Menu menu); + + static native void onCreateContextMenu(ContextMenu menu); + static native void fillContextMenu(Menu menu); + static native boolean onContextItemSelected(int itemId, boolean checked); + static native void onContextMenuClosed(Menu menu); // menu methods // activity methods - public static native void onActivityResult(int requestCode, int resultCode, Intent data); + static native void onActivityResult(int requestCode, int resultCode, Intent data); public static native void onNewIntent(Intent data); - public static native void runPendingCppRunnables(); + static native void runPendingCppRunnables(); - public static native void sendRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults); + static native void sendRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults); // activity methods // service methods - public static native IBinder onBind(Intent intent); + static native IBinder onBind(Intent intent); // service methods } |