4package org.qtproject.qt.android;
8import android.app.Activity;
9import android.app.Application;
10import android.content.Context;
11import android.content.res.Resources;
12import android.os.Build;
13import android.os.Bundle;
14import android.os.Handler;
15import android.os.Looper;
16import android.util.DisplayMetrics;
17import android.util.Log;
18import android.view.View;
19import android.view.ViewGroup;
21import java.util.ArrayList;
22import java.util.HashMap;
24class QtEmbeddedDelegate
extends QtActivityDelegateBase
25 implements QtNative.AppStateDetailsListener, QtEmbeddedViewInterface
28 private QtView m_view;
29 private QtNative.ApplicationStateDetails m_stateDetails;
30 private boolean m_windowLoaded =
false;
32 public QtEmbeddedDelegate(Activity
context) {
35 m_stateDetails = QtNative.getStateDetails();
36 QtNative.registerAppStateListener(
this);
38 m_activity.getApplication().registerActivityLifecycleCallbacks(
39 new Application.ActivityLifecycleCallbacks() {
41 public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
44 public void onActivityStarted(Activity activity) {}
47 public void onActivityResumed(Activity activity) {
48 if (m_activity == activity && m_stateDetails.isStarted) {
49 QtNative.setApplicationState(ApplicationActive);
50 QtNative.updateWindow();
55 public void onActivityPaused(Activity activity) {
56 if (m_activity == activity && m_stateDetails.isStarted) {
57 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N ||
59 QtNative.setApplicationState(ApplicationInactive);
65 public void onActivityStopped(Activity activity) {
66 if (m_activity == activity && m_stateDetails.isStarted) {
67 QtNative.setApplicationState(ApplicationSuspended);
72 public void onActivitySaveInstanceState(Activity activity,
Bundle outState) {}
75 public void onActivityDestroyed(Activity activity) {
76 if (m_activity == activity && m_stateDetails.isStarted) {
77 m_activity.getApplication().unregisterActivityLifecycleCallbacks(
this);
78 QtNative.unregisterAppStateListener(QtEmbeddedDelegate.this);
79 QtEmbeddedDelegateFactory.remove(m_activity);
80 QtNative.terminateQt();
81 QtNative.setActivity(
null);
82 QtNative.getQtThread().exit();
89 public void onAppStateDetailsChanged(QtNative.ApplicationStateDetails details) {
91 m_stateDetails = details;
96 public void onNativePluginIntegrationReadyChanged(
boolean ready)
100 QtNative.runAction(() -> {
101 DisplayMetrics
metrics = Resources.getSystem().getDisplayMetrics();
102 QtDisplayManager.setApplicationDisplayMetrics(m_activity,
metrics.widthPixels,
112 void startNativeApplicationImpl(String appParams, String mainLib)
114 QtNative.startApplication(appParams, mainLib);
118 QtAccessibilityDelegate createAccessibilityDelegate()
127 QtLayout getQtLayout()
134 return m_view.getQtWindow();
141 super.startNativeApplication(appParams, mainLib);
145 public void queueLoadWindow()
147 synchronized (
this) {
148 if (m_stateDetails.nativePluginIntegrationReady)
154 public void setView(QtView
view)
157 updateInputDelegate();
159 registerGlobalFocusChangeListener(m_view);
163 private void updateInputDelegate() {
164 if (m_view ==
null) {
168 m_inputDelegate.setEditPopupMenu(
new EditPopupMenu(m_activity, m_view));
172 if (m_view !=
null && !m_windowLoaded) {
173 QtView.createRootWindow(m_view, m_view.getLeft(), m_view.getTop(), m_view.getWidth(),
175 m_windowLoaded =
true;
static QtJniTypes::QtInputDelegate m_inputDelegate
static void startQtApplication(JNIEnv *, jclass)
Q_CORE_EXPORT QtJniTypes::Activity activity()
void createRootWindow(JNIEnv *, jclass, QtJniTypes::View rootView, jint x, jint y, jint width, jint height)
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics