Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
QtActivityLoader.java
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// Copyright (c) 2016, BogDan Vatra <bogdan@kde.org>
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5package org.qtproject.qt.android;
6
7import android.app.Activity;
8import android.content.Context;
9import android.content.ContextWrapper;
10import android.content.Intent;
11import android.content.pm.ApplicationInfo;
12import android.os.Bundle;
13import android.util.Base64;
14import android.util.DisplayMetrics;
15import android.util.Log;
16
17import java.lang.IllegalArgumentException;
18import java.nio.charset.StandardCharsets;
19
20class QtActivityLoader extends QtLoader {
21 private final Activity m_activity;
22
23 private QtActivityLoader(Activity activity) throws IllegalArgumentException
24 {
25 super(new ContextWrapper(activity));
26 m_activity = activity;
27
28 extractContextMetaData(m_activity);
29 }
30
31 static QtActivityLoader getActivityLoader(Activity activity) throws IllegalArgumentException {
32 if (m_instance == null)
33 m_instance = new QtActivityLoader(activity);
34 return (QtActivityLoader) m_instance;
35 }
36
37 private String getDecodedUtfString(String str)
38 {
39 byte[] decodedExtraEnvVars = Base64.decode(str, Base64.DEFAULT);
40 return new String(decodedExtraEnvVars, StandardCharsets.UTF_8);
41 }
42
43 int getAppIconSize()
44 {
45 int size = m_activity.getResources().getDimensionPixelSize(android.R.dimen.app_icon_size);
46 if (size < 36 || size > 512) { // check size sanity
47 DisplayMetrics metrics = new DisplayMetrics();
48 QtDisplayManager.getDisplay(m_activity).getMetrics(metrics);
49 size = metrics.densityDpi / 10 * 3;
50 if (size < 36)
51 size = 36;
52
53 if (size > 512)
54 size = 512;
55 }
56
57 return size;
58 }
59
60 private void setupStyleExtraction()
61 {
62 int displayDensity = m_activity.getResources().getDisplayMetrics().densityDpi;
63 setEnvironmentVariable("QT_ANDROID_THEME_DISPLAY_DPI", String.valueOf(displayDensity));
64
65 String extractOption = getMetaData("android.app.extract_android_style");
66 if (extractOption.equals("full"))
67 setEnvironmentVariable("QT_USE_ANDROID_NATIVE_STYLE", String.valueOf(1));
68
69 String stylePath = ExtractStyle.setup(m_activity, extractOption, displayDensity);
70 setEnvironmentVariable("ANDROID_STYLE_PATH", stylePath);
71 }
72
73 @Override
74 protected void extractContextMetaData(Context context)
75 {
76 super.extractContextMetaData(context);
77
78 setEnvironmentVariable("QT_USE_ANDROID_NATIVE_DIALOGS", String.valueOf(1));
79 setEnvironmentVariable("QT_ANDROID_APP_ICON_SIZE", String.valueOf(getAppIconSize()));
80
81 setupStyleExtraction();
82
83 Intent intent = m_activity.getIntent();
84 if (intent == null) {
85 Log.w(QtTAG, "Null Intent from the current Activity.");
86 return;
87 }
88
89 Bundle extras = intent.getExtras();
90 if (extras == null) {
91 Log.w(QtTAG, "Null extras from the Activity's intent.");
92 return;
93 }
94
95 int flags = m_activity.getApplicationInfo().flags;
96 boolean isDebuggable = (flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
97
98 if (isDebuggable) {
99 if (extras.containsKey("extraenvvars")) {
100 String extraEnvVars = extras.getString("extraenvvars");
101 setEnvironmentVariables(getDecodedUtfString(extraEnvVars));
102 }
103
104 if (extras.containsKey("extraappparams")) {
105 String extraAppParams = extras.getString("extraappparams");
106 appendApplicationParameters(getDecodedUtfString(extraAppParams));
107 }
108 } else {
109 Log.d(QtNative.QtTAG, "Not in debug mode! It is not allowed to use extra arguments " +
110 "in non-debug mode.");
111 }
112 }
113}
QPainter Context
static const QString context()
Definition java.cpp:398
QMap< Name, StatePointer > Bundle
Definition lalr.h:46
Q_CORE_EXPORT QtJniTypes::Activity activity()
GLenum GLuint GLintptr GLsizeiptr size
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
GLbitfield flags
QString str("QStringBuilder")
[5]