Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
QtServiceEmbeddedDelegate.java
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4package org.qtproject.qt.android;
5
6import static org.qtproject.qt.android.QtNative.ApplicationState.ApplicationSuspended;
7
8import android.app.Service;
9import android.content.Context;
10import android.content.res.Resources;
11import android.hardware.display.DisplayManager;
12import android.view.Display;
13import android.view.View;
14import android.util.DisplayMetrics;
15
20class QtServiceEmbeddedDelegate implements QtEmbeddedViewInterface, QtNative.AppStateDetailsListener
21{
22 private final Service m_service;
23 private QtView m_view;
24 private boolean m_windowLoaded = false;
25
26 QtServiceEmbeddedDelegate(Service service)
27 {
28 m_service = service;
29 QtNative.registerAppStateListener(this);
30 QtNative.setService(service);
31 // QTBUG-122920 TODO Implement accessibility for service UIs
32 // QTBUG-122552 TODO Implement text input
33 }
34
35 @Override
36 public void onNativePluginIntegrationReadyChanged(boolean ready)
37 {
38 synchronized (this) {
39 if (ready) {
40 QtNative.runAction(() -> {
41 if (m_view == null)
42 return;
43
44 final DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
45
46 final int maxWidth = m_view.getWidth();
47 final int maxHeight = m_view.getHeight();
48 final int width = maxWidth;
49 final int height = maxHeight;
50 final int insetLeft = m_view.getLeft();
51 final int insetTop = m_view.getTop();
52
53 final DisplayManager dm = m_service.getSystemService(DisplayManager.class);
54 QtDisplayManager.setDisplayMetrics(
55 maxWidth, maxHeight, insetLeft, insetTop, width, height,
56 QtDisplayManager.getXDpi(metrics), QtDisplayManager.getYDpi(metrics),
57 metrics.scaledDensity, metrics.density,
58 QtDisplayManager.getRefreshRate(
59 dm.getDisplay(Display.DEFAULT_DISPLAY)));
60 });
61 createRootWindow();
62 }
63 }
64 }
65
66 // QtEmbeddedViewInterface implementation begin
67 @Override
68 public void startQtApplication(String appParams, String mainLib)
69 {
70 QtNative.startApplication(appParams, mainLib);
71 }
72
73 @Override
74 public void setView(QtView view)
75 {
76 m_view = view;
77 // If the embedded view is destroyed, do cleanup:
78 if (view == null)
79 cleanup();
80 }
81
82 @Override
83 public void queueLoadWindow()
84 {
85 synchronized (this) {
86 if (QtNative.getStateDetails().nativePluginIntegrationReady)
87 createRootWindow();
88 }
89 }
90 // QtEmbeddedViewInterface implementation end
91
92 private void createRootWindow()
93 {
94 if (m_view != null && !m_windowLoaded) {
95 QtView.createRootWindow(m_view, m_view.getLeft(), m_view.getTop(), m_view.getWidth(),
96 m_view.getHeight());
97 m_windowLoaded = true;
98 }
99 }
100
101 private void cleanup()
102 {
103 QtNative.setApplicationState(ApplicationSuspended);
104 QtNative.unregisterAppStateListener(QtServiceEmbeddedDelegate.this);
105 QtEmbeddedViewInterfaceFactory.remove(m_service);
106
107 QtNative.terminateQt();
108 QtNative.setService(null);
109 QtNative.getQtThread().exit();
110 }
111}
Q_CORE_EXPORT QtJniTypes::Service service()
GLint GLsizei GLsizei height
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
GLint GLsizei width
struct _XDisplay Display
QQuickView * view
[0]