@nativescript/core 9.0.0-preview.3 → 9.0.1

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 (322) hide show
  1. package/application/application-common.d.ts +40 -14
  2. package/application/application-common.js +109 -5
  3. package/application/application-common.js.map +1 -1
  4. package/application/application-interfaces.d.ts +31 -0
  5. package/application/application-shims.d.ts +27 -0
  6. package/application/application-shims.js +27 -0
  7. package/application/application-shims.js.map +1 -1
  8. package/application/application.android.d.ts +12 -2
  9. package/application/application.android.js +380 -343
  10. package/application/application.android.js.map +1 -1
  11. package/application/application.d.ts +74 -1
  12. package/application/application.ios.d.ts +68 -1
  13. package/application/application.ios.js +642 -16
  14. package/application/application.ios.js.map +1 -1
  15. package/application/helpers.android.d.ts +0 -9
  16. package/application/helpers.android.js +0 -54
  17. package/application/helpers.android.js.map +1 -1
  18. package/application/helpers.d.ts +0 -10
  19. package/application/helpers.ios.d.ts +0 -19
  20. package/application/helpers.ios.js +0 -38
  21. package/application/helpers.ios.js.map +1 -1
  22. package/cli-hooks/{before-checkForChanges.js → before-checkForChanges.mjs} +7 -7
  23. package/cli-hooks/postinstall.mjs +7 -0
  24. package/cli-hooks/preuninstall.mjs +7 -0
  25. package/config/config.interface.d.ts +21 -0
  26. package/connectivity/index.android.js +25 -25
  27. package/connectivity/index.android.js.map +1 -1
  28. package/core-types/index.d.ts +78 -63
  29. package/core-types/index.js +11 -1
  30. package/core-types/index.js.map +1 -1
  31. package/core-types/validators.js +14 -5
  32. package/core-types/validators.js.map +1 -1
  33. package/data/observable/index.d.ts +2 -1
  34. package/data/observable/index.js +31 -19
  35. package/data/observable/index.js.map +1 -1
  36. package/fps-meter/fps-native.ios.js +1 -1
  37. package/fps-meter/fps-native.ios.js.map +1 -1
  38. package/globals/index.js +1 -2
  39. package/globals/index.js.map +1 -1
  40. package/http/http-request/index.ios.js +1 -1
  41. package/http/http-request/index.ios.js.map +1 -1
  42. package/image-asset/image-asset-common.js +31 -3
  43. package/image-asset/image-asset-common.js.map +1 -1
  44. package/image-source/index.android.js +4 -3
  45. package/image-source/index.android.js.map +1 -1
  46. package/image-source/index.d.ts +2 -2
  47. package/index.d.ts +1 -0
  48. package/index.js +0 -1
  49. package/index.js.map +1 -1
  50. package/inspector_modules.d.ts +0 -5
  51. package/inspector_modules.js +223 -103
  52. package/inspector_modules.js.map +1 -1
  53. package/package.json +15 -13
  54. package/platform/screen/index.d.ts +5 -0
  55. package/platforms/android/widgets-release.aar +0 -0
  56. package/references.d.ts +1 -1
  57. package/timer/index.android.js +15 -7
  58. package/timer/index.android.js.map +1 -1
  59. package/timer/index.ios.js +1 -1
  60. package/timer/index.ios.js.map +1 -1
  61. package/ui/action-bar/index.android.js +16 -18
  62. package/ui/action-bar/index.android.js.map +1 -1
  63. package/ui/action-bar/index.ios.d.ts +1 -0
  64. package/ui/action-bar/index.ios.js +28 -4
  65. package/ui/action-bar/index.ios.js.map +1 -1
  66. package/ui/animation/index.d.ts +14 -1
  67. package/ui/animation/index.ios.js +2 -3
  68. package/ui/animation/index.ios.js.map +1 -1
  69. package/ui/button/index.android.js +20 -20
  70. package/ui/button/index.android.js.map +1 -1
  71. package/ui/button/index.d.ts +1 -1
  72. package/ui/button/index.ios.d.ts +2 -1
  73. package/ui/button/index.ios.js +28 -10
  74. package/ui/button/index.ios.js.map +1 -1
  75. package/ui/core/control-state-change/index.ios.js +1 -1
  76. package/ui/core/control-state-change/index.ios.js.map +1 -1
  77. package/ui/core/properties/index.js +64 -52
  78. package/ui/core/properties/index.js.map +1 -1
  79. package/ui/core/view/index.android.d.ts +19 -2
  80. package/ui/core/view/index.android.js +544 -200
  81. package/ui/core/view/index.android.js.map +1 -1
  82. package/ui/core/view/index.d.ts +55 -4
  83. package/ui/core/view/index.ios.d.ts +19 -2
  84. package/ui/core/view/index.ios.js +148 -10
  85. package/ui/core/view/index.ios.js.map +1 -1
  86. package/ui/core/view/view-common.d.ts +70 -10
  87. package/ui/core/view/view-common.js +66 -1
  88. package/ui/core/view/view-common.js.map +1 -1
  89. package/ui/core/view/view-helper/index.d.ts +5 -0
  90. package/ui/core/view/view-helper/index.ios.d.ts +6 -4
  91. package/ui/core/view/view-helper/index.ios.js +37 -20
  92. package/ui/core/view/view-helper/index.ios.js.map +1 -1
  93. package/ui/core/view/view-helper/view-helper-common.js +7 -0
  94. package/ui/core/view/view-helper/view-helper-common.js.map +1 -1
  95. package/ui/core/view/view-interfaces.d.ts +22 -0
  96. package/ui/core/view-base/index.d.ts +4 -0
  97. package/ui/core/view-base/index.js.map +1 -1
  98. package/ui/date-picker/index.android.js +36 -38
  99. package/ui/date-picker/index.android.js.map +1 -1
  100. package/ui/date-picker/index.ios.js +1 -1
  101. package/ui/date-picker/index.ios.js.map +1 -1
  102. package/ui/dialogs/index.ios.js +4 -2
  103. package/ui/dialogs/index.ios.js.map +1 -1
  104. package/ui/editable-text-base/editable-text-base-common.js +1 -1
  105. package/ui/editable-text-base/editable-text-base-common.js.map +1 -1
  106. package/ui/editable-text-base/index.android.d.ts +1 -1
  107. package/ui/editable-text-base/index.android.js +35 -34
  108. package/ui/editable-text-base/index.android.js.map +1 -1
  109. package/ui/editable-text-base/index.ios.d.ts +1 -1
  110. package/ui/editable-text-base/index.ios.js +3 -0
  111. package/ui/editable-text-base/index.ios.js.map +1 -1
  112. package/ui/frame/activity.android.js +3 -0
  113. package/ui/frame/activity.android.js.map +1 -1
  114. package/ui/frame/fragment.transitions.android.d.ts +2 -1
  115. package/ui/frame/fragment.transitions.android.js +103 -104
  116. package/ui/frame/fragment.transitions.android.js.map +1 -1
  117. package/ui/frame/fragment.transitions.d.ts +3 -2
  118. package/ui/frame/frame-interfaces.d.ts +18 -8
  119. package/ui/frame/index.android.d.ts +2 -0
  120. package/ui/frame/index.android.js +57 -2
  121. package/ui/frame/index.android.js.map +1 -1
  122. package/ui/frame/index.d.ts +1 -1
  123. package/ui/frame/index.ios.d.ts +3 -1
  124. package/ui/frame/index.ios.js +94 -59
  125. package/ui/frame/index.ios.js.map +1 -1
  126. package/ui/gestures/index.android.js +129 -130
  127. package/ui/gestures/index.android.js.map +1 -1
  128. package/ui/gestures/index.ios.js +3 -5
  129. package/ui/gestures/index.ios.js.map +1 -1
  130. package/ui/gestures/touch-manager.js +32 -32
  131. package/ui/gestures/touch-manager.js.map +1 -1
  132. package/ui/image/index.android.js +17 -19
  133. package/ui/image/index.android.js.map +1 -1
  134. package/ui/image-cache/index.android.js +12 -14
  135. package/ui/image-cache/index.android.js.map +1 -1
  136. package/ui/image-cache/index.ios.js +6 -6
  137. package/ui/image-cache/index.ios.js.map +1 -1
  138. package/ui/index.d.ts +10 -4
  139. package/ui/index.js +4 -1
  140. package/ui/index.js.map +1 -1
  141. package/ui/label/index.android.js +4 -1
  142. package/ui/label/index.android.js.map +1 -1
  143. package/ui/label/index.ios.d.ts +2 -1
  144. package/ui/label/index.ios.js +12 -2
  145. package/ui/label/index.ios.js.map +1 -1
  146. package/ui/layouts/flexbox-layout/index.ios.js +3 -6
  147. package/ui/layouts/flexbox-layout/index.ios.js.map +1 -1
  148. package/ui/layouts/index.d.ts +5 -1
  149. package/ui/layouts/index.js +2 -0
  150. package/ui/layouts/index.js.map +1 -1
  151. package/ui/layouts/liquid-glass/index.android.d.ts +5 -0
  152. package/ui/layouts/liquid-glass/index.android.js +8 -0
  153. package/ui/layouts/liquid-glass/index.android.js.map +1 -0
  154. package/ui/layouts/liquid-glass/index.d.ts +10 -0
  155. package/ui/layouts/liquid-glass/index.ios.d.ts +10 -0
  156. package/ui/layouts/liquid-glass/index.ios.js +59 -0
  157. package/ui/layouts/liquid-glass/index.ios.js.map +1 -0
  158. package/ui/layouts/liquid-glass/liquid-glass-common.d.ts +3 -0
  159. package/ui/layouts/liquid-glass/liquid-glass-common.js +4 -0
  160. package/ui/layouts/liquid-glass/liquid-glass-common.js.map +1 -0
  161. package/ui/layouts/liquid-glass-container/index.android.d.ts +3 -0
  162. package/ui/layouts/liquid-glass-container/index.android.js +4 -0
  163. package/ui/layouts/liquid-glass-container/index.android.js.map +1 -0
  164. package/ui/layouts/liquid-glass-container/index.d.ts +3 -0
  165. package/ui/layouts/liquid-glass-container/index.ios.d.ts +14 -0
  166. package/ui/layouts/liquid-glass-container/index.ios.js +121 -0
  167. package/ui/layouts/liquid-glass-container/index.ios.js.map +1 -0
  168. package/ui/layouts/liquid-glass-container/liquid-glass-container-common.d.ts +4 -0
  169. package/ui/layouts/liquid-glass-container/liquid-glass-container-common.js +5 -0
  170. package/ui/layouts/liquid-glass-container/liquid-glass-container-common.js.map +1 -0
  171. package/ui/layouts/stack-layout/index.ios.js +6 -0
  172. package/ui/layouts/stack-layout/index.ios.js.map +1 -1
  173. package/ui/list-picker/index.android.js +31 -35
  174. package/ui/list-picker/index.android.js.map +1 -1
  175. package/ui/list-picker/index.ios.js +2 -2
  176. package/ui/list-picker/index.ios.js.map +1 -1
  177. package/ui/list-view/index.android.js +320 -321
  178. package/ui/list-view/index.android.js.map +1 -1
  179. package/ui/list-view/index.d.ts +7 -2
  180. package/ui/list-view/index.ios.d.ts +1 -1
  181. package/ui/list-view/index.ios.js +12 -27
  182. package/ui/list-view/index.ios.js.map +1 -1
  183. package/ui/page/index.android.d.ts +1 -10
  184. package/ui/page/index.android.js +1 -45
  185. package/ui/page/index.android.js.map +1 -1
  186. package/ui/page/index.d.ts +0 -8
  187. package/ui/page/index.ios.d.ts +1 -3
  188. package/ui/page/index.ios.js +33 -91
  189. package/ui/page/index.ios.js.map +1 -1
  190. package/ui/page/page-common.d.ts +0 -6
  191. package/ui/page/page-common.js +0 -14
  192. package/ui/page/page-common.js.map +1 -1
  193. package/ui/scroll-view/index.d.ts +1 -1
  194. package/ui/scroll-view/index.ios.d.ts +2 -0
  195. package/ui/scroll-view/index.ios.js +31 -12
  196. package/ui/scroll-view/index.ios.js.map +1 -1
  197. package/ui/scroll-view/scroll-view-common.d.ts +3 -8
  198. package/ui/scroll-view/scroll-view-common.js +4 -4
  199. package/ui/scroll-view/scroll-view-common.js.map +1 -1
  200. package/ui/search-bar/index.android.d.ts +2 -1
  201. package/ui/search-bar/index.android.js +64 -53
  202. package/ui/search-bar/index.android.js.map +1 -1
  203. package/ui/search-bar/index.d.ts +7 -0
  204. package/ui/search-bar/index.ios.d.ts +2 -1
  205. package/ui/search-bar/index.ios.js +14 -7
  206. package/ui/search-bar/index.ios.js.map +1 -1
  207. package/ui/search-bar/search-bar-common.d.ts +2 -0
  208. package/ui/search-bar/search-bar-common.js +7 -0
  209. package/ui/search-bar/search-bar-common.js.map +1 -1
  210. package/ui/segmented-bar/index.android.js +52 -58
  211. package/ui/segmented-bar/index.android.js.map +1 -1
  212. package/ui/segmented-bar/index.ios.js +1 -1
  213. package/ui/segmented-bar/index.ios.js.map +1 -1
  214. package/ui/slider/index.android.js +22 -25
  215. package/ui/slider/index.android.js.map +1 -1
  216. package/ui/slider/index.d.ts +1 -1
  217. package/ui/slider/index.ios.js +2 -2
  218. package/ui/slider/index.ios.js.map +1 -1
  219. package/ui/split-view/index.android.d.ts +4 -0
  220. package/ui/split-view/index.android.js +4 -0
  221. package/ui/split-view/index.android.js.map +1 -0
  222. package/ui/split-view/index.d.ts +11 -0
  223. package/ui/split-view/index.ios.d.ts +39 -0
  224. package/ui/split-view/index.ios.js +368 -0
  225. package/ui/split-view/index.ios.js.map +1 -0
  226. package/ui/split-view/split-view-common.d.ts +51 -0
  227. package/ui/split-view/split-view-common.js +111 -0
  228. package/ui/split-view/split-view-common.js.map +1 -0
  229. package/ui/styling/background-common.d.ts +4 -4
  230. package/ui/styling/background-common.js +8 -8
  231. package/ui/styling/background-common.js.map +1 -1
  232. package/ui/styling/background.d.ts +0 -3
  233. package/ui/styling/background.ios.d.ts +2 -1
  234. package/ui/styling/background.ios.js +47 -38
  235. package/ui/styling/background.ios.js.map +1 -1
  236. package/ui/styling/css-stroke.js.map +1 -1
  237. package/ui/styling/css-utils.d.ts +1 -0
  238. package/ui/styling/css-utils.js +15 -4
  239. package/ui/styling/css-utils.js.map +1 -1
  240. package/ui/styling/style/index.d.ts +3 -1
  241. package/ui/styling/style/index.js.map +1 -1
  242. package/ui/styling/style-properties.d.ts +1 -0
  243. package/ui/styling/style-properties.js +30 -11
  244. package/ui/styling/style-properties.js.map +1 -1
  245. package/ui/switch/index.android.js +16 -18
  246. package/ui/switch/index.android.js.map +1 -1
  247. package/ui/switch/index.ios.d.ts +1 -1
  248. package/ui/switch/index.ios.js +62 -25
  249. package/ui/switch/index.ios.js.map +1 -1
  250. package/ui/tab-view/index.android.js +185 -187
  251. package/ui/tab-view/index.android.js.map +1 -1
  252. package/ui/tab-view/index.d.ts +17 -1
  253. package/ui/tab-view/index.ios.d.ts +13 -5
  254. package/ui/tab-view/index.ios.js +255 -57
  255. package/ui/tab-view/index.ios.js.map +1 -1
  256. package/ui/tab-view/tab-view-common.d.ts +14 -0
  257. package/ui/tab-view/tab-view-common.js +15 -0
  258. package/ui/tab-view/tab-view-common.js.map +1 -1
  259. package/ui/text-base/index.android.d.ts +2 -1
  260. package/ui/text-base/index.android.js +134 -101
  261. package/ui/text-base/index.android.js.map +1 -1
  262. package/ui/text-base/index.d.ts +5 -0
  263. package/ui/text-base/index.ios.js +12 -18
  264. package/ui/text-base/index.ios.js.map +1 -1
  265. package/ui/text-base/text-base-common.d.ts +2 -1
  266. package/ui/text-base/text-base-common.js +1 -0
  267. package/ui/text-base/text-base-common.js.map +1 -1
  268. package/ui/text-field/index.android.js +3 -0
  269. package/ui/text-field/index.android.js.map +1 -1
  270. package/ui/text-field/index.ios.d.ts +2 -1
  271. package/ui/text-field/index.ios.js +9 -5
  272. package/ui/text-field/index.ios.js.map +1 -1
  273. package/ui/text-view/index.ios.d.ts +2 -1
  274. package/ui/text-view/index.ios.js +12 -7
  275. package/ui/text-view/index.ios.js.map +1 -1
  276. package/ui/time-picker/index.android.js +19 -21
  277. package/ui/time-picker/index.android.js.map +1 -1
  278. package/ui/time-picker/index.ios.js +1 -1
  279. package/ui/time-picker/index.ios.js.map +1 -1
  280. package/ui/transition/fade-transition.ios.js +5 -6
  281. package/ui/transition/fade-transition.ios.js.map +1 -1
  282. package/ui/transition/modal-transition.ios.js +19 -26
  283. package/ui/transition/modal-transition.ios.js.map +1 -1
  284. package/ui/transition/page-transition.android.js +18 -13
  285. package/ui/transition/page-transition.android.js.map +1 -1
  286. package/ui/transition/page-transition.ios.js +19 -25
  287. package/ui/transition/page-transition.ios.js.map +1 -1
  288. package/ui/transition/slide-transition.ios.js +5 -6
  289. package/ui/transition/slide-transition.ios.js.map +1 -1
  290. package/ui/web-view/index.android.js +58 -62
  291. package/ui/web-view/index.android.js.map +1 -1
  292. package/ui/web-view/index.ios.js +18 -18
  293. package/ui/web-view/index.ios.js.map +1 -1
  294. package/utils/common.d.ts +3 -1
  295. package/utils/common.js +9 -3
  296. package/utils/common.js.map +1 -1
  297. package/utils/constants.android.d.ts +1 -0
  298. package/utils/constants.android.js +3 -0
  299. package/utils/constants.android.js.map +1 -1
  300. package/utils/constants.d.ts +1 -0
  301. package/utils/constants.ios.d.ts +1 -0
  302. package/utils/constants.ios.js +3 -0
  303. package/utils/constants.ios.js.map +1 -1
  304. package/utils/index.d.ts +6 -0
  305. package/utils/layout-helper/index.android.d.ts +1 -0
  306. package/utils/layout-helper/index.android.js +9 -0
  307. package/utils/layout-helper/index.android.js.map +1 -1
  308. package/utils/layout-helper/index.d.ts +5 -0
  309. package/utils/layout-helper/index.ios.d.ts +1 -0
  310. package/utils/layout-helper/index.ios.js +4 -0
  311. package/utils/layout-helper/index.ios.js.map +1 -1
  312. package/utils/native-helper-for-android.d.ts +22 -0
  313. package/utils/native-helper-for-android.js +103 -0
  314. package/utils/native-helper-for-android.js.map +1 -1
  315. package/utils/native-helper.android.d.ts +9 -1
  316. package/utils/native-helper.android.js +5 -1
  317. package/utils/native-helper.android.js.map +1 -1
  318. package/utils/native-helper.d.ts +30 -0
  319. package/utils/native-helper.ios.js +20 -20
  320. package/utils/native-helper.ios.js.map +1 -1
  321. package/cli-hooks/postinstall.js +0 -2
  322. package/cli-hooks/preuninstall.js +0 -2
@@ -1,230 +1,186 @@
1
+ import { CoreTypes } from '../core-types';
1
2
  import { profile } from '../profiling';
2
3
  import { SDK_VERSION } from '../utils/constants';
3
4
  import { android as androidUtils } from '../utils';
4
- import { ApplicationCommon } from './application-common';
5
+ import { ApplicationCommon, initializeSdkVersionClass } from './application-common';
5
6
  import { Observable } from '../data/observable';
6
7
  import { Trace } from '../trace';
7
8
  import { CommonA11YServiceEnabledObservable, SharedA11YObservable, notifyAccessibilityFocusState, a11yServiceClasses, a11yServiceDisabledClass, a11yServiceEnabledClass, fontScaleCategoryClasses, fontScaleExtraLargeCategoryClass, fontScaleExtraSmallCategoryClass, fontScaleMediumCategoryClass, getCurrentA11YServiceClass, getCurrentFontScaleCategory, getCurrentFontScaleClass, getFontScaleCssClasses, setCurrentA11YServiceClass, setCurrentFontScaleCategory, setCurrentFontScaleClass, setFontScaleCssClasses, setFontScale, getFontScale, setInitFontScale, getFontScaleCategory, setInitAccessibilityCssHelper, FontScaleCategory, getClosestValidFontScale, VALID_FONT_SCALES, AccessibilityRole, AccessibilityState, AndroidAccessibilityEvent, isA11yEnabled, setA11yEnabled, } from '../accessibility/accessibility-common';
8
- import { androidGetForegroundActivity, androidGetStartActivity, androidPendingReceiverRegistrations, androidRegisterBroadcastReceiver, androidRegisteredReceivers, androidSetForegroundActivity, androidSetStartActivity, androidUnregisterBroadcastReceiver, applyContentDescription } from './helpers';
9
+ import { androidGetForegroundActivity, androidGetStartActivity, androidSetForegroundActivity, androidSetStartActivity, applyContentDescription } from './helpers';
9
10
  import { getImageFetcher, getNativeApp, getRootView, initImageCache, setA11yUpdatePropertiesCallback, setApplicationPropertiesCallback, setAppMainEntry, setNativeApp, setRootView, setToggleApplicationEventListenersCallback } from './helpers-common';
10
11
  import { getNativeScriptGlobals } from '../globals/global-utils';
12
+ import lazy from '../utils/lazy';
11
13
  let NativeScriptLifecycleCallbacks_;
12
14
  function initNativeScriptLifecycleCallbacks() {
13
15
  if (NativeScriptLifecycleCallbacks_) {
14
16
  return NativeScriptLifecycleCallbacks_;
15
17
  }
16
- var NativeScriptLifecycleCallbacksImpl = /** @class */ (function (_super) {
17
- __extends(NativeScriptLifecycleCallbacksImpl, _super);
18
- function NativeScriptLifecycleCallbacksImpl() {
19
- var _this = _super !== null && _super.apply(this, arguments) || this;
20
- _this.activitiesCount = 0;
21
- return _this;
22
- }
23
- NativeScriptLifecycleCallbacksImpl.prototype.onActivityCreated = function (activity, savedInstanceState) {
24
- // console.log('NativeScriptLifecycleCallbacks onActivityCreated');
25
- this.setThemeOnLaunch(activity);
26
- if (!Application.android.startActivity) {
27
- Application.android.setStartActivity(activity);
18
+ var NativeScriptLifecycleCallbacksImpl = (function (_super) {
19
+ __extends(NativeScriptLifecycleCallbacksImpl, _super);
20
+ function NativeScriptLifecycleCallbacksImpl() {
21
+ var _this = _super !== null && _super.apply(this, arguments) || this;
22
+ _this.activitiesCount = 0;
23
+ return _this;
28
24
  }
29
- if (!this.nativescriptActivity && 'isNativeScriptActivity' in activity) {
30
- this.nativescriptActivity = activity;
31
- }
32
- this.notifyActivityCreated(activity, savedInstanceState);
33
- if (Application.hasListeners(Application.displayedEvent)) {
34
- this.subscribeForGlobalLayout(activity);
35
- }
36
- };
37
- NativeScriptLifecycleCallbacksImpl.prototype.onActivityDestroyed = function (activity) {
38
- // console.log('NativeScriptLifecycleCallbacks onActivityDestroyed');
39
- if (activity === Application.android.foregroundActivity) {
40
- Application.android.setForegroundActivity(undefined);
41
- }
42
- if (activity === this.nativescriptActivity) {
43
- this.nativescriptActivity = undefined;
44
- }
45
- if (activity === Application.android.startActivity) {
46
- Application.android.setStartActivity(undefined);
47
- // Fallback for start activity when it is destroyed but we have a known nativescript activity
48
- if (this.nativescriptActivity) {
49
- Application.android.setStartActivity(this.nativescriptActivity);
25
+ NativeScriptLifecycleCallbacksImpl.prototype.onActivityCreated = function (activity, savedInstanceState) {
26
+ this.setThemeOnLaunch(activity);
27
+ if (!Application.android.startActivity) {
28
+ Application.android.setStartActivity(activity);
50
29
  }
51
- }
52
- Application.android.notify({
53
- eventName: Application.android.activityDestroyedEvent,
54
- object: Application.android,
55
- activity: activity,
56
- });
57
- // TODO: This is a temporary workaround to force the V8's Garbage Collector, which will force the related Java Object to be collected.
58
- gc();
59
- };
60
- NativeScriptLifecycleCallbacksImpl.prototype.onActivityPaused = function (activity) {
61
- // console.log('NativeScriptLifecycleCallbacks onActivityPaused');
62
- if ('isNativeScriptActivity' in activity) {
63
- Application.setSuspended(true, {
64
- // todo: deprecate event.android in favor of event.activity
65
- android: activity,
30
+ if (!this.nativescriptActivity && "isNativeScriptActivity" in activity) {
31
+ this.nativescriptActivity = activity;
32
+ }
33
+ this.notifyActivityCreated(activity, savedInstanceState);
34
+ if (Application.hasListeners(Application.displayedEvent)) {
35
+ this.subscribeForGlobalLayout(activity);
36
+ }
37
+ };
38
+ NativeScriptLifecycleCallbacksImpl.prototype.onActivityDestroyed = function (activity) {
39
+ if (activity === Application.android.foregroundActivity) {
40
+ Application.android.setForegroundActivity(undefined);
41
+ }
42
+ if (activity === this.nativescriptActivity) {
43
+ this.nativescriptActivity = undefined;
44
+ }
45
+ if (activity === Application.android.startActivity) {
46
+ Application.android.setStartActivity(undefined);
47
+ if (this.nativescriptActivity) {
48
+ Application.android.setStartActivity(this.nativescriptActivity);
49
+ }
50
+ }
51
+ Application.android.notify({
52
+ eventName: Application.android.activityDestroyedEvent,
53
+ object: Application.android,
66
54
  activity: activity,
67
55
  });
68
- }
69
- Application.android.notify({
70
- eventName: Application.android.activityPausedEvent,
71
- object: Application.android,
72
- activity: activity,
73
- });
74
- };
75
- NativeScriptLifecycleCallbacksImpl.prototype.onActivityResumed = function (activity) {
76
- // console.log('NativeScriptLifecycleCallbacks onActivityResumed');
77
- Application.android.setForegroundActivity(activity);
78
- // NOTE: setSuspended(false) is called in frame/index.android.ts inside onPostResume
79
- // This is done to ensure proper timing for the event to be raised
80
- Application.android.notify({
81
- eventName: Application.android.activityResumedEvent,
82
- object: Application.android,
83
- activity: activity,
84
- });
85
- };
86
- NativeScriptLifecycleCallbacksImpl.prototype.onActivitySaveInstanceState = function (activity, bundle) {
87
- // console.log('NativeScriptLifecycleCallbacks onActivitySaveInstanceState');
88
- Application.android.notify({
89
- eventName: Application.android.saveActivityStateEvent,
90
- object: Application.android,
91
- activity: activity,
92
- bundle: bundle,
93
- });
94
- };
95
- NativeScriptLifecycleCallbacksImpl.prototype.onActivityStarted = function (activity) {
96
- // console.log('NativeScriptLifecycleCallbacks onActivityStarted');
97
- this.activitiesCount++;
98
- if (this.activitiesCount === 1) {
99
- Application.android.setInBackground(false, {
100
- // todo: deprecate event.android in favor of event.activity
101
- android: activity,
56
+ gc();
57
+ };
58
+ NativeScriptLifecycleCallbacksImpl.prototype.onActivityPaused = function (activity) {
59
+ if ("isNativeScriptActivity" in activity) {
60
+ Application.setSuspended(true, {
61
+ android: activity,
62
+ activity: activity,
63
+ });
64
+ }
65
+ Application.android.notify({
66
+ eventName: Application.android.activityPausedEvent,
67
+ object: Application.android,
102
68
  activity: activity,
103
69
  });
104
- }
105
- Application.android.notify({
106
- eventName: Application.android.activityStartedEvent,
107
- object: Application.android,
108
- activity: activity,
109
- });
110
- };
111
- NativeScriptLifecycleCallbacksImpl.prototype.onActivityStopped = function (activity) {
112
- // console.log('NativeScriptLifecycleCallbacks onActivityStopped');
113
- this.activitiesCount--;
114
- if (this.activitiesCount === 0) {
115
- Application.android.setInBackground(true, {
116
- // todo: deprecate event.android in favor of event.activity
117
- android: activity,
70
+ };
71
+ NativeScriptLifecycleCallbacksImpl.prototype.onActivityResumed = function (activity) {
72
+ Application.android.setForegroundActivity(activity);
73
+ Application.android.notify({
74
+ eventName: Application.android.activityResumedEvent,
75
+ object: Application.android,
118
76
  activity: activity,
119
77
  });
120
- }
121
- Application.android.notify({
122
- eventName: Application.android.activityStoppedEvent,
123
- object: Application.android,
124
- activity: activity,
125
- });
126
- };
127
- NativeScriptLifecycleCallbacksImpl.prototype.setThemeOnLaunch = function (activity) {
128
- // Set app theme after launch screen was used during startup
129
- var activityInfo = activity.getPackageManager().getActivityInfo(activity.getComponentName(), android.content.pm.PackageManager.GET_META_DATA);
130
- if (activityInfo.metaData) {
131
- var setThemeOnLaunch = activityInfo.metaData.getInt('SET_THEME_ON_LAUNCH', -1);
132
- if (setThemeOnLaunch !== -1) {
133
- activity.setTheme(setThemeOnLaunch);
78
+ };
79
+ NativeScriptLifecycleCallbacksImpl.prototype.onActivitySaveInstanceState = function (activity, bundle) {
80
+ Application.android.notify({
81
+ eventName: Application.android.saveActivityStateEvent,
82
+ object: Application.android,
83
+ activity: activity,
84
+ bundle: bundle,
85
+ });
86
+ };
87
+ NativeScriptLifecycleCallbacksImpl.prototype.onActivityStarted = function (activity) {
88
+ this.activitiesCount++;
89
+ if (this.activitiesCount === 1) {
90
+ Application.android.setInBackground(false, {
91
+ android: activity,
92
+ activity: activity,
93
+ });
134
94
  }
135
- }
136
- };
137
- NativeScriptLifecycleCallbacksImpl.prototype.notifyActivityCreated = function (activity, bundle) {
138
- Application.android.notify({
139
- eventName: Application.android.activityCreatedEvent,
140
- object: Application.android,
141
- activity: activity,
142
- bundle: bundle,
143
- });
144
- };
145
- NativeScriptLifecycleCallbacksImpl.prototype.subscribeForGlobalLayout = function (activity) {
146
- var rootView = activity.getWindow().getDecorView().getRootView();
147
- // store the listener not to trigger GC collection before collecting the method
148
- global.onGlobalLayoutListener = new android.view.ViewTreeObserver.OnGlobalLayoutListener({
149
- onGlobalLayout: function () {
150
- Application.android.notify({
151
- eventName: Application.displayedEvent,
152
- object: Application,
153
- android: Application.android,
95
+ Application.android.notify({
96
+ eventName: Application.android.activityStartedEvent,
97
+ object: Application.android,
98
+ activity: activity,
99
+ });
100
+ };
101
+ NativeScriptLifecycleCallbacksImpl.prototype.onActivityStopped = function (activity) {
102
+ this.activitiesCount--;
103
+ if (this.activitiesCount === 0) {
104
+ Application.android.setInBackground(true, {
105
+ android: activity,
154
106
  activity: activity,
155
107
  });
156
- var viewTreeObserver = rootView.getViewTreeObserver();
157
- viewTreeObserver.removeOnGlobalLayoutListener(global.onGlobalLayoutListener);
158
- },
159
- });
160
- rootView.getViewTreeObserver().addOnGlobalLayoutListener(global.onGlobalLayoutListener);
161
- };
162
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11;
163
- __decorate([
164
- profile,
165
- __metadata("design:type", Function),
166
- __metadata("design:paramtypes", [typeof (_c = typeof androidx !== "undefined" && (_a = androidx.appcompat) !== void 0 && (_b = _a.app) !== void 0 && _b.AppCompatActivity) === "function" ? _c : Object, typeof (_e = typeof android !== "undefined" && (_d = android.os) !== void 0 && _d.Bundle) === "function" ? _e : Object]),
167
- __metadata("design:returntype", void 0)
168
- ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityCreated", null);
169
- __decorate([
170
- profile,
171
- __metadata("design:type", Function),
172
- __metadata("design:paramtypes", [typeof (_h = typeof androidx !== "undefined" && (_f = androidx.appcompat) !== void 0 && (_g = _f.app) !== void 0 && _g.AppCompatActivity) === "function" ? _h : Object]),
173
- __metadata("design:returntype", void 0)
174
- ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityDestroyed", null);
175
- __decorate([
176
- profile,
177
- __metadata("design:type", Function),
178
- __metadata("design:paramtypes", [typeof (_l = typeof androidx !== "undefined" && (_j = androidx.appcompat) !== void 0 && (_k = _j.app) !== void 0 && _k.AppCompatActivity) === "function" ? _l : Object]),
179
- __metadata("design:returntype", void 0)
180
- ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityPaused", null);
181
- __decorate([
182
- profile,
183
- __metadata("design:type", Function),
184
- __metadata("design:paramtypes", [typeof (_p = typeof androidx !== "undefined" && (_m = androidx.appcompat) !== void 0 && (_o = _m.app) !== void 0 && _o.AppCompatActivity) === "function" ? _p : Object]),
185
- __metadata("design:returntype", void 0)
186
- ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityResumed", null);
187
- __decorate([
188
- profile,
189
- __metadata("design:type", Function),
190
- __metadata("design:paramtypes", [typeof (_s = typeof androidx !== "undefined" && (_q = androidx.appcompat) !== void 0 && (_r = _q.app) !== void 0 && _r.AppCompatActivity) === "function" ? _s : Object, typeof (_u = typeof android !== "undefined" && (_t = android.os) !== void 0 && _t.Bundle) === "function" ? _u : Object]),
191
- __metadata("design:returntype", void 0)
192
- ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivitySaveInstanceState", null);
193
- __decorate([
194
- profile,
195
- __metadata("design:type", Function),
196
- __metadata("design:paramtypes", [typeof (_x = typeof androidx !== "undefined" && (_v = androidx.appcompat) !== void 0 && (_w = _v.app) !== void 0 && _w.AppCompatActivity) === "function" ? _x : Object]),
197
- __metadata("design:returntype", void 0)
198
- ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityStarted", null);
199
- __decorate([
200
- profile,
201
- __metadata("design:type", Function),
202
- __metadata("design:paramtypes", [typeof (_0 = typeof androidx !== "undefined" && (_y = androidx.appcompat) !== void 0 && (_z = _y.app) !== void 0 && _z.AppCompatActivity) === "function" ? _0 : Object]),
203
- __metadata("design:returntype", void 0)
204
- ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityStopped", null);
205
- __decorate([
206
- profile,
207
- __metadata("design:type", Function),
208
- __metadata("design:paramtypes", [typeof (_3 = typeof androidx !== "undefined" && (_1 = androidx.appcompat) !== void 0 && (_2 = _1.app) !== void 0 && _2.AppCompatActivity) === "function" ? _3 : Object]),
209
- __metadata("design:returntype", void 0)
210
- ], NativeScriptLifecycleCallbacksImpl.prototype, "setThemeOnLaunch", null);
211
- __decorate([
212
- profile,
213
- __metadata("design:type", Function),
214
- __metadata("design:paramtypes", [typeof (_6 = typeof androidx !== "undefined" && (_4 = androidx.appcompat) !== void 0 && (_5 = _4.app) !== void 0 && _5.AppCompatActivity) === "function" ? _6 : Object, typeof (_8 = typeof android !== "undefined" && (_7 = android.os) !== void 0 && _7.Bundle) === "function" ? _8 : Object]),
215
- __metadata("design:returntype", void 0)
216
- ], NativeScriptLifecycleCallbacksImpl.prototype, "notifyActivityCreated", null);
217
- __decorate([
218
- profile,
219
- __metadata("design:type", Function),
220
- __metadata("design:paramtypes", [typeof (_11 = typeof androidx !== "undefined" && (_9 = androidx.appcompat) !== void 0 && (_10 = _9.app) !== void 0 && _10.AppCompatActivity) === "function" ? _11 : Object]),
221
- __metadata("design:returntype", void 0)
222
- ], NativeScriptLifecycleCallbacksImpl.prototype, "subscribeForGlobalLayout", null);
223
- NativeScriptLifecycleCallbacksImpl = __decorate([
224
- JavaProxy('org.nativescript.NativeScriptLifecycleCallbacks')
225
- ], NativeScriptLifecycleCallbacksImpl);
226
- return NativeScriptLifecycleCallbacksImpl;
227
- }(android.app.Application.ActivityLifecycleCallbacks));
108
+ }
109
+ Application.android.notify({
110
+ eventName: Application.android.activityStoppedEvent,
111
+ object: Application.android,
112
+ activity: activity,
113
+ });
114
+ // This is done to ensure proper timing for the event to be raised
115
+ };
116
+ NativeScriptLifecycleCallbacksImpl.prototype.setThemeOnLaunch = function (activity) {
117
+ var activityInfo = activity.getPackageManager().getActivityInfo(activity.getComponentName(), android.content.pm.PackageManager.GET_META_DATA);
118
+ if (activityInfo.metaData) {
119
+ var setThemeOnLaunch = activityInfo.metaData.getInt("SET_THEME_ON_LAUNCH", -1);
120
+ if (setThemeOnLaunch !== -1) {
121
+ activity.setTheme(setThemeOnLaunch);
122
+ }
123
+ }
124
+ };
125
+ NativeScriptLifecycleCallbacksImpl.prototype.notifyActivityCreated = function (activity, bundle) {
126
+ Application.android.notify({
127
+ eventName: Application.android.activityCreatedEvent,
128
+ object: Application.android,
129
+ activity: activity,
130
+ bundle: bundle,
131
+ });
132
+ };
133
+ NativeScriptLifecycleCallbacksImpl.prototype.subscribeForGlobalLayout = function (activity) {
134
+ var rootView = activity.getWindow().getDecorView().getRootView();
135
+ global.onGlobalLayoutListener = new android.view.ViewTreeObserver.OnGlobalLayoutListener({
136
+ onGlobalLayout: function () {
137
+ Application.android.notify({
138
+ eventName: Application.displayedEvent,
139
+ object: Application,
140
+ android: Application.android,
141
+ activity: activity,
142
+ });
143
+ var viewTreeObserver = rootView.getViewTreeObserver();
144
+ viewTreeObserver.removeOnGlobalLayoutListener(global.onGlobalLayoutListener);
145
+ },
146
+ });
147
+ rootView.getViewTreeObserver().addOnGlobalLayoutListener(global.onGlobalLayoutListener);
148
+ };
149
+ __decorate([
150
+ profile
151
+ ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityCreated", null);
152
+ __decorate([
153
+ profile
154
+ ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityDestroyed", null);
155
+ __decorate([
156
+ profile
157
+ ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityPaused", null);
158
+ __decorate([
159
+ profile
160
+ ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityResumed", null);
161
+ __decorate([
162
+ profile
163
+ ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivitySaveInstanceState", null);
164
+ __decorate([
165
+ profile
166
+ ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityStarted", null);
167
+ __decorate([
168
+ profile
169
+ ], NativeScriptLifecycleCallbacksImpl.prototype, "onActivityStopped", null);
170
+ __decorate([
171
+ profile
172
+ ], NativeScriptLifecycleCallbacksImpl.prototype, "setThemeOnLaunch", null);
173
+ __decorate([
174
+ profile
175
+ ], NativeScriptLifecycleCallbacksImpl.prototype, "notifyActivityCreated", null);
176
+ __decorate([
177
+ profile
178
+ ], NativeScriptLifecycleCallbacksImpl.prototype, "subscribeForGlobalLayout", null);
179
+ NativeScriptLifecycleCallbacksImpl = __decorate([
180
+ JavaProxy("org.nativescript.NativeScriptLifecycleCallbacks")
181
+ ], NativeScriptLifecycleCallbacksImpl);
182
+ return NativeScriptLifecycleCallbacksImpl;
183
+ }(android.app.Application.ActivityLifecycleCallbacks));
228
184
  NativeScriptLifecycleCallbacks_ = NativeScriptLifecycleCallbacksImpl;
229
185
  return NativeScriptLifecycleCallbacks_;
230
186
  }
@@ -233,53 +189,59 @@ function initNativeScriptComponentCallbacks() {
233
189
  if (NativeScriptComponentCallbacks_) {
234
190
  return NativeScriptComponentCallbacks_;
235
191
  }
236
- var NativeScriptComponentCallbacksImpl = /** @class */ (function (_super) {
237
- __extends(NativeScriptComponentCallbacksImpl, _super);
238
- function NativeScriptComponentCallbacksImpl() {
239
- return _super !== null && _super.apply(this, arguments) || this;
240
- }
241
- NativeScriptComponentCallbacksImpl.prototype.onLowMemory = function () {
242
- gc();
243
- java.lang.System.gc();
244
- Application.notify({
245
- eventName: Application.lowMemoryEvent,
246
- object: Application,
247
- android: this,
248
- });
249
- };
250
- NativeScriptComponentCallbacksImpl.prototype.onTrimMemory = function (level) {
251
- // TODO: This is skipped for now, test carefully for OutOfMemory exceptions
252
- };
253
- NativeScriptComponentCallbacksImpl.prototype.onConfigurationChanged = function (newConfiguration) {
254
- Application.android.onConfigurationChanged(newConfiguration);
255
- };
256
- var _a, _b, _c;
257
- __decorate([
258
- profile,
259
- __metadata("design:type", Function),
260
- __metadata("design:paramtypes", []),
261
- __metadata("design:returntype", void 0)
262
- ], NativeScriptComponentCallbacksImpl.prototype, "onLowMemory", null);
263
- __decorate([
264
- profile,
265
- __metadata("design:type", Function),
266
- __metadata("design:paramtypes", [Number]),
267
- __metadata("design:returntype", void 0)
268
- ], NativeScriptComponentCallbacksImpl.prototype, "onTrimMemory", null);
269
- __decorate([
270
- profile,
271
- __metadata("design:type", Function),
272
- __metadata("design:paramtypes", [typeof (_c = typeof android !== "undefined" && (_a = android.content) !== void 0 && (_b = _a.res) !== void 0 && _b.Configuration) === "function" ? _c : Object]),
273
- __metadata("design:returntype", void 0)
274
- ], NativeScriptComponentCallbacksImpl.prototype, "onConfigurationChanged", null);
275
- NativeScriptComponentCallbacksImpl = __decorate([
276
- JavaProxy('org.nativescript.NativeScriptComponentCallbacks')
277
- ], NativeScriptComponentCallbacksImpl);
278
- return NativeScriptComponentCallbacksImpl;
279
- }(android.content.ComponentCallbacks2));
192
+ var NativeScriptComponentCallbacksImpl = (function (_super) {
193
+ __extends(NativeScriptComponentCallbacksImpl, _super);
194
+ function NativeScriptComponentCallbacksImpl() {
195
+ return _super !== null && _super.apply(this, arguments) || this;
196
+ }
197
+ NativeScriptComponentCallbacksImpl.prototype.onLowMemory = function () {
198
+ gc();
199
+ java.lang.System.gc();
200
+ Application.notify({
201
+ eventName: Application.lowMemoryEvent,
202
+ object: Application,
203
+ android: this,
204
+ });
205
+ };
206
+ NativeScriptComponentCallbacksImpl.prototype.onTrimMemory = function (level) {
207
+ };
208
+ NativeScriptComponentCallbacksImpl.prototype.onConfigurationChanged = function (newConfiguration) {
209
+ Application.android.onConfigurationChanged(newConfiguration);
210
+ };
211
+ __decorate([
212
+ profile
213
+ ], NativeScriptComponentCallbacksImpl.prototype, "onLowMemory", null);
214
+ __decorate([
215
+ profile
216
+ ], NativeScriptComponentCallbacksImpl.prototype, "onTrimMemory", null);
217
+ __decorate([
218
+ profile
219
+ ], NativeScriptComponentCallbacksImpl.prototype, "onConfigurationChanged", null);
220
+ NativeScriptComponentCallbacksImpl = __decorate([
221
+ JavaProxy("org.nativescript.NativeScriptComponentCallbacks")
222
+ ], NativeScriptComponentCallbacksImpl);
223
+ return NativeScriptComponentCallbacksImpl;
224
+ }(android.content.ComponentCallbacks2));
280
225
  NativeScriptComponentCallbacks_ = NativeScriptComponentCallbacksImpl;
281
226
  return NativeScriptComponentCallbacks_;
282
227
  }
228
+ const BroadcastReceiver = lazy(() => {
229
+ var BroadcastReceiverImpl = (function (_super) {
230
+ __extends(BroadcastReceiverImpl, _super);
231
+ function BroadcastReceiverImpl(onReceiveCallback) {
232
+ var _this = _super.call(this) || this;
233
+ _this._onReceiveCallback = onReceiveCallback;
234
+ return global.__native(_this);
235
+ }
236
+ BroadcastReceiverImpl.prototype.onReceive = function (context, intent) {
237
+ if (this._onReceiveCallback) {
238
+ this._onReceiveCallback(context, intent);
239
+ }
240
+ };
241
+ return BroadcastReceiverImpl;
242
+ }(android.content.BroadcastReceiver));
243
+ return BroadcastReceiverImpl;
244
+ });
283
245
  export class AndroidApplication extends ApplicationCommon {
284
246
  constructor() {
285
247
  super(...arguments);
@@ -294,6 +256,10 @@ export class AndroidApplication extends ApplicationCommon {
294
256
  this.activityBackPressedEvent = AndroidApplication.activityBackPressedEvent;
295
257
  this.activityNewIntentEvent = AndroidApplication.activityNewIntentEvent;
296
258
  this.activityRequestPermissionsEvent = AndroidApplication.activityRequestPermissionsEvent;
259
+ this._registeredReceivers = {};
260
+ this._registeredReceiversById = {};
261
+ this._nextReceiverId = 1;
262
+ this._pendingReceiverRegistrations = [];
297
263
  }
298
264
  init(nativeApp) {
299
265
  if (this.nativeApp === nativeApp) {
@@ -314,12 +280,13 @@ export class AndroidApplication extends ApplicationCommon {
314
280
  this._registerPendingReceivers();
315
281
  }
316
282
  _registerPendingReceivers() {
317
- androidPendingReceiverRegistrations.forEach((func) => func(this.context));
318
- androidPendingReceiverRegistrations.length = 0;
283
+ this._pendingReceiverRegistrations.forEach((info) => this._registerReceiver(this.context, info.intent, info.callback, info.flags, info.id));
284
+ this._pendingReceiverRegistrations.length = 0;
319
285
  }
320
286
  onConfigurationChanged(configuration) {
321
287
  this.setOrientation(this.getOrientationValue(configuration));
322
288
  this.setSystemAppearance(this.getSystemAppearanceValue(configuration));
289
+ this.setLayoutDirection(this.getLayoutDirectionValue(configuration));
323
290
  }
324
291
  getNativeApplication() {
325
292
  let nativeApp = this.nativeApp;
@@ -376,13 +343,68 @@ export class AndroidApplication extends ApplicationCommon {
376
343
  // RECEIVER_NOT_EXPORTED (4)
377
344
  // RECEIVER_VISIBLE_TO_INSTANT_APPS (1)
378
345
  registerBroadcastReceiver(intentFilter, onReceiveCallback, flags = 2) {
379
- androidRegisterBroadcastReceiver(intentFilter, onReceiveCallback, flags);
346
+ const receiverId = this._nextReceiverId++;
347
+ if (this.context) {
348
+ this._registerReceiver(this.context, intentFilter, onReceiveCallback, flags, receiverId);
349
+ }
350
+ else {
351
+ this._pendingReceiverRegistrations.push({
352
+ intent: intentFilter,
353
+ callback: onReceiveCallback,
354
+ id: receiverId,
355
+ flags,
356
+ });
357
+ }
358
+ let removed = false;
359
+ return () => {
360
+ if (removed) {
361
+ return;
362
+ }
363
+ removed = true;
364
+ if (this._registeredReceiversById[receiverId]) {
365
+ const receiverInfo = this._registeredReceiversById[receiverId];
366
+ this.context.unregisterReceiver(receiverInfo.receiver);
367
+ this._registeredReceivers[receiverInfo.intent] = this._registeredReceivers[receiverInfo.intent]?.filter((ri) => ri.id !== receiverId);
368
+ delete this._registeredReceiversById[receiverId];
369
+ }
370
+ else {
371
+ this._pendingReceiverRegistrations = this._pendingReceiverRegistrations.filter((ri) => ri.id !== receiverId);
372
+ }
373
+ };
374
+ }
375
+ _registerReceiver(context, intentFilter, onReceiveCallback, flags, id) {
376
+ var _a;
377
+ const receiver = new (BroadcastReceiver())(onReceiveCallback);
378
+ if (SDK_VERSION >= 26) {
379
+ context.registerReceiver(receiver, new android.content.IntentFilter(intentFilter), flags);
380
+ }
381
+ else {
382
+ context.registerReceiver(receiver, new android.content.IntentFilter(intentFilter));
383
+ }
384
+ const receiverInfo = { receiver, intent: intentFilter, callback: onReceiveCallback, id: typeof id === 'number' ? id : this._nextReceiverId++, flags };
385
+ (_a = this._registeredReceivers)[intentFilter] ?? (_a[intentFilter] = []);
386
+ this._registeredReceivers[intentFilter].push(receiverInfo);
387
+ this._registeredReceiversById[receiverInfo.id] = receiverInfo;
388
+ return receiver;
380
389
  }
381
390
  unregisterBroadcastReceiver(intentFilter) {
382
- androidUnregisterBroadcastReceiver(intentFilter);
391
+ const receivers = this._registeredReceivers[intentFilter];
392
+ if (receivers) {
393
+ receivers.forEach((receiver) => {
394
+ this.context.unregisterReceiver(receiver.receiver);
395
+ });
396
+ this._registeredReceivers[intentFilter] = [];
397
+ }
383
398
  }
384
399
  getRegisteredBroadcastReceiver(intentFilter) {
385
- return androidRegisteredReceivers[intentFilter];
400
+ return this._registeredReceivers[intentFilter]?.[0].receiver;
401
+ }
402
+ getRegisteredBroadcastReceivers(intentFilter) {
403
+ const receiversInfo = this._registeredReceivers[intentFilter];
404
+ if (receiversInfo) {
405
+ return receiversInfo.map((info) => info.receiver);
406
+ }
407
+ return [];
386
408
  }
387
409
  getRootView() {
388
410
  const activity = this.foregroundActivity || this.startActivity;
@@ -422,6 +444,20 @@ export class AndroidApplication extends ApplicationCommon {
422
444
  return 'light';
423
445
  }
424
446
  }
447
+ getLayoutDirection() {
448
+ const resources = this.context.getResources();
449
+ const configuration = resources.getConfiguration();
450
+ return this.getLayoutDirectionValue(configuration);
451
+ }
452
+ getLayoutDirectionValue(configuration) {
453
+ const layoutDirection = configuration.getLayoutDirection();
454
+ switch (layoutDirection) {
455
+ case android.view.View.LAYOUT_DIRECTION_LTR:
456
+ return CoreTypes.LayoutDirection.ltr;
457
+ case android.view.View.LAYOUT_DIRECTION_RTL:
458
+ return CoreTypes.LayoutDirection.rtl;
459
+ }
460
+ }
425
461
  getOrientation() {
426
462
  const resources = this.context.getResources();
427
463
  const configuration = resources.getConfiguration();
@@ -622,6 +658,8 @@ export function ensureClasses() {
622
658
  }
623
659
  setFontScaleCssClasses(new Map(VALID_FONT_SCALES.map((fs) => [fs, `a11y-fontscale-${Number(fs * 100).toFixed(0)}`])));
624
660
  accessibilityServiceObservable = new AccessibilityServiceEnabledObservable();
661
+ // Initialize SDK version CSS class once
662
+ initializeSdkVersionClass(Application.getRootView());
625
663
  }
626
664
  export function updateCurrentHelperClasses(applyRootCssClass) {
627
665
  const fontScale = getFontScale();
@@ -778,117 +816,116 @@ function ensureNativeClasses() {
778
816
  ]);
779
817
  clickableRolesMap = new Set([AccessibilityRole.Button, AccessibilityRole.ImageButton]);
780
818
  const ignoreRoleTypesForTrace = new Set([AccessibilityRole.Header, AccessibilityRole.Link, AccessibilityRole.None, AccessibilityRole.Summary]);
781
- var TNSAccessibilityDelegateImpl = /** @class */ (function (_super) {
782
- __extends(TNSAccessibilityDelegateImpl, _super);
783
- function TNSAccessibilityDelegateImpl() {
784
- var _this = _super.call(this) || this;
785
- return global.__native(_this);
786
- }
787
- TNSAccessibilityDelegateImpl.prototype.getTnsView = function (androidView) {
788
- var _a;
789
- var view = (_a = androidViewToTNSView.get(androidView)) === null || _a === void 0 ? void 0 : _a.get();
790
- if (!view) {
791
- androidViewToTNSView.delete(androidView);
792
- return null;
819
+ var TNSAccessibilityDelegateImpl = (function (_super) {
820
+ __extends(TNSAccessibilityDelegateImpl, _super);
821
+ function TNSAccessibilityDelegateImpl() {
822
+ var _this = _super.call(this) || this;
823
+ return global.__native(_this);
793
824
  }
794
- return view;
795
- };
796
- TNSAccessibilityDelegateImpl.prototype.onInitializeAccessibilityNodeInfo = function (host, info) {
797
- _super.prototype.onInitializeAccessibilityNodeInfo.call(this, host, info);
798
- var view = this.getTnsView(host);
799
- if (!view) {
800
- if (Trace.isEnabled()) {
801
- Trace.write("onInitializeAccessibilityNodeInfo ".concat(host, " ").concat(info, " no tns-view"), Trace.categories.Accessibility);
802
- }
803
- return;
804
- }
805
- // Set resource id that can be used with test frameworks without polluting the content description.
806
- var id = host.getTag(androidUtils.resources.getId(":id/nativescript_accessibility_id"));
807
- if (id != null) {
808
- info.setViewIdResourceName(id);
809
- }
810
- var accessibilityRole = view.accessibilityRole;
811
- if (accessibilityRole) {
812
- var androidClassName = RoleTypeMap.get(accessibilityRole);
813
- if (androidClassName) {
814
- var oldClassName = info.getClassName() || (SDK_VERSION >= 28 && host.getAccessibilityClassName()) || null;
815
- info.setClassName(androidClassName);
816
- if (Trace.isEnabled()) {
817
- Trace.write("".concat(view, ".accessibilityRole = \"").concat(accessibilityRole, "\" is mapped to \"").concat(androidClassName, "\" (was ").concat(oldClassName, "). ").concat(info.getClassName()), Trace.categories.Accessibility);
818
- }
825
+ TNSAccessibilityDelegateImpl.prototype.getTnsView = function (androidView) {
826
+ var _a;
827
+ var view = (_a = androidViewToTNSView.get(androidView)) === null || _a === void 0 ? void 0 : _a.get();
828
+ if (!view) {
829
+ androidViewToTNSView.delete(androidView);
830
+ return null;
819
831
  }
820
- else if (!ignoreRoleTypesForTrace.has(accessibilityRole)) {
832
+ return view;
833
+ };
834
+ TNSAccessibilityDelegateImpl.prototype.onInitializeAccessibilityNodeInfo = function (host, info) {
835
+ _super.prototype.onInitializeAccessibilityNodeInfo.call(this, host, info);
836
+ var view = this.getTnsView(host);
837
+ if (!view) {
821
838
  if (Trace.isEnabled()) {
822
- Trace.write("".concat(view, ".accessibilityRole = \"").concat(accessibilityRole, "\" is unknown"), Trace.categories.Accessibility);
839
+ Trace.write("onInitializeAccessibilityNodeInfo ".concat(host, " ").concat(info, " no tns-view"), Trace.categories.Accessibility);
823
840
  }
841
+ return;
824
842
  }
825
- if (clickableRolesMap.has(accessibilityRole)) {
826
- if (Trace.isEnabled()) {
827
- Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set clickable role=").concat(accessibilityRole), Trace.categories.Accessibility);
828
- }
829
- info.setClickable(true);
843
+ var id = host.getTag(androidUtils.resources.getId(":id/nativescript_accessibility_id"));
844
+ if (id != null) {
845
+ info.setViewIdResourceName(id);
830
846
  }
831
- if (SDK_VERSION >= 28) {
832
- if (accessibilityRole === AccessibilityRole.Header) {
847
+ var accessibilityRole = view.accessibilityRole;
848
+ if (accessibilityRole) {
849
+ var androidClassName = RoleTypeMap.get(accessibilityRole);
850
+ if (androidClassName) {
851
+ var oldClassName = info.getClassName() || (SDK_VERSION >= 28 && host.getAccessibilityClassName()) || null;
852
+ info.setClassName(androidClassName);
833
853
  if (Trace.isEnabled()) {
834
- Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set heading role=").concat(accessibilityRole), Trace.categories.Accessibility);
854
+ Trace.write("".concat(view, ".accessibilityRole = \"").concat(accessibilityRole, "\" is mapped to \"").concat(androidClassName, "\" (was ").concat(oldClassName, "). ").concat(info.getClassName()), Trace.categories.Accessibility);
835
855
  }
836
- info.setHeading(true);
837
856
  }
838
- else if (host.isAccessibilityHeading()) {
857
+ else if (!ignoreRoleTypesForTrace.has(accessibilityRole)) {
839
858
  if (Trace.isEnabled()) {
840
- Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set heading from host"), Trace.categories.Accessibility);
859
+ Trace.write("".concat(view, ".accessibilityRole = \"").concat(accessibilityRole, "\" is unknown"), Trace.categories.Accessibility);
841
860
  }
842
- info.setHeading(true);
843
861
  }
844
- else {
862
+ if (clickableRolesMap.has(accessibilityRole)) {
845
863
  if (Trace.isEnabled()) {
846
- Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set not heading"), Trace.categories.Accessibility);
864
+ Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set clickable role=").concat(accessibilityRole), Trace.categories.Accessibility);
847
865
  }
848
- info.setHeading(false);
866
+ info.setClickable(true);
849
867
  }
850
- }
851
- switch (accessibilityRole) {
852
- case AccessibilityRole.Switch:
853
- case AccessibilityRole.RadioButton:
854
- case AccessibilityRole.Checkbox: {
855
- if (Trace.isEnabled()) {
856
- Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set checkable and check=").concat(view.accessibilityState === AccessibilityState.Checked), Trace.categories.Accessibility);
868
+ if (SDK_VERSION >= 28) {
869
+ if (accessibilityRole === AccessibilityRole.Header) {
870
+ if (Trace.isEnabled()) {
871
+ Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set heading role=").concat(accessibilityRole), Trace.categories.Accessibility);
872
+ }
873
+ info.setHeading(true);
874
+ }
875
+ else if (host.isAccessibilityHeading()) {
876
+ if (Trace.isEnabled()) {
877
+ Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set heading from host"), Trace.categories.Accessibility);
878
+ }
879
+ info.setHeading(true);
880
+ }
881
+ else {
882
+ if (Trace.isEnabled()) {
883
+ Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set not heading"), Trace.categories.Accessibility);
884
+ }
885
+ info.setHeading(false);
857
886
  }
858
- info.setCheckable(true);
859
- info.setChecked(view.accessibilityState === AccessibilityState.Checked);
860
- break;
861
887
  }
862
- default: {
863
- if (Trace.isEnabled()) {
864
- Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set enabled=").concat(view.accessibilityState !== AccessibilityState.Disabled, " and selected=").concat(view.accessibilityState === AccessibilityState.Selected), Trace.categories.Accessibility);
888
+ switch (accessibilityRole) {
889
+ case AccessibilityRole.Switch:
890
+ case AccessibilityRole.RadioButton:
891
+ case AccessibilityRole.Checkbox: {
892
+ if (Trace.isEnabled()) {
893
+ Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set checkable and check=").concat(view.accessibilityState === AccessibilityState.Checked), Trace.categories.Accessibility);
894
+ }
895
+ info.setCheckable(true);
896
+ info.setChecked(view.accessibilityState === AccessibilityState.Checked);
897
+ break;
898
+ }
899
+ default: {
900
+ if (Trace.isEnabled()) {
901
+ Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set enabled=").concat(view.accessibilityState !== AccessibilityState.Disabled, " and selected=").concat(view.accessibilityState === AccessibilityState.Selected), Trace.categories.Accessibility);
902
+ }
903
+ info.setEnabled(view.accessibilityState !== AccessibilityState.Disabled);
904
+ info.setSelected(view.accessibilityState === AccessibilityState.Selected);
905
+ break;
865
906
  }
866
- info.setEnabled(view.accessibilityState !== AccessibilityState.Disabled);
867
- info.setSelected(view.accessibilityState === AccessibilityState.Selected);
868
- break;
869
907
  }
870
908
  }
871
- }
872
- if (view.accessible) {
873
- info.setFocusable(true);
874
- }
875
- };
876
- TNSAccessibilityDelegateImpl.prototype.sendAccessibilityEvent = function (host, eventType) {
877
- _super.prototype.sendAccessibilityEvent.call(this, host, eventType);
878
- var view = this.getTnsView(host);
879
- if (!view) {
880
- console.log("skip - ".concat(host, " - ").concat(accessibilityEventTypeMap.get(eventType)));
881
- return;
882
- }
883
- try {
884
- accessibilityEventHelper(view, eventType);
885
- }
886
- catch (err) {
887
- console.error(err);
888
- }
889
- };
890
- return TNSAccessibilityDelegateImpl;
891
- }(AccessibilityDelegate));
909
+ if (view.accessible) {
910
+ info.setFocusable(true);
911
+ }
912
+ };
913
+ TNSAccessibilityDelegateImpl.prototype.sendAccessibilityEvent = function (host, eventType) {
914
+ _super.prototype.sendAccessibilityEvent.call(this, host, eventType);
915
+ var view = this.getTnsView(host);
916
+ if (!view) {
917
+ console.log("skip - ".concat(host, " - ").concat(accessibilityEventTypeMap.get(eventType)));
918
+ return;
919
+ }
920
+ try {
921
+ accessibilityEventHelper(view, eventType);
922
+ }
923
+ catch (err) {
924
+ console.error(err);
925
+ }
926
+ };
927
+ return TNSAccessibilityDelegateImpl;
928
+ }(AccessibilityDelegate));
892
929
  TNSAccessibilityDelegate = new TNSAccessibilityDelegateImpl();
893
930
  accessibilityEventMap = new Map([
894
931
  /**