6package org.qtproject.qt.android;
8import android.app.Activity;
9import android.content.pm.ActivityInfo;
10import android.content.pm.PackageManager;
11import android.content.res.Configuration;
12import android.graphics.Color;
13import android.graphics.drawable.ColorDrawable;
14import android.graphics.drawable.Drawable;
15import android.graphics.Rect;
16import android.os.Build;
17import android.util.DisplayMetrics;
18import android.util.Log;
19import android.util.TypedValue;
20import android.view.Display;
21import android.view.ViewTreeObserver;
22import android.view.animation.AccelerateInterpolator;
23import android.view.animation.AlphaAnimation;
24import android.view.animation.Animation;
25import android.view.Menu;
26import android.view.View;
27import android.view.ViewConfiguration;
28import android.view.ViewGroup;
29import android.view.Window;
30import android.view.WindowInsetsController;
31import android.widget.ImageView;
32import android.widget.PopupMenu;
34import java.util.HashMap;
36abstract class QtActivityDelegateBase
38 protected Activity m_activity;
39 protected HashMap<Integer, QtWindow> m_topLevelWindows;
40 protected QtAccessibilityDelegate m_accessibilityDelegate =
null;
41 protected QtDisplayManager m_displayManager =
null;
42 protected QtInputDelegate m_inputDelegate =
null;
44 private boolean m_membersInitialized =
false;
45 private boolean m_contextMenuVisible =
false;
48 abstract void startNativeApplicationImpl(String appParams, String mainLib);
49 abstract QtAccessibilityDelegate createAccessibilityDelegate();
50 abstract QtLayout getQtLayout();
54 void setUpSplashScreen(
int orientation) {}
55 void hideSplashScreen(
final int duration) {}
56 void openContextMenu(
final int x,
final int y,
final int w,
final int h) {}
57 void setActionBarVisibility(
boolean visible) {}
58 void addTopLevelWindow(
final QtWindow
window) {}
59 void removeTopLevelWindow(
final int id) {}
60 void bringChildToFront(
final int id) {}
61 void bringChildToBack(
int id) {}
62 void setSystemUiVisibility(
int systemUiVisibility) {}
64 QtActivityDelegateBase(Activity activity)
68 QtNative.setActivity(m_activity);
71 QtDisplayManager displayManager() {
72 return m_displayManager;
76 QtInputDelegate getInputDelegate() {
77 return m_inputDelegate;
80 void setContextMenuVisible(
boolean contextMenuVisible)
82 m_contextMenuVisible = contextMenuVisible;
85 boolean isContextMenuVisible()
87 return m_contextMenuVisible;
90 public boolean updateActivityAfterRestart(Activity activity) {
94 QtNative.setActivity(m_activity);
97 return QtNative.updateNativeActivity();
98 }
catch (Exception e) {
99 Log.w(QtNative.QtTAG,
"Failed to update the activity.");
105 public void startNativeApplication(String appParams, String mainLib)
107 if (m_membersInitialized)
110 startNativeApplicationImpl(appParams, mainLib);
115 m_membersInitialized =
true;
116 m_topLevelWindows =
new HashMap<Integer, QtWindow>();
118 m_displayManager =
new QtDisplayManager(m_activity);
119 m_displayManager.registerDisplayListener();
121 QtInputDelegate.KeyboardVisibilityListener keyboardVisibilityListener =
122 () -> m_displayManager.updateFullScreen();
123 m_inputDelegate =
new QtInputDelegate(m_activity, keyboardVisibilityListener);
126 PackageManager pm = m_activity.getPackageManager();
127 ActivityInfo activityInfo = pm.getActivityInfo(m_activity.getComponentName(), 0);
128 m_inputDelegate.setSoftInputMode(activityInfo.softInputMode);
129 }
catch (PackageManager.NameNotFoundException e) {
136 protected void registerGlobalFocusChangeListener(
final View view) {
137 view.getViewTreeObserver().addOnGlobalFocusChangeListener(this::onGlobalFocusChanged);
140 private void onGlobalFocusChanged(
View oldFocus,
View newFocus) {
141 if (newFocus instanceof QtEditText) {
142 final QtWindow newWindow = (QtWindow) newFocus.getParent();
143 QtWindow.windowFocusChanged(
true, newWindow.getId());
144 m_inputDelegate.setFocusedView((QtEditText) newFocus);
147 if (oldFocus instanceof QtEditText) {
148 final QtWindow oldWindow = (QtWindow) oldFocus.getParent();
149 id = oldWindow.getId();
151 QtWindow.windowFocusChanged(
false,
id);
152 m_inputDelegate.setFocusedView(
null);
156 public void hideSplashScreen()
162 public void notifyLocationChange(
int viewId)
164 if (m_accessibilityDelegate ==
null)
166 m_accessibilityDelegate.notifyLocationChange(viewId);
170 public void notifyObjectHide(
int viewId,
int parentId)
172 if (m_accessibilityDelegate ==
null)
174 m_accessibilityDelegate.notifyObjectHide(viewId, parentId);
178 public void notifyObjectShow(
int parentId)
180 if (m_accessibilityDelegate ==
null)
182 m_accessibilityDelegate.notifyObjectShow(parentId);
186 public void notifyObjectFocus(
int viewId)
188 if (m_accessibilityDelegate ==
null)
190 m_accessibilityDelegate.notifyObjectFocus(viewId);
194 public void notifyValueChanged(
int viewId, String
value)
196 if (m_accessibilityDelegate ==
null)
198 m_accessibilityDelegate.notifyValueChanged(viewId,
value);
202 public void notifyScrolledEvent(
int viewId)
204 if (m_accessibilityDelegate ==
null)
206 m_accessibilityDelegate.notifyScrolledEvent(viewId);
210 public void initializeAccessibility()
212 QtNative.runAction(() -> {
213 m_accessibilityDelegate = createAccessibilityDelegate();
217 void handleUiModeChange(
int uiMode)
220 if (Build.VERSION.SDK_INT >= 30) {
223 WindowInsetsController controller =
window.getInsetsController();
224 if (controller !=
null) {
226 int appearanceLight = Color.luminance(
window.getStatusBarColor()) > 0.5 ?
227 WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS : 0;
228 controller.setSystemBarsAppearance(appearanceLight,
229 WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS);
233 case Configuration.UI_MODE_NIGHT_NO:
234 ExtractStyle.runIfNeeded(m_activity,
false);
235 QtDisplayManager.handleUiDarkModeChanged(0);
237 case Configuration.UI_MODE_NIGHT_YES:
238 ExtractStyle.runIfNeeded(m_activity,
true);
239 QtDisplayManager.handleUiDarkModeChanged(1);
245 public void resetOptionsMenu()
247 QtNative.runAction(() -> m_activity.invalidateOptionsMenu());
251 public void openOptionsMenu()
253 QtNative.runAction(() -> m_activity.openOptionsMenu());
256 public void onCreatePopupMenu(Menu
menu)
258 QtNative.fillContextMenu(
menu);
259 m_contextMenuVisible =
true;
263 public void closeContextMenu()
265 QtNative.runAction(() -> m_activity.closeContextMenu());
[Window class with invokable method]
Q_CORE_EXPORT QtJniTypes::Activity activity()
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLint GLint GLint GLint GLint x
[0]
GLfloat GLfloat GLfloat w
[0]
GLfloat GLfloat GLfloat GLfloat h