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;
22public class QtActivityBase extends Activity implements QtNative.AppStateDetailsListener
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 QtNative.registerAppStateListener(
this);
101 handleActivityRestart();
102 addReferrer(getIntent());
104 QtActivityLoader loader =
new QtActivityLoader(
this);
105 loader.appendApplicationParameters(m_applicationParams);
107 loader.loadQtLibraries();
108 m_delegate.startNativeApplication(loader.getApplicationParameters(),
109 loader.getMainLibraryPath());
114 if (details.isStarted)
136 if (Build.VERSION.SDK_INT < 24 || !isInMultiWindowMode())
137 QtNative.setApplicationState(QtNative.ApplicationState.ApplicationInactive);
138 m_delegate.displayManager().unregisterDisplayListener();
145 QtNative.setApplicationState(QtNative.ApplicationState.ApplicationActive);
146 if (QtNative.getStateDetails().isStarted) {
147 m_delegate.displayManager().registerDisplayListener();
148 QtNative.updateWindow();
150 m_delegate.displayManager().updateFullScreen();
158 QtNative.setApplicationState(QtNative.ApplicationState.ApplicationSuspended);
165 if (!m_retainNonConfigurationInstance) {
166 QtNative.unregisterAppStateListener(
this);
167 QtNative.terminateQt();
168 QtNative.setActivity(
null);
169 QtNative.getQtThread().exit();
177 super.onConfigurationChanged(newConfig);
178 m_delegate.handleUiModeChange(newConfig.uiMode & Configuration.UI_MODE_NIGHT_MASK);
185 return QtNative.onContextItemSelected(
item.getItemId(),
item.isChecked());
194 QtNative.onContextMenuClosed(
menu);
201 QtNative.onCreateContextMenu(
menu);
208 boolean handleResult =
m_delegate.getInputDelegate().handleDispatchKeyEvent(
event);
209 if (QtNative.getStateDetails().isStarted && handleResult)
212 return super.dispatchKeyEvent(
event);
218 boolean handled =
m_delegate.getInputDelegate().handleDispatchGenericMotionEvent(
event);
219 if (QtNative.getStateDetails().isStarted && handled)
222 return super.dispatchGenericMotionEvent(
event);
228 QtNative.ApplicationStateDetails stateDetails = QtNative.getStateDetails();
229 if (!stateDetails.isStarted || !stateDetails.nativePluginIntegrationReady)
238 QtNative.ApplicationStateDetails stateDetails = QtNative.getStateDetails();
239 if (!stateDetails.isStarted || !stateDetails.nativePluginIntegrationReady)
255 boolean res = QtNative.onPrepareOptionsMenu(
menu);
263 return QtNative.onOptionsItemSelected(
item.getItemId(),
item.isChecked());
269 QtNative.onOptionsMenuClosed(
menu);
275 super.onRestoreInstanceState(savedInstanceState);
276 QtNative.setStarted(savedInstanceState.getBoolean(
"Started"));
277 int savedSystemUiVisibility = savedInstanceState.getInt(
"SystemUiVisibility");
278 m_delegate.displayManager().setSystemUiVisibility(savedSystemUiVisibility);
285 super.onRetainNonConfigurationInstance();
286 m_retainNonConfigurationInstance =
true;
293 super.onSaveInstanceState(outState);
294 outState.putInt(
"SystemUiVisibility",
m_delegate.displayManager().systemUiVisibility());
295 outState.putBoolean(
"Started", QtNative.getStateDetails().isStarted);
301 super.onWindowFocusChanged(hasFocus);
303 m_delegate.displayManager().updateFullScreen();
309 QtNative.onNewIntent(intent);
315 super.onActivityResult(requestCode, resultCode,
data);
316 QtNative.onActivityResult(requestCode, resultCode,
data);
322 QtNative.sendRequestPermissionsResult(requestCode, permissions, grantResults);
332 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)
void onAppStateDetailsChanged(QtNative.ApplicationStateDetails details)
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