4package org.qtproject.qt.android;
6import static org.qtproject.qt.android.QtNative.ApplicationState.*;
8import android.app.Activity;
9import android.app.Application;
10import android.content.res.Resources;
11import android.os.Build;
12import android.os.Bundle;
13import android.util.DisplayMetrics;
14import android.util.Log;
15import android.widget.PopupMenu;
17import java.util.HashSet;
19class QtEmbeddedDelegate
extends QtActivityDelegateBase
23 private static final String QtTAG =
"QtEmbeddedDelegate";
24 private final HashSet<QtView> m_views =
new HashSet<>();
25 private QtNative.ApplicationStateDetails m_stateDetails;
26 private boolean m_backendsRegistered =
false;
28 QtEmbeddedDelegate(Activity
context) {
30 m_stateDetails = QtNative.getStateDetails();
31 QtNative.registerAppStateListener(
this);
33 m_activity.getApplication().registerActivityLifecycleCallbacks(
34 new Application.ActivityLifecycleCallbacks() {
36 public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
39 public void onActivityStarted(Activity activity) {}
42 public void onActivityResumed(Activity activity) {
43 if (m_activity == activity && m_stateDetails.isStarted) {
44 QtNative.setApplicationState(ApplicationActive);
45 QtWindow.updateWindows();
50 public void onActivityPaused(Activity activity) {
51 if (m_activity == activity && m_stateDetails.isStarted) {
52 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N ||
54 QtNative.setApplicationState(ApplicationInactive);
60 public void onActivityStopped(Activity activity) {
61 if (m_activity == activity && m_stateDetails.isStarted) {
62 QtNative.setApplicationState(ApplicationSuspended);
67 public void onActivitySaveInstanceState(Activity activity,
Bundle outState) {}
70 public void onActivityDestroyed(Activity activity) {
73 if (m_activity == activity && m_stateDetails.isStarted &&
74 !
activity.isChangingConfigurations()) {
75 m_activity.getApplication().unregisterActivityLifecycleCallbacks(
this);
76 QtNative.unregisterAppStateListener(QtEmbeddedDelegate.this);
77 QtEmbeddedViewInterfaceFactory.remove(m_activity);
78 QtNative.terminateQtNativeApplication();
79 QtNative.setActivity(
null);
88 m_stateDetails = details;
89 if (details.isStarted && !m_backendsRegistered) {
90 if (BackendRegister.isNull())
93 m_backendsRegistered =
true;
97 }
else if (!details.isStarted && m_backendsRegistered) {
98 m_backendsRegistered =
false;
100 if (BackendRegister.isNull())
111 public void onNativePluginIntegrationReadyChanged(
boolean ready)
115 DisplayMetrics
metrics = Resources.getSystem().getDisplayMetrics();
116 QtDisplayManager.handleLayoutSizeChanged(
metrics.widthPixels,
metrics.heightPixels);
117 m_displayManager.initDisplayProperties();
123 void startNativeApplicationImpl(
String appParams,
String mainLib)
125 QtNative.startApplication(appParams, mainLib);
130 public void startQtApplication(
String appParams,
String mainLib)
132 super.startNativeApplication(appParams, mainLib);
136 public void addView(QtView
view)
138 if (m_views.add(
view)) {
144 public void removeView(QtView
view)
146 m_views.remove(
view);
153 if (m_views.contains(
view)) {
154 QtView.createRootWindow(
view,
view.getLeft(),
view.getTop(),
view.getWidth(),
161 public void resetOptionsMenu() {
QtNative.runAction(m_activity::invalidateOptionsMenu); }
167 public void closeContextMenu() {
QtNative.runAction(m_activity::closeContextMenu); }
170 public void openContextMenu(
final int x,
final int y,
final int w,
final int h)
172 final QtEditText focusedEditText = m_inputDelegate.getCurrentQtEditText();
173 if (focusedEditText ==
null) {
174 Log.w(QtTAG,
"No focused view when trying to open context menu");
177 focusedEditText.postDelayed(() -> {
178 PopupMenu popup =
new PopupMenu(m_activity, focusedEditText);
179 QtNative.fillContextMenu(popup.getMenu());
180 popup.setOnMenuItemClickListener(m_activity::onContextItemSelected);
181 popup.setOnDismissListener(popupMenu ->
182 m_activity.onContextMenuClosed(popupMenu.getMenu()));
static const QString context()
QMap< Name, StatePointer > Bundle
Q_CORE_EXPORT QtJniTypes::Activity activity()
void createRootWindow(JNIEnv *, jclass, QtJniTypes::View rootView, jint x, jint y, jint width, jint height)
GLint GLint GLint GLint GLint x
GLfloat GLfloat GLfloat w
[0]
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
GLfloat GLfloat GLfloat GLfloat h