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
QtActivityBase.java
Go to the documentation of this file.
1// Copyright (C) 2023 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 android.app.Activity;
7import android.content.Intent;
8import android.content.res.Configuration;
9import android.net.Uri;
10import android.os.Build;
11import android.os.Bundle;
12import android.provider.Browser;
13import android.view.ContextMenu;
14import android.view.ContextMenu.ContextMenuInfo;
15import android.view.KeyEvent;
16import android.view.Menu;
17import android.view.MenuItem;
18import android.view.MotionEvent;
19import android.view.View;
20import android.view.Window;
21
22public class QtActivityBase extends Activity
23{
24 private String m_applicationParams = "";
25 private boolean m_isCustomThemeSet = false;
26 private boolean m_retainNonConfigurationInstance = false;
27
28 private QtActivityDelegate m_delegate;
29
30 public static final String EXTRA_SOURCE_INFO = "org.qtproject.qt.android.sourceInfo";
31
32 private void addReferrer(Intent intent)
33 {
34 if (intent.getExtras() != null && intent.getExtras().getString(EXTRA_SOURCE_INFO) != null)
35 return;
36
37 String browserApplicationId = "";
38 if (intent.getExtras() != null)
39 browserApplicationId = intent.getExtras().getString(Browser.EXTRA_APPLICATION_ID);
40
41 String sourceInformation = "";
42 if (browserApplicationId != null && !browserApplicationId.isEmpty()) {
43 sourceInformation = browserApplicationId;
44 } else {
45 Uri referrer = getReferrer();
46 if (referrer != null)
47 sourceInformation = referrer.toString().replaceFirst("android-app://", "");
48 }
49
50 intent.putExtra(EXTRA_SOURCE_INFO, sourceInformation);
51 }
52
53 // Append any parameters to your application.
54 // Either a whitespace or a tab is accepted as a separator between parameters.
57 {
58 if (params == null || params.isEmpty())
59 return;
60
61 if (!m_applicationParams.isEmpty())
62 m_applicationParams += " ";
63 m_applicationParams += params;
64 }
65
66 private void handleActivityRestart() {
67 if (QtNative.getStateDetails().isStarted) {
68 boolean updated = m_delegate.updateActivityAfterRestart(this);
69 if (!updated) {
70 // could not update the activity so restart the application
71 Intent intent = Intent.makeRestartActivityTask(getComponentName());
72 startActivity(intent);
73 QtNative.quitApp();
74 Runtime.getRuntime().exit(0);
75 }
76 }
77 }
78
79 @Override
80 public void setTheme(int resId) {
81 super.setTheme(resId);
82 m_isCustomThemeSet = true;
83 }
84
85 @Override
86 protected void onCreate(Bundle savedInstanceState)
87 {
88 super.onCreate(savedInstanceState);
89 requestWindowFeature(Window.FEATURE_ACTION_BAR);
90
91 if (!m_isCustomThemeSet) {
92 setTheme(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q ?
93 android.R.style.Theme_DeviceDefault_DayNight :
94 android.R.style.Theme_Holo_Light);
95 }
96
97 m_delegate = new QtActivityDelegate(this);
98
99 handleActivityRestart();
100 addReferrer(getIntent());
101
102 QtActivityLoader loader = new QtActivityLoader(this);
103 loader.appendApplicationParameters(m_applicationParams);
104
105 loader.loadQtLibraries();
106 m_delegate.startNativeApplication(loader.getApplicationParameters(),
107 loader.getMainLibraryPath());
108 }
109
110 @Override
111 protected void onStart()
112 {
113 super.onStart();
114 }
115
116 @Override
117 protected void onRestart()
118 {
119 super.onRestart();
120 }
121
122 @Override
123 protected void onPause()
124 {
125 super.onPause();
126 if (Build.VERSION.SDK_INT < 24 || !isInMultiWindowMode())
127 QtNative.setApplicationState(QtNative.ApplicationState.ApplicationInactive);
128 m_delegate.displayManager().unregisterDisplayListener();
129 }
130
131 @Override
132 protected void onResume()
133 {
134 super.onResume();
135 QtNative.setApplicationState(QtNative.ApplicationState.ApplicationActive);
136 if (QtNative.getStateDetails().isStarted) {
137 m_delegate.displayManager().registerDisplayListener();
138 QtNative.updateWindow();
139 // Suspending the app clears the immersive mode, so we need to set it again.
140 m_delegate.displayManager().updateFullScreen();
141 }
142 }
143
144 @Override
145 protected void onStop()
146 {
147 super.onStop();
148 QtNative.setApplicationState(QtNative.ApplicationState.ApplicationSuspended);
149 }
150
151 @Override
152 protected void onDestroy()
153 {
154 super.onDestroy();
155 if (!m_retainNonConfigurationInstance) {
156 QtNative.terminateQt();
157 QtNative.setActivity(null);
158 QtNative.getQtThread().exit();
159 System.exit(0);
160 }
161 }
162
163 @Override
164 public void onConfigurationChanged(Configuration newConfig)
165 {
166 super.onConfigurationChanged(newConfig);
167 m_delegate.handleUiModeChange(newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK);
168 }
169
170 @Override
171 public boolean onContextItemSelected(MenuItem item)
172 {
173 m_delegate.setContextMenuVisible(false);
174 return QtNative.onContextItemSelected(item.getItemId(), item.isChecked());
175 }
176
177 @Override
178 public void onContextMenuClosed(Menu menu)
179 {
180 if (!m_delegate.isContextMenuVisible())
181 return;
182 m_delegate.setContextMenuVisible(false);
183 QtNative.onContextMenuClosed(menu);
184 }
185
186 @Override
187 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
188 {
189 menu.clearHeader();
190 QtNative.onCreateContextMenu(menu);
191 m_delegate.setContextMenuVisible(true);
192 }
193
194 @Override
195 public boolean dispatchKeyEvent(KeyEvent event)
196 {
197 boolean handleResult = m_delegate.getInputDelegate().handleDispatchKeyEvent(event);
198 if (QtNative.getStateDetails().isStarted && handleResult)
199 return true;
200
201 return super.dispatchKeyEvent(event);
202 }
203
204 @Override
205 public boolean dispatchGenericMotionEvent(MotionEvent event)
206 {
207 boolean handled = m_delegate.getInputDelegate().handleDispatchGenericMotionEvent(event);
208 if (QtNative.getStateDetails().isStarted && handled)
209 return true;
210
211 return super.dispatchGenericMotionEvent(event);
212 }
213
214 @Override
215 public boolean onKeyDown(int keyCode, KeyEvent event)
216 {
217 QtNative.ApplicationStateDetails stateDetails = QtNative.getStateDetails();
218 if (!stateDetails.isStarted || !stateDetails.nativePluginIntegrationReady)
219 return false;
220
221 return m_delegate.getInputDelegate().onKeyDown(keyCode, event);
222 }
223
224 @Override
225 public boolean onKeyUp(int keyCode, KeyEvent event)
226 {
227 QtNative.ApplicationStateDetails stateDetails = QtNative.getStateDetails();
228 if (!stateDetails.isStarted || !stateDetails.nativePluginIntegrationReady)
229 return false;
230
231 return m_delegate.getInputDelegate().onKeyUp(keyCode, event);
232 }
233
234 @Override
235 public boolean onCreateOptionsMenu(Menu menu)
236 {
237 menu.clear();
238 return true;
239 }
240
241 @Override
242 public boolean onPrepareOptionsMenu(Menu menu)
243 {
244 boolean res = QtNative.onPrepareOptionsMenu(menu);
245 m_delegate.setActionBarVisibility(res && menu.size() > 0);
246 return res;
247 }
248
249 @Override
250 public boolean onOptionsItemSelected(MenuItem item)
251 {
252 return QtNative.onOptionsItemSelected(item.getItemId(), item.isChecked());
253 }
254
255 @Override
256 public void onOptionsMenuClosed(Menu menu)
257 {
258 QtNative.onOptionsMenuClosed(menu);
259 }
260
261 @Override
262 protected void onRestoreInstanceState(Bundle savedInstanceState)
263 {
264 super.onRestoreInstanceState(savedInstanceState);
265 QtNative.setStarted(savedInstanceState.getBoolean("Started"));
266 int savedSystemUiVisibility = savedInstanceState.getInt("SystemUiVisibility");
267 m_delegate.displayManager().setSystemUiVisibility(savedSystemUiVisibility);
268 // FIXME restore all surfaces
269 }
270
271 @Override
273 {
274 super.onRetainNonConfigurationInstance();
275 m_retainNonConfigurationInstance = true;
276 return true;
277 }
278
279 @Override
280 protected void onSaveInstanceState(Bundle outState)
281 {
282 super.onSaveInstanceState(outState);
283 outState.putInt("SystemUiVisibility", m_delegate.displayManager().systemUiVisibility());
284 outState.putBoolean("Started", QtNative.getStateDetails().isStarted);
285 }
286
287 @Override
288 public void onWindowFocusChanged(boolean hasFocus)
289 {
290 super.onWindowFocusChanged(hasFocus);
291 if (hasFocus)
292 m_delegate.displayManager().updateFullScreen();
293 }
294
295 @Override
296 protected void onNewIntent(Intent intent)
297 {
298 QtNative.onNewIntent(intent);
299 }
300
301 @Override
302 protected void onActivityResult(int requestCode, int resultCode, Intent data)
303 {
304 super.onActivityResult(requestCode, resultCode, data);
305 QtNative.onActivityResult(requestCode, resultCode, data);
306 }
307
308 @Override
309 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
310 {
311 QtNative.sendRequestPermissionsResult(requestCode, permissions, grantResults);
312 }
313
315 public void hideSplashScreen(final int duration)
316 {
317 m_delegate.hideSplashScreen(duration);
318 }
319
321 QtActivityDelegateBase getActivityDelegate()
322 {
323 return m_delegate;
324 }
325}
DarwinBluetooth::DeviceInquiryDelegate * m_delegate
Definition main.cpp:8
void clear()
Removes all the menu's actions.
Definition qmenu.cpp:2225
QSize size
the size of the widget excluding any window frame
Definition qwidget.h:113
void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
boolean dispatchGenericMotionEvent(MotionEvent event)
boolean onKeyDown(int keyCode, KeyEvent event)
void onCreate(Bundle savedInstanceState)
void onActivityResult(int requestCode, int resultCode, Intent data)
void onConfigurationChanged(Configuration newConfig)
boolean onKeyUp(int keyCode, KeyEvent event)
void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
void onRestoreInstanceState(Bundle savedInstanceState)
GLsizei const GLfloat * v
[13]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
void ** params
struct _cl_event * event
GLuint res
QGraphicsItem * item
QMenu menu
[5]