@nativescript/core 9.0.0-alpha.1 → 9.0.0-alpha.3
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 +17 -11
- 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 -55
- 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 +40 -0
- package/application/helpers-common.js +119 -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/cli-hooks/{before-checkForChanges.js → before-checkForChanges.mjs} +6 -6
- package/cli-hooks/postinstall.mjs +7 -0
- package/cli-hooks/preuninstall.mjs +7 -0
- 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/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 +5 -17
- 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/globals/index.js +47 -16
- 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-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 +3 -0
- package/inspector_modules.js +6 -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 +2 -11
- 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/package.json +9 -8
- 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 +6 -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/component-builder/index.js +2 -2
- package/ui/builder/component-builder/index.js.map +1 -1
- package/ui/builder/index.js +415 -3
- 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 +3 -37
- package/ui/core/properties/index.js +4 -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 +12 -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 +9 -9
- 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 +23 -25
- 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.ios.js +2 -2
- package/ui/dialogs/index.ios.js.map +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 -2
- package/ui/frame/frame-common.js +4 -1
- 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 +8 -5
- package/ui/frame/frame-interfaces.js.map +1 -1
- package/ui/frame/frame-stack.d.ts +1 -0
- package/ui/frame/frame-stack.js +3 -0
- package/ui/frame/frame-stack.js.map +1 -1
- package/ui/frame/index.android.d.ts +20 -5
- package/ui/frame/index.android.js +296 -19
- package/ui/frame/index.android.js.map +1 -1
- package/ui/frame/index.d.ts +26 -20
- package/ui/frame/index.ios.d.ts +1 -3
- package/ui/frame/index.ios.js +29 -39
- 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 +11 -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.js +1 -1
- package/ui/list-view/index.android.js.map +1 -1
- package/ui/list-view/index.d.ts +1 -1
- package/ui/list-view/index.ios.js +1 -1
- package/ui/list-view/index.ios.js.map +1 -1
- package/ui/list-view/list-view-common.js +1 -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 +65 -99
- 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 +0 -52
- 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.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 -113
- 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 +34 -32
- 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/tab-view/index.ios.js +1 -4
- package/ui/tab-view/index.ios.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.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 +1 -111
- 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 +30 -4
- 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 +1 -1
- 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 +25 -5
- package/utils/native-helper.android.js +15 -131
- package/utils/native-helper.android.js.map +1 -1
- package/utils/native-helper.d.ts +88 -63
- package/utils/native-helper.ios.d.ts +72 -3
- package/utils/native-helper.ios.js +253 -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/cli-hooks/postinstall.js +0 -3
- package/cli-hooks/preuninstall.js +0 -3
- 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,15 @@
|
|
|
1
1
|
import { profile } from '../profiling';
|
|
2
2
|
import { isEmbedded } from '../ui/embedding';
|
|
3
|
+
import { GestureTypes } from '../ui/gestures';
|
|
3
4
|
import { SDK_VERSION } from '../utils/constants';
|
|
5
|
+
import { android as androidUtils } from '../utils';
|
|
4
6
|
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
|
-
}
|
|
7
|
+
import { Observable } from '../data/observable';
|
|
8
|
+
import { Trace } from '../trace';
|
|
9
|
+
import * as Utils from '../utils';
|
|
10
|
+
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';
|
|
11
|
+
import { androidGetForegroundActivity, androidGetStartActivity, androidPendingReceiverRegistrations, androidRegisterBroadcastReceiver, androidRegisteredReceivers, androidSetForegroundActivity, androidSetStartActivity, androidUnregisterBroadcastReceiver, applyContentDescription } from './helpers';
|
|
12
|
+
import { getImageFetcher, getRootView, initImageCache, setA11yUpdatePropertiesCallback, setApplicationPropertiesCallback, setAppMainEntry, setNativeApp, setRootView, setToggleApplicationEventListenersCallback } from './helpers-common';
|
|
27
13
|
let NativeScriptLifecycleCallbacks_;
|
|
28
14
|
function initNativeScriptLifecycleCallbacks() {
|
|
29
15
|
if (NativeScriptLifecycleCallbacks_) {
|
|
@@ -310,8 +296,6 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
310
296
|
this.activityBackPressedEvent = AndroidApplication.activityBackPressedEvent;
|
|
311
297
|
this.activityNewIntentEvent = AndroidApplication.activityNewIntentEvent;
|
|
312
298
|
this.activityRequestPermissionsEvent = AndroidApplication.activityRequestPermissionsEvent;
|
|
313
|
-
this._registeredReceivers = {};
|
|
314
|
-
this._pendingReceiverRegistrations = new Array();
|
|
315
299
|
}
|
|
316
300
|
init(nativeApp) {
|
|
317
301
|
if (this.nativeApp === nativeApp) {
|
|
@@ -321,6 +305,7 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
321
305
|
throw new Error('Application.android already initialized.');
|
|
322
306
|
}
|
|
323
307
|
this._nativeApp = nativeApp;
|
|
308
|
+
setNativeApp(nativeApp);
|
|
324
309
|
this._context = nativeApp.getApplicationContext();
|
|
325
310
|
this._packageName = nativeApp.getPackageName();
|
|
326
311
|
// we store those callbacks and add a function for clearing them later so that the objects will be eligable for GC
|
|
@@ -331,8 +316,8 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
331
316
|
this._registerPendingReceivers();
|
|
332
317
|
}
|
|
333
318
|
_registerPendingReceivers() {
|
|
334
|
-
|
|
335
|
-
|
|
319
|
+
androidPendingReceiverRegistrations.forEach((func) => func(this.context));
|
|
320
|
+
androidPendingReceiverRegistrations.length = 0;
|
|
336
321
|
}
|
|
337
322
|
onConfigurationChanged(configuration) {
|
|
338
323
|
this.setOrientation(this.getOrientationValue(configuration));
|
|
@@ -376,23 +361,23 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
376
361
|
throw new Error('Application is already started.');
|
|
377
362
|
}
|
|
378
363
|
this.started = true;
|
|
379
|
-
|
|
364
|
+
setAppMainEntry(typeof entry === 'string' ? { moduleName: entry } : entry);
|
|
380
365
|
if (!this.nativeApp) {
|
|
381
366
|
const nativeApp = this.getNativeApplication();
|
|
382
367
|
this.init(nativeApp);
|
|
383
368
|
}
|
|
384
369
|
}
|
|
385
370
|
get startActivity() {
|
|
386
|
-
return
|
|
371
|
+
return androidGetStartActivity();
|
|
387
372
|
}
|
|
388
373
|
get foregroundActivity() {
|
|
389
|
-
return
|
|
374
|
+
return androidGetForegroundActivity();
|
|
390
375
|
}
|
|
391
376
|
setStartActivity(value) {
|
|
392
|
-
|
|
377
|
+
androidSetStartActivity(value);
|
|
393
378
|
}
|
|
394
379
|
setForegroundActivity(value) {
|
|
395
|
-
|
|
380
|
+
androidSetForegroundActivity(value);
|
|
396
381
|
}
|
|
397
382
|
get paused() {
|
|
398
383
|
return this.suspended;
|
|
@@ -411,33 +396,13 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
411
396
|
// RECEIVER_NOT_EXPORTED (4)
|
|
412
397
|
// RECEIVER_VISIBLE_TO_INSTANT_APPS (1)
|
|
413
398
|
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
|
-
}
|
|
399
|
+
androidRegisterBroadcastReceiver(intentFilter, onReceiveCallback, flags);
|
|
430
400
|
}
|
|
431
401
|
unregisterBroadcastReceiver(intentFilter) {
|
|
432
|
-
|
|
433
|
-
if (receiver) {
|
|
434
|
-
this.context.unregisterReceiver(receiver);
|
|
435
|
-
this._registeredReceivers[intentFilter] = undefined;
|
|
436
|
-
delete this._registeredReceivers[intentFilter];
|
|
437
|
-
}
|
|
402
|
+
androidUnregisterBroadcastReceiver(intentFilter);
|
|
438
403
|
}
|
|
439
404
|
getRegisteredBroadcastReceiver(intentFilter) {
|
|
440
|
-
return
|
|
405
|
+
return androidRegisteredReceivers[intentFilter];
|
|
441
406
|
}
|
|
442
407
|
getRootView() {
|
|
443
408
|
const activity = this.foregroundActivity || this.startActivity;
|
|
@@ -445,7 +410,8 @@ export class AndroidApplication extends ApplicationCommon {
|
|
|
445
410
|
return undefined;
|
|
446
411
|
}
|
|
447
412
|
const callbacks = activity['_callbacks'];
|
|
448
|
-
|
|
413
|
+
setRootView(callbacks ? callbacks.getRootView() : undefined);
|
|
414
|
+
return getRootView();
|
|
449
415
|
}
|
|
450
416
|
resetRootView(entry) {
|
|
451
417
|
super.resetRootView(entry);
|
|
@@ -511,4 +477,737 @@ AndroidApplication.activityRequestPermissionsEvent = 'activityRequestPermissions
|
|
|
511
477
|
export * from './application-common';
|
|
512
478
|
export const Application = new AndroidApplication();
|
|
513
479
|
export const iOSApplication = undefined;
|
|
480
|
+
function fontScaleChanged(origFontScale) {
|
|
481
|
+
const oldValue = getFontScale();
|
|
482
|
+
setFontScale(getClosestValidFontScale(origFontScale));
|
|
483
|
+
const currentFontScale = getFontScale();
|
|
484
|
+
if (oldValue !== currentFontScale) {
|
|
485
|
+
Application.notify({
|
|
486
|
+
eventName: Application.fontScaleChangedEvent,
|
|
487
|
+
object: Application,
|
|
488
|
+
newValue: currentFontScale,
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
export function getCurrentFontScale() {
|
|
493
|
+
setupConfigListener();
|
|
494
|
+
return getFontScale();
|
|
495
|
+
}
|
|
496
|
+
function useAndroidFontScale() {
|
|
497
|
+
fontScaleChanged(Number(Application.android.context.getResources().getConfiguration().fontScale));
|
|
498
|
+
}
|
|
499
|
+
let configChangedCallback;
|
|
500
|
+
function setupConfigListener() {
|
|
501
|
+
if (configChangedCallback) {
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
Application.off(Application.launchEvent, setupConfigListener);
|
|
505
|
+
const context = Application.android?.context;
|
|
506
|
+
if (!context) {
|
|
507
|
+
Application.on(Application.launchEvent, setupConfigListener);
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
useAndroidFontScale();
|
|
511
|
+
configChangedCallback = new android.content.ComponentCallbacks2({
|
|
512
|
+
onLowMemory() {
|
|
513
|
+
// Dummy
|
|
514
|
+
},
|
|
515
|
+
onTrimMemory() {
|
|
516
|
+
// Dummy
|
|
517
|
+
},
|
|
518
|
+
onConfigurationChanged(newConfig) {
|
|
519
|
+
fontScaleChanged(Number(newConfig.fontScale));
|
|
520
|
+
},
|
|
521
|
+
});
|
|
522
|
+
context.registerComponentCallbacks(configChangedCallback);
|
|
523
|
+
Application.on(Application.resumeEvent, useAndroidFontScale);
|
|
524
|
+
}
|
|
525
|
+
setInitFontScale(setupConfigListener);
|
|
526
|
+
function applyRootCssClass(cssClasses, newCssClass) {
|
|
527
|
+
const rootView = Application.getRootView();
|
|
528
|
+
if (!rootView) {
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
Application.applyCssClass(rootView, cssClasses, newCssClass);
|
|
532
|
+
const rootModalViews = rootView._getRootModalViews();
|
|
533
|
+
rootModalViews.forEach((rootModalView) => Application.applyCssClass(rootModalView, cssClasses, newCssClass));
|
|
534
|
+
}
|
|
535
|
+
function applyFontScaleToRootViews() {
|
|
536
|
+
const rootView = Application.getRootView();
|
|
537
|
+
if (!rootView) {
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
const fontScale = getCurrentFontScale();
|
|
541
|
+
rootView.style.fontScaleInternal = fontScale;
|
|
542
|
+
const rootModalViews = rootView._getRootModalViews();
|
|
543
|
+
rootModalViews.forEach((rootModalView) => (rootModalView.style.fontScaleInternal = fontScale));
|
|
544
|
+
}
|
|
545
|
+
export function getAndroidAccessibilityManager() {
|
|
546
|
+
const context = Utils.ad.getApplicationContext();
|
|
547
|
+
if (!context) {
|
|
548
|
+
return null;
|
|
549
|
+
}
|
|
550
|
+
return context.getSystemService(android.content.Context.ACCESSIBILITY_SERVICE);
|
|
551
|
+
}
|
|
552
|
+
const accessibilityStateEnabledPropName = 'accessibilityStateEnabled';
|
|
553
|
+
const touchExplorationStateEnabledPropName = 'touchExplorationStateEnabled';
|
|
554
|
+
class AndroidSharedA11YObservable extends SharedA11YObservable {
|
|
555
|
+
// @ts-ignore todo: fix
|
|
556
|
+
get accessibilityServiceEnabled() {
|
|
557
|
+
return !!this[accessibilityStateEnabledPropName] && !!this[touchExplorationStateEnabledPropName];
|
|
558
|
+
}
|
|
559
|
+
set accessibilityServiceEnabled(v) {
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
let accessibilityStateChangeListener;
|
|
564
|
+
let touchExplorationStateChangeListener;
|
|
565
|
+
let sharedA11YObservable;
|
|
566
|
+
function updateAccessibilityState() {
|
|
567
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
568
|
+
if (!accessibilityManager) {
|
|
569
|
+
sharedA11YObservable.set(accessibilityStateEnabledPropName, false);
|
|
570
|
+
sharedA11YObservable.set(touchExplorationStateEnabledPropName, false);
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
573
|
+
sharedA11YObservable.set(accessibilityStateEnabledPropName, !!accessibilityManager.isEnabled());
|
|
574
|
+
sharedA11YObservable.set(touchExplorationStateEnabledPropName, !!accessibilityManager.isTouchExplorationEnabled());
|
|
575
|
+
}
|
|
576
|
+
function ensureStateListener() {
|
|
577
|
+
if (sharedA11YObservable) {
|
|
578
|
+
return sharedA11YObservable;
|
|
579
|
+
}
|
|
580
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
581
|
+
sharedA11YObservable = new AndroidSharedA11YObservable();
|
|
582
|
+
if (!accessibilityManager) {
|
|
583
|
+
sharedA11YObservable.set(accessibilityStateEnabledPropName, false);
|
|
584
|
+
sharedA11YObservable.set(touchExplorationStateEnabledPropName, false);
|
|
585
|
+
return sharedA11YObservable;
|
|
586
|
+
}
|
|
587
|
+
accessibilityStateChangeListener = new android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener({
|
|
588
|
+
onAccessibilityStateChanged(enabled) {
|
|
589
|
+
updateAccessibilityState();
|
|
590
|
+
if (Trace.isEnabled()) {
|
|
591
|
+
Trace.write(`AccessibilityStateChangeListener state changed to: ${!!enabled}`, Trace.categories.Accessibility);
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
});
|
|
595
|
+
accessibilityManager.addAccessibilityStateChangeListener(accessibilityStateChangeListener);
|
|
596
|
+
if (SDK_VERSION >= 19) {
|
|
597
|
+
touchExplorationStateChangeListener = new android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener({
|
|
598
|
+
onTouchExplorationStateChanged(enabled) {
|
|
599
|
+
updateAccessibilityState();
|
|
600
|
+
if (Trace.isEnabled()) {
|
|
601
|
+
Trace.write(`TouchExplorationStateChangeListener state changed to: ${!!enabled}`, Trace.categories.Accessibility);
|
|
602
|
+
}
|
|
603
|
+
},
|
|
604
|
+
});
|
|
605
|
+
accessibilityManager.addTouchExplorationStateChangeListener(touchExplorationStateChangeListener);
|
|
606
|
+
}
|
|
607
|
+
updateAccessibilityState();
|
|
608
|
+
Application.on(Application.resumeEvent, updateAccessibilityState);
|
|
609
|
+
Application.on(Application.exitEvent, (args) => {
|
|
610
|
+
const activity = args.android;
|
|
611
|
+
if (activity && !activity.isFinishing()) {
|
|
612
|
+
return;
|
|
613
|
+
}
|
|
614
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
615
|
+
if (accessibilityManager) {
|
|
616
|
+
if (accessibilityStateChangeListener) {
|
|
617
|
+
accessibilityManager.removeAccessibilityStateChangeListener(accessibilityStateChangeListener);
|
|
618
|
+
}
|
|
619
|
+
if (touchExplorationStateChangeListener) {
|
|
620
|
+
accessibilityManager.removeTouchExplorationStateChangeListener(touchExplorationStateChangeListener);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
accessibilityStateChangeListener = null;
|
|
624
|
+
touchExplorationStateChangeListener = null;
|
|
625
|
+
if (sharedA11YObservable) {
|
|
626
|
+
sharedA11YObservable.removeEventListener(Observable.propertyChangeEvent);
|
|
627
|
+
sharedA11YObservable = null;
|
|
628
|
+
}
|
|
629
|
+
Application.off(Application.resumeEvent, updateAccessibilityState);
|
|
630
|
+
});
|
|
631
|
+
return sharedA11YObservable;
|
|
632
|
+
}
|
|
633
|
+
export class AccessibilityServiceEnabledObservable extends CommonA11YServiceEnabledObservable {
|
|
634
|
+
constructor() {
|
|
635
|
+
super(ensureStateListener());
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
let accessibilityServiceObservable;
|
|
639
|
+
export function ensureClasses() {
|
|
640
|
+
if (accessibilityServiceObservable) {
|
|
641
|
+
return;
|
|
642
|
+
}
|
|
643
|
+
setFontScaleCssClasses(new Map(VALID_FONT_SCALES.map((fs) => [fs, `a11y-fontscale-${Number(fs * 100).toFixed(0)}`])));
|
|
644
|
+
accessibilityServiceObservable = new AccessibilityServiceEnabledObservable();
|
|
645
|
+
}
|
|
646
|
+
export function updateCurrentHelperClasses(applyRootCssClass) {
|
|
647
|
+
const fontScale = getFontScale();
|
|
648
|
+
const fontScaleCategory = getFontScaleCategory();
|
|
649
|
+
const fontScaleCssClasses = getFontScaleCssClasses();
|
|
650
|
+
const oldFontScaleClass = getCurrentFontScaleClass();
|
|
651
|
+
if (fontScaleCssClasses.has(fontScale)) {
|
|
652
|
+
setCurrentFontScaleClass(fontScaleCssClasses.get(fontScale));
|
|
653
|
+
}
|
|
654
|
+
else {
|
|
655
|
+
setCurrentFontScaleClass(fontScaleCssClasses.get(1));
|
|
656
|
+
}
|
|
657
|
+
if (oldFontScaleClass !== getCurrentFontScaleClass()) {
|
|
658
|
+
applyRootCssClass([...fontScaleCssClasses.values()], getCurrentFontScaleClass());
|
|
659
|
+
}
|
|
660
|
+
const oldActiveFontScaleCategory = getCurrentFontScaleCategory();
|
|
661
|
+
switch (fontScaleCategory) {
|
|
662
|
+
case FontScaleCategory.ExtraSmall: {
|
|
663
|
+
setCurrentFontScaleCategory(fontScaleExtraSmallCategoryClass);
|
|
664
|
+
break;
|
|
665
|
+
}
|
|
666
|
+
case FontScaleCategory.Medium: {
|
|
667
|
+
setCurrentFontScaleCategory(fontScaleMediumCategoryClass);
|
|
668
|
+
break;
|
|
669
|
+
}
|
|
670
|
+
case FontScaleCategory.ExtraLarge: {
|
|
671
|
+
setCurrentFontScaleCategory(fontScaleExtraLargeCategoryClass);
|
|
672
|
+
break;
|
|
673
|
+
}
|
|
674
|
+
default: {
|
|
675
|
+
setCurrentFontScaleCategory(fontScaleMediumCategoryClass);
|
|
676
|
+
break;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
if (oldActiveFontScaleCategory !== getCurrentFontScaleCategory()) {
|
|
680
|
+
applyRootCssClass(fontScaleCategoryClasses, getCurrentFontScaleCategory());
|
|
681
|
+
}
|
|
682
|
+
const oldA11YStatusClass = getCurrentA11YServiceClass();
|
|
683
|
+
if (accessibilityServiceObservable.accessibilityServiceEnabled) {
|
|
684
|
+
setCurrentA11YServiceClass(a11yServiceEnabledClass);
|
|
685
|
+
}
|
|
686
|
+
else {
|
|
687
|
+
setCurrentA11YServiceClass(a11yServiceDisabledClass);
|
|
688
|
+
}
|
|
689
|
+
if (oldA11YStatusClass !== getCurrentA11YServiceClass()) {
|
|
690
|
+
applyRootCssClass(a11yServiceClasses, getCurrentA11YServiceClass());
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
export function initAccessibilityCssHelper() {
|
|
694
|
+
ensureClasses();
|
|
695
|
+
Application.on(Application.fontScaleChangedEvent, () => {
|
|
696
|
+
updateCurrentHelperClasses(applyRootCssClass);
|
|
697
|
+
applyFontScaleToRootViews();
|
|
698
|
+
});
|
|
699
|
+
accessibilityServiceObservable.on(AccessibilityServiceEnabledObservable.propertyChangeEvent, () => updateCurrentHelperClasses(applyRootCssClass));
|
|
700
|
+
}
|
|
701
|
+
setInitAccessibilityCssHelper(initAccessibilityCssHelper);
|
|
702
|
+
let clickableRolesMap = new Set();
|
|
703
|
+
let lastFocusedView;
|
|
704
|
+
function accessibilityEventHelper(view, eventType) {
|
|
705
|
+
const eventName = accessibilityEventTypeMap.get(eventType);
|
|
706
|
+
if (!isAccessibilityServiceEnabled()) {
|
|
707
|
+
if (Trace.isEnabled()) {
|
|
708
|
+
Trace.write(`accessibilityEventHelper: Service not active`, Trace.categories.Accessibility);
|
|
709
|
+
}
|
|
710
|
+
return;
|
|
711
|
+
}
|
|
712
|
+
if (!eventName) {
|
|
713
|
+
Trace.write(`accessibilityEventHelper: unknown eventType: ${eventType}`, Trace.categories.Accessibility, Trace.messageType.error);
|
|
714
|
+
return;
|
|
715
|
+
}
|
|
716
|
+
if (!view) {
|
|
717
|
+
if (Trace.isEnabled()) {
|
|
718
|
+
Trace.write(`accessibilityEventHelper: no owner: ${eventName}`, Trace.categories.Accessibility);
|
|
719
|
+
}
|
|
720
|
+
return;
|
|
721
|
+
}
|
|
722
|
+
const androidView = view.nativeViewProtected;
|
|
723
|
+
if (!androidView) {
|
|
724
|
+
if (Trace.isEnabled()) {
|
|
725
|
+
Trace.write(`accessibilityEventHelper: no nativeView`, Trace.categories.Accessibility);
|
|
726
|
+
}
|
|
727
|
+
return;
|
|
728
|
+
}
|
|
729
|
+
switch (eventType) {
|
|
730
|
+
case android.view.accessibility.AccessibilityEvent.TYPE_VIEW_CLICKED: {
|
|
731
|
+
/**
|
|
732
|
+
* Android API >= 26 handles accessibility tap-events by converting them to TYPE_VIEW_CLICKED
|
|
733
|
+
* These aren't triggered for custom tap events in NativeScript.
|
|
734
|
+
*/
|
|
735
|
+
if (SDK_VERSION >= 26) {
|
|
736
|
+
// Find all tap gestures and trigger them.
|
|
737
|
+
for (const tapGesture of view.getGestureObservers(GestureTypes.tap) ?? []) {
|
|
738
|
+
tapGesture.callback({
|
|
739
|
+
android: view.android,
|
|
740
|
+
eventName: 'tap',
|
|
741
|
+
ios: null,
|
|
742
|
+
object: view,
|
|
743
|
+
type: GestureTypes.tap,
|
|
744
|
+
view: view,
|
|
745
|
+
});
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
750
|
+
case android.view.accessibility.AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: {
|
|
751
|
+
const lastView = lastFocusedView?.get();
|
|
752
|
+
if (lastView && view !== lastView) {
|
|
753
|
+
const lastAndroidView = lastView.nativeViewProtected;
|
|
754
|
+
if (lastAndroidView) {
|
|
755
|
+
lastAndroidView.clearFocus();
|
|
756
|
+
lastFocusedView = null;
|
|
757
|
+
notifyAccessibilityFocusState(lastView, false, true);
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
lastFocusedView = new WeakRef(view);
|
|
761
|
+
notifyAccessibilityFocusState(view, true, false);
|
|
762
|
+
return;
|
|
763
|
+
}
|
|
764
|
+
case android.view.accessibility.AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED: {
|
|
765
|
+
const lastView = lastFocusedView?.get();
|
|
766
|
+
if (lastView && view === lastView) {
|
|
767
|
+
lastFocusedView = null;
|
|
768
|
+
androidView.clearFocus();
|
|
769
|
+
}
|
|
770
|
+
notifyAccessibilityFocusState(view, false, true);
|
|
771
|
+
return;
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
let TNSAccessibilityDelegate;
|
|
776
|
+
const androidViewToTNSView = new WeakMap();
|
|
777
|
+
let accessibilityEventMap;
|
|
778
|
+
let accessibilityEventTypeMap;
|
|
779
|
+
function ensureNativeClasses() {
|
|
780
|
+
if (TNSAccessibilityDelegate) {
|
|
781
|
+
return;
|
|
782
|
+
}
|
|
783
|
+
// WORKAROUND: Typing refers to android.view.View.androidviewViewAccessibilityDelegate but it is called android.view.View.AccessibilityDelegate at runtime
|
|
784
|
+
const AccessibilityDelegate = android.view.View['AccessibilityDelegate'];
|
|
785
|
+
const RoleTypeMap = new Map([
|
|
786
|
+
[AccessibilityRole.Button, android.widget.Button.class.getName()],
|
|
787
|
+
[AccessibilityRole.Search, android.widget.EditText.class.getName()],
|
|
788
|
+
[AccessibilityRole.Image, android.widget.ImageView.class.getName()],
|
|
789
|
+
[AccessibilityRole.ImageButton, android.widget.ImageButton.class.getName()],
|
|
790
|
+
[AccessibilityRole.KeyboardKey, android.inputmethodservice.Keyboard.Key.class.getName()],
|
|
791
|
+
[AccessibilityRole.StaticText, android.widget.TextView.class.getName()],
|
|
792
|
+
[AccessibilityRole.Adjustable, android.widget.SeekBar.class.getName()],
|
|
793
|
+
[AccessibilityRole.Checkbox, android.widget.CheckBox.class.getName()],
|
|
794
|
+
[AccessibilityRole.RadioButton, android.widget.RadioButton.class.getName()],
|
|
795
|
+
[AccessibilityRole.SpinButton, android.widget.Spinner.class.getName()],
|
|
796
|
+
[AccessibilityRole.Switch, android.widget.Switch.class.getName()],
|
|
797
|
+
[AccessibilityRole.ProgressBar, android.widget.ProgressBar.class.getName()],
|
|
798
|
+
]);
|
|
799
|
+
clickableRolesMap = new Set([AccessibilityRole.Button, AccessibilityRole.ImageButton]);
|
|
800
|
+
const ignoreRoleTypesForTrace = new Set([AccessibilityRole.Header, AccessibilityRole.Link, AccessibilityRole.None, AccessibilityRole.Summary]);
|
|
801
|
+
var TNSAccessibilityDelegateImpl = /** @class */ (function (_super) {
|
|
802
|
+
__extends(TNSAccessibilityDelegateImpl, _super);
|
|
803
|
+
function TNSAccessibilityDelegateImpl() {
|
|
804
|
+
var _this = _super.call(this) || this;
|
|
805
|
+
return global.__native(_this);
|
|
806
|
+
}
|
|
807
|
+
TNSAccessibilityDelegateImpl.prototype.getTnsView = function (androidView) {
|
|
808
|
+
var _a;
|
|
809
|
+
var view = (_a = androidViewToTNSView.get(androidView)) === null || _a === void 0 ? void 0 : _a.get();
|
|
810
|
+
if (!view) {
|
|
811
|
+
androidViewToTNSView.delete(androidView);
|
|
812
|
+
return null;
|
|
813
|
+
}
|
|
814
|
+
return view;
|
|
815
|
+
};
|
|
816
|
+
TNSAccessibilityDelegateImpl.prototype.onInitializeAccessibilityNodeInfo = function (host, info) {
|
|
817
|
+
_super.prototype.onInitializeAccessibilityNodeInfo.call(this, host, info);
|
|
818
|
+
var view = this.getTnsView(host);
|
|
819
|
+
if (!view) {
|
|
820
|
+
if (Trace.isEnabled()) {
|
|
821
|
+
Trace.write("onInitializeAccessibilityNodeInfo ".concat(host, " ").concat(info, " no tns-view"), Trace.categories.Accessibility);
|
|
822
|
+
}
|
|
823
|
+
return;
|
|
824
|
+
}
|
|
825
|
+
// Set resource id that can be used with test frameworks without polluting the content description.
|
|
826
|
+
var id = host.getTag(androidUtils.resources.getId(":id/nativescript_accessibility_id"));
|
|
827
|
+
if (id != null) {
|
|
828
|
+
info.setViewIdResourceName(id);
|
|
829
|
+
}
|
|
830
|
+
var accessibilityRole = view.accessibilityRole;
|
|
831
|
+
if (accessibilityRole) {
|
|
832
|
+
var androidClassName = RoleTypeMap.get(accessibilityRole);
|
|
833
|
+
if (androidClassName) {
|
|
834
|
+
var oldClassName = info.getClassName() || (SDK_VERSION >= 28 && host.getAccessibilityClassName()) || null;
|
|
835
|
+
info.setClassName(androidClassName);
|
|
836
|
+
if (Trace.isEnabled()) {
|
|
837
|
+
Trace.write("".concat(view, ".accessibilityRole = \"").concat(accessibilityRole, "\" is mapped to \"").concat(androidClassName, "\" (was ").concat(oldClassName, "). ").concat(info.getClassName()), Trace.categories.Accessibility);
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
else if (!ignoreRoleTypesForTrace.has(accessibilityRole)) {
|
|
841
|
+
if (Trace.isEnabled()) {
|
|
842
|
+
Trace.write("".concat(view, ".accessibilityRole = \"").concat(accessibilityRole, "\" is unknown"), Trace.categories.Accessibility);
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
if (clickableRolesMap.has(accessibilityRole)) {
|
|
846
|
+
if (Trace.isEnabled()) {
|
|
847
|
+
Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set clickable role=").concat(accessibilityRole), Trace.categories.Accessibility);
|
|
848
|
+
}
|
|
849
|
+
info.setClickable(true);
|
|
850
|
+
}
|
|
851
|
+
if (SDK_VERSION >= 28) {
|
|
852
|
+
if (accessibilityRole === AccessibilityRole.Header) {
|
|
853
|
+
if (Trace.isEnabled()) {
|
|
854
|
+
Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set heading role=").concat(accessibilityRole), Trace.categories.Accessibility);
|
|
855
|
+
}
|
|
856
|
+
info.setHeading(true);
|
|
857
|
+
}
|
|
858
|
+
else if (host.isAccessibilityHeading()) {
|
|
859
|
+
if (Trace.isEnabled()) {
|
|
860
|
+
Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set heading from host"), Trace.categories.Accessibility);
|
|
861
|
+
}
|
|
862
|
+
info.setHeading(true);
|
|
863
|
+
}
|
|
864
|
+
else {
|
|
865
|
+
if (Trace.isEnabled()) {
|
|
866
|
+
Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set not heading"), Trace.categories.Accessibility);
|
|
867
|
+
}
|
|
868
|
+
info.setHeading(false);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
switch (accessibilityRole) {
|
|
872
|
+
case AccessibilityRole.Switch:
|
|
873
|
+
case AccessibilityRole.RadioButton:
|
|
874
|
+
case AccessibilityRole.Checkbox: {
|
|
875
|
+
if (Trace.isEnabled()) {
|
|
876
|
+
Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set checkable and check=").concat(view.accessibilityState === AccessibilityState.Checked), Trace.categories.Accessibility);
|
|
877
|
+
}
|
|
878
|
+
info.setCheckable(true);
|
|
879
|
+
info.setChecked(view.accessibilityState === AccessibilityState.Checked);
|
|
880
|
+
break;
|
|
881
|
+
}
|
|
882
|
+
default: {
|
|
883
|
+
if (Trace.isEnabled()) {
|
|
884
|
+
Trace.write("onInitializeAccessibilityNodeInfo ".concat(view, " - set enabled=").concat(view.accessibilityState !== AccessibilityState.Disabled, " and selected=").concat(view.accessibilityState === AccessibilityState.Selected), Trace.categories.Accessibility);
|
|
885
|
+
}
|
|
886
|
+
info.setEnabled(view.accessibilityState !== AccessibilityState.Disabled);
|
|
887
|
+
info.setSelected(view.accessibilityState === AccessibilityState.Selected);
|
|
888
|
+
break;
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
if (view.accessible) {
|
|
893
|
+
info.setFocusable(true);
|
|
894
|
+
}
|
|
895
|
+
};
|
|
896
|
+
TNSAccessibilityDelegateImpl.prototype.sendAccessibilityEvent = function (host, eventType) {
|
|
897
|
+
_super.prototype.sendAccessibilityEvent.call(this, host, eventType);
|
|
898
|
+
var view = this.getTnsView(host);
|
|
899
|
+
if (!view) {
|
|
900
|
+
console.log("skip - ".concat(host, " - ").concat(accessibilityEventTypeMap.get(eventType)));
|
|
901
|
+
return;
|
|
902
|
+
}
|
|
903
|
+
try {
|
|
904
|
+
accessibilityEventHelper(view, eventType);
|
|
905
|
+
}
|
|
906
|
+
catch (err) {
|
|
907
|
+
console.error(err);
|
|
908
|
+
}
|
|
909
|
+
};
|
|
910
|
+
return TNSAccessibilityDelegateImpl;
|
|
911
|
+
}(AccessibilityDelegate));
|
|
912
|
+
TNSAccessibilityDelegate = new TNSAccessibilityDelegateImpl();
|
|
913
|
+
accessibilityEventMap = new Map([
|
|
914
|
+
/**
|
|
915
|
+
* Invalid selection/focus position.
|
|
916
|
+
*/
|
|
917
|
+
[AndroidAccessibilityEvent.INVALID_POSITION, android.view.accessibility.AccessibilityEvent.INVALID_POSITION],
|
|
918
|
+
/**
|
|
919
|
+
* Maximum length of the text fields.
|
|
920
|
+
*/
|
|
921
|
+
[AndroidAccessibilityEvent.MAX_TEXT_LENGTH, android.view.accessibility.AccessibilityEvent.MAX_TEXT_LENGTH],
|
|
922
|
+
/**
|
|
923
|
+
* Represents the event of clicking on a android.view.View like android.widget.Button, android.widget.CompoundButton, etc.
|
|
924
|
+
*/
|
|
925
|
+
[AndroidAccessibilityEvent.VIEW_CLICKED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_CLICKED],
|
|
926
|
+
/**
|
|
927
|
+
* Represents the event of long clicking on a android.view.View like android.widget.Button, android.widget.CompoundButton, etc.
|
|
928
|
+
*/
|
|
929
|
+
[AndroidAccessibilityEvent.VIEW_LONG_CLICKED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_LONG_CLICKED],
|
|
930
|
+
/**
|
|
931
|
+
* Represents the event of selecting an item usually in the context of an android.widget.AdapterView.
|
|
932
|
+
*/
|
|
933
|
+
[AndroidAccessibilityEvent.VIEW_SELECTED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SELECTED],
|
|
934
|
+
/**
|
|
935
|
+
* Represents the event of setting input focus of a android.view.View.
|
|
936
|
+
*/
|
|
937
|
+
[AndroidAccessibilityEvent.VIEW_FOCUSED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_FOCUSED],
|
|
938
|
+
/**
|
|
939
|
+
* Represents the event of changing the text of an android.widget.EditText.
|
|
940
|
+
*/
|
|
941
|
+
[AndroidAccessibilityEvent.VIEW_TEXT_CHANGED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED],
|
|
942
|
+
/**
|
|
943
|
+
* Represents the event of opening a android.widget.PopupWindow, android.view.Menu, android.app.Dialog, etc.
|
|
944
|
+
*/
|
|
945
|
+
[AndroidAccessibilityEvent.WINDOW_STATE_CHANGED, android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED],
|
|
946
|
+
/**
|
|
947
|
+
* Represents the event showing a android.app.Notification.
|
|
948
|
+
*/
|
|
949
|
+
[AndroidAccessibilityEvent.NOTIFICATION_STATE_CHANGED, android.view.accessibility.AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED],
|
|
950
|
+
/**
|
|
951
|
+
* Represents the event of a hover enter over a android.view.View.
|
|
952
|
+
*/
|
|
953
|
+
[AndroidAccessibilityEvent.VIEW_HOVER_ENTER, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_ENTER],
|
|
954
|
+
/**
|
|
955
|
+
* Represents the event of a hover exit over a android.view.View.
|
|
956
|
+
*/
|
|
957
|
+
[AndroidAccessibilityEvent.VIEW_HOVER_EXIT, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_HOVER_EXIT],
|
|
958
|
+
/**
|
|
959
|
+
* Represents the event of starting a touch exploration gesture.
|
|
960
|
+
*/
|
|
961
|
+
[AndroidAccessibilityEvent.TOUCH_EXPLORATION_GESTURE_START, android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_START],
|
|
962
|
+
/**
|
|
963
|
+
* Represents the event of ending a touch exploration gesture.
|
|
964
|
+
*/
|
|
965
|
+
[AndroidAccessibilityEvent.TOUCH_EXPLORATION_GESTURE_END, android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END],
|
|
966
|
+
/**
|
|
967
|
+
* Represents the event of changing the content of a window and more specifically the sub-tree rooted at the event's source.
|
|
968
|
+
*/
|
|
969
|
+
[AndroidAccessibilityEvent.WINDOW_CONTENT_CHANGED, android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED],
|
|
970
|
+
/**
|
|
971
|
+
* Represents the event of scrolling a view.
|
|
972
|
+
*/
|
|
973
|
+
[AndroidAccessibilityEvent.VIEW_SCROLLED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_SCROLLED],
|
|
974
|
+
/**
|
|
975
|
+
* Represents the event of changing the selection in an android.widget.EditText.
|
|
976
|
+
*/
|
|
977
|
+
[AndroidAccessibilityEvent.VIEW_TEXT_SELECTION_CHANGED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED],
|
|
978
|
+
/**
|
|
979
|
+
* Represents the event of an application making an announcement.
|
|
980
|
+
*/
|
|
981
|
+
[AndroidAccessibilityEvent.ANNOUNCEMENT, android.view.accessibility.AccessibilityEvent.TYPE_ANNOUNCEMENT],
|
|
982
|
+
/**
|
|
983
|
+
* Represents the event of gaining accessibility focus.
|
|
984
|
+
*/
|
|
985
|
+
[AndroidAccessibilityEvent.VIEW_ACCESSIBILITY_FOCUSED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED],
|
|
986
|
+
/**
|
|
987
|
+
* Represents the event of clearing accessibility focus.
|
|
988
|
+
*/
|
|
989
|
+
[AndroidAccessibilityEvent.VIEW_ACCESSIBILITY_FOCUS_CLEARED, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED],
|
|
990
|
+
/**
|
|
991
|
+
* Represents the event of traversing the text of a view at a given movement granularity.
|
|
992
|
+
*/
|
|
993
|
+
[AndroidAccessibilityEvent.VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY, android.view.accessibility.AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY],
|
|
994
|
+
/**
|
|
995
|
+
* Represents the event of beginning gesture detection.
|
|
996
|
+
*/
|
|
997
|
+
[AndroidAccessibilityEvent.GESTURE_DETECTION_START, android.view.accessibility.AccessibilityEvent.TYPE_GESTURE_DETECTION_START],
|
|
998
|
+
/**
|
|
999
|
+
* Represents the event of ending gesture detection.
|
|
1000
|
+
*/
|
|
1001
|
+
[AndroidAccessibilityEvent.GESTURE_DETECTION_END, android.view.accessibility.AccessibilityEvent.TYPE_GESTURE_DETECTION_END],
|
|
1002
|
+
/**
|
|
1003
|
+
* Represents the event of the user starting to touch the screen.
|
|
1004
|
+
*/
|
|
1005
|
+
[AndroidAccessibilityEvent.TOUCH_INTERACTION_START, android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_INTERACTION_START],
|
|
1006
|
+
/**
|
|
1007
|
+
* Represents the event of the user ending to touch the screen.
|
|
1008
|
+
*/
|
|
1009
|
+
[AndroidAccessibilityEvent.TOUCH_INTERACTION_END, android.view.accessibility.AccessibilityEvent.TYPE_TOUCH_INTERACTION_END],
|
|
1010
|
+
/**
|
|
1011
|
+
* Mask for AccessibilityEvent all types.
|
|
1012
|
+
*/
|
|
1013
|
+
[AndroidAccessibilityEvent.ALL_MASK, android.view.accessibility.AccessibilityEvent.TYPES_ALL_MASK],
|
|
1014
|
+
]);
|
|
1015
|
+
accessibilityEventTypeMap = new Map([...accessibilityEventMap].map(([k, v]) => [v, k]));
|
|
1016
|
+
}
|
|
1017
|
+
function updateAccessibilityServiceState() {
|
|
1018
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
1019
|
+
if (!accessibilityManager) {
|
|
1020
|
+
return;
|
|
1021
|
+
}
|
|
1022
|
+
setA11yEnabled(!!accessibilityManager.isEnabled() && !!accessibilityManager.isTouchExplorationEnabled());
|
|
1023
|
+
}
|
|
1024
|
+
export function isAccessibilityServiceEnabled() {
|
|
1025
|
+
const accessibilityServiceEnabled = isA11yEnabled();
|
|
1026
|
+
if (typeof accessibilityServiceEnabled === 'boolean') {
|
|
1027
|
+
return accessibilityServiceEnabled;
|
|
1028
|
+
}
|
|
1029
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
1030
|
+
accessibilityStateChangeListener = new androidx.core.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener({
|
|
1031
|
+
onAccessibilityStateChanged(enabled) {
|
|
1032
|
+
updateAccessibilityServiceState();
|
|
1033
|
+
if (Trace.isEnabled()) {
|
|
1034
|
+
Trace.write(`AccessibilityStateChangeListener state changed to: ${!!enabled}`, Trace.categories.Accessibility);
|
|
1035
|
+
}
|
|
1036
|
+
},
|
|
1037
|
+
});
|
|
1038
|
+
touchExplorationStateChangeListener = new androidx.core.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener({
|
|
1039
|
+
onTouchExplorationStateChanged(enabled) {
|
|
1040
|
+
updateAccessibilityServiceState();
|
|
1041
|
+
if (Trace.isEnabled()) {
|
|
1042
|
+
Trace.write(`TouchExplorationStateChangeListener state changed to: ${!!enabled}`, Trace.categories.Accessibility);
|
|
1043
|
+
}
|
|
1044
|
+
},
|
|
1045
|
+
});
|
|
1046
|
+
androidx.core.view.accessibility.AccessibilityManagerCompat.addAccessibilityStateChangeListener(accessibilityManager, accessibilityStateChangeListener);
|
|
1047
|
+
androidx.core.view.accessibility.AccessibilityManagerCompat.addTouchExplorationStateChangeListener(accessibilityManager, touchExplorationStateChangeListener);
|
|
1048
|
+
updateAccessibilityServiceState();
|
|
1049
|
+
Application.on(Application.exitEvent, (args) => {
|
|
1050
|
+
const activity = args.android;
|
|
1051
|
+
if (activity && !activity.isFinishing()) {
|
|
1052
|
+
return;
|
|
1053
|
+
}
|
|
1054
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
1055
|
+
if (accessibilityManager) {
|
|
1056
|
+
if (accessibilityStateChangeListener) {
|
|
1057
|
+
androidx.core.view.accessibility.AccessibilityManagerCompat.removeAccessibilityStateChangeListener(accessibilityManager, accessibilityStateChangeListener);
|
|
1058
|
+
}
|
|
1059
|
+
if (touchExplorationStateChangeListener) {
|
|
1060
|
+
androidx.core.view.accessibility.AccessibilityManagerCompat.removeTouchExplorationStateChangeListener(accessibilityManager, touchExplorationStateChangeListener);
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
accessibilityStateChangeListener = null;
|
|
1064
|
+
touchExplorationStateChangeListener = null;
|
|
1065
|
+
Application.off(Application.resumeEvent, updateAccessibilityServiceState);
|
|
1066
|
+
});
|
|
1067
|
+
Application.on(Application.resumeEvent, updateAccessibilityServiceState);
|
|
1068
|
+
return accessibilityServiceEnabled;
|
|
1069
|
+
}
|
|
1070
|
+
let updateAccessibilityPropertiesMicroTask;
|
|
1071
|
+
let pendingViews = new Set();
|
|
1072
|
+
export function updateAccessibilityProperties(view) {
|
|
1073
|
+
if (!view.nativeViewProtected) {
|
|
1074
|
+
return;
|
|
1075
|
+
}
|
|
1076
|
+
pendingViews.add(view);
|
|
1077
|
+
if (updateAccessibilityPropertiesMicroTask)
|
|
1078
|
+
return;
|
|
1079
|
+
updateAccessibilityPropertiesMicroTask = true;
|
|
1080
|
+
Promise.resolve().then(() => {
|
|
1081
|
+
updateAccessibilityPropertiesMicroTask = false;
|
|
1082
|
+
let _pendingViews = Array.from(pendingViews);
|
|
1083
|
+
pendingViews = new Set();
|
|
1084
|
+
for (const view of _pendingViews) {
|
|
1085
|
+
if (!view.nativeViewProtected)
|
|
1086
|
+
continue;
|
|
1087
|
+
setAccessibilityDelegate(view);
|
|
1088
|
+
applyContentDescription(view);
|
|
1089
|
+
}
|
|
1090
|
+
_pendingViews = [];
|
|
1091
|
+
});
|
|
1092
|
+
}
|
|
1093
|
+
setA11yUpdatePropertiesCallback(updateAccessibilityProperties);
|
|
1094
|
+
export function sendAccessibilityEvent(view, eventType, text) {
|
|
1095
|
+
if (!isAccessibilityServiceEnabled()) {
|
|
1096
|
+
return;
|
|
1097
|
+
}
|
|
1098
|
+
const cls = `sendAccessibilityEvent(${view}, ${eventType}, ${text})`;
|
|
1099
|
+
const androidView = view.nativeViewProtected;
|
|
1100
|
+
if (!androidView) {
|
|
1101
|
+
if (Trace.isEnabled()) {
|
|
1102
|
+
Trace.write(`${cls}: no nativeView`, Trace.categories.Accessibility);
|
|
1103
|
+
}
|
|
1104
|
+
return;
|
|
1105
|
+
}
|
|
1106
|
+
if (!eventType) {
|
|
1107
|
+
if (Trace.isEnabled()) {
|
|
1108
|
+
Trace.write(`${cls}: no eventName provided`, Trace.categories.Accessibility);
|
|
1109
|
+
}
|
|
1110
|
+
return;
|
|
1111
|
+
}
|
|
1112
|
+
if (!isAccessibilityServiceEnabled()) {
|
|
1113
|
+
if (Trace.isEnabled()) {
|
|
1114
|
+
Trace.write(`${cls} - TalkBack not enabled`, Trace.categories.Accessibility);
|
|
1115
|
+
}
|
|
1116
|
+
return;
|
|
1117
|
+
}
|
|
1118
|
+
const accessibilityManager = getAndroidAccessibilityManager();
|
|
1119
|
+
if (!accessibilityManager?.isEnabled()) {
|
|
1120
|
+
if (Trace.isEnabled()) {
|
|
1121
|
+
Trace.write(`${cls} - accessibility service not enabled`, Trace.categories.Accessibility);
|
|
1122
|
+
}
|
|
1123
|
+
return;
|
|
1124
|
+
}
|
|
1125
|
+
if (!accessibilityEventMap.has(eventType)) {
|
|
1126
|
+
if (Trace.isEnabled()) {
|
|
1127
|
+
Trace.write(`${cls} - unknown event`, Trace.categories.Accessibility);
|
|
1128
|
+
}
|
|
1129
|
+
return;
|
|
1130
|
+
}
|
|
1131
|
+
const eventInt = accessibilityEventMap.get(eventType);
|
|
1132
|
+
if (!text) {
|
|
1133
|
+
return androidView.sendAccessibilityEvent(eventInt);
|
|
1134
|
+
}
|
|
1135
|
+
const accessibilityEvent = android.view.accessibility.AccessibilityEvent.obtain(eventInt);
|
|
1136
|
+
accessibilityEvent.setSource(androidView);
|
|
1137
|
+
accessibilityEvent.getText().clear();
|
|
1138
|
+
if (!text) {
|
|
1139
|
+
applyContentDescription(view);
|
|
1140
|
+
text = androidView.getContentDescription() || view['title'];
|
|
1141
|
+
if (Trace.isEnabled()) {
|
|
1142
|
+
Trace.write(`${cls} - text not provided use androidView.getContentDescription() - ${text}`, Trace.categories.Accessibility);
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
if (Trace.isEnabled()) {
|
|
1146
|
+
Trace.write(`${cls}: send event with text: '${JSON.stringify(text)}'`, Trace.categories.Accessibility);
|
|
1147
|
+
}
|
|
1148
|
+
if (text) {
|
|
1149
|
+
accessibilityEvent.getText().add(text);
|
|
1150
|
+
}
|
|
1151
|
+
accessibilityManager.sendAccessibilityEvent(accessibilityEvent);
|
|
1152
|
+
}
|
|
1153
|
+
function setAccessibilityDelegate(view) {
|
|
1154
|
+
if (!view.nativeViewProtected) {
|
|
1155
|
+
return;
|
|
1156
|
+
}
|
|
1157
|
+
ensureNativeClasses();
|
|
1158
|
+
const androidView = view.nativeViewProtected;
|
|
1159
|
+
if (!androidView || !androidView.setAccessibilityDelegate) {
|
|
1160
|
+
return;
|
|
1161
|
+
}
|
|
1162
|
+
androidViewToTNSView.set(androidView, new WeakRef(view));
|
|
1163
|
+
let hasOldDelegate = false;
|
|
1164
|
+
if (typeof androidView.getAccessibilityDelegate === 'function') {
|
|
1165
|
+
hasOldDelegate = androidView.getAccessibilityDelegate() === TNSAccessibilityDelegate;
|
|
1166
|
+
}
|
|
1167
|
+
if (hasOldDelegate) {
|
|
1168
|
+
return;
|
|
1169
|
+
}
|
|
1170
|
+
androidView.setAccessibilityDelegate(TNSAccessibilityDelegate);
|
|
1171
|
+
}
|
|
1172
|
+
const applicationEvents = [Application.orientationChangedEvent, Application.systemAppearanceChangedEvent];
|
|
1173
|
+
function toggleApplicationEventListeners(toAdd, callback) {
|
|
1174
|
+
for (const eventName of applicationEvents) {
|
|
1175
|
+
if (toAdd) {
|
|
1176
|
+
Application.on(eventName, callback);
|
|
1177
|
+
}
|
|
1178
|
+
else {
|
|
1179
|
+
Application.off(eventName, callback);
|
|
1180
|
+
}
|
|
1181
|
+
}
|
|
1182
|
+
}
|
|
1183
|
+
setToggleApplicationEventListenersCallback(toggleApplicationEventListeners);
|
|
1184
|
+
setApplicationPropertiesCallback(() => {
|
|
1185
|
+
return {
|
|
1186
|
+
orientation: Application.orientation(),
|
|
1187
|
+
systemAppearance: Application.systemAppearance(),
|
|
1188
|
+
};
|
|
1189
|
+
});
|
|
1190
|
+
function onLiveSync(args) {
|
|
1191
|
+
if (getImageFetcher()) {
|
|
1192
|
+
getImageFetcher().clearCache();
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
global.NativeScriptGlobals.events.on('livesync', onLiveSync);
|
|
1196
|
+
global.NativeScriptGlobals.addEventWiring(() => {
|
|
1197
|
+
Application.android.on('activityStarted', (args) => {
|
|
1198
|
+
if (!getImageFetcher()) {
|
|
1199
|
+
initImageCache(args.activity);
|
|
1200
|
+
}
|
|
1201
|
+
else {
|
|
1202
|
+
getImageFetcher().initCache();
|
|
1203
|
+
}
|
|
1204
|
+
});
|
|
1205
|
+
});
|
|
1206
|
+
global.NativeScriptGlobals.addEventWiring(() => {
|
|
1207
|
+
Application.android.on('activityStopped', (args) => {
|
|
1208
|
+
if (getImageFetcher()) {
|
|
1209
|
+
getImageFetcher().closeCache();
|
|
1210
|
+
}
|
|
1211
|
+
});
|
|
1212
|
+
});
|
|
514
1213
|
//# sourceMappingURL=application.android.js.map
|