@nativescript/core 9.0.0-next-07-26-2025-16544379102 → 9.0.0-preview.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.
- package/accessibility/accessibility-common.d.ts +264 -0
- package/accessibility/accessibility-common.js +352 -0
- package/accessibility/accessibility-common.js.map +1 -1
- package/accessibility/accessibility-properties.d.ts +1 -1
- package/accessibility/accessibility-properties.js +2 -2
- package/accessibility/accessibility-properties.js.map +1 -1
- package/accessibility/index.d.ts +0 -36
- package/accessibility/index.js +2 -0
- package/accessibility/index.js.map +1 -0
- package/application/application-common.d.ts +6 -8
- package/application/application-common.js +21 -14
- package/application/application-common.js.map +1 -1
- package/application/application-interfaces.d.ts +2 -3
- package/application/application.android.d.ts +14 -7
- package/application/application.android.js +754 -75
- package/application/application.android.js.map +1 -1
- package/application/application.d.ts +25 -0
- package/application/application.ios.d.ts +16 -18
- package/application/application.ios.js +455 -45
- package/application/application.ios.js.map +1 -1
- package/application/helpers-common.d.ts +50 -0
- package/application/helpers-common.js +153 -0
- package/application/helpers-common.js.map +1 -0
- package/application/helpers.android.d.ts +17 -0
- package/application/helpers.android.js +173 -0
- package/application/helpers.android.js.map +1 -0
- package/application/helpers.d.ts +25 -0
- package/application/helpers.ios.d.ts +27 -0
- package/application/helpers.ios.js +62 -0
- package/application/helpers.ios.js.map +1 -0
- package/application-settings/index.android.js +2 -2
- package/application-settings/index.android.js.map +1 -1
- package/color/color-common.d.ts +18 -19
- package/color/color-common.js +13 -14
- package/color/color-common.js.map +1 -1
- package/color/color-types.d.ts +49 -0
- package/color/color-types.js +3 -0
- package/color/color-types.js.map +1 -0
- package/color/index.ios.d.ts +2 -1
- package/color/index.ios.js.map +1 -1
- package/connectivity/index.android.js +5 -4
- package/connectivity/index.android.js.map +1 -1
- package/core-types/animation-types.d.ts +11 -0
- package/{ui/animation/animation-interfaces.js → core-types/animation-types.js} +1 -1
- package/core-types/animation-types.js.map +1 -0
- package/core-types/index.d.ts +1 -1
- package/core-types/index.js +2 -2
- package/core-types/index.js.map +1 -1
- package/core-types/validators.d.ts +2 -0
- package/core-types/validators.js +18 -0
- package/core-types/validators.js.map +1 -0
- package/css/css-tree-parser.js +17 -21
- package/css/css-tree-parser.js.map +1 -1
- package/css/lib/parse/index.d.ts +1 -0
- package/css/lib/parse/index.js +475 -577
- package/css/lib/parse/index.js.map +1 -0
- package/css/reworkcss.d.ts +25 -28
- package/css/reworkcss.js +5 -1
- package/css/reworkcss.js.map +1 -0
- package/css-mediaquery/index.js +1 -1
- package/css-mediaquery/index.js.map +1 -1
- package/css-value/reworkcss-value.d.ts +31 -8
- package/css-value/reworkcss-value.js +89 -111
- package/css-value/reworkcss-value.js.map +1 -0
- package/debugger/devtools-elements-interfaces.d.ts +1 -1
- package/debugger/devtools-elements.common.js +17 -8
- package/debugger/devtools-elements.common.js.map +1 -1
- package/debugger/devtools-elements.js +1 -1
- package/debugger/devtools-elements.js.map +1 -1
- package/debugger/dom-types.d.ts +24 -0
- package/debugger/{dom-node.js → dom-types.js} +11 -9
- package/debugger/dom-types.js.map +1 -0
- package/debugger/webinspector-css.d.ts +18 -18
- package/debugger/webinspector-css.js +1 -1
- package/debugger/webinspector-css.js.map +1 -1
- package/debugger/webinspector-dom.d.ts +15 -15
- package/debugger/webinspector-dom.js +1 -1
- package/debugger/webinspector-dom.js.map +1 -1
- package/debugger/webinspector-network.android.d.ts +9 -9
- package/debugger/webinspector-network.android.js +3 -3
- package/debugger/webinspector-network.android.js.map +1 -1
- package/debugger/webinspector-network.ios.d.ts +9 -9
- package/debugger/webinspector-network.ios.js +1 -1
- package/debugger/webinspector-network.ios.js.map +1 -1
- package/fetch/index.d.ts +72 -0
- package/fetch/index.js +448 -458
- package/fetch/index.js.map +1 -0
- package/file-system/file-system-access.android.js +32 -39
- package/file-system/file-system-access.android.js.map +1 -1
- package/file-system/file-system-access.ios.js +2 -15
- package/file-system/file-system-access.ios.js.map +1 -1
- package/file-system/index.d.ts +2 -2
- package/file-system/index.js +4 -11
- package/file-system/index.js.map +1 -1
- package/fps-meter/fps-native.android.d.ts +1 -2
- package/fps-meter/fps-native.android.js.map +1 -1
- package/fps-meter/fps-native.ios.d.ts +1 -2
- package/fps-meter/fps-native.ios.js.map +1 -1
- package/global-types.d.ts +7 -8
- package/globals/global-utils.d.ts +27 -0
- package/globals/global-utils.js +67 -0
- package/globals/global-utils.js.map +1 -0
- package/globals/index.d.ts +3 -7
- package/globals/index.js +276 -281
- package/globals/index.js.map +1 -1
- package/http/http-interfaces.d.ts +84 -0
- package/http/http-interfaces.js +6 -0
- package/http/http-interfaces.js.map +1 -0
- package/http/http-request/http-request-common.js +2 -2
- package/http/http-request/http-request-common.js.map +1 -1
- package/http/http-request/index.android.d.ts +3 -7
- package/http/http-request/index.android.js +6 -22
- package/http/http-request/index.android.js.map +1 -1
- package/http/http-request/index.d.ts +5 -1
- package/http/http-request/index.ios.d.ts +3 -7
- package/http/http-request/index.ios.js +6 -22
- package/http/http-request/index.ios.js.map +1 -1
- package/http/http-shared.d.ts +5 -0
- package/http/http-shared.js +14 -0
- package/http/http-shared.js.map +1 -0
- package/http/index.d.ts +6 -105
- package/http/index.js +10 -12
- package/http/index.js.map +1 -1
- package/image-asset/index.android.js +3 -3
- package/image-asset/index.android.js.map +1 -1
- package/image-source/index.android.d.ts +1 -1
- package/image-source/index.android.js +5 -23
- package/image-source/index.android.js.map +1 -1
- package/image-source/index.ios.js +2 -9
- package/image-source/index.ios.js.map +1 -1
- package/index.d.ts +12 -8
- package/index.js +6 -3
- package/index.js.map +1 -1
- package/inspector_modules.d.ts +11 -0
- package/inspector_modules.js +111 -3
- package/inspector_modules.js.map +1 -1
- package/js-libs/easysax/easysax.js +5 -3
- package/media-query-list/index.js +7 -17
- package/media-query-list/index.js.map +1 -1
- package/module-name-resolver/helpers.d.ts +14 -0
- package/module-name-resolver/helpers.js +27 -0
- package/module-name-resolver/helpers.js.map +1 -0
- package/module-name-resolver/index.d.ts +12 -22
- package/module-name-resolver/index.js +6 -18
- package/module-name-resolver/index.js.map +1 -1
- package/module-name-resolver/non-bundle-workflow-compat.js +32 -23
- package/module-name-resolver/non-bundle-workflow-compat.js.map +1 -1
- package/module-name-resolver/qualifier-matcher/index.d.ts +6 -12
- package/module-name-resolver/qualifier-matcher/index.js +5 -5
- package/module-name-resolver/qualifier-matcher/index.js.map +1 -1
- package/package.json +5 -2
- package/platform/device/index.android.js +2 -2
- package/platform/device/index.android.js.map +1 -1
- package/platform/screen/index.android.js +2 -2
- package/platform/screen/index.android.js.map +1 -1
- package/platform/screen/index.ios.js +2 -2
- package/platform/screen/index.ios.js.map +1 -1
- package/profiling/index.js +2 -1
- package/profiling/index.js.map +1 -1
- package/ui/action-bar/action-bar-common.js +4 -2
- package/ui/action-bar/action-bar-common.js.map +1 -1
- package/ui/action-bar/index.android.js +7 -6
- package/ui/action-bar/index.android.js.map +1 -1
- package/ui/action-bar/index.ios.js +10 -11
- package/ui/action-bar/index.ios.js.map +1 -1
- package/ui/activity-indicator/index.ios.js +3 -4
- package/ui/activity-indicator/index.ios.js.map +1 -1
- package/ui/animation/animation-common.d.ts +4 -4
- package/ui/animation/animation-common.js +2 -3
- package/ui/animation/animation-common.js.map +1 -1
- package/ui/animation/{animation-interfaces.d.ts → animation-shared.d.ts} +39 -31
- package/ui/animation/animation-shared.js +4 -0
- package/ui/animation/animation-shared.js.map +1 -0
- package/ui/animation/animation-types.d.ts +1 -0
- package/ui/animation/animation-types.js +3 -0
- package/ui/animation/animation-types.js.map +1 -0
- package/ui/animation/index.android.d.ts +1 -2
- package/ui/animation/index.android.js +5 -5
- package/ui/animation/index.android.js.map +1 -1
- package/ui/animation/index.d.ts +2 -138
- package/ui/animation/index.ios.d.ts +1 -2
- package/ui/animation/index.ios.js +3 -3
- package/ui/animation/index.ios.js.map +1 -1
- package/ui/animation/keyframe-animation.d.ts +67 -118
- package/ui/animation/keyframe-animation.js +2 -2
- package/ui/animation/keyframe-animation.js.map +1 -1
- package/ui/builder/binding-builder.d.ts +12 -15
- package/ui/builder/component-builder/index.js +5 -5
- package/ui/builder/component-builder/index.js.map +1 -1
- package/ui/builder/index.d.ts +179 -59
- package/ui/builder/index.js +450 -10
- package/ui/builder/index.js.map +1 -1
- package/ui/button/index.android.js +2 -1
- package/ui/button/index.android.js.map +1 -1
- package/ui/core/bindable/bindable-types.d.ts +37 -0
- package/ui/core/bindable/bindable-types.js +3 -0
- package/ui/core/bindable/bindable-types.js.map +1 -0
- package/ui/core/bindable/index.d.ts +2 -38
- package/ui/core/bindable/index.js +1 -2
- package/ui/core/bindable/index.js.map +1 -1
- package/ui/core/properties/index.d.ts +4 -37
- package/ui/core/properties/index.js +6 -35
- package/ui/core/properties/index.js.map +1 -1
- package/ui/core/properties/property-shared.d.ts +35 -0
- package/ui/core/properties/property-shared.js +16 -0
- package/ui/core/properties/property-shared.js.map +1 -0
- package/ui/core/view/index.android.d.ts +2 -2
- package/ui/core/view/index.android.js +13 -10
- package/ui/core/view/index.android.js.map +1 -1
- package/ui/core/view/index.d.ts +1 -61
- package/ui/core/view/index.ios.d.ts +3 -3
- package/ui/core/view/index.ios.js +11 -11
- package/ui/core/view/index.ios.js.map +1 -1
- package/ui/core/view/view-common.d.ts +19 -16
- package/ui/core/view/view-common.js +12 -14
- package/ui/core/view/view-common.js.map +1 -1
- package/ui/core/view/view-helper/index.ios.d.ts +2 -1
- package/ui/core/view/view-helper/index.ios.js +3 -4
- package/ui/core/view/view-helper/index.ios.js.map +1 -1
- package/ui/core/view/view-helper/view-helper-common.js +1 -3
- package/ui/core/view/view-helper/view-helper-common.js.map +1 -1
- package/ui/core/view/view-helper/view-helper-shared.d.ts +5 -0
- package/ui/core/view/view-helper/view-helper-shared.js +6 -0
- package/ui/core/view/view-helper/view-helper-shared.js.map +1 -0
- package/ui/core/view/view-interfaces.d.ts +54 -0
- package/ui/core/view/view-interfaces.js +2 -0
- package/ui/core/view/view-interfaces.js.map +1 -0
- package/ui/core/view-base/index.d.ts +22 -24
- package/ui/core/view-base/index.js +9 -30
- package/ui/core/view-base/index.js.map +1 -1
- package/ui/core/view-base/utils.d.ts +1 -0
- package/ui/core/view-base/utils.js +9 -0
- package/ui/core/view-base/utils.js.map +1 -0
- package/ui/dialogs/dialogs-common.js +3 -3
- package/ui/dialogs/dialogs-common.js.map +1 -1
- package/ui/dialogs/index.android.js +8 -7
- package/ui/dialogs/index.android.js.map +1 -1
- package/ui/dialogs/index.ios.js +2 -2
- package/ui/dialogs/index.ios.js.map +1 -1
- package/ui/embedding/index.android.d.ts +1 -1
- package/ui/embedding/index.d.ts +1 -1
- package/ui/frame/fragment.android.js +3 -2
- package/ui/frame/fragment.android.js.map +1 -1
- package/ui/frame/fragment.transitions.android.js.map +1 -1
- package/ui/frame/frame-common.d.ts +3 -3
- package/ui/frame/frame-common.js.map +1 -1
- package/ui/frame/{callbacks/fragment-callbacks.d.ts → frame-helper-for-android.d.ts} +20 -1
- package/ui/frame/{callbacks/fragment-callbacks.js → frame-helper-for-android.js} +52 -38
- package/ui/frame/frame-helper-for-android.js.map +1 -0
- package/ui/frame/frame-interfaces.d.ts +30 -4
- package/ui/frame/frame-interfaces.js.map +1 -1
- package/ui/frame/frame-stack.js.map +1 -1
- package/ui/frame/index.android.d.ts +21 -5
- package/ui/frame/index.android.js +296 -19
- package/ui/frame/index.android.js.map +1 -1
- package/ui/frame/index.d.ts +19 -60
- package/ui/frame/index.ios.d.ts +3 -2
- package/ui/frame/index.ios.js +5 -4
- package/ui/frame/index.ios.js.map +1 -1
- package/ui/gestures/gestures-common.d.ts +4 -273
- package/ui/gestures/gestures-common.js +3 -146
- package/ui/gestures/gestures-common.js.map +1 -1
- package/ui/gestures/gestures-types.d.ts +108 -0
- package/ui/gestures/gestures-types.js +40 -0
- package/ui/gestures/gestures-types.js.map +1 -0
- package/ui/gestures/index.android.d.ts +29 -1
- package/ui/gestures/index.android.js +4 -2
- package/ui/gestures/index.android.js.map +1 -1
- package/ui/gestures/index.d.ts +35 -0
- package/ui/gestures/index.ios.d.ts +35 -1
- package/ui/gestures/index.ios.js +3 -3
- package/ui/gestures/index.ios.js.map +1 -1
- package/ui/gestures/touch-manager.d.ts +1 -1
- package/ui/html-view/index.ios.js +3 -3
- package/ui/html-view/index.ios.js.map +1 -1
- package/ui/image/image-common.js +1 -1
- package/ui/image/image-common.js.map +1 -1
- package/ui/image/index.android.js +1 -1
- package/ui/image/index.android.js.map +1 -1
- package/ui/image-cache/index.ios.js +5 -11
- package/ui/image-cache/index.ios.js.map +1 -1
- package/ui/index.d.ts +10 -5
- package/ui/index.js +18 -3
- package/ui/index.js.map +1 -1
- package/ui/label/index.ios.js.map +1 -1
- package/ui/layouts/absolute-layout/absolute-layout-common.js +1 -1
- package/ui/layouts/absolute-layout/absolute-layout-common.js.map +1 -1
- package/ui/layouts/absolute-layout/index.android.js +1 -1
- package/ui/layouts/absolute-layout/index.android.js.map +1 -1
- package/ui/layouts/absolute-layout/index.d.ts +1 -1
- package/ui/layouts/absolute-layout/index.ios.js.map +1 -1
- package/ui/layouts/flexbox-layout/flexbox-layout-common.js +2 -1
- package/ui/layouts/flexbox-layout/flexbox-layout-common.js.map +1 -1
- package/ui/layouts/flexbox-layout/index.android.js +1 -1
- package/ui/layouts/flexbox-layout/index.android.js.map +1 -1
- package/ui/layouts/flexbox-layout/index.ios.js.map +1 -1
- package/ui/layouts/layout-base.android.js +2 -1
- package/ui/layouts/layout-base.android.js.map +1 -1
- package/ui/layouts/stack-layout/index.ios.js.map +1 -1
- package/ui/layouts/wrap-layout/index.android.js +1 -1
- package/ui/layouts/wrap-layout/index.android.js.map +1 -1
- package/ui/layouts/wrap-layout/index.d.ts +1 -1
- package/ui/layouts/wrap-layout/wrap-layout-common.js +1 -1
- package/ui/layouts/wrap-layout/wrap-layout-common.js.map +1 -1
- package/ui/list-view/index.android.d.ts +17 -1
- package/ui/list-view/index.android.js +402 -32
- package/ui/list-view/index.android.js.map +1 -1
- package/ui/list-view/index.d.ts +66 -1
- package/ui/list-view/index.ios.d.ts +24 -2
- package/ui/list-view/index.ios.js +385 -10
- package/ui/list-view/index.ios.js.map +1 -1
- package/ui/list-view/list-view-common.d.ts +15 -0
- package/ui/list-view/list-view-common.js +73 -1
- package/ui/list-view/list-view-common.js.map +1 -1
- package/ui/page/events.d.ts +6 -0
- package/ui/page/events.js +7 -0
- package/ui/page/events.js.map +1 -0
- package/ui/page/index.android.js +2 -1
- package/ui/page/index.android.js.map +1 -1
- package/ui/page/index.d.ts +1 -1
- package/ui/page/index.ios.js +4 -5
- package/ui/page/index.ios.js.map +1 -1
- package/ui/page/page-common.d.ts +3 -2
- package/ui/page/page-common.js +5 -4
- package/ui/page/page-common.js.map +1 -1
- package/ui/scroll-view/index.ios.js +3 -3
- package/ui/scroll-view/index.ios.js.map +1 -1
- package/ui/styling/background-common.js +0 -1
- package/ui/styling/background-common.js.map +1 -1
- package/ui/styling/background.android.d.ts +0 -6
- package/ui/styling/background.android.js +1 -53
- package/ui/styling/background.android.js.map +1 -1
- package/ui/styling/background.ios.js +2 -1
- package/ui/styling/background.ios.js.map +1 -1
- package/ui/styling/converters.d.ts +2 -2
- package/ui/styling/css-shadow.js.map +1 -1
- package/ui/styling/css-stroke.js.map +1 -1
- package/ui/styling/css-transform.d.ts +1 -1
- package/ui/styling/css-utils.js +1 -1
- package/ui/styling/css-utils.js.map +1 -1
- package/ui/styling/font.android.js +2 -2
- package/ui/styling/font.android.js.map +1 -1
- package/ui/styling/font.ios.js +10 -10
- package/ui/styling/font.ios.js.map +1 -1
- package/ui/styling/length-shared.d.ts +52 -0
- package/ui/styling/length-shared.js +173 -0
- package/ui/styling/length-shared.js.map +1 -0
- package/ui/styling/style/index.d.ts +1 -1
- package/ui/styling/style-properties.d.ts +58 -112
- package/ui/styling/style-properties.js +7 -93
- package/ui/styling/style-properties.js.map +1 -1
- package/ui/styling/style-scope.d.ts +85 -48
- package/ui/styling/style-scope.js +30 -36
- package/ui/styling/style-scope.js.map +1 -1
- package/ui/styling/styling-profile.d.ts +1 -0
- package/ui/styling/styling-profile.js +4 -0
- package/ui/styling/styling-profile.js.map +1 -0
- package/ui/styling/styling-shared.d.ts +3 -0
- package/ui/styling/styling-shared.js +6 -0
- package/ui/styling/styling-shared.js.map +1 -0
- package/ui/switch/index.ios.js +5 -5
- package/ui/switch/index.ios.js.map +1 -1
- package/ui/tab-view/index.android.js +6 -6
- package/ui/tab-view/index.android.js.map +1 -1
- package/ui/text-base/index.android.d.ts +1 -1
- package/ui/text-base/index.android.js +4 -4
- package/ui/text-base/index.android.js.map +1 -1
- package/ui/text-base/index.d.ts +1 -1
- package/ui/text-base/index.ios.js +5 -4
- package/ui/text-base/index.ios.js.map +1 -1
- package/ui/text-view/index.ios.js.map +1 -1
- package/ui/transition/fade-transition.ios.js +1 -1
- package/ui/transition/fade-transition.ios.js.map +1 -1
- package/ui/transition/index.ios.js +1 -1
- package/ui/transition/index.ios.js.map +1 -1
- package/ui/transition/modal-transition.ios.js +1 -1
- package/ui/transition/modal-transition.ios.js.map +1 -1
- package/ui/transition/page-transition.android.d.ts +1 -1
- package/ui/transition/page-transition.android.js +4 -4
- package/ui/transition/page-transition.android.js.map +1 -1
- package/ui/transition/page-transition.ios.js +1 -1
- package/ui/transition/page-transition.ios.js.map +1 -1
- package/ui/transition/shared-transition-helper.ios.js +1 -1
- package/ui/transition/shared-transition-helper.ios.js.map +1 -1
- package/ui/transition/shared-transition.js +2 -1
- package/ui/transition/shared-transition.js.map +1 -1
- package/ui/transition/slide-transition.ios.js +2 -2
- package/ui/transition/slide-transition.ios.js.map +1 -1
- package/utils/animation-helpers.d.ts +27 -0
- package/utils/animation-helpers.js +48 -0
- package/utils/animation-helpers.js.map +1 -0
- package/utils/common.d.ts +1 -38
- package/utils/common.js +2 -112
- package/utils/common.js.map +1 -1
- package/utils/debug-source.d.ts +19 -0
- package/utils/debug-source.js +78 -0
- package/utils/debug-source.js.map +1 -0
- package/utils/debug.js +1 -59
- package/utils/debug.js.map +1 -1
- package/utils/index.android.d.ts +3 -1
- package/utils/index.android.js +37 -11
- package/utils/index.android.js.map +1 -1
- package/utils/index.d.ts +2 -14
- package/utils/index.ios.d.ts +4 -1
- package/utils/index.ios.js +32 -5
- package/utils/index.ios.js.map +1 -1
- package/utils/layout-helper/index.android.js +4 -4
- package/utils/layout-helper/index.android.js.map +1 -1
- package/utils/layout-helper/index.d.ts +6 -4
- package/utils/layout-helper/index.ios.js +5 -5
- package/utils/layout-helper/index.ios.js.map +1 -1
- package/utils/layout-helper/layout-helper-common.d.ts +0 -9
- package/utils/layout-helper/layout-helper-common.js +1 -9
- package/utils/layout-helper/layout-helper-common.js.map +1 -1
- package/utils/layout-helper/layout-helper-shared.d.ts +9 -0
- package/utils/layout-helper/layout-helper-shared.js +13 -0
- package/utils/layout-helper/layout-helper-shared.js.map +1 -0
- package/utils/{android/index.d.ts → native-helper-for-android.d.ts} +4 -2
- package/utils/native-helper-for-android.js +273 -0
- package/utils/native-helper-for-android.js.map +1 -0
- package/utils/native-helper.android.d.ts +29 -5
- package/utils/native-helper.android.js +18 -131
- package/utils/native-helper.android.js.map +1 -1
- package/utils/native-helper.d.ts +206 -258
- package/utils/native-helper.ios.d.ts +72 -3
- package/utils/native-helper.ios.js +250 -3
- package/utils/native-helper.ios.js.map +1 -1
- package/utils/shared.d.ts +17 -0
- package/utils/shared.js +40 -0
- package/utils/shared.js.map +1 -0
- package/utils/utils-shared.d.ts +1 -0
- package/utils/utils-shared.js +8 -0
- package/utils/utils-shared.js.map +1 -0
- package/xhr/index.js +12 -13
- package/xhr/index.js.map +1 -1
- package/xml/index.d.ts +94 -98
- package/xml/index.js +58 -2
- package/xml/index.js.map +1 -1
- package/accessibility/accessibility-css-helper.d.ts +0 -1
- package/accessibility/accessibility-css-helper.js +0 -101
- package/accessibility/accessibility-css-helper.js.map +0 -1
- package/accessibility/accessibility-service-common.d.ts +0 -8
- package/accessibility/accessibility-service-common.js +0 -26
- package/accessibility/accessibility-service-common.js.map +0 -1
- package/accessibility/accessibility-service.android.d.ts +0 -6
- package/accessibility/accessibility-service.android.js +0 -103
- package/accessibility/accessibility-service.android.js.map +0 -1
- package/accessibility/accessibility-service.d.ts +0 -10
- package/accessibility/accessibility-service.ios.d.ts +0 -6
- package/accessibility/accessibility-service.ios.js +0 -61
- package/accessibility/accessibility-service.ios.js.map +0 -1
- package/accessibility/accessibility-types.d.ts +0 -224
- package/accessibility/accessibility-types.js +0 -222
- package/accessibility/accessibility-types.js.map +0 -1
- package/accessibility/font-scale-common.d.ts +0 -7
- package/accessibility/font-scale-common.js +0 -14
- package/accessibility/font-scale-common.js.map +0 -1
- package/accessibility/font-scale.android.d.ts +0 -5
- package/accessibility/font-scale.android.js +0 -55
- package/accessibility/font-scale.android.js.map +0 -1
- package/accessibility/font-scale.d.ts +0 -9
- package/accessibility/font-scale.ios.d.ts +0 -5
- package/accessibility/font-scale.ios.js +0 -89
- package/accessibility/font-scale.ios.js.map +0 -1
- package/accessibility/index.android.d.ts +0 -10
- package/accessibility/index.android.js +0 -577
- package/accessibility/index.android.js.map +0 -1
- package/accessibility/index.ios.d.ts +0 -9
- package/accessibility/index.ios.js +0 -229
- package/accessibility/index.ios.js.map +0 -1
- package/css/package.json +0 -36
- package/css-value/package.json +0 -23
- package/debugger/dom-node.d.ts +0 -27
- package/debugger/dom-node.js.map +0 -1
- package/ui/animation/animation-interfaces.js.map +0 -1
- package/ui/builder/xml2ui.d.ts +0 -134
- package/ui/builder/xml2ui.js +0 -397
- package/ui/builder/xml2ui.js.map +0 -1
- package/ui/frame/callbacks/activity-callbacks.d.ts +0 -19
- package/ui/frame/callbacks/activity-callbacks.js +0 -301
- package/ui/frame/callbacks/activity-callbacks.js.map +0 -1
- package/ui/frame/callbacks/fragment-callbacks.js.map +0 -1
- package/utils/android/index.js +0 -160
- package/utils/android/index.js.map +0 -1
- package/utils/ios/index.d.ts +0 -39
- package/utils/ios/index.js +0 -229
- package/utils/ios/index.js.map +0 -1
|
@@ -1,29 +1,13 @@
|
|
|
1
1
|
import { profile } from '../profiling';
|
|
2
|
-
import { isEmbedded } from '../ui/embedding';
|
|
3
2
|
import { SDK_VERSION } from '../utils/constants';
|
|
3
|
+
import { android as androidUtils } from '../utils';
|
|
4
4
|
import { ApplicationCommon } from './application-common';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
__extends(BroadcastReceiverImpl, _super);
|
|
12
|
-
function BroadcastReceiverImpl(onReceiveCallback) {
|
|
13
|
-
var _this = _super.call(this) || this;
|
|
14
|
-
_this._onReceiveCallback = onReceiveCallback;
|
|
15
|
-
return global.__native(_this);
|
|
16
|
-
}
|
|
17
|
-
BroadcastReceiverImpl.prototype.onReceive = function (context, intent) {
|
|
18
|
-
if (this._onReceiveCallback) {
|
|
19
|
-
this._onReceiveCallback(context, intent);
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
return BroadcastReceiverImpl;
|
|
23
|
-
}(android.content.BroadcastReceiver));
|
|
24
|
-
BroadcastReceiver_ = BroadcastReceiverImpl;
|
|
25
|
-
return BroadcastReceiver_;
|
|
26
|
-
}
|
|
5
|
+
import { Observable } from '../data/observable';
|
|
6
|
+
import { Trace } from '../trace';
|
|
7
|
+
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 { getImageFetcher, getNativeApp, getRootView, initImageCache, setA11yUpdatePropertiesCallback, setApplicationPropertiesCallback, setAppMainEntry, setNativeApp, setRootView, setToggleApplicationEventListenersCallback } from './helpers-common';
|
|
10
|
+
import { getNativeScriptGlobals } from '../globals/global-utils';
|
|
27
11
|
let NativeScriptLifecycleCallbacks_;
|
|
28
12
|
function initNativeScriptLifecycleCallbacks() {
|
|
29
13
|
if (NativeScriptLifecycleCallbacks_) {
|
|
@@ -310,8 +294,6 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
310
294
|
this.activityBackPressedEvent = AndroidApplication.activityBackPressedEvent;
|
|
311
295
|
this.activityNewIntentEvent = AndroidApplication.activityNewIntentEvent;
|
|
312
296
|
this.activityRequestPermissionsEvent = AndroidApplication.activityRequestPermissionsEvent;
|
|
313
|
-
this._registeredReceivers = {};
|
|
314
|
-
this._pendingReceiverRegistrations = new Array();
|
|
315
297
|
}
|
|
316
298
|
init(nativeApp) {
|
|
317
299
|
if (this.nativeApp === nativeApp) {
|
|
@@ -321,6 +303,7 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
321
303
|
throw new Error('Application.android already initialized.');
|
|
322
304
|
}
|
|
323
305
|
this._nativeApp = nativeApp;
|
|
306
|
+
setNativeApp(nativeApp);
|
|
324
307
|
this._context = nativeApp.getApplicationContext();
|
|
325
308
|
this._packageName = nativeApp.getPackageName();
|
|
326
309
|
// we store those callbacks and add a function for clearing them later so that the objects will be eligable for GC
|
|
@@ -331,8 +314,8 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
331
314
|
this._registerPendingReceivers();
|
|
332
315
|
}
|
|
333
316
|
_registerPendingReceivers() {
|
|
334
|
-
|
|
335
|
-
|
|
317
|
+
androidPendingReceiverRegistrations.forEach((func) => func(this.context));
|
|
318
|
+
androidPendingReceiverRegistrations.length = 0;
|
|
336
319
|
}
|
|
337
320
|
onConfigurationChanged(configuration) {
|
|
338
321
|
this.setOrientation(this.getOrientationValue(configuration));
|
|
@@ -343,25 +326,7 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
343
326
|
if (nativeApp) {
|
|
344
327
|
return nativeApp;
|
|
345
328
|
}
|
|
346
|
-
|
|
347
|
-
// check whether the com.tns.NativeScriptApplication type exists
|
|
348
|
-
if (com.tns.NativeScriptApplication) {
|
|
349
|
-
nativeApp = com.tns.NativeScriptApplication.getInstance();
|
|
350
|
-
}
|
|
351
|
-
if (!nativeApp && isEmbedded()) {
|
|
352
|
-
nativeApp = com.tns.embedding.ApplicationHolder.getInstance();
|
|
353
|
-
}
|
|
354
|
-
// the getInstance might return null if com.tns.NativeScriptApplication exists but is not the starting app type
|
|
355
|
-
if (!nativeApp) {
|
|
356
|
-
// TODO: Should we handle the case when a custom application type is provided and the user has not explicitly initialized the application module?
|
|
357
|
-
const clazz = java.lang.Class.forName('android.app.ActivityThread');
|
|
358
|
-
if (clazz) {
|
|
359
|
-
const method = clazz.getMethod('currentApplication', null);
|
|
360
|
-
if (method) {
|
|
361
|
-
nativeApp = method.invoke(null, null);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
}
|
|
329
|
+
nativeApp = getNativeApp();
|
|
365
330
|
// we cannot work without having the app instance
|
|
366
331
|
if (!nativeApp) {
|
|
367
332
|
throw new Error("Failed to retrieve native Android Application object. If you have a custom android.app.Application type implemented make sure that you've called the 'Application.android.init' method.");
|
|
@@ -376,23 +341,23 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
376
341
|
throw new Error('Application is already started.');
|
|
377
342
|
}
|
|
378
343
|
this.started = true;
|
|
379
|
-
|
|
344
|
+
setAppMainEntry(typeof entry === 'string' ? { moduleName: entry } : entry);
|
|
380
345
|
if (!this.nativeApp) {
|
|
381
346
|
const nativeApp = this.getNativeApplication();
|
|
382
347
|
this.init(nativeApp);
|
|
383
348
|
}
|
|
384
349
|
}
|
|
385
350
|
get startActivity() {
|
|
386
|
-
return
|
|
351
|
+
return androidGetStartActivity();
|
|
387
352
|
}
|
|
388
353
|
get foregroundActivity() {
|
|
389
|
-
return
|
|
354
|
+
return androidGetForegroundActivity();
|
|
390
355
|
}
|
|
391
356
|
setStartActivity(value) {
|
|
392
|
-
|
|
357
|
+
androidSetStartActivity(value);
|
|
393
358
|
}
|
|
394
359
|
setForegroundActivity(value) {
|
|
395
|
-
|
|
360
|
+
androidSetForegroundActivity(value);
|
|
396
361
|
}
|
|
397
362
|
get paused() {
|
|
398
363
|
return this.suspended;
|
|
@@ -411,33 +376,13 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
411
376
|
// RECEIVER_NOT_EXPORTED (4)
|
|
412
377
|
// RECEIVER_VISIBLE_TO_INSTANT_APPS (1)
|
|
413
378
|
registerBroadcastReceiver(intentFilter, onReceiveCallback, flags = 2) {
|
|
414
|
-
|
|
415
|
-
const receiver = new (initBroadcastReceiver())(onReceiveCallback);
|
|
416
|
-
if (SDK_VERSION >= 26) {
|
|
417
|
-
context.registerReceiver(receiver, new android.content.IntentFilter(intentFilter), flags);
|
|
418
|
-
}
|
|
419
|
-
else {
|
|
420
|
-
context.registerReceiver(receiver, new android.content.IntentFilter(intentFilter));
|
|
421
|
-
}
|
|
422
|
-
this._registeredReceivers[intentFilter] = receiver;
|
|
423
|
-
};
|
|
424
|
-
if (this.context) {
|
|
425
|
-
registerFunc(this.context);
|
|
426
|
-
}
|
|
427
|
-
else {
|
|
428
|
-
this._pendingReceiverRegistrations.push(registerFunc);
|
|
429
|
-
}
|
|
379
|
+
androidRegisterBroadcastReceiver(intentFilter, onReceiveCallback, flags);
|
|
430
380
|
}
|
|
431
381
|
unregisterBroadcastReceiver(intentFilter) {
|
|
432
|
-
|
|
433
|
-
if (receiver) {
|
|
434
|
-
this.context.unregisterReceiver(receiver);
|
|
435
|
-
this._registeredReceivers[intentFilter] = undefined;
|
|
436
|
-
delete this._registeredReceivers[intentFilter];
|
|
437
|
-
}
|
|
382
|
+
androidUnregisterBroadcastReceiver(intentFilter);
|
|
438
383
|
}
|
|
439
384
|
getRegisteredBroadcastReceiver(intentFilter) {
|
|
440
|
-
return
|
|
385
|
+
return androidRegisteredReceivers[intentFilter];
|
|
441
386
|
}
|
|
442
387
|
getRootView() {
|
|
443
388
|
const activity = this.foregroundActivity || this.startActivity;
|
|
@@ -445,7 +390,8 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
445
390
|
return undefined;
|
|
446
391
|
}
|
|
447
392
|
const callbacks = activity['_callbacks'];
|
|
448
|
-
|
|
393
|
+
setRootView(callbacks ? callbacks.getRootView() : undefined);
|
|
394
|
+
return getRootView();
|
|
449
395
|
}
|
|
450
396
|
resetRootView(entry) {
|
|
451
397
|
super.resetRootView(entry);
|
|
@@ -511,4 +457,737 @@ AndroidApplication.activityRequestPermissionsEvent = 'activityRequestPermissions
|
|
|
511
457
|
export * from './application-common';
|
|
512
458
|
export const Application = new AndroidApplication();
|
|
513
459
|
export const iOSApplication = undefined;
|
|
460
|
+
function fontScaleChanged(origFontScale) {
|
|
461
|
+
const oldValue = getFontScale();
|
|
462
|
+
setFontScale(getClosestValidFontScale(origFontScale));
|
|
463
|
+
const currentFontScale = getFontScale();
|
|
464
|
+
if (oldValue !== currentFontScale) {
|
|
465
|
+
Application.notify({
|
|
466
|
+
eventName: Application.fontScaleChangedEvent,
|
|
467
|
+
object: Application,
|
|
468
|
+
newValue: currentFontScale,
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
export function getCurrentFontScale() {
|
|
473
|
+
setupConfigListener();
|
|
474
|
+
return getFontScale();
|
|
475
|
+
}
|
|
476
|
+
function useAndroidFontScale() {
|
|
477
|
+
fontScaleChanged(Number(Application.android.context.getResources().getConfiguration().fontScale));
|
|
478
|
+
}
|
|
479
|
+
let configChangedCallback;
|
|
480
|
+
function setupConfigListener() {
|
|
481
|
+
if (configChangedCallback) {
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
Application.off(Application.launchEvent, setupConfigListener);
|
|
485
|
+
const context = Application.android?.context;
|
|
486
|
+
if (!context) {
|
|
487
|
+
Application.on(Application.launchEvent, setupConfigListener);
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
useAndroidFontScale();
|
|
491
|
+
configChangedCallback = new android.content.ComponentCallbacks2({
|
|
492
|
+
onLowMemory() {
|
|
493
|
+
// Dummy
|
|
494
|
+
},
|
|
495
|
+
onTrimMemory() {
|
|
496
|
+
// Dummy
|
|
497
|
+
},
|
|
498
|
+
onConfigurationChanged(newConfig) {
|
|
499
|
+
fontScaleChanged(Number(newConfig.fontScale));
|
|
500
|
+
},
|
|
501
|
+
});
|
|
502
|
+
context.registerComponentCallbacks(configChangedCallback);
|
|
503
|
+
Application.on(Application.resumeEvent, useAndroidFontScale);
|
|
504
|
+
}
|
|
505
|
+
setInitFontScale(setupConfigListener);
|
|
506
|
+
function applyRootCssClass(cssClasses, newCssClass) {
|
|
507
|
+
const rootView = Application.getRootView();
|
|
508
|
+
if (!rootView) {
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
Application.applyCssClass(rootView, cssClasses, newCssClass);
|
|
512
|
+
const rootModalViews = rootView._getRootModalViews();
|
|
513
|
+
rootModalViews.forEach((rootModalView) => Application.applyCssClass(rootModalView, cssClasses, newCssClass));
|
|
514
|
+
}
|
|
515
|
+
function applyFontScaleToRootViews() {
|
|
516
|
+
const rootView = Application.getRootView();
|
|
517
|
+
if (!rootView) {
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
const fontScale = getCurrentFontScale();
|
|
521
|
+
rootView.style.fontScaleInternal = fontScale;
|
|
522
|
+
const rootModalViews = rootView._getRootModalViews();
|
|
523
|
+
rootModalViews.forEach((rootModalView) => (rootModalView.style.fontScaleInternal = fontScale));
|
|
524
|
+
}
|
|
525
|
+
export function getAndroidAccessibilityManager() {
|
|
526
|
+
const context = getNativeApp().getApplicationContext();
|
|
527
|
+
if (!context) {
|
|
528
|
+
return null;
|
|
529
|
+
}
|
|
530
|
+
return context.getSystemService(android.content.Context.ACCESSIBILITY_SERVICE);
|
|
531
|
+
}
|
|
532
|
+
const accessibilityStateEnabledPropName = 'accessibilityStateEnabled';
|
|
533
|
+
const touchExplorationStateEnabledPropName = 'touchExplorationStateEnabled';
|
|
534
|
+
class AndroidSharedA11YObservable extends SharedA11YObservable {
|
|
535
|
+
// @ts-ignore todo: fix
|
|
536
|
+
get accessibilityServiceEnabled() {
|
|
537
|
+
return !!this[accessibilityStateEnabledPropName] && !!this[touchExplorationStateEnabledPropName];
|
|
538
|
+
}
|
|
539
|
+
set accessibilityServiceEnabled(v) {
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
let accessibilityStateChangeListener;
|
|
544
|
+
let touchExplorationStateChangeListener;
|
|
545
|
+
let sharedA11YObservable;
|
|
546
|
+
function updateAccessibilityState() {
|
|
547
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
548
|
+
if (!accessibilityManager) {
|
|
549
|
+
sharedA11YObservable.set(accessibilityStateEnabledPropName, false);
|
|
550
|
+
sharedA11YObservable.set(touchExplorationStateEnabledPropName, false);
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
sharedA11YObservable.set(accessibilityStateEnabledPropName, !!accessibilityManager.isEnabled());
|
|
554
|
+
sharedA11YObservable.set(touchExplorationStateEnabledPropName, !!accessibilityManager.isTouchExplorationEnabled());
|
|
555
|
+
}
|
|
556
|
+
function ensureStateListener() {
|
|
557
|
+
if (sharedA11YObservable) {
|
|
558
|
+
return sharedA11YObservable;
|
|
559
|
+
}
|
|
560
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
561
|
+
sharedA11YObservable = new AndroidSharedA11YObservable();
|
|
562
|
+
if (!accessibilityManager) {
|
|
563
|
+
sharedA11YObservable.set(accessibilityStateEnabledPropName, false);
|
|
564
|
+
sharedA11YObservable.set(touchExplorationStateEnabledPropName, false);
|
|
565
|
+
return sharedA11YObservable;
|
|
566
|
+
}
|
|
567
|
+
accessibilityStateChangeListener = new android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener({
|
|
568
|
+
onAccessibilityStateChanged(enabled) {
|
|
569
|
+
updateAccessibilityState();
|
|
570
|
+
if (Trace.isEnabled()) {
|
|
571
|
+
Trace.write(`AccessibilityStateChangeListener state changed to: ${!!enabled}`, Trace.categories.Accessibility);
|
|
572
|
+
}
|
|
573
|
+
},
|
|
574
|
+
});
|
|
575
|
+
accessibilityManager.addAccessibilityStateChangeListener(accessibilityStateChangeListener);
|
|
576
|
+
if (SDK_VERSION >= 19) {
|
|
577
|
+
touchExplorationStateChangeListener = new android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener({
|
|
578
|
+
onTouchExplorationStateChanged(enabled) {
|
|
579
|
+
updateAccessibilityState();
|
|
580
|
+
if (Trace.isEnabled()) {
|
|
581
|
+
Trace.write(`TouchExplorationStateChangeListener state changed to: ${!!enabled}`, Trace.categories.Accessibility);
|
|
582
|
+
}
|
|
583
|
+
},
|
|
584
|
+
});
|
|
585
|
+
accessibilityManager.addTouchExplorationStateChangeListener(touchExplorationStateChangeListener);
|
|
586
|
+
}
|
|
587
|
+
updateAccessibilityState();
|
|
588
|
+
Application.on(Application.resumeEvent, updateAccessibilityState);
|
|
589
|
+
Application.on(Application.exitEvent, (args) => {
|
|
590
|
+
const activity = args.android;
|
|
591
|
+
if (activity && !activity.isFinishing()) {
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
595
|
+
if (accessibilityManager) {
|
|
596
|
+
if (accessibilityStateChangeListener) {
|
|
597
|
+
accessibilityManager.removeAccessibilityStateChangeListener(accessibilityStateChangeListener);
|
|
598
|
+
}
|
|
599
|
+
if (touchExplorationStateChangeListener) {
|
|
600
|
+
accessibilityManager.removeTouchExplorationStateChangeListener(touchExplorationStateChangeListener);
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
accessibilityStateChangeListener = null;
|
|
604
|
+
touchExplorationStateChangeListener = null;
|
|
605
|
+
if (sharedA11YObservable) {
|
|
606
|
+
sharedA11YObservable.removeEventListener(Observable.propertyChangeEvent);
|
|
607
|
+
sharedA11YObservable = null;
|
|
608
|
+
}
|
|
609
|
+
Application.off(Application.resumeEvent, updateAccessibilityState);
|
|
610
|
+
});
|
|
611
|
+
return sharedA11YObservable;
|
|
612
|
+
}
|
|
613
|
+
export class AccessibilityServiceEnabledObservable extends CommonA11YServiceEnabledObservable {
|
|
614
|
+
constructor() {
|
|
615
|
+
super(ensureStateListener());
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
let accessibilityServiceObservable;
|
|
619
|
+
export function ensureClasses() {
|
|
620
|
+
if (accessibilityServiceObservable) {
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
623
|
+
setFontScaleCssClasses(new Map(VALID_FONT_SCALES.map((fs) => [fs, `a11y-fontscale-${Number(fs * 100).toFixed(0)}`])));
|
|
624
|
+
accessibilityServiceObservable = new AccessibilityServiceEnabledObservable();
|
|
625
|
+
}
|
|
626
|
+
export function updateCurrentHelperClasses(applyRootCssClass) {
|
|
627
|
+
const fontScale = getFontScale();
|
|
628
|
+
const fontScaleCategory = getFontScaleCategory();
|
|
629
|
+
const fontScaleCssClasses = getFontScaleCssClasses();
|
|
630
|
+
const oldFontScaleClass = getCurrentFontScaleClass();
|
|
631
|
+
if (fontScaleCssClasses.has(fontScale)) {
|
|
632
|
+
setCurrentFontScaleClass(fontScaleCssClasses.get(fontScale));
|
|
633
|
+
}
|
|
634
|
+
else {
|
|
635
|
+
setCurrentFontScaleClass(fontScaleCssClasses.get(1));
|
|
636
|
+
}
|
|
637
|
+
if (oldFontScaleClass !== getCurrentFontScaleClass()) {
|
|
638
|
+
applyRootCssClass([...fontScaleCssClasses.values()], getCurrentFontScaleClass());
|
|
639
|
+
}
|
|
640
|
+
const oldActiveFontScaleCategory = getCurrentFontScaleCategory();
|
|
641
|
+
switch (fontScaleCategory) {
|
|
642
|
+
case FontScaleCategory.ExtraSmall: {
|
|
643
|
+
setCurrentFontScaleCategory(fontScaleExtraSmallCategoryClass);
|
|
644
|
+
break;
|
|
645
|
+
}
|
|
646
|
+
case FontScaleCategory.Medium: {
|
|
647
|
+
setCurrentFontScaleCategory(fontScaleMediumCategoryClass);
|
|
648
|
+
break;
|
|
649
|
+
}
|
|
650
|
+
case FontScaleCategory.ExtraLarge: {
|
|
651
|
+
setCurrentFontScaleCategory(fontScaleExtraLargeCategoryClass);
|
|
652
|
+
break;
|
|
653
|
+
}
|
|
654
|
+
default: {
|
|
655
|
+
setCurrentFontScaleCategory(fontScaleMediumCategoryClass);
|
|
656
|
+
break;
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
if (oldActiveFontScaleCategory !== getCurrentFontScaleCategory()) {
|
|
660
|
+
applyRootCssClass(fontScaleCategoryClasses, getCurrentFontScaleCategory());
|
|
661
|
+
}
|
|
662
|
+
const oldA11YStatusClass = getCurrentA11YServiceClass();
|
|
663
|
+
if (accessibilityServiceObservable.accessibilityServiceEnabled) {
|
|
664
|
+
setCurrentA11YServiceClass(a11yServiceEnabledClass);
|
|
665
|
+
}
|
|
666
|
+
else {
|
|
667
|
+
setCurrentA11YServiceClass(a11yServiceDisabledClass);
|
|
668
|
+
}
|
|
669
|
+
if (oldA11YStatusClass !== getCurrentA11YServiceClass()) {
|
|
670
|
+
applyRootCssClass(a11yServiceClasses, getCurrentA11YServiceClass());
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
export function initAccessibilityCssHelper() {
|
|
674
|
+
ensureClasses();
|
|
675
|
+
Application.on(Application.fontScaleChangedEvent, () => {
|
|
676
|
+
updateCurrentHelperClasses(applyRootCssClass);
|
|
677
|
+
applyFontScaleToRootViews();
|
|
678
|
+
});
|
|
679
|
+
accessibilityServiceObservable.on(AccessibilityServiceEnabledObservable.propertyChangeEvent, () => updateCurrentHelperClasses(applyRootCssClass));
|
|
680
|
+
}
|
|
681
|
+
setInitAccessibilityCssHelper(initAccessibilityCssHelper);
|
|
682
|
+
let clickableRolesMap = new Set();
|
|
683
|
+
let lastFocusedView;
|
|
684
|
+
function accessibilityEventHelper(view, eventType) {
|
|
685
|
+
const eventName = accessibilityEventTypeMap.get(eventType);
|
|
686
|
+
if (!isAccessibilityServiceEnabled()) {
|
|
687
|
+
if (Trace.isEnabled()) {
|
|
688
|
+
Trace.write(`accessibilityEventHelper: Service not active`, Trace.categories.Accessibility);
|
|
689
|
+
}
|
|
690
|
+
return;
|
|
691
|
+
}
|
|
692
|
+
if (!eventName) {
|
|
693
|
+
Trace.write(`accessibilityEventHelper: unknown eventType: ${eventType}`, Trace.categories.Accessibility, Trace.messageType.error);
|
|
694
|
+
return;
|
|
695
|
+
}
|
|
696
|
+
if (!view) {
|
|
697
|
+
if (Trace.isEnabled()) {
|
|
698
|
+
Trace.write(`accessibilityEventHelper: no owner: ${eventName}`, Trace.categories.Accessibility);
|
|
699
|
+
}
|
|
700
|
+
return;
|
|
701
|
+
}
|
|
702
|
+
const androidView = view.nativeViewProtected;
|
|
703
|
+
if (!androidView) {
|
|
704
|
+
if (Trace.isEnabled()) {
|
|
705
|
+
Trace.write(`accessibilityEventHelper: no nativeView`, Trace.categories.Accessibility);
|
|
706
|
+
}
|
|
707
|
+
return;
|
|
708
|
+
}
|
|
709
|
+
switch (eventType) {
|
|
710
|
+
case android.view.accessibility.AccessibilityEvent.TYPE_VIEW_CLICKED: {
|
|
711
|
+
/**
|
|
712
|
+
* Android API >= 26 handles accessibility tap-events by converting them to TYPE_VIEW_CLICKED
|
|
713
|
+
* These aren't triggered for custom tap events in NativeScript.
|
|
714
|
+
*/
|
|
715
|
+
if (SDK_VERSION >= 26) {
|
|
716
|
+
// Find all tap gestures and trigger them.
|
|
717
|
+
for (const tapGesture of view.getGestureObservers(1) ?? []) {
|
|
718
|
+
tapGesture.callback({
|
|
719
|
+
android: view.android,
|
|
720
|
+
eventName: 'tap',
|
|
721
|
+
ios: null,
|
|
722
|
+
object: view,
|
|
723
|
+
type: 1,
|
|
724
|
+
view: view,
|
|
725
|
+
});
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
case android.view.accessibility.AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: {
|
|
731
|
+
const lastView = lastFocusedView?.get();
|
|
732
|
+
if (lastView && view !== lastView) {
|
|
733
|
+
const lastAndroidView = lastView.nativeViewProtected;
|
|
734
|
+
if (lastAndroidView) {
|
|
735
|
+
lastAndroidView.clearFocus();
|
|
736
|
+
lastFocusedView = null;
|
|
737
|
+
notifyAccessibilityFocusState(lastView, false, true);
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
lastFocusedView = new WeakRef(view);
|
|
741
|
+
notifyAccessibilityFocusState(view, true, false);
|
|
742
|
+
return;
|
|
743
|
+
}
|
|
744
|
+
case android.view.accessibility.AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED: {
|
|
745
|
+
const lastView = lastFocusedView?.get();
|
|
746
|
+
if (lastView && view === lastView) {
|
|
747
|
+
lastFocusedView = null;
|
|
748
|
+
androidView.clearFocus();
|
|
749
|
+
}
|
|
750
|
+
notifyAccessibilityFocusState(view, false, true);
|
|
751
|
+
return;
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
let TNSAccessibilityDelegate;
|
|
756
|
+
const androidViewToTNSView = new WeakMap();
|
|
757
|
+
let accessibilityEventMap;
|
|
758
|
+
let accessibilityEventTypeMap;
|
|
759
|
+
function ensureNativeClasses() {
|
|
760
|
+
if (TNSAccessibilityDelegate) {
|
|
761
|
+
return;
|
|
762
|
+
}
|
|
763
|
+
// WORKAROUND: Typing refers to android.view.View.androidviewViewAccessibilityDelegate but it is called android.view.View.AccessibilityDelegate at runtime
|
|
764
|
+
const AccessibilityDelegate = android.view.View['AccessibilityDelegate'];
|
|
765
|
+
const RoleTypeMap = new Map([
|
|
766
|
+
[AccessibilityRole.Button, android.widget.Button.class.getName()],
|
|
767
|
+
[AccessibilityRole.Search, android.widget.EditText.class.getName()],
|
|
768
|
+
[AccessibilityRole.Image, android.widget.ImageView.class.getName()],
|
|
769
|
+
[AccessibilityRole.ImageButton, android.widget.ImageButton.class.getName()],
|
|
770
|
+
[AccessibilityRole.KeyboardKey, android.inputmethodservice.Keyboard.Key.class.getName()],
|
|
771
|
+
[AccessibilityRole.StaticText, android.widget.TextView.class.getName()],
|
|
772
|
+
[AccessibilityRole.Adjustable, android.widget.SeekBar.class.getName()],
|
|
773
|
+
[AccessibilityRole.Checkbox, android.widget.CheckBox.class.getName()],
|
|
774
|
+
[AccessibilityRole.RadioButton, android.widget.RadioButton.class.getName()],
|
|
775
|
+
[AccessibilityRole.SpinButton, android.widget.Spinner.class.getName()],
|
|
776
|
+
[AccessibilityRole.Switch, android.widget.Switch.class.getName()],
|
|
777
|
+
[AccessibilityRole.ProgressBar, android.widget.ProgressBar.class.getName()],
|
|
778
|
+
]);
|
|
779
|
+
clickableRolesMap = new Set([AccessibilityRole.Button, AccessibilityRole.ImageButton]);
|
|
780
|
+
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;
|
|
793
|
+
}
|
|
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
|
+
}
|
|
819
|
+
}
|
|
820
|
+
else if (!ignoreRoleTypesForTrace.has(accessibilityRole)) {
|
|
821
|
+
if (Trace.isEnabled()) {
|
|
822
|
+
Trace.write("".concat(view, ".accessibilityRole = \"").concat(accessibilityRole, "\" is unknown"), Trace.categories.Accessibility);
|
|
823
|
+
}
|
|
824
|
+
}
|
|
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);
|
|
830
|
+
}
|
|
831
|
+
if (SDK_VERSION >= 28) {
|
|
832
|
+
if (accessibilityRole === AccessibilityRole.Header) {
|
|
833
|
+
if (Trace.isEnabled()) {
|
|
834
|
+
Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set heading role=").concat(accessibilityRole), Trace.categories.Accessibility);
|
|
835
|
+
}
|
|
836
|
+
info.setHeading(true);
|
|
837
|
+
}
|
|
838
|
+
else if (host.isAccessibilityHeading()) {
|
|
839
|
+
if (Trace.isEnabled()) {
|
|
840
|
+
Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set heading from host"), Trace.categories.Accessibility);
|
|
841
|
+
}
|
|
842
|
+
info.setHeading(true);
|
|
843
|
+
}
|
|
844
|
+
else {
|
|
845
|
+
if (Trace.isEnabled()) {
|
|
846
|
+
Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set not heading"), Trace.categories.Accessibility);
|
|
847
|
+
}
|
|
848
|
+
info.setHeading(false);
|
|
849
|
+
}
|
|
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);
|
|
857
|
+
}
|
|
858
|
+
info.setCheckable(true);
|
|
859
|
+
info.setChecked(view.accessibilityState === AccessibilityState.Checked);
|
|
860
|
+
break;
|
|
861
|
+
}
|
|
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);
|
|
865
|
+
}
|
|
866
|
+
info.setEnabled(view.accessibilityState !== AccessibilityState.Disabled);
|
|
867
|
+
info.setSelected(view.accessibilityState === AccessibilityState.Selected);
|
|
868
|
+
break;
|
|
869
|
+
}
|
|
870
|
+
}
|
|
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));
|
|
892
|
+
TNSAccessibilityDelegate = new TNSAccessibilityDelegateImpl();
|
|
893
|
+
accessibilityEventMap = new Map([
|
|
894
|
+
/**
|
|
895
|
+
* Invalid selection/focus position.
|
|
896
|
+
*/
|
|
897
|
+
[AndroidAccessibilityEvent.INVALID_POSITION, android.view.accessibility.AccessibilityEvent.INVALID_POSITION],
|
|
898
|
+
/**
|
|
899
|
+
* Maximum length of the text fields.
|
|
900
|
+
*/
|
|
901
|
+
[AndroidAccessibilityEvent.MAX_TEXT_LENGTH, android.view.accessibility.AccessibilityEvent.MAX_TEXT_LENGTH],
|
|
902
|
+
/**
|
|
903
|
+
* Represents the event of clicking on a android.view.View like android.widget.Button, android.widget.CompoundButton, etc.
|
|
904
|
+
*/
|
|
905
|
+
[AndroidAccessibilityEvent.VIEW_CLICKED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_CLICKED],
|
|
906
|
+
/**
|
|
907
|
+
* Represents the event of long clicking on a android.view.View like android.widget.Button, android.widget.CompoundButton, etc.
|
|
908
|
+
*/
|
|
909
|
+
[AndroidAccessibilityEvent.VIEW_LONG_CLICKED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_LONG_CLICKED],
|
|
910
|
+
/**
|
|
911
|
+
* Represents the event of selecting an item usually in the context of an android.widget.AdapterView.
|
|
912
|
+
*/
|
|
913
|
+
[AndroidAccessibilityEvent.VIEW_SELECTED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SELECTED],
|
|
914
|
+
/**
|
|
915
|
+
* Represents the event of setting input focus of a android.view.View.
|
|
916
|
+
*/
|
|
917
|
+
[AndroidAccessibilityEvent.VIEW_FOCUSED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED],
|
|
918
|
+
/**
|
|
919
|
+
* Represents the event of changing the text of an android.widget.EditText.
|
|
920
|
+
*/
|
|
921
|
+
[AndroidAccessibilityEvent.VIEW_TEXT_CHANGED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED],
|
|
922
|
+
/**
|
|
923
|
+
* Represents the event of opening a android.widget.PopupWindow, android.view.Menu, android.app.Dialog, etc.
|
|
924
|
+
*/
|
|
925
|
+
[AndroidAccessibilityEvent.WINDOW_STATE_CHANGED, android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED],
|
|
926
|
+
/**
|
|
927
|
+
* Represents the event showing a android.app.Notification.
|
|
928
|
+
*/
|
|
929
|
+
[AndroidAccessibilityEvent.NOTIFICATION_STATE_CHANGED, android.view.accessibility.AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED],
|
|
930
|
+
/**
|
|
931
|
+
* Represents the event of a hover enter over a android.view.View.
|
|
932
|
+
*/
|
|
933
|
+
[AndroidAccessibilityEvent.VIEW_HOVER_ENTER, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_ENTER],
|
|
934
|
+
/**
|
|
935
|
+
* Represents the event of a hover exit over a android.view.View.
|
|
936
|
+
*/
|
|
937
|
+
[AndroidAccessibilityEvent.VIEW_HOVER_EXIT, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_EXIT],
|
|
938
|
+
/**
|
|
939
|
+
* Represents the event of starting a touch exploration gesture.
|
|
940
|
+
*/
|
|
941
|
+
[AndroidAccessibilityEvent.TOUCH_EXPLORATION_GESTURE_START, android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START],
|
|
942
|
+
/**
|
|
943
|
+
* Represents the event of ending a touch exploration gesture.
|
|
944
|
+
*/
|
|
945
|
+
[AndroidAccessibilityEvent.TOUCH_EXPLORATION_GESTURE_END, android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END],
|
|
946
|
+
/**
|
|
947
|
+
* Represents the event of changing the content of a window and more specifically the sub-tree rooted at the event's source.
|
|
948
|
+
*/
|
|
949
|
+
[AndroidAccessibilityEvent.WINDOW_CONTENT_CHANGED, android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED],
|
|
950
|
+
/**
|
|
951
|
+
* Represents the event of scrolling a view.
|
|
952
|
+
*/
|
|
953
|
+
[AndroidAccessibilityEvent.VIEW_SCROLLED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SCROLLED],
|
|
954
|
+
/**
|
|
955
|
+
* Represents the event of changing the selection in an android.widget.EditText.
|
|
956
|
+
*/
|
|
957
|
+
[AndroidAccessibilityEvent.VIEW_TEXT_SELECTION_CHANGED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED],
|
|
958
|
+
/**
|
|
959
|
+
* Represents the event of an application making an announcement.
|
|
960
|
+
*/
|
|
961
|
+
[AndroidAccessibilityEvent.ANNOUNCEMENT, android.view.accessibility.AccessibilityEvent.TYPE_ANNOUNCEMENT],
|
|
962
|
+
/**
|
|
963
|
+
* Represents the event of gaining accessibility focus.
|
|
964
|
+
*/
|
|
965
|
+
[AndroidAccessibilityEvent.VIEW_ACCESSIBILITY_FOCUSED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED],
|
|
966
|
+
/**
|
|
967
|
+
* Represents the event of clearing accessibility focus.
|
|
968
|
+
*/
|
|
969
|
+
[AndroidAccessibilityEvent.VIEW_ACCESSIBILITY_FOCUS_CLEARED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED],
|
|
970
|
+
/**
|
|
971
|
+
* Represents the event of traversing the text of a view at a given movement granularity.
|
|
972
|
+
*/
|
|
973
|
+
[AndroidAccessibilityEvent.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY],
|
|
974
|
+
/**
|
|
975
|
+
* Represents the event of beginning gesture detection.
|
|
976
|
+
*/
|
|
977
|
+
[AndroidAccessibilityEvent.GESTURE_DETECTION_START, android.view.accessibility.AccessibilityEvent.TYPE_GESTURE_DETECTION_START],
|
|
978
|
+
/**
|
|
979
|
+
* Represents the event of ending gesture detection.
|
|
980
|
+
*/
|
|
981
|
+
[AndroidAccessibilityEvent.GESTURE_DETECTION_END, android.view.accessibility.AccessibilityEvent.TYPE_GESTURE_DETECTION_END],
|
|
982
|
+
/**
|
|
983
|
+
* Represents the event of the user starting to touch the screen.
|
|
984
|
+
*/
|
|
985
|
+
[AndroidAccessibilityEvent.TOUCH_INTERACTION_START, android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_INTERACTION_START],
|
|
986
|
+
/**
|
|
987
|
+
* Represents the event of the user ending to touch the screen.
|
|
988
|
+
*/
|
|
989
|
+
[AndroidAccessibilityEvent.TOUCH_INTERACTION_END, android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_INTERACTION_END],
|
|
990
|
+
/**
|
|
991
|
+
* Mask for AccessibilityEvent all types.
|
|
992
|
+
*/
|
|
993
|
+
[AndroidAccessibilityEvent.ALL_MASK, android.view.accessibility.AccessibilityEvent.TYPES_ALL_MASK],
|
|
994
|
+
]);
|
|
995
|
+
accessibilityEventTypeMap = new Map([...accessibilityEventMap].map(([k, v]) => [v, k]));
|
|
996
|
+
}
|
|
997
|
+
function updateAccessibilityServiceState() {
|
|
998
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
999
|
+
if (!accessibilityManager) {
|
|
1000
|
+
return;
|
|
1001
|
+
}
|
|
1002
|
+
setA11yEnabled(!!accessibilityManager.isEnabled() && !!accessibilityManager.isTouchExplorationEnabled());
|
|
1003
|
+
}
|
|
1004
|
+
export function isAccessibilityServiceEnabled() {
|
|
1005
|
+
const accessibilityServiceEnabled = isA11yEnabled();
|
|
1006
|
+
if (typeof accessibilityServiceEnabled === 'boolean') {
|
|
1007
|
+
return accessibilityServiceEnabled;
|
|
1008
|
+
}
|
|
1009
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
1010
|
+
accessibilityStateChangeListener = new androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener({
|
|
1011
|
+
onAccessibilityStateChanged(enabled) {
|
|
1012
|
+
updateAccessibilityServiceState();
|
|
1013
|
+
if (Trace.isEnabled()) {
|
|
1014
|
+
Trace.write(`AccessibilityStateChangeListener state changed to: ${!!enabled}`, Trace.categories.Accessibility);
|
|
1015
|
+
}
|
|
1016
|
+
},
|
|
1017
|
+
});
|
|
1018
|
+
touchExplorationStateChangeListener = new androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener({
|
|
1019
|
+
onTouchExplorationStateChanged(enabled) {
|
|
1020
|
+
updateAccessibilityServiceState();
|
|
1021
|
+
if (Trace.isEnabled()) {
|
|
1022
|
+
Trace.write(`TouchExplorationStateChangeListener state changed to: ${!!enabled}`, Trace.categories.Accessibility);
|
|
1023
|
+
}
|
|
1024
|
+
},
|
|
1025
|
+
});
|
|
1026
|
+
androidx.core.view.accessibility.AccessibilityManagerCompat.addAccessibilityStateChangeListener(accessibilityManager, accessibilityStateChangeListener);
|
|
1027
|
+
androidx.core.view.accessibility.AccessibilityManagerCompat.addTouchExplorationStateChangeListener(accessibilityManager, touchExplorationStateChangeListener);
|
|
1028
|
+
updateAccessibilityServiceState();
|
|
1029
|
+
Application.on(Application.exitEvent, (args) => {
|
|
1030
|
+
const activity = args.android;
|
|
1031
|
+
if (activity && !activity.isFinishing()) {
|
|
1032
|
+
return;
|
|
1033
|
+
}
|
|
1034
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
1035
|
+
if (accessibilityManager) {
|
|
1036
|
+
if (accessibilityStateChangeListener) {
|
|
1037
|
+
androidx.core.view.accessibility.AccessibilityManagerCompat.removeAccessibilityStateChangeListener(accessibilityManager, accessibilityStateChangeListener);
|
|
1038
|
+
}
|
|
1039
|
+
if (touchExplorationStateChangeListener) {
|
|
1040
|
+
androidx.core.view.accessibility.AccessibilityManagerCompat.removeTouchExplorationStateChangeListener(accessibilityManager, touchExplorationStateChangeListener);
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
accessibilityStateChangeListener = null;
|
|
1044
|
+
touchExplorationStateChangeListener = null;
|
|
1045
|
+
Application.off(Application.resumeEvent, updateAccessibilityServiceState);
|
|
1046
|
+
});
|
|
1047
|
+
Application.on(Application.resumeEvent, updateAccessibilityServiceState);
|
|
1048
|
+
return accessibilityServiceEnabled;
|
|
1049
|
+
}
|
|
1050
|
+
let updateAccessibilityPropertiesMicroTask;
|
|
1051
|
+
let pendingViews = new Set();
|
|
1052
|
+
export function updateAccessibilityProperties(view) {
|
|
1053
|
+
if (!view.nativeViewProtected) {
|
|
1054
|
+
return;
|
|
1055
|
+
}
|
|
1056
|
+
pendingViews.add(view);
|
|
1057
|
+
if (updateAccessibilityPropertiesMicroTask)
|
|
1058
|
+
return;
|
|
1059
|
+
updateAccessibilityPropertiesMicroTask = true;
|
|
1060
|
+
Promise.resolve().then(() => {
|
|
1061
|
+
updateAccessibilityPropertiesMicroTask = false;
|
|
1062
|
+
let _pendingViews = Array.from(pendingViews);
|
|
1063
|
+
pendingViews = new Set();
|
|
1064
|
+
for (const view of _pendingViews) {
|
|
1065
|
+
if (!view.nativeViewProtected)
|
|
1066
|
+
continue;
|
|
1067
|
+
setAccessibilityDelegate(view);
|
|
1068
|
+
applyContentDescription(view);
|
|
1069
|
+
}
|
|
1070
|
+
_pendingViews = [];
|
|
1071
|
+
});
|
|
1072
|
+
}
|
|
1073
|
+
setA11yUpdatePropertiesCallback(updateAccessibilityProperties);
|
|
1074
|
+
export function sendAccessibilityEvent(view, eventType, text) {
|
|
1075
|
+
if (!isAccessibilityServiceEnabled()) {
|
|
1076
|
+
return;
|
|
1077
|
+
}
|
|
1078
|
+
const cls = `sendAccessibilityEvent(${view}, ${eventType}, ${text})`;
|
|
1079
|
+
const androidView = view.nativeViewProtected;
|
|
1080
|
+
if (!androidView) {
|
|
1081
|
+
if (Trace.isEnabled()) {
|
|
1082
|
+
Trace.write(`${cls}: no nativeView`, Trace.categories.Accessibility);
|
|
1083
|
+
}
|
|
1084
|
+
return;
|
|
1085
|
+
}
|
|
1086
|
+
if (!eventType) {
|
|
1087
|
+
if (Trace.isEnabled()) {
|
|
1088
|
+
Trace.write(`${cls}: no eventName provided`, Trace.categories.Accessibility);
|
|
1089
|
+
}
|
|
1090
|
+
return;
|
|
1091
|
+
}
|
|
1092
|
+
if (!isAccessibilityServiceEnabled()) {
|
|
1093
|
+
if (Trace.isEnabled()) {
|
|
1094
|
+
Trace.write(`${cls} - TalkBack not enabled`, Trace.categories.Accessibility);
|
|
1095
|
+
}
|
|
1096
|
+
return;
|
|
1097
|
+
}
|
|
1098
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
1099
|
+
if (!accessibilityManager?.isEnabled()) {
|
|
1100
|
+
if (Trace.isEnabled()) {
|
|
1101
|
+
Trace.write(`${cls} - accessibility service not enabled`, Trace.categories.Accessibility);
|
|
1102
|
+
}
|
|
1103
|
+
return;
|
|
1104
|
+
}
|
|
1105
|
+
if (!accessibilityEventMap.has(eventType)) {
|
|
1106
|
+
if (Trace.isEnabled()) {
|
|
1107
|
+
Trace.write(`${cls} - unknown event`, Trace.categories.Accessibility);
|
|
1108
|
+
}
|
|
1109
|
+
return;
|
|
1110
|
+
}
|
|
1111
|
+
const eventInt = accessibilityEventMap.get(eventType);
|
|
1112
|
+
if (!text) {
|
|
1113
|
+
return androidView.sendAccessibilityEvent(eventInt);
|
|
1114
|
+
}
|
|
1115
|
+
const accessibilityEvent = android.view.accessibility.AccessibilityEvent.obtain(eventInt);
|
|
1116
|
+
accessibilityEvent.setSource(androidView);
|
|
1117
|
+
accessibilityEvent.getText().clear();
|
|
1118
|
+
if (!text) {
|
|
1119
|
+
applyContentDescription(view);
|
|
1120
|
+
text = androidView.getContentDescription() || view['title'];
|
|
1121
|
+
if (Trace.isEnabled()) {
|
|
1122
|
+
Trace.write(`${cls} - text not provided use androidView.getContentDescription() - ${text}`, Trace.categories.Accessibility);
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
if (Trace.isEnabled()) {
|
|
1126
|
+
Trace.write(`${cls}: send event with text: '${JSON.stringify(text)}'`, Trace.categories.Accessibility);
|
|
1127
|
+
}
|
|
1128
|
+
if (text) {
|
|
1129
|
+
accessibilityEvent.getText().add(text);
|
|
1130
|
+
}
|
|
1131
|
+
accessibilityManager.sendAccessibilityEvent(accessibilityEvent);
|
|
1132
|
+
}
|
|
1133
|
+
function setAccessibilityDelegate(view) {
|
|
1134
|
+
if (!view.nativeViewProtected) {
|
|
1135
|
+
return;
|
|
1136
|
+
}
|
|
1137
|
+
ensureNativeClasses();
|
|
1138
|
+
const androidView = view.nativeViewProtected;
|
|
1139
|
+
if (!androidView || !androidView.setAccessibilityDelegate) {
|
|
1140
|
+
return;
|
|
1141
|
+
}
|
|
1142
|
+
androidViewToTNSView.set(androidView, new WeakRef(view));
|
|
1143
|
+
let hasOldDelegate = false;
|
|
1144
|
+
if (typeof androidView.getAccessibilityDelegate === 'function') {
|
|
1145
|
+
hasOldDelegate = androidView.getAccessibilityDelegate() === TNSAccessibilityDelegate;
|
|
1146
|
+
}
|
|
1147
|
+
if (hasOldDelegate) {
|
|
1148
|
+
return;
|
|
1149
|
+
}
|
|
1150
|
+
androidView.setAccessibilityDelegate(TNSAccessibilityDelegate);
|
|
1151
|
+
}
|
|
1152
|
+
const applicationEvents = [Application.orientationChangedEvent, Application.systemAppearanceChangedEvent];
|
|
1153
|
+
function toggleApplicationEventListeners(toAdd, callback) {
|
|
1154
|
+
for (const eventName of applicationEvents) {
|
|
1155
|
+
if (toAdd) {
|
|
1156
|
+
Application.on(eventName, callback);
|
|
1157
|
+
}
|
|
1158
|
+
else {
|
|
1159
|
+
Application.off(eventName, callback);
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
}
|
|
1163
|
+
setToggleApplicationEventListenersCallback(toggleApplicationEventListeners);
|
|
1164
|
+
setApplicationPropertiesCallback(() => {
|
|
1165
|
+
return {
|
|
1166
|
+
orientation: Application.orientation(),
|
|
1167
|
+
systemAppearance: Application.systemAppearance(),
|
|
1168
|
+
};
|
|
1169
|
+
});
|
|
1170
|
+
function onLiveSync(args) {
|
|
1171
|
+
if (getImageFetcher()) {
|
|
1172
|
+
getImageFetcher().clearCache();
|
|
1173
|
+
}
|
|
1174
|
+
}
|
|
1175
|
+
getNativeScriptGlobals().events.on('livesync', onLiveSync);
|
|
1176
|
+
getNativeScriptGlobals().addEventWiring(() => {
|
|
1177
|
+
Application.android.on('activityStarted', (args) => {
|
|
1178
|
+
if (!getImageFetcher()) {
|
|
1179
|
+
initImageCache(args.activity);
|
|
1180
|
+
}
|
|
1181
|
+
else {
|
|
1182
|
+
getImageFetcher().initCache();
|
|
1183
|
+
}
|
|
1184
|
+
});
|
|
1185
|
+
});
|
|
1186
|
+
getNativeScriptGlobals().addEventWiring(() => {
|
|
1187
|
+
Application.android.on('activityStopped', (args) => {
|
|
1188
|
+
if (getImageFetcher()) {
|
|
1189
|
+
getImageFetcher().closeCache();
|
|
1190
|
+
}
|
|
1191
|
+
});
|
|
1192
|
+
});
|
|
514
1193
|
//# sourceMappingURL=application.android.js.map
|