diff options
Diffstat (limited to 'src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java')
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java | 162 |
1 files changed, 100 insertions, 62 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java index f9f1dc3b10..596074c631 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java @@ -9,7 +9,6 @@ import android.app.Activity; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; -import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.Rect; @@ -26,24 +25,24 @@ import android.view.Menu; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowInsetsController; import android.widget.ImageView; import android.widget.PopupMenu; import java.util.HashMap; class QtActivityDelegate extends QtActivityDelegateBase + implements QtWindowInterface, QtAccessibilityInterface, QtMenuInterface, QtLayoutInterface { private static final String QtTAG = "QtActivityDelegate"; private QtRootLayout m_layout = null; private ImageView m_splashScreen = null; private boolean m_splashScreenSticky = false; + private boolean m_backendsRegistered = false; private View m_dummyView = null; - private HashMap<Integer, View> m_nativeViews = new HashMap<Integer, View>(); - + private final HashMap<Integer, View> m_nativeViews = new HashMap<>(); + private QtAccessibilityDelegate m_accessibilityDelegate = null; QtActivityDelegate(Activity activity) { @@ -53,17 +52,43 @@ class QtActivityDelegate extends QtActivityDelegateBase setActivityBackgroundDrawable(); } + void registerBackends() + { + if (!m_backendsRegistered) { + m_backendsRegistered = true; + BackendRegister.registerBackend(QtWindowInterface.class, + (QtWindowInterface)QtActivityDelegate.this); + BackendRegister.registerBackend(QtAccessibilityInterface.class, + (QtAccessibilityInterface)QtActivityDelegate.this); + BackendRegister.registerBackend(QtMenuInterface.class, + (QtMenuInterface)QtActivityDelegate.this); + BackendRegister.registerBackend(QtLayoutInterface.class, + (QtLayoutInterface)QtActivityDelegate.this); + BackendRegister.registerBackend(QtInputInterface.class, + (QtInputInterface)m_inputDelegate); + } + } + + void unregisterBackends() + { + if (m_backendsRegistered) { + m_backendsRegistered = false; + BackendRegister.unregisterBackend(QtWindowInterface.class); + BackendRegister.unregisterBackend(QtAccessibilityInterface.class); + BackendRegister.unregisterBackend(QtMenuInterface.class); + BackendRegister.unregisterBackend(QtLayoutInterface.class); + BackendRegister.unregisterBackend(QtInputInterface.class); + } + } - @UsedFromNativeCode @Override - QtLayout getQtLayout() + public QtLayout getQtLayout() { return m_layout; } - @UsedFromNativeCode @Override - void setSystemUiVisibility(int systemUiVisibility) + public void setSystemUiVisibility(int systemUiVisibility) { QtNative.runAction(() -> { m_displayManager.setSystemUiVisibility(systemUiVisibility); @@ -212,7 +237,55 @@ class QtActivityDelegate extends QtActivityDelegateBase }); } - @UsedFromNativeCode + @Override + public void notifyLocationChange(int viewId) + { + if (m_accessibilityDelegate == null) + return; + m_accessibilityDelegate.notifyLocationChange(viewId); + } + + @Override + public void notifyObjectHide(int viewId, int parentId) + { + if (m_accessibilityDelegate == null) + return; + m_accessibilityDelegate.notifyObjectHide(viewId, parentId); + } + + @Override + public void notifyObjectShow(int parentId) + { + if (m_accessibilityDelegate == null) + return; + m_accessibilityDelegate.notifyObjectShow(parentId); + } + + @Override + public void notifyObjectFocus(int viewId) + { + if (m_accessibilityDelegate == null) + return; + m_accessibilityDelegate.notifyObjectFocus(viewId); + } + + @Override + public void notifyValueChanged(int viewId, String value) + { + if (m_accessibilityDelegate == null) + return; + m_accessibilityDelegate.notifyValueChanged(viewId, value); + } + + @Override + public void notifyScrolledEvent(int viewId) + { + if (m_accessibilityDelegate == null) + return; + m_accessibilityDelegate.notifyScrolledEvent(viewId); + } + + @Override public void initializeAccessibility() { QtNative.runAction(() -> { @@ -224,54 +297,25 @@ class QtActivityDelegate extends QtActivityDelegateBase }); } - void handleUiModeChange(int uiMode) - { - // QTBUG-108365 - if (Build.VERSION.SDK_INT >= 30) { - // Since 29 version we are using Theme_DeviceDefault_DayNight - Window window = m_activity.getWindow(); - WindowInsetsController controller = window.getInsetsController(); - if (controller != null) { - // set APPEARANCE_LIGHT_STATUS_BARS if needed - int appearanceLight = Color.luminance(window.getStatusBarColor()) > 0.5 ? - WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS : 0; - controller.setSystemBarsAppearance(appearanceLight, - WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS); - } - } - switch (uiMode) { - case Configuration.UI_MODE_NIGHT_NO: - ExtractStyle.runIfNeeded(m_activity, false); - QtDisplayManager.handleUiDarkModeChanged(0); - break; - case Configuration.UI_MODE_NIGHT_YES: - ExtractStyle.runIfNeeded(m_activity, true); - QtDisplayManager.handleUiDarkModeChanged(1); - break; - } - } - - @UsedFromNativeCode + // QtMenuInterface implementation begin + @Override public void resetOptionsMenu() { QtNative.runAction(() -> m_activity.invalidateOptionsMenu()); } - @UsedFromNativeCode + @Override public void openOptionsMenu() { QtNative.runAction(() -> m_activity.openOptionsMenu()); } - private boolean m_contextMenuVisible = false; - - public void onCreatePopupMenu(Menu menu) + @Override + public void closeContextMenu() { - QtNative.fillContextMenu(menu); - m_contextMenuVisible = true; + QtNative.runAction(() -> m_activity.closeContextMenu()); } - @UsedFromNativeCode @Override public void openContextMenu(final int x, final int y, final int w, final int h) { @@ -291,11 +335,14 @@ class QtActivityDelegate extends QtActivityDelegateBase popup.show(); }, 100); } + // QtMenuInterface implementation end - @UsedFromNativeCode - public void closeContextMenu() + private boolean m_contextMenuVisible = false; + + public void onCreatePopupMenu(Menu menu) { - QtNative.runAction(() -> m_activity.closeContextMenu()); + QtNative.fillContextMenu(menu); + m_contextMenuVisible = true; } @Override @@ -337,7 +384,7 @@ class QtActivityDelegate extends QtActivityDelegateBase @UsedFromNativeCode @Override - void removeTopLevelWindow(final int id) + public void removeTopLevelWindow(final int id) { QtNative.runAction(()-> { if (m_topLevelWindows.containsKey(id)) { @@ -355,7 +402,7 @@ class QtActivityDelegate extends QtActivityDelegateBase @UsedFromNativeCode @Override - void bringChildToFront(final int id) + public void bringChildToFront(final int id) { QtNative.runAction(() -> { QtWindow window = m_topLevelWindows.get(id); @@ -366,7 +413,7 @@ class QtActivityDelegate extends QtActivityDelegateBase @UsedFromNativeCode @Override - void bringChildToBack(int id) + public void bringChildToBack(int id) { QtNative.runAction(() -> { QtWindow window = m_topLevelWindows.get(id); @@ -375,16 +422,6 @@ class QtActivityDelegate extends QtActivityDelegateBase }); } - @Override - QtAccessibilityDelegate createAccessibilityDelegate() - { - if (m_layout != null) - return new QtAccessibilityDelegate(m_layout); - - Log.w(QtTAG, "Null layout, failed to initialize accessibility delegate."); - return null; - } - private void setActivityBackgroundDrawable() { TypedValue attr = new TypedValue(); @@ -435,7 +472,8 @@ class QtActivityDelegate extends QtActivityDelegateBase QtNative.runAction(() -> { if (m_nativeViews.containsKey(id)) { View view = m_nativeViews.get(id); - view.setLayoutParams(new QtLayout.LayoutParams(w, h, x, y)); + if (view != null) + view.setLayoutParams(new QtLayout.LayoutParams(w, h, x, y)); } else { Log.e(QtTAG, "View " + id + " not found!"); } |