Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
QtActivityLoader.java
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// Copyright (c) 2016, BogDan Vatra <bogdan@kde.org>
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
4
5package org.qtproject.qt.android.bindings;
6
7import android.app.AlertDialog;
8import android.content.DialogInterface;
9import android.content.Intent;
10import android.content.pm.ActivityInfo;
11import android.content.pm.PackageManager;
12import android.graphics.drawable.ColorDrawable;
13import android.net.Uri;
14import android.os.Build;
15import android.os.Bundle;
16import android.view.Window;
17
19
20import java.lang.reflect.Field;
21
22public class QtActivityLoader extends QtLoader {
23 QtActivity m_activity;
24
26 {
27 super(activity, QtActivity.class);
28 m_activity = activity;
29 }
30
31 @Override
32 protected String loaderClassName() {
33 return "org.qtproject.qt.android.QtActivityDelegate";
34 }
35
36 @Override
37 protected Class<?> contextClassName() {
38 return android.app.Activity.class;
39 }
40
41 @Override
42 protected void finish() {
43 m_activity.finish();
44 }
45
46 @Override
47 protected String getTitle() {
48 return (String) m_activity.getTitle();
49 }
50
51 @Override
52 protected void runOnUiThread(Runnable run) {
53 m_activity.runOnUiThread(run);
54 }
55
56 @Override
57 Intent getIntent() {
58 return m_activity.getIntent();
59 }
60
61 public void onCreate(Bundle savedInstanceState) {
62 try {
63 m_contextInfo = m_activity.getPackageManager().getActivityInfo(m_activity.getComponentName(), PackageManager.GET_META_DATA);
64 int theme = ((ActivityInfo)m_contextInfo).getThemeResource();
65 for (Field f : Class.forName("android.R$style").getDeclaredFields()) {
66 if (f.getInt(null) == theme) {
67 QT_ANDROID_THEMES = new String[] {f.getName()};
68 QT_ANDROID_DEFAULT_THEME = f.getName();
69 break;
70 }
71 }
72 } catch (Exception e) {
73 e.printStackTrace();
74 finish();
75 return;
76 }
77
78 try {
79 m_activity.setTheme(Class.forName("android.R$style").getDeclaredField(QT_ANDROID_DEFAULT_THEME).getInt(null));
80 } catch (Exception e) {
81 e.printStackTrace();
82 }
83
84 m_activity.requestWindowFeature(Window.FEATURE_ACTION_BAR);
85 if (QtNative.isStarted()) {
86 boolean updated = QtNative.activityDelegate().updateActivity(m_activity);
87 if (!updated) {
88 // could not update the activity so restart the application
89 Intent intent = Intent.makeRestartActivityTask(m_activity.getComponentName());
90 m_activity.startActivity(intent);
92 Runtime.getRuntime().exit(0);
93 }
94
95 // there can only be a valid delegate object if the QtNative was started.
98
99 return;
100 }
101
102 m_displayDensity = m_activity.getResources().getDisplayMetrics().densityDpi;
103
104 ENVIRONMENT_VARIABLES += "\tQT_ANDROID_THEME=" + QT_ANDROID_DEFAULT_THEME
105 + "/\tQT_ANDROID_THEME_DISPLAY_DPI=" + m_displayDensity + "\t";
106
107 if (m_contextInfo.metaData.containsKey("android.app.background_running")
108 && m_contextInfo.metaData.getBoolean("android.app.background_running")) {
109 ENVIRONMENT_VARIABLES += "QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED=0\t";
110 } else {
111 ENVIRONMENT_VARIABLES += "QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED=1\t";
112 }
113
114 startApp(true);
115
116 }
117}
static QtActivityDelegate activityDelegate()
static Object invokeDelegateMethod(Method m, Object... args)
void startApp(final boolean firstStart)
double e
GLfloat GLfloat f
XID Window