kivyforge 3.0.0.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. kivyforge/__init__.py +9 -0
  2. kivyforge/artifacts/__init__.py +41 -0
  3. kivyforge/artifacts/cache.py +81 -0
  4. kivyforge/artifacts/collect.py +354 -0
  5. kivyforge/artifacts/download.py +125 -0
  6. kivyforge/artifacts/frameworks.py +240 -0
  7. kivyforge/artifacts/native_stage_util.py +346 -0
  8. kivyforge/artifacts/runtime.py +65 -0
  9. kivyforge/artifacts/verify.py +45 -0
  10. kivyforge/artifacts/wheels.py +89 -0
  11. kivyforge/bundle/__init__.py +1 -0
  12. kivyforge/bundle/pycompile.py +161 -0
  13. kivyforge/cli/__init__.py +52 -0
  14. kivyforge/cli/_common.py +62 -0
  15. kivyforge/cli/_platform.py +84 -0
  16. kivyforge/cli/build.py +111 -0
  17. kivyforge/cli/clean.py +135 -0
  18. kivyforge/cli/doctor.py +52 -0
  19. kivyforge/cli/init.py +612 -0
  20. kivyforge/cli/init_writer.py +716 -0
  21. kivyforge/cli/lock.py +261 -0
  22. kivyforge/cli/open_cmd.py +15 -0
  23. kivyforge/cli/package.py +134 -0
  24. kivyforge/cli/run.py +162 -0
  25. kivyforge/cli/status.py +20 -0
  26. kivyforge/cli/upgrade.py +314 -0
  27. kivyforge/config/__init__.py +46 -0
  28. kivyforge/config/errors.py +43 -0
  29. kivyforge/config/icons.py +60 -0
  30. kivyforge/config/loader.py +3079 -0
  31. kivyforge/config/model.py +817 -0
  32. kivyforge/doctor/__init__.py +19 -0
  33. kivyforge/doctor/checks_common.py +95 -0
  34. kivyforge/doctor/probe.py +357 -0
  35. kivyforge/doctor/result.py +41 -0
  36. kivyforge/lock/__init__.py +42 -0
  37. kivyforge/lock/_pip_shim.py +63 -0
  38. kivyforge/lock/find_links.py +182 -0
  39. kivyforge/lock/model.py +69 -0
  40. kivyforge/lock/pep751.py +111 -0
  41. kivyforge/lock/reader.py +30 -0
  42. kivyforge/lock/resolver.py +124 -0
  43. kivyforge/lock/wheelruntime/__init__.py +70 -0
  44. kivyforge/lock/wheelruntime/builder.py +280 -0
  45. kivyforge/lock/wheelruntime/model.py +94 -0
  46. kivyforge/lock/wheelruntime/native_binaries.py +127 -0
  47. kivyforge/lock/wheelruntime/pbs_github.py +133 -0
  48. kivyforge/lock/wheelruntime/profile.py +104 -0
  49. kivyforge/lock/wheelruntime/resolver.py +248 -0
  50. kivyforge/lock/wheelruntime/runtime.py +161 -0
  51. kivyforge/lock/wheelruntime/serialize.py +245 -0
  52. kivyforge/platforms/__init__.py +114 -0
  53. kivyforge/platforms/android/__init__.py +140 -0
  54. kivyforge/platforms/android/adb.py +215 -0
  55. kivyforge/platforms/android/bootstrap/__init__.py +7 -0
  56. kivyforge/platforms/android/bootstrap/contract.py +166 -0
  57. kivyforge/platforms/android/bootstrap/render.py +244 -0
  58. kivyforge/platforms/android/bootstrap/templates/androidtest/KivyforgeContractTest.java +76 -0
  59. kivyforge/platforms/android/bootstrap/templates/bootstrap_py/_kivy_bootstrap.py +50 -0
  60. kivyforge/platforms/android/bootstrap/templates/bootstrap_py/_kivyforge_bootstrap.py +54 -0
  61. kivyforge/platforms/android/bootstrap/templates/bootstrap_py/_kivyforge_selftest.py +97 -0
  62. kivyforge/platforms/android/bootstrap/templates/cpp/CMakeLists.txt +20 -0
  63. kivyforge/platforms/android/bootstrap/templates/cpp/main.c +150 -0
  64. kivyforge/platforms/android/bootstrap/templates/java/org/jnius/NativeInvocationHandler.java +48 -0
  65. kivyforge/platforms/android/bootstrap/templates/java/org/kivy/android/PythonActivity.java +75 -0
  66. kivyforge/platforms/android/bootstrap/templates/java/org/kivy/android/PythonBundle.java +132 -0
  67. kivyforge/platforms/android/bootstrap/templates/java/org/kivy/android/PythonService.java +189 -0
  68. kivyforge/platforms/android/bootstrap/templates/java/org/renpy/android/Hardware.java +276 -0
  69. kivyforge/platforms/android/bootstrap/templates/sdl2/LICENSE-SDL.txt +18 -0
  70. kivyforge/platforms/android/bootstrap/templates/sdl2/SDL_REVISION.txt +3 -0
  71. kivyforge/platforms/android/bootstrap/templates/sdl2/org/libsdl/app/HIDDevice.java +22 -0
  72. kivyforge/platforms/android/bootstrap/templates/sdl2/org/libsdl/app/HIDDeviceBLESteamController.java +650 -0
  73. kivyforge/platforms/android/bootstrap/templates/sdl2/org/libsdl/app/HIDDeviceManager.java +698 -0
  74. kivyforge/platforms/android/bootstrap/templates/sdl2/org/libsdl/app/HIDDeviceUSB.java +309 -0
  75. kivyforge/platforms/android/bootstrap/templates/sdl2/org/libsdl/app/SDL.java +90 -0
  76. kivyforge/platforms/android/bootstrap/templates/sdl2/org/libsdl/app/SDLActivity.java +2120 -0
  77. kivyforge/platforms/android/bootstrap/templates/sdl2/org/libsdl/app/SDLAudioManager.java +514 -0
  78. kivyforge/platforms/android/bootstrap/templates/sdl2/org/libsdl/app/SDLControllerManager.java +856 -0
  79. kivyforge/platforms/android/bootstrap/templates/sdl2/org/libsdl/app/SDLSurface.java +405 -0
  80. kivyforge/platforms/android/bootstrap/templates/sdl3/LICENSE-SDL.txt +18 -0
  81. kivyforge/platforms/android/bootstrap/templates/sdl3/SDL_REVISION.txt +3 -0
  82. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/HIDDevice.java +21 -0
  83. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/HIDDeviceBLESteamController.java +829 -0
  84. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/HIDDeviceManager.java +698 -0
  85. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/HIDDeviceUSB.java +354 -0
  86. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/SDL.java +90 -0
  87. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/SDLActivity.java +2240 -0
  88. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/SDLAudioManager.java +126 -0
  89. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/SDLControllerManager.java +1010 -0
  90. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/SDLDummyEdit.java +66 -0
  91. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/SDLInputConnection.java +136 -0
  92. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/SDLSensorManager.java +73 -0
  93. kivyforge/platforms/android/bootstrap/templates/sdl3/org/libsdl/app/SDLSurface.java +464 -0
  94. kivyforge/platforms/android/cli.py +1023 -0
  95. kivyforge/platforms/android/doctor.py +899 -0
  96. kivyforge/platforms/android/elf.py +148 -0
  97. kivyforge/platforms/android/generate/__init__.py +1 -0
  98. kivyforge/platforms/android/generate/manifest.py +261 -0
  99. kivyforge/platforms/android/generate/project.py +462 -0
  100. kivyforge/platforms/android/generate/services.py +187 -0
  101. kivyforge/platforms/android/gradle_wrapper/NOTICE +3 -0
  102. kivyforge/platforms/android/gradle_wrapper/SHA256SUMS +1 -0
  103. kivyforge/platforms/android/gradle_wrapper/gradle-wrapper.jar +0 -0
  104. kivyforge/platforms/android/gradle_wrapper/gradlew +164 -0
  105. kivyforge/platforms/android/gradle_wrapper/gradlew.bat +90 -0
  106. kivyforge/platforms/android/gradlew.py +60 -0
  107. kivyforge/platforms/android/icons.py +237 -0
  108. kivyforge/platforms/android/lock/__init__.py +1 -0
  109. kivyforge/platforms/android/lock/archives.py +109 -0
  110. kivyforge/platforms/android/lock/builder.py +387 -0
  111. kivyforge/platforms/android/lock/markers.py +71 -0
  112. kivyforge/platforms/android/lock/maven.py +252 -0
  113. kivyforge/platforms/android/lock/model.py +113 -0
  114. kivyforge/platforms/android/lock/python_meta.py +199 -0
  115. kivyforge/platforms/android/lock/reader.py +206 -0
  116. kivyforge/platforms/android/lock/resolver.py +276 -0
  117. kivyforge/platforms/android/lock/writer.py +121 -0
  118. kivyforge/platforms/android/policy.py +214 -0
  119. kivyforge/platforms/android/signing.py +145 -0
  120. kivyforge/platforms/android/smoke.py +43 -0
  121. kivyforge/platforms/android/splash.py +293 -0
  122. kivyforge/platforms/android/stage/__init__.py +1 -0
  123. kivyforge/platforms/android/stage/bundle.py +295 -0
  124. kivyforge/platforms/android/stage/jnilibs.py +186 -0
  125. kivyforge/platforms/android/stage/runtime.py +61 -0
  126. kivyforge/platforms/android/stage/wheels.py +106 -0
  127. kivyforge/platforms/android/toolchain.py +29 -0
  128. kivyforge/platforms/base.py +157 -0
  129. kivyforge/platforms/ios/__init__.py +129 -0
  130. kivyforge/platforms/ios/assets.py +193 -0
  131. kivyforge/platforms/ios/buildsettings.py +128 -0
  132. kivyforge/platforms/ios/cli.py +543 -0
  133. kivyforge/platforms/ios/doctor.py +410 -0
  134. kivyforge/platforms/ios/entitlements.py +34 -0
  135. kivyforge/platforms/ios/generator.py +318 -0
  136. kivyforge/platforms/ios/lock/__init__.py +71 -0
  137. kivyforge/platforms/ios/lock/builder.py +393 -0
  138. kivyforge/platforms/ios/lock/markers.py +69 -0
  139. kivyforge/platforms/ios/lock/model.py +95 -0
  140. kivyforge/platforms/ios/lock/python_meta.py +187 -0
  141. kivyforge/platforms/ios/lock/reader.py +191 -0
  142. kivyforge/platforms/ios/lock/resolver.py +304 -0
  143. kivyforge/platforms/ios/lock/spm.py +217 -0
  144. kivyforge/platforms/ios/lock/writer.py +114 -0
  145. kivyforge/platforms/ios/lock/xcframework.py +188 -0
  146. kivyforge/platforms/ios/materialize.py +59 -0
  147. kivyforge/platforms/ios/plist.py +91 -0
  148. kivyforge/platforms/ios/privacy.py +39 -0
  149. kivyforge/platforms/ios/skeleton.py +165 -0
  150. kivyforge/platforms/ios/sources.py +63 -0
  151. kivyforge/platforms/ios/staging.py +225 -0
  152. kivyforge/platforms/ios/swift_packages.py +324 -0
  153. kivyforge/platforms/ios/templates/kivyforge_bootstrap.h +34 -0
  154. kivyforge/platforms/ios/templates/kivyforge_bootstrap.m +146 -0
  155. kivyforge/platforms/ios/templates/main.m +15 -0
  156. kivyforge/platforms/ios/templates/main_config.h.in +12 -0
  157. kivyforge/platforms/ios/xcframeworks.py +194 -0
  158. kivyforge/platforms/ios/xcode/__init__.py +76 -0
  159. kivyforge/platforms/ios/xcode/commands.py +296 -0
  160. kivyforge/platforms/ios/xcode/runner.py +316 -0
  161. kivyforge/platforms/linux/__init__.py +120 -0
  162. kivyforge/platforms/linux/appimage.py +169 -0
  163. kivyforge/platforms/linux/bundle.py +235 -0
  164. kivyforge/platforms/linux/cli.py +232 -0
  165. kivyforge/platforms/linux/desktop.py +71 -0
  166. kivyforge/platforms/linux/doctor.py +438 -0
  167. kivyforge/platforms/linux/elftools.py +95 -0
  168. kivyforge/platforms/linux/icons.py +129 -0
  169. kivyforge/platforms/linux/launcher.py +107 -0
  170. kivyforge/platforms/linux/lock/__init__.py +126 -0
  171. kivyforge/platforms/linux/lock/profile.py +254 -0
  172. kivyforge/platforms/linux/lock/runtime.py +75 -0
  173. kivyforge/platforms/linux/native_stage.py +47 -0
  174. kivyforge/platforms/linux/runtime_stage.py +107 -0
  175. kivyforge/platforms/linux/wheels_stage.py +103 -0
  176. kivyforge/platforms/macos/__init__.py +121 -0
  177. kivyforge/platforms/macos/bundle.py +255 -0
  178. kivyforge/platforms/macos/cli.py +269 -0
  179. kivyforge/platforms/macos/doctor.py +480 -0
  180. kivyforge/platforms/macos/icns.py +75 -0
  181. kivyforge/platforms/macos/launcher.py +118 -0
  182. kivyforge/platforms/macos/lock/__init__.py +112 -0
  183. kivyforge/platforms/macos/lock/profile.py +119 -0
  184. kivyforge/platforms/macos/lock/runtime.py +58 -0
  185. kivyforge/platforms/macos/machotools.py +138 -0
  186. kivyforge/platforms/macos/native_stage.py +47 -0
  187. kivyforge/platforms/macos/notarize.py +143 -0
  188. kivyforge/platforms/macos/plist.py +37 -0
  189. kivyforge/platforms/macos/runtime_stage.py +110 -0
  190. kivyforge/platforms/macos/signing.py +78 -0
  191. kivyforge/platforms/macos/wheels_stage.py +108 -0
  192. kivyforge/platforms/windows/__init__.py +133 -0
  193. kivyforge/platforms/windows/assets.py +76 -0
  194. kivyforge/platforms/windows/bundle.py +298 -0
  195. kivyforge/platforms/windows/cli.py +314 -0
  196. kivyforge/platforms/windows/doctor.py +563 -0
  197. kivyforge/platforms/windows/fsswap.py +87 -0
  198. kivyforge/platforms/windows/icons.py +64 -0
  199. kivyforge/platforms/windows/launcher/__init__.py +193 -0
  200. kivyforge/platforms/windows/launcher/build_launcher.py +507 -0
  201. kivyforge/platforms/windows/launcher/launcher.c +379 -0
  202. kivyforge/platforms/windows/lock/__init__.py +112 -0
  203. kivyforge/platforms/windows/lock/profile.py +101 -0
  204. kivyforge/platforms/windows/lock/runtime.py +64 -0
  205. kivyforge/platforms/windows/naming.py +52 -0
  206. kivyforge/platforms/windows/native_stage.py +66 -0
  207. kivyforge/platforms/windows/petools.py +98 -0
  208. kivyforge/platforms/windows/rcedit.py +116 -0
  209. kivyforge/platforms/windows/runtime_stage.py +221 -0
  210. kivyforge/platforms/windows/signing.py +168 -0
  211. kivyforge/platforms/windows/vendor/LICENSE.rcedit +29 -0
  212. kivyforge/platforms/windows/vendor/NOTICE +17 -0
  213. kivyforge/platforms/windows/vendor/SHA256SUMS +4 -0
  214. kivyforge/platforms/windows/vendor/TOOLSET.txt +4 -0
  215. kivyforge/platforms/windows/vendor/__init__.py +12 -0
  216. kivyforge/platforms/windows/vendor/fetch_rcedit.py +97 -0
  217. kivyforge/platforms/windows/vendor/launcher-amd64.exe +0 -0
  218. kivyforge/platforms/windows/vendor/rcedit-x64.exe +0 -0
  219. kivyforge/platforms/windows/wheels_stage.py +139 -0
  220. kivyforge-3.0.0.dev0.dist-info/METADATA +609 -0
  221. kivyforge-3.0.0.dev0.dist-info/RECORD +225 -0
  222. kivyforge-3.0.0.dev0.dist-info/WHEEL +5 -0
  223. kivyforge-3.0.0.dev0.dist-info/entry_points.txt +3 -0
  224. kivyforge-3.0.0.dev0.dist-info/licenses/LICENSE +21 -0
  225. kivyforge-3.0.0.dev0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,464 @@
1
+ package org.libsdl.app;
2
+
3
+
4
+ import android.content.Context;
5
+ import android.content.pm.ActivityInfo;
6
+ import android.graphics.Insets;
7
+ import android.hardware.Sensor;
8
+ import android.hardware.SensorEvent;
9
+ import android.hardware.SensorEventListener;
10
+ import android.hardware.SensorManager;
11
+ import android.os.Build;
12
+ import android.util.DisplayMetrics;
13
+ import android.util.Log;
14
+ import android.view.Display;
15
+ import android.view.InputDevice;
16
+ import android.view.KeyEvent;
17
+ import android.view.MotionEvent;
18
+ import android.view.PointerIcon;
19
+ import android.view.Surface;
20
+ import android.view.SurfaceHolder;
21
+ import android.view.SurfaceView;
22
+ import android.view.View;
23
+ import android.view.WindowInsets;
24
+ import android.view.WindowManager;
25
+
26
+ import android.view.ScaleGestureDetector;
27
+
28
+ /**
29
+ SDLSurface. This is what we draw on, so we need to know when it's created
30
+ in order to do anything useful.
31
+
32
+ Because of this, that's where we set up the SDL thread
33
+ */
34
+ public class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
35
+ View.OnApplyWindowInsetsListener, View.OnKeyListener, View.OnTouchListener,
36
+ SensorEventListener, ScaleGestureDetector.OnScaleGestureListener {
37
+
38
+ // Sensors
39
+ protected SensorManager mSensorManager;
40
+ protected Display mDisplay;
41
+
42
+ // Keep track of the surface size to normalize touch events
43
+ protected float mWidth, mHeight;
44
+
45
+ // Is SurfaceView ready for rendering
46
+ protected boolean mIsSurfaceReady;
47
+
48
+ // Is on-screen keyboard visible
49
+ protected boolean mKeyboardVisible;
50
+
51
+ // Pinch events
52
+ private final ScaleGestureDetector scaleGestureDetector;
53
+
54
+ // Startup
55
+ protected SDLSurface(Context context) {
56
+ super(context);
57
+ getHolder().addCallback(this);
58
+
59
+ scaleGestureDetector = new ScaleGestureDetector(context, this);
60
+
61
+ setFocusable(true);
62
+ setFocusableInTouchMode(true);
63
+ requestFocus();
64
+ setOnApplyWindowInsetsListener(this);
65
+ setOnKeyListener(this);
66
+ setOnTouchListener(this);
67
+
68
+ mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
69
+ mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
70
+
71
+ setOnGenericMotionListener(SDLActivity.getMotionListener());
72
+
73
+ // Some arbitrary defaults to avoid a potential division by zero
74
+ mWidth = 1.0f;
75
+ mHeight = 1.0f;
76
+
77
+ mIsSurfaceReady = false;
78
+ }
79
+
80
+ protected void handlePause() {
81
+ enableSensor(Sensor.TYPE_ACCELEROMETER, false);
82
+ }
83
+
84
+ protected void handleResume() {
85
+ setFocusable(true);
86
+ setFocusableInTouchMode(true);
87
+ requestFocus();
88
+ setOnApplyWindowInsetsListener(this);
89
+ setOnKeyListener(this);
90
+ setOnTouchListener(this);
91
+ enableSensor(Sensor.TYPE_ACCELEROMETER, true);
92
+ }
93
+
94
+ protected Surface getNativeSurface() {
95
+ return getHolder().getSurface();
96
+ }
97
+
98
+ // Called when we have a valid drawing surface
99
+ @Override
100
+ public void surfaceCreated(SurfaceHolder holder) {
101
+ Log.v("SDL", "surfaceCreated()");
102
+ SDLActivity.onNativeSurfaceCreated();
103
+ }
104
+
105
+ // Called when we lose the surface
106
+ @Override
107
+ public void surfaceDestroyed(SurfaceHolder holder) {
108
+ Log.v("SDL", "surfaceDestroyed()");
109
+
110
+ // Transition to pause, if needed
111
+ SDLActivity.mNextNativeState = SDLActivity.NativeState.PAUSED;
112
+ SDLActivity.handleNativeState();
113
+
114
+ mIsSurfaceReady = false;
115
+ SDLActivity.onNativeSurfaceDestroyed();
116
+ }
117
+
118
+ // Called when the surface is resized
119
+ @Override
120
+ public void surfaceChanged(SurfaceHolder holder,
121
+ int format, int width, int height) {
122
+ Log.v("SDL", "surfaceChanged()");
123
+
124
+ if (SDLActivity.mSingleton == null) {
125
+ return;
126
+ }
127
+
128
+ mWidth = width;
129
+ mHeight = height;
130
+ int nDeviceWidth = width;
131
+ int nDeviceHeight = height;
132
+ float density = 1.0f;
133
+ try
134
+ {
135
+ DisplayMetrics realMetrics = new DisplayMetrics();
136
+ mDisplay.getRealMetrics( realMetrics );
137
+ nDeviceWidth = realMetrics.widthPixels;
138
+ nDeviceHeight = realMetrics.heightPixels;
139
+ // Use densityDpi instead of density to more closely match what the UI scale is
140
+ density = (float)realMetrics.densityDpi / 160.0f;
141
+ } catch(Exception ignored) {
142
+ }
143
+
144
+ synchronized(SDLActivity.getContext()) {
145
+ // In case we're waiting on a size change after going fullscreen, send a notification.
146
+ SDLActivity.getContext().notifyAll();
147
+ }
148
+
149
+ Log.v("SDL", "Window size: " + width + "x" + height);
150
+ Log.v("SDL", "Device size: " + nDeviceWidth + "x" + nDeviceHeight);
151
+ SDLActivity.nativeSetScreenResolution(width, height, nDeviceWidth, nDeviceHeight, density, mDisplay.getRefreshRate());
152
+ SDLActivity.onNativeResize();
153
+
154
+ // Prevent a screen distortion glitch,
155
+ // for instance when the device is in Landscape and a Portrait App is resumed.
156
+ boolean skip = false;
157
+ int requestedOrientation = SDLActivity.mSingleton.getRequestedOrientation();
158
+
159
+ if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT) {
160
+ if (mWidth > mHeight) {
161
+ skip = true;
162
+ }
163
+ } else if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE || requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE) {
164
+ if (mWidth < mHeight) {
165
+ skip = true;
166
+ }
167
+ }
168
+
169
+ // Special Patch for Square Resolution: Black Berry Passport
170
+ if (skip) {
171
+ double min = Math.min(mWidth, mHeight);
172
+ double max = Math.max(mWidth, mHeight);
173
+
174
+ if (max / min < 1.20) {
175
+ Log.v("SDL", "Don't skip on such aspect-ratio. Could be a square resolution.");
176
+ skip = false;
177
+ }
178
+ }
179
+
180
+ // Don't skip if we might be multi-window or have popup dialogs
181
+ if (skip) {
182
+ if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) {
183
+ skip = false;
184
+ }
185
+ }
186
+
187
+ if (skip) {
188
+ Log.v("SDL", "Skip .. Surface is not ready.");
189
+ mIsSurfaceReady = false;
190
+ return;
191
+ }
192
+
193
+ /* If the surface has been previously destroyed by onNativeSurfaceDestroyed, recreate it here */
194
+ SDLActivity.onNativeSurfaceChanged();
195
+
196
+ /* Surface is ready */
197
+ mIsSurfaceReady = true;
198
+
199
+ SDLActivity.mNextNativeState = SDLActivity.NativeState.RESUMED;
200
+ SDLActivity.handleNativeState();
201
+ }
202
+
203
+ // Window inset
204
+ @Override
205
+ public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
206
+ if (Build.VERSION.SDK_INT >= 30 /* Android 11 (R) */) {
207
+ Insets combined = insets.getInsets(WindowInsets.Type.systemBars() |
208
+ WindowInsets.Type.systemGestures() |
209
+ WindowInsets.Type.mandatorySystemGestures() |
210
+ WindowInsets.Type.tappableElement() |
211
+ WindowInsets.Type.displayCutout());
212
+
213
+ SDLActivity.onNativeInsetsChanged(combined.left, combined.right, combined.top, combined.bottom);
214
+
215
+ if (insets.isVisible(WindowInsets.Type.ime())) {
216
+ if (!mKeyboardVisible) {
217
+ mKeyboardVisible = true;
218
+ SDLActivity.onNativeScreenKeyboardShown();
219
+ }
220
+ } else {
221
+ if (mKeyboardVisible) {
222
+ mKeyboardVisible = false;
223
+ SDLActivity.onNativeScreenKeyboardHidden();
224
+ }
225
+ }
226
+ }
227
+
228
+ // Pass these to any child views in case they need them
229
+ return insets;
230
+ }
231
+
232
+ // Key events
233
+ @Override
234
+ public boolean onKey(View v, int keyCode, KeyEvent event) {
235
+ return SDLActivity.handleKeyEvent(v, keyCode, event, null);
236
+ }
237
+
238
+ private float getNormalizedX(float x)
239
+ {
240
+ if (mWidth <= 1) {
241
+ return 0.5f;
242
+ } else {
243
+ return (x / (mWidth - 1));
244
+ }
245
+ }
246
+
247
+ private float getNormalizedY(float y)
248
+ {
249
+ if (mHeight <= 1) {
250
+ return 0.5f;
251
+ } else {
252
+ return (y / (mHeight - 1));
253
+ }
254
+ }
255
+
256
+ // Touch events
257
+ @Override
258
+ public boolean onTouch(View v, MotionEvent event) {
259
+ /* Ref: http://developer.android.com/training/gestures/multi.html */
260
+ int touchDevId = event.getDeviceId();
261
+ final int pointerCount = event.getPointerCount();
262
+ int action = event.getActionMasked();
263
+ int pointerId;
264
+ int i = 0;
265
+ float x,y,p;
266
+
267
+ if (action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_POINTER_DOWN)
268
+ i = event.getActionIndex();
269
+
270
+ do {
271
+ int toolType = event.getToolType(i);
272
+
273
+ if (toolType == MotionEvent.TOOL_TYPE_MOUSE) {
274
+ int buttonState = event.getButtonState();
275
+ boolean relative = false;
276
+
277
+ // We need to check if we're in relative mouse mode and get the axis offset rather than the x/y values
278
+ // if we are. We'll leverage our existing mouse motion listener
279
+ SDLGenericMotionListener_API14 motionListener = SDLActivity.getMotionListener();
280
+ x = motionListener.getEventX(event, i);
281
+ y = motionListener.getEventY(event, i);
282
+ relative = motionListener.inRelativeMode();
283
+
284
+ SDLActivity.onNativeMouse(buttonState, action, x, y, relative);
285
+ } else if (toolType == MotionEvent.TOOL_TYPE_STYLUS || toolType == MotionEvent.TOOL_TYPE_ERASER) {
286
+ pointerId = event.getPointerId(i);
287
+ x = event.getX(i);
288
+ y = event.getY(i);
289
+ p = event.getPressure(i);
290
+ if (p > 1.0f) {
291
+ // may be larger than 1.0f on some devices
292
+ // see the documentation of getPressure(i)
293
+ p = 1.0f;
294
+ }
295
+
296
+ // BUTTON_STYLUS_PRIMARY is 2^5, so shift by 4, and apply SDL_PEN_INPUT_DOWN/SDL_PEN_INPUT_ERASER_TIP
297
+ int buttonState = (event.getButtonState() >> 4) | (1 << (toolType == MotionEvent.TOOL_TYPE_STYLUS ? 0 : 30));
298
+ if ((event.getButtonState() & MotionEvent.BUTTON_TERTIARY) != 0) {
299
+ buttonState |= 0x08;
300
+ }
301
+
302
+ SDLActivity.onNativePen(pointerId, SDLActivity.getMotionListener().getPenDeviceType(event.getDevice()), buttonState, action, x, y, p);
303
+ } else { // MotionEvent.TOOL_TYPE_FINGER or MotionEvent.TOOL_TYPE_UNKNOWN
304
+ pointerId = event.getPointerId(i);
305
+ x = getNormalizedX(event.getX(i));
306
+ y = getNormalizedY(event.getY(i));
307
+ p = event.getPressure(i);
308
+ if (p > 1.0f) {
309
+ // may be larger than 1.0f on some devices
310
+ // see the documentation of getPressure(i)
311
+ p = 1.0f;
312
+ }
313
+
314
+ SDLActivity.onNativeTouch(touchDevId, pointerId, action, x, y, p);
315
+ }
316
+
317
+ // Non-primary up/down
318
+ if (action == MotionEvent.ACTION_POINTER_UP || action == MotionEvent.ACTION_POINTER_DOWN)
319
+ break;
320
+ } while (++i < pointerCount);
321
+
322
+ scaleGestureDetector.onTouchEvent(event);
323
+
324
+ return true;
325
+ }
326
+
327
+ // Sensor events
328
+ protected void enableSensor(int sensortype, boolean enabled) {
329
+ // TODO: This uses getDefaultSensor - what if we have >1 accels?
330
+ if (enabled) {
331
+ SDLSensorManager.registerListener(mSensorManager, this,
332
+ mSensorManager.getDefaultSensor(sensortype),
333
+ SensorManager.SENSOR_DELAY_GAME);
334
+ } else {
335
+ SDLSensorManager.unregisterListener(mSensorManager, this,
336
+ mSensorManager.getDefaultSensor(sensortype));
337
+ }
338
+ }
339
+
340
+ @Override
341
+ public void onAccuracyChanged(Sensor sensor, int accuracy) {
342
+ // TODO
343
+ }
344
+
345
+ @Override
346
+ public void onSensorChanged(SensorEvent event) {
347
+ if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
348
+
349
+ // Since we may have an orientation set, we won't receive onConfigurationChanged events.
350
+ // We thus should check here.
351
+ int newRotation;
352
+
353
+ float x, y;
354
+ switch (mDisplay.getRotation()) {
355
+ case Surface.ROTATION_0:
356
+ default:
357
+ x = event.values[0];
358
+ y = event.values[1];
359
+ newRotation = 0;
360
+ break;
361
+ case Surface.ROTATION_90:
362
+ x = -event.values[1];
363
+ y = event.values[0];
364
+ newRotation = 90;
365
+ break;
366
+ case Surface.ROTATION_180:
367
+ x = -event.values[0];
368
+ y = -event.values[1];
369
+ newRotation = 180;
370
+ break;
371
+ case Surface.ROTATION_270:
372
+ x = event.values[1];
373
+ y = -event.values[0];
374
+ newRotation = 270;
375
+ break;
376
+ }
377
+
378
+ if (newRotation != SDLActivity.mCurrentRotation) {
379
+ SDLActivity.mCurrentRotation = newRotation;
380
+ SDLActivity.onNativeRotationChanged(newRotation);
381
+ }
382
+
383
+ SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH,
384
+ y / SensorManager.GRAVITY_EARTH,
385
+ event.values[2] / SensorManager.GRAVITY_EARTH);
386
+
387
+
388
+ }
389
+ }
390
+
391
+ // Prevent android internal NullPointerException (https://github.com/libsdl-org/SDL/issues/13306)
392
+ @Override
393
+ public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) {
394
+ try {
395
+ return super.onResolvePointerIcon(event, pointerIndex);
396
+ } catch (NullPointerException e) {
397
+ return null;
398
+ }
399
+ }
400
+
401
+ // Captured pointer events for API 26.
402
+ @Override
403
+ public boolean onCapturedPointerEvent(MotionEvent event)
404
+ {
405
+ int action = event.getActionMasked();
406
+ int pointerCount = event.getPointerCount();
407
+
408
+ for (int i = 0; i < pointerCount; i++) {
409
+ float x, y;
410
+ switch (action) {
411
+ case MotionEvent.ACTION_SCROLL:
412
+ x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, i);
413
+ y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, i);
414
+ SDLActivity.onNativeMouse(0, action, x, y, false);
415
+ return true;
416
+
417
+ case MotionEvent.ACTION_HOVER_MOVE:
418
+ case MotionEvent.ACTION_MOVE:
419
+ x = event.getX(i);
420
+ y = event.getY(i);
421
+ SDLActivity.onNativeMouse(0, action, x, y, true);
422
+ return true;
423
+
424
+ case MotionEvent.ACTION_BUTTON_PRESS:
425
+ case MotionEvent.ACTION_BUTTON_RELEASE:
426
+
427
+ // Change our action value to what SDL's code expects.
428
+ if (action == MotionEvent.ACTION_BUTTON_PRESS) {
429
+ action = MotionEvent.ACTION_DOWN;
430
+ } else { /* MotionEvent.ACTION_BUTTON_RELEASE */
431
+ action = MotionEvent.ACTION_UP;
432
+ }
433
+
434
+ x = event.getX(i);
435
+ y = event.getY(i);
436
+ int button = event.getButtonState();
437
+
438
+ SDLActivity.onNativeMouse(button, action, x, y, true);
439
+ return true;
440
+ }
441
+ }
442
+
443
+ return false;
444
+ }
445
+
446
+ @Override
447
+ public boolean onScale(ScaleGestureDetector detector) {
448
+ float scale = detector.getScaleFactor();
449
+ SDLActivity.onNativePinchUpdate(scale);
450
+ return true;
451
+ }
452
+
453
+ @Override
454
+ public boolean onScaleBegin(ScaleGestureDetector detector) {
455
+ SDLActivity.onNativePinchStart();
456
+ return true;
457
+ }
458
+
459
+ @Override
460
+ public void onScaleEnd(ScaleGestureDetector detector) {
461
+ SDLActivity.onNativePinchEnd();
462
+ }
463
+
464
+ }