6package org.qtproject.qt.android;
8import android.app.Activity;
9import android.app.UiModeManager;
10import android.content.pm.ActivityInfo;
11import android.content.pm.PackageManager;
12import android.content.res.Configuration;
13import android.content.res.Resources;
14import android.graphics.Color;
15import android.os.Build;
16import android.view.Window;
17import android.view.WindowInsetsController;
19import java.util.HashMap;
21abstract class QtActivityDelegateBase
23 protected final Activity m_activity;
24 protected final HashMap<Integer, QtWindow> m_topLevelWindows =
new HashMap<>();
25 protected final QtDisplayManager m_displayManager;
26 protected final QtInputDelegate m_inputDelegate;
27 protected final QtAccessibilityDelegate m_accessibilityDelegate;
29 private boolean m_membersInitialized =
false;
30 private boolean m_contextMenuVisible =
false;
32 static native
boolean canOverrideColorSchemeHint();
33 static native
void updateUiContrast(
float newUiContrast);
36 abstract void startNativeApplicationImpl(
String appParams,
String mainLib);
40 void setUpSplashScreen(
int orientation) {}
41 void hideSplashScreen(
final int duration) {}
42 void setActionBarVisibility(
boolean visible) {}
44 QtActivityDelegateBase(Activity activity)
47 QtNative.setActivity(m_activity);
48 m_displayManager =
new QtDisplayManager(m_activity);
49 m_inputDelegate =
new QtInputDelegate(() -> {
50 QtWindowInsetsController.restoreFullScreenVisibility(m_activity);
52 m_accessibilityDelegate =
new QtAccessibilityDelegate();
55 QtDisplayManager displayManager() {
56 return m_displayManager;
59 QtInputDelegate getInputDelegate() {
60 return m_inputDelegate;
63 void setContextMenuVisible(
boolean contextMenuVisible)
65 m_contextMenuVisible = contextMenuVisible;
68 boolean isContextMenuVisible()
70 return m_contextMenuVisible;
73 void startNativeApplication(
String appParams,
String mainLib)
75 if (m_membersInitialized)
78 startNativeApplicationImpl(appParams, mainLib);
83 m_membersInitialized =
true;
84 m_topLevelWindows.clear();
85 m_displayManager.registerDisplayListener();
86 m_inputDelegate.initInputMethodManager(m_activity);
89 PackageManager pm = m_activity.getPackageManager();
90 ActivityInfo activityInfo = pm.getActivityInfo(m_activity.getComponentName(), 0);
91 m_inputDelegate.setSoftInputMode(activityInfo.softInputMode);
92 }
catch (PackageManager.NameNotFoundException e) {
99 void hideSplashScreen()
104 void handleUiModeChange()
106 Resources resources = m_activity.getResources();
107 Configuration
config = resources.getConfiguration();
108 int uiMode = config.uiMode & Configuration.UI_MODE_NIGHT_MASK;
110 if (QtWindowInsetsController.decorFitsSystemWindows(m_activity)) {
112 QtWindowInsetsController.enableSystemBarsBackgroundDrawing(
window);
113 int status = QtWindowInsetsController.getThemeDefaultStatusBarColor(m_activity);
114 QtWindowInsetsController.setStatusBarColor(
window, status);
115 int nav = QtWindowInsetsController.getThemeDefaultNavigationBarColor(m_activity);
116 QtWindowInsetsController.setNavigationBarColor(
window, nav);
120 if (canOverrideColorSchemeHint()) {
121 boolean isLight = uiMode == Configuration.UI_MODE_NIGHT_NO;
122 QtWindowInsetsController.setStatusBarColorHint(m_activity, isLight);
123 QtWindowInsetsController.setNavigationBarColorHint(m_activity, isLight);
127 case Configuration.UI_MODE_NIGHT_NO:
128 ExtractStyle.runIfNeeded(m_activity,
false);
129 QtDisplayManager.handleUiDarkModeChanged(0);
131 case Configuration.UI_MODE_NIGHT_YES:
132 ExtractStyle.runIfNeeded(m_activity,
true);
133 QtDisplayManager.handleUiDarkModeChanged(1);
137 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
139 UiModeManager uiModeManager =
140 (UiModeManager) m_activity.getSystemService(m_activity.UI_MODE_SERVICE);
141 updateUiContrast(uiModeManager.getContrast());
Q_CORE_EXPORT QtJniTypes::Activity activity()