4package org.qtproject.qt.android;
6import android.app.Activity;
7import android.content.Intent;
8import android.content.res.Configuration;
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;
24 private String m_applicationParams =
"";
25 private boolean m_isCustomThemeSet =
false;
26 private boolean m_retainNonConfigurationInstance =
false;
28 private QtActivityDelegate m_delegate;
32 private void addReferrer(Intent intent)
34 if (intent.getExtras() !=
null && intent.getExtras().getString(
EXTRA_SOURCE_INFO) !=
null)
37 String browserApplicationId =
"";
38 if (intent.getExtras() !=
null)
39 browserApplicationId = intent.getExtras().getString(Browser.EXTRA_APPLICATION_ID);
41 String sourceInformation =
"";
42 if (browserApplicationId !=
null && !browserApplicationId.isEmpty()) {
43 sourceInformation = browserApplicationId;
45 Uri referrer = getReferrer();
47 sourceInformation = referrer.toString().replaceFirst(
"android-app://",
"");
61 if (!m_applicationParams.isEmpty())
62 m_applicationParams +=
" ";
63 m_applicationParams +=
params;
66 private void handleActivityRestart() {
67 if (QtNative.getStateDetails().isStarted) {
68 boolean updated =
m_delegate.updateActivityAfterRestart(
this);
71 Intent intent = Intent.makeRestartActivityTask(getComponentName());
72 startActivity(intent);
74 Runtime.getRuntime().exit(0);
81 super.setTheme(resId);
82 m_isCustomThemeSet =
true;
86 protected void onCreate(Bundle savedInstanceState)
88 super.onCreate(savedInstanceState);
89 requestWindowFeature(Window.FEATURE_ACTION_BAR);
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);
99 handleActivityRestart();
100 addReferrer(getIntent());
102 QtActivityLoader loader =
new QtActivityLoader(
this);
103 loader.appendApplicationParameters(m_applicationParams);
105 loader.loadQtLibraries();
106 m_delegate.startNativeApplication(loader.getApplicationParameters(),
107 loader.getMainLibraryPath());
126 if (Build.VERSION.SDK_INT < 24 || !isInMultiWindowMode())
127 QtNative.setApplicationState(QtNative.ApplicationState.ApplicationInactive);
128 m_delegate.displayManager().unregisterDisplayListener();
135 QtNative.setApplicationState(QtNative.ApplicationState.ApplicationActive);
136 if (QtNative.getStateDetails().isStarted) {
137 m_delegate.displayManager().registerDisplayListener();
138 QtNative.updateWindow();
140 m_delegate.displayManager().updateFullScreen();
148 QtNative.setApplicationState(QtNative.ApplicationState.ApplicationSuspended);
155 if (!m_retainNonConfigurationInstance) {
156 QtNative.terminateQt();
157 QtNative.setActivity(
null);
158 QtNative.getQtThread().exit();
166 super.onConfigurationChanged(newConfig);
167 m_delegate.handleUiModeChange(newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK);
174 return QtNative.onContextItemSelected(
item.getItemId(),
item.isChecked());
183 QtNative.onContextMenuClosed(
menu);
190 QtNative.onCreateContextMenu(
menu);
197 boolean handleResult =
m_delegate.getInputDelegate().handleDispatchKeyEvent(
event);
198 if (QtNative.getStateDetails().isStarted && handleResult)
201 return super.dispatchKeyEvent(
event);
207 boolean handled =
m_delegate.getInputDelegate().handleDispatchGenericMotionEvent(
event);
208 if (QtNative.getStateDetails().isStarted && handled)
211 return super.dispatchGenericMotionEvent(
event);
217 QtNative.ApplicationStateDetails stateDetails = QtNative.getStateDetails();
218 if (!stateDetails.isStarted || !stateDetails.nativePluginIntegrationReady)
227 QtNative.ApplicationStateDetails stateDetails = QtNative.getStateDetails();
228 if (!stateDetails.isStarted || !stateDetails.nativePluginIntegrationReady)
244 boolean res = QtNative.onPrepareOptionsMenu(
menu);
252 return QtNative.onOptionsItemSelected(
item.getItemId(),
item.isChecked());
258 QtNative.onOptionsMenuClosed(
menu);
264 super.onRestoreInstanceState(savedInstanceState);
265 QtNative.setStarted(savedInstanceState.getBoolean(
"Started"));
266 int savedSystemUiVisibility = savedInstanceState.getInt(
"SystemUiVisibility");
267 m_delegate.displayManager().setSystemUiVisibility(savedSystemUiVisibility);
274 super.onRetainNonConfigurationInstance();
275 m_retainNonConfigurationInstance =
true;
282 super.onSaveInstanceState(outState);
283 outState.putInt(
"SystemUiVisibility",
m_delegate.displayManager().systemUiVisibility());
284 outState.putBoolean(
"Started", QtNative.getStateDetails().isStarted);
290 super.onWindowFocusChanged(hasFocus);
292 m_delegate.displayManager().updateFullScreen();
298 QtNative.onNewIntent(intent);
304 super.onActivityResult(requestCode, resultCode,
data);
305 QtNative.onActivityResult(requestCode, resultCode,
data);
311 QtNative.sendRequestPermissionsResult(requestCode, permissions, grantResults);
321 QtActivityDelegateBase getActivityDelegate()
DarwinBluetooth::DeviceInquiryDelegate * m_delegate
void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
boolean onPrepareOptionsMenu(Menu menu)
static final String EXTRA_SOURCE_INFO
boolean onOptionsItemSelected(MenuItem item)
boolean dispatchGenericMotionEvent(MotionEvent event)
void appendApplicationParameters(String params)
void onSaveInstanceState(Bundle outState)
boolean onKeyDown(int keyCode, KeyEvent event)
void onNewIntent(Intent intent)
void hideSplashScreen(final int duration)
void onCreate(Bundle savedInstanceState)
boolean dispatchKeyEvent(KeyEvent event)
void onActivityResult(int requestCode, int resultCode, Intent data)
boolean onContextItemSelected(MenuItem item)
void onWindowFocusChanged(boolean hasFocus)
void onConfigurationChanged(Configuration newConfig)
boolean onKeyUp(int keyCode, KeyEvent event)
void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
void onOptionsMenuClosed(Menu menu)
Object onRetainNonConfigurationInstance()
void onRestoreInstanceState(Bundle savedInstanceState)
boolean onCreateOptionsMenu(Menu menu)
void onContextMenuClosed(Menu menu)
GLsizei const GLfloat * v
[13]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data