6package org.qtproject.qt.android;
8import android.animation.ValueAnimator;
9import android.app.Activity;
10import android.app.UiModeManager;
11import android.content.pm.ActivityInfo;
12import android.content.pm.PackageManager;
13import android.content.res.Configuration;
14import android.content.res.Resources;
15import android.graphics.Color;
16import android.os.Build;
17import android.view.Window;
18import android.view.WindowInsetsController;
20import java.util.HashMap;
22abstract class QtActivityDelegateBase
24 protected final Activity m_activity;
25 protected final HashMap<Integer, QtWindow> m_topLevelWindows =
new HashMap<>();
26 protected final QtDisplayManager m_displayManager;
27 protected final QtInputDelegate m_inputDelegate;
28 protected final QtAccessibilityDelegate m_accessibilityDelegate;
30 private boolean m_membersInitialized =
false;
31 private boolean m_contextMenuVisible =
false;
33 static native
boolean canOverrideColorSchemeHint();
34 static native
void updateUiContrast(
float newUiContrast);
35 static native
void updateUiMotionScale(
float newUiMotionScale);
38 abstract void startNativeApplicationImpl(
String appParams,
String mainLib);
42 void setUpSplashScreen(
int orientation) {}
43 void hideSplashScreen(
final int duration) {}
44 void setActionBarVisibility(
boolean visible) {}
46 QtActivityDelegateBase(Activity activity)
49 QtNative.setActivity(m_activity);
50 m_displayManager =
new QtDisplayManager(m_activity);
51 m_inputDelegate =
new QtInputDelegate(() -> {
52 QtWindowInsetsController.restoreFullScreenVisibility(m_activity);
54 m_accessibilityDelegate =
new QtAccessibilityDelegate();
57 QtDisplayManager displayManager() {
58 return m_displayManager;
61 QtInputDelegate getInputDelegate() {
62 return m_inputDelegate;
65 void setContextMenuVisible(
boolean contextMenuVisible)
67 m_contextMenuVisible = contextMenuVisible;
70 boolean isContextMenuVisible()
72 return m_contextMenuVisible;
75 void startNativeApplication(
String appParams,
String mainLib)
77 if (m_membersInitialized)
80 startNativeApplicationImpl(appParams, mainLib);
85 m_membersInitialized =
true;
86 m_topLevelWindows.clear();
87 m_displayManager.registerDisplayListener();
88 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
89 ValueAnimator.registerDurationScaleChangeListener(
90 QtActivityDelegateBase::updateUiMotionScale);
91 updateUiMotionScale(ValueAnimator.getDurationScale());
93 m_inputDelegate.initInputMethodManager(m_activity);
96 PackageManager pm = m_activity.getPackageManager();
97 ActivityInfo activityInfo = pm.getActivityInfo(m_activity.getComponentName(), 0);
98 m_inputDelegate.setSoftInputMode(activityInfo.softInputMode);
99 }
catch (PackageManager.NameNotFoundException e) {
106 void hideSplashScreen()
111 void handleUiModeChange()
113 Resources resources = m_activity.getResources();
114 Configuration
config = resources.getConfiguration();
115 int uiMode = config.uiMode & Configuration.UI_MODE_NIGHT_MASK;
117 if (QtWindowInsetsController.decorFitsSystemWindows(m_activity)) {
119 QtWindowInsetsController.enableSystemBarsBackgroundDrawing(
window);
120 int status = QtWindowInsetsController.getThemeDefaultStatusBarColor(m_activity);
121 QtWindowInsetsController.setStatusBarColor(
window, status);
122 int nav = QtWindowInsetsController.getThemeDefaultNavigationBarColor(m_activity);
123 QtWindowInsetsController.setNavigationBarColor(
window, nav);
127 if (canOverrideColorSchemeHint()) {
128 boolean isLight = uiMode == Configuration.UI_MODE_NIGHT_NO;
129 QtWindowInsetsController.setStatusBarColorHint(m_activity, isLight);
130 QtWindowInsetsController.setNavigationBarColorHint(m_activity, isLight);
134 case Configuration.UI_MODE_NIGHT_NO:
135 ExtractStyle.runIfNeeded(m_activity,
false);
136 QtDisplayManager.handleUiDarkModeChanged(0);
138 case Configuration.UI_MODE_NIGHT_YES:
139 ExtractStyle.runIfNeeded(m_activity,
true);
140 QtDisplayManager.handleUiDarkModeChanged(1);
144 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
146 UiModeManager uiModeManager =
147 (UiModeManager) m_activity.getSystemService(m_activity.UI_MODE_SERVICE);
148 updateUiContrast(uiModeManager.getContrast());
Q_CORE_EXPORT QtJniTypes::Activity activity()