From e35dc0a5e92b5827aea17b11862a694c5e976fbc Mon Sep 17 00:00:00 2001 From: grechka62 Date: Tue, 15 Jul 2025 19:47:36 +0300 Subject: [PATCH] Accessibility refactoring commit_hash:22623192cdabbd2dcedf862b9a6d9aa8219e422b --- .mapping.json | 24 +- .../DivActionTypedFocusElementHandler.kt | 2 - .../div/core/tooltip/DivTooltipController.kt | 18 +- .../core/util/AccessibilityStateProvider.kt | 10 +- .../java/com/yandex/div/core/util/Views.kt | 9 - .../view2/AccessibilityDelegateWrapper.kt | 77 ---- .../core/view2/AccessibilityListDelegate.kt | 2 - .../com/yandex/div/core/view2/Div2View.kt | 17 - .../div/core/view2/DivAccessibilityBinder.kt | 378 +++++++++++------- .../view2/backbutton/BackKeyPressedHelper.kt | 15 +- .../core/view2/divs/BaseDivViewExtensions.kt | 22 - .../div/core/view2/divs/DivActionBinder.kt | 64 +-- .../div/core/view2/divs/DivBaseBinder.kt | 138 +------ .../div/core/view2/divs/DivContainerBinder.kt | 1 - .../div/core/view2/divs/DivGifImageBinder.kt | 1 - .../div/core/view2/divs/DivGridBinder.kt | 1 - .../div/core/view2/divs/DivImageBinder.kt | 1 - .../div/core/view2/divs/DivInputBinder.kt | 2 - .../div/core/view2/divs/DivSeparatorBinder.kt | 1 - .../div/core/view2/divs/DivTextBinder.kt | 1 - .../core/view2/divs/pager/DivPagerAdapter.kt | 2 - .../core/view2/divs/pager/DivPagerBinder.kt | 1 - .../view2/divs/pager/DivPagerViewHolder.kt | 6 - .../view2/divs/widgets/DivCollectionHolder.kt | 3 + .../core/view2/divs/widgets/DivInputView.kt | 12 +- .../core/view2/divs/widgets/DivPagerView.kt | 43 +- .../yandex/div/core/widget/DivViewWrapper.kt | 11 +- .../div/core/widget/ViewPager2Wrapper.kt | 2 + .../yandex/div/internal/widget/SelectView.kt | 10 +- .../widget/TextViewWithAccessibleSpans.kt | 6 +- .../slider/SliderAccessibilityHelper.kt | 150 +++++++ .../slider/SliderThumbAnimatorListener.kt | 22 + .../div/internal/widget/slider/SliderView.kt | 229 ++--------- .../div/internal/widget/tabs/TabView.java | 21 +- .../div/internal/widget/tabs/TabsLayout.kt | 2 + .../android/div/src/main/res/values/ids.xml | 1 - .../core/view2/TypeAutoAccessibilityTest.kt | 77 ++++ .../yandex/div/core/view2/divs/Assertions.kt | 1 - .../div/core/view2/divs/DivBinderTest.kt | 4 +- .../div/core/view2/divs/DivViewMocks.kt | 3 +- .../div/core/view2/divs/UnitTestData.kt | 7 +- .../com/yandex/div/DivFocusableInputTest.kt | 2 +- .../yandex/div/DivInputKeyboardTypeTest.kt | 16 +- .../yandex/div/TypeAutoAccessibilityTest.kt | 88 ---- .../yandex/div/rule/ActivityParamsTestRule.kt | 2 +- .../java/com/yandex/div/steps/SliderViews.kt | 37 +- .../div/steps/TypeAutoAccessibilitySteps.kt | 79 ---- .../demo/screenshot/DivScreenshotActivity.kt | 20 +- .../com/yandex/div/Div2FocusScreenshotTest.kt | 4 +- .../div-input/specific-properties/step0.png | Bin 2546 -> 2547 bytes .../div-input/specific-properties/step1.png | Bin 2547 -> 2547 bytes .../text_focused_text_color/step0.png | Bin 6158 -> 0 bytes .../text_focused_text_color/step1.png | Bin 6320 -> 0 bytes .../div-input/without-text.png | Bin 3022 -> 3028 bytes .../div-input/specific-properties/step0.png | Bin 4038 -> 4038 bytes .../div-input/specific-properties/step1.png | Bin 4038 -> 4038 bytes .../text_focused_text_color/step0.png | Bin 10327 -> 0 bytes .../text_focused_text_color/step1.png | Bin 10508 -> 0 bytes .../div-input/without-text.png | Bin 6766 -> 6759 bytes .../div-input/specific-properties/step0.png | Bin 3603 -> 3596 bytes .../div-input/specific-properties/step1.png | Bin 3604 -> 3597 bytes .../text_focused_text_color/step0.png | Bin 8713 -> 0 bytes .../text_focused_text_color/step1.png | Bin 8882 -> 0 bytes .../div-input/without-text.png | Bin 5236 -> 5234 bytes .../div-input/specific-properties/step0.png | Bin 3979 -> 3979 bytes .../div-input/specific-properties/step1.png | Bin 3979 -> 3979 bytes .../text_focused_text_color/step0.png | Bin 10313 -> 0 bytes .../text_focused_text_color/step1.png | Bin 10483 -> 0 bytes .../div-input/without-text.png | Bin 6331 -> 6321 bytes .../div-input/specific-properties/step0.png | Bin 3603 -> 3596 bytes .../div-input/specific-properties/step1.png | Bin 3604 -> 3597 bytes .../text_focused_text_color/step0.png | Bin 8713 -> 0 bytes .../text_focused_text_color/step1.png | Bin 8882 -> 0 bytes .../div-input/without-text.png | Bin 5235 -> 5233 bytes .../div-input/specific-properties/step0.png | Bin 27358 -> 27740 bytes .../div-input/specific-properties/step1.png | Bin 27362 -> 27744 bytes .../text_focused_text_color/step0.png | Bin 24496 -> 0 bytes .../text_focused_text_color/step1.png | Bin 64888 -> 0 bytes .../div-input/without-text.png | Bin 26058 -> 26042 bytes .../div-input/specific-properties/step0.png | Bin 27612 -> 27994 bytes .../div-input/specific-properties/step1.png | Bin 27608 -> 27988 bytes .../text_focused_text_color/step0.png | Bin 23790 -> 0 bytes .../text_focused_text_color/step1.png | Bin 23814 -> 0 bytes .../div-input/without-text.png | Bin 35762 -> 35766 bytes .../div-input/specific-properties/step0.png | Bin 27390 -> 27764 bytes .../div-input/specific-properties/step1.png | Bin 27394 -> 27768 bytes .../text_focused_text_color/step0.png | Bin 24496 -> 0 bytes .../text_focused_text_color/step1.png | Bin 64888 -> 0 bytes .../div-input/without-text.png | Bin 26058 -> 26042 bytes .../div-input/specific-properties/step0.png | Bin 27612 -> 27994 bytes .../div-input/specific-properties/step1.png | Bin 27608 -> 27988 bytes .../text_focused_text_color/step0.png | Bin 23790 -> 0 bytes .../text_focused_text_color/step1.png | Bin 23814 -> 0 bytes .../div-input/without-text.png | Bin 35762 -> 35766 bytes .../test/rules/ActivityParamsTestRule.kt | 2 +- .../div-text/text_focused_text_color.json | 1 - .../regression_test_data/double_slider.json | 1 + .../regression_test_data/slider_nps.json | 1 + .../regression_test_data/slider_presets.json | 10 +- .../slider_scroll_horizontal.json | 1 + .../slider_scroll_vertical.json | 1 + 101 files changed, 666 insertions(+), 996 deletions(-) delete mode 100644 client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityDelegateWrapper.kt create mode 100644 client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderAccessibilityHelper.kt create mode 100644 client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderThumbAnimatorListener.kt create mode 100644 client/android/div/src/test/java/com/yandex/div/core/view2/TypeAutoAccessibilityTest.kt delete mode 100644 client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/TypeAutoAccessibilityTest.kt delete mode 100644 client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/TypeAutoAccessibilitySteps.kt delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png delete mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png diff --git a/.mapping.json b/.mapping.json index b93233932..4018e98a3 100644 --- a/.mapping.json +++ b/.mapping.json @@ -1205,7 +1205,6 @@ "client/android/div/src/main/java/com/yandex/div/core/util/validator/ExpressionValidator.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/util/validator/ExpressionValidator.kt", "client/android/div/src/main/java/com/yandex/div/core/util/validator/RegexValidator.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/util/validator/RegexValidator.kt", "client/android/div/src/main/java/com/yandex/div/core/util/validator/ValidatorItemData.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/util/validator/ValidatorItemData.kt", - "client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityDelegateWrapper.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityDelegateWrapper.kt", "client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityListDelegate.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityListDelegate.kt", "client/android/div/src/main/java/com/yandex/div/core/view2/BindingContext.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/BindingContext.kt", "client/android/div/src/main/java/com/yandex/div/core/view2/CompositeLogId.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/CompositeLogId.kt", @@ -1480,8 +1479,10 @@ "client/android/div/src/main/java/com/yandex/div/internal/widget/menu/NonScrollImageView.java":"divkit/public/client/android/div/src/main/java/com/yandex/div/internal/widget/menu/NonScrollImageView.java", "client/android/div/src/main/java/com/yandex/div/internal/widget/menu/OverflowMenuSubscriber.java":"divkit/public/client/android/div/src/main/java/com/yandex/div/internal/widget/menu/OverflowMenuSubscriber.java", "client/android/div/src/main/java/com/yandex/div/internal/widget/menu/OverflowMenuWrapper.java":"divkit/public/client/android/div/src/main/java/com/yandex/div/internal/widget/menu/OverflowMenuWrapper.java", + "client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderAccessibilityHelper.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderAccessibilityHelper.kt", "client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderDrawDelegate.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderDrawDelegate.kt", "client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderTextStyle.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderTextStyle.kt", + "client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderThumbAnimatorListener.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderThumbAnimatorListener.kt", "client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderView.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderView.kt", "client/android/div/src/main/java/com/yandex/div/internal/widget/slider/shapes/TextDrawDelegate.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/shapes/TextDrawDelegate.kt", "client/android/div/src/main/java/com/yandex/div/internal/widget/slider/shapes/TextDrawable.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/shapes/TextDrawable.kt", @@ -1574,6 +1575,7 @@ "client/android/div/src/test/java/com/yandex/div/core/view2/GlobalVariableScopesTest.kt":"divkit/public/client/android/div/src/test/java/com/yandex/div/core/view2/GlobalVariableScopesTest.kt", "client/android/div/src/test/java/com/yandex/div/core/view2/SetVariableValueTest.kt":"divkit/public/client/android/div/src/test/java/com/yandex/div/core/view2/SetVariableValueTest.kt", "client/android/div/src/test/java/com/yandex/div/core/view2/TestHelpers.kt":"divkit/public/client/android/div/src/test/java/com/yandex/div/core/view2/TestHelpers.kt", + "client/android/div/src/test/java/com/yandex/div/core/view2/TypeAutoAccessibilityTest.kt":"divkit/public/client/android/div/src/test/java/com/yandex/div/core/view2/TypeAutoAccessibilityTest.kt", "client/android/div/src/test/java/com/yandex/div/core/view2/VariableUpdatesTest.kt":"divkit/public/client/android/div/src/test/java/com/yandex/div/core/view2/VariableUpdatesTest.kt", "client/android/div/src/test/java/com/yandex/div/core/view2/animations/DivComparatorTest.kt":"divkit/public/client/android/div/src/test/java/com/yandex/div/core/view2/animations/DivComparatorTest.kt", "client/android/div/src/test/java/com/yandex/div/core/view2/animations/DivStateComparatorTest.kt":"divkit/public/client/android/div/src/test/java/com/yandex/div/core/view2/animations/DivStateComparatorTest.kt", @@ -1649,7 +1651,6 @@ "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/SliderTests.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/SliderTests.kt", "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/SuperLineHeightTextViewTest.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/SuperLineHeightTextViewTest.kt", "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/TabsSwipeTest.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/TabsSwipeTest.kt", - "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/TypeAutoAccessibilityTest.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/TypeAutoAccessibilityTest.kt", "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/TypedFocusActionsTest.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/TypedFocusActionsTest.kt", "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/ActivityParamsTestRule.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/ActivityParamsTestRule.kt", "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/Rules.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/Rules.kt", @@ -1679,7 +1680,6 @@ "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/SliderSteps.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/SliderSteps.kt", "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/SliderViews.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/SliderViews.kt", "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/SuperLineHeightTextViewSteps.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/SuperLineHeightTextViewSteps.kt", - "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/TypeAutoAccessibilitySteps.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/TypeAutoAccessibilitySteps.kt", "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/VisibilityActionsSteps.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/VisibilityActionsSteps.kt", "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/utils/CharSequences.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/utils/CharSequences.kt", "client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/utils/OutsideActions.kt":"divkit/public/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/utils/OutsideActions.kt", @@ -2389,8 +2389,6 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png", @@ -3532,8 +3530,6 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png", @@ -4675,8 +4671,6 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png", @@ -5818,8 +5812,6 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png", @@ -6961,8 +6953,6 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png", @@ -8104,8 +8094,6 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png", @@ -9247,8 +9235,6 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png", @@ -10390,8 +10376,6 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png", @@ -11533,8 +11517,6 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step6.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step7.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text-properties/step8.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png", - "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step0.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_range_without_bound/step1.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-timer/timer-end-actions-tick-actions/step0.png", diff --git a/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedFocusElementHandler.kt b/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedFocusElementHandler.kt index 5be810a2f..95f0abac1 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedFocusElementHandler.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedFocusElementHandler.kt @@ -2,7 +2,6 @@ package com.yandex.div.core.actions import android.view.View import com.yandex.div.core.view2.Div2View -import com.yandex.div.core.view2.divs.gainAccessibilityFocus import com.yandex.div.core.view2.divs.widgets.DivInputView import com.yandex.div.json.expressions.ExpressionResolver import com.yandex.div2.DivActionFocusElement @@ -36,7 +35,6 @@ internal class DivActionTypedFocusElementHandler @Inject constructor() : DivActi ?: return requestedView.requestFocus() - requestedView.gainAccessibilityFocus() when (requestedView) { is DivInputView -> requestedView.openKeyboard() } diff --git a/client/android/div/src/main/java/com/yandex/div/core/tooltip/DivTooltipController.kt b/client/android/div/src/main/java/com/yandex/div/core/tooltip/DivTooltipController.kt index 5509ad607..9813103d3 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/tooltip/DivTooltipController.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/tooltip/DivTooltipController.kt @@ -9,6 +9,7 @@ import android.view.Gravity import android.view.MotionEvent import android.view.View import android.view.ViewGroup +import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED import android.widget.PopupWindow import androidx.activity.OnBackPressedCallback @@ -30,7 +31,6 @@ import com.yandex.div.core.util.isActuallyLaidOut import com.yandex.div.core.view2.BindingContext import com.yandex.div.core.view2.Div2View import com.yandex.div.core.view2.DivVisibilityActionTracker -import com.yandex.div.core.view2.divs.sendAccessibilityEventUnchecked import com.yandex.div.core.view2.divs.toLayoutParamsSize import com.yandex.div.core.view2.divs.toPx import com.yandex.div.core.view2.errors.ErrorCollectors @@ -432,3 +432,19 @@ private fun Div2View.getWindowFrame(): Rect { getWindowVisibleDisplayFrame(windowFrame) return windowFrame } + +private fun sendAccessibilityEventUnchecked( + event: Int, + view: View?, + accessibilityStateProvider: AccessibilityStateProvider +) { + view ?: return + if (!accessibilityStateProvider.isAccessibilityEnabled(view.context)) return + val accessibilityEvent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + AccessibilityEvent(event) + } else { + @Suppress("DEPRECATION") + AccessibilityEvent.obtain(event) + } + view.sendAccessibilityEventUnchecked(accessibilityEvent) +} diff --git a/client/android/div/src/main/java/com/yandex/div/core/util/AccessibilityStateProvider.kt b/client/android/div/src/main/java/com/yandex/div/core/util/AccessibilityStateProvider.kt index 23fd7ffed..ce91a14dc 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/util/AccessibilityStateProvider.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/util/AccessibilityStateProvider.kt @@ -14,22 +14,22 @@ internal class AccessibilityStateProvider @Inject constructor( fun isAccessibilityEnabled(context: Context): Boolean { return when { !a11yConfigurationEnabled -> false - touchModeEnabled != null -> touchModeEnabled!! + touchExplorationEnabled != null -> touchExplorationEnabled!! else -> { evaluateTouchModeEnabled(context) - touchModeEnabled!! + touchExplorationEnabled!! } } } companion object { - var touchModeEnabled: Boolean? = null + var touchExplorationEnabled: Boolean? = null fun evaluateTouchModeEnabled(context: Context) { - if (touchModeEnabled != null) return + if (touchExplorationEnabled != null) return val accessibilityManager = context.getSystemService( Context.ACCESSIBILITY_SERVICE) as? AccessibilityManager - touchModeEnabled = accessibilityManager?.isTouchExplorationEnabled ?: false + touchExplorationEnabled = accessibilityManager?.isTouchExplorationEnabled ?: false } } } diff --git a/client/android/div/src/main/java/com/yandex/div/core/util/Views.kt b/client/android/div/src/main/java/com/yandex/div/core/util/Views.kt index 764c4c3df..7870dfc05 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/util/Views.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/util/Views.kt @@ -1,6 +1,5 @@ package com.yandex.div.core.util -import android.os.Build import android.view.View import android.view.View.OnAttachStateChangeListener import androidx.core.view.ViewCompat @@ -39,14 +38,6 @@ inline fun View.doOnActualLayout(crossinline action: (view: View) -> Unit) { } } -internal fun View.makeFocusable() { - isFocusable = true - isFocusableInTouchMode = true - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - defaultFocusHighlightEnabled = false - } -} - internal inline fun View.doOnHierarchyLayout( crossinline action: (view: View) -> Unit, onEnqueuedAction: () -> Unit diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityDelegateWrapper.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityDelegateWrapper.kt deleted file mode 100644 index b4a6d2e0b..000000000 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityDelegateWrapper.kt +++ /dev/null @@ -1,77 +0,0 @@ -package com.yandex.div.core.view2 - -import android.os.Bundle -import android.view.View -import android.view.ViewGroup -import android.view.accessibility.AccessibilityEvent -import androidx.core.view.AccessibilityDelegateCompat -import androidx.core.view.accessibility.AccessibilityNodeInfoCompat -import androidx.core.view.accessibility.AccessibilityNodeProviderCompat - -internal class AccessibilityDelegateWrapper( - private val originalDelegate: AccessibilityDelegateCompat?, - - var initializeAccessibilityNodeInfo: - (host: View?, info: AccessibilityNodeInfoCompat?) -> Unit = { _, _ -> }, - - var actionsAccessibilityNodeInfo: - (host: View?, info: AccessibilityNodeInfoCompat?) -> Unit = { _, _ -> }, - -) : AccessibilityDelegateCompat() { - - override fun sendAccessibilityEvent(host: View, eventType: Int) { - originalDelegate?.sendAccessibilityEvent(host, eventType) - ?: super.sendAccessibilityEvent(host, eventType) - } - - override fun sendAccessibilityEventUnchecked(host: View, event: AccessibilityEvent) { - originalDelegate?.sendAccessibilityEventUnchecked(host, event) - ?: super.sendAccessibilityEventUnchecked(host, event) - } - - override fun dispatchPopulateAccessibilityEvent( - host: View, - event: AccessibilityEvent - ): Boolean { - return originalDelegate?.dispatchPopulateAccessibilityEvent(host, event) - ?: super.dispatchPopulateAccessibilityEvent(host, event) - } - - override fun onPopulateAccessibilityEvent(host: View, event: AccessibilityEvent) { - originalDelegate?.onPopulateAccessibilityEvent(host, event) - ?: super.onPopulateAccessibilityEvent(host, event) - } - - override fun onInitializeAccessibilityEvent(host: View, event: AccessibilityEvent) { - originalDelegate?.onInitializeAccessibilityEvent(host, event) - ?: super.onInitializeAccessibilityEvent(host, event) - } - - override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) { - originalDelegate?.onInitializeAccessibilityNodeInfo(host, info) - ?: super.onInitializeAccessibilityNodeInfo(host, info) - - initializeAccessibilityNodeInfo(host, info) - - actionsAccessibilityNodeInfo(host, info) - } - - override fun onRequestSendAccessibilityEvent( - host: ViewGroup, - child: View, - event: AccessibilityEvent - ): Boolean { - return originalDelegate?.onRequestSendAccessibilityEvent(host, child, event) - ?: super.onRequestSendAccessibilityEvent(host, child, event) - } - - override fun getAccessibilityNodeProvider(host: View): AccessibilityNodeProviderCompat? { - return originalDelegate?.getAccessibilityNodeProvider(host) - ?: super.getAccessibilityNodeProvider(host) - } - - override fun performAccessibilityAction(host: View, action: Int, args: Bundle?): Boolean { - return originalDelegate?.performAccessibilityAction(host, action, args) - ?: super.performAccessibilityAction(host, action, args) - } -} diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityListDelegate.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityListDelegate.kt index 58a30d734..bf3d26ffd 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityListDelegate.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/AccessibilityListDelegate.kt @@ -4,8 +4,6 @@ import android.os.Bundle import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver -import android.view.accessibility.AccessibilityEvent -import android.view.accessibility.AccessibilityNodeInfo import android.widget.Button import androidx.core.view.AccessibilityDelegateCompat import androidx.core.view.accessibility.AccessibilityNodeInfoCompat diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/Div2View.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/Div2View.kt index a4d4f0e50..1210a8627 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/Div2View.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/Div2View.kt @@ -89,7 +89,6 @@ import com.yandex.div.json.expressions.ExpressionResolver import com.yandex.div.util.INVALID_STATE_ID import com.yandex.div.util.getInitialStateId import com.yandex.div2.Div -import com.yandex.div2.DivAccessibility import com.yandex.div2.DivAction import com.yandex.div2.DivData import com.yandex.div2.DivPatch @@ -131,7 +130,6 @@ class Div2View private constructor( private val divDataChangedObservers = mutableListOf() private val persistentDivDataObservers = ObserverList() private val viewToDivBindings = WeakHashMap() - private val propagatedAccessibilityModes = WeakHashMap() private val bulkActionsHandler = BulkActionHandler() private val divVideoActionHandler: DivVideoActionHandler get() = div2Component.divVideoActionHandler @@ -709,7 +707,6 @@ class Div2View private constructor( private fun stopLoadAndSubscriptions() { viewToDivBindings.clear() - propagatedAccessibilityModes.clear() cancelTooltips() // Depends on children, should be called before removing them clearSubscriptions() divDataChangedObservers.clear() @@ -1160,20 +1157,6 @@ class Div2View private constructor( internal fun takeBindingDiv(view: View) = viewToDivBindings[view] - internal fun setPropagatedAccessibilityMode(view: View, mode: DivAccessibility.Mode) { - propagatedAccessibilityModes[view] = mode - } - - internal fun getPropagatedAccessibilityMode(view: View): DivAccessibility.Mode? { - return propagatedAccessibilityModes[view] - } - - internal fun isDescendantAccessibilityMode(view: View): Boolean { - return (view.parent as? View)?.let { parent -> - propagatedAccessibilityModes[parent] == propagatedAccessibilityModes[view] - } ?: false - } - /** * @return exception if setting variable failed, null otherwise. */ diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/DivAccessibilityBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/DivAccessibilityBinder.kt index 739e41e60..c35ab8734 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/DivAccessibilityBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/DivAccessibilityBinder.kt @@ -1,26 +1,35 @@ package com.yandex.div.core.view2 +import android.os.Build import android.view.View -import android.widget.CheckBox -import android.widget.RadioButton +import android.view.View.OnLayoutChangeListener +import android.view.ViewGroup +import androidx.core.view.AccessibilityDelegateCompat import androidx.core.view.ViewCompat import androidx.core.view.accessibility.AccessibilityNodeInfoCompat +import androidx.core.view.children +import androidx.core.view.isVisible +import com.yandex.div.core.Disposable import com.yandex.div.core.annotations.Mockable import com.yandex.div.core.dagger.DivScope import com.yandex.div.core.dagger.ExperimentFlag import com.yandex.div.core.experiments.Experiment.ACCESSIBILITY_ENABLED import com.yandex.div.core.util.AccessibilityStateProvider +import com.yandex.div.core.util.expressionSubscriber import com.yandex.div.core.view2.backbutton.BackHandlingRecyclerView -import com.yandex.div.core.view2.divs.widgets.DivInputView -import com.yandex.div.core.view2.divs.widgets.DivSliderView +import com.yandex.div.core.view2.divs.widgets.DivCollectionHolder +import com.yandex.div.internal.core.ExpressionSubscriber import com.yandex.div.json.expressions.ExpressionResolver +import com.yandex.div.json.expressions.equalsToConstant +import com.yandex.div.json.expressions.isConstantOrNull import com.yandex.div2.DivAccessibility import com.yandex.div2.DivBase +import com.yandex.div2.DivContainer import com.yandex.div2.DivGallery +import com.yandex.div2.DivGifImage import com.yandex.div2.DivImage import com.yandex.div2.DivInput import com.yandex.div2.DivSelect -import com.yandex.div2.DivSeparator import com.yandex.div2.DivSlider import com.yandex.div2.DivTabs import com.yandex.div2.DivText @@ -35,173 +44,78 @@ internal class DivAccessibilityBinder @Inject constructor( @ExperimentFlag(ACCESSIBILITY_ENABLED) val enabled: Boolean, private val accessibilityStateProvider: AccessibilityStateProvider, ) { - fun bindAccessibilityMode( + + fun bind( view: View, - divView: Div2View, - mode: DivAccessibility.Mode?, - divBase: DivBase, + newDiv: DivBase, + oldDiv: DivBase?, + resolver: ExpressionResolver, + subscriber: ExpressionSubscriber, ) { - if (!enabled) { - return - } - val parentMode = (view.parent as? View)?.let { - divView.getPropagatedAccessibilityMode(it) - } - - if (parentMode != null) { - val propagatedMode = getPropagatedMode(parentMode, mode ?: divBase.getDefaultAccessibilityMode) - view.applyAccessibilityMode( - propagatedMode, - divView, - isDescendant = parentMode == propagatedMode - ) - } else { - view.applyAccessibilityMode(mode ?: divBase.getDefaultAccessibilityMode, divView, isDescendant = false) - } - } - - fun bindType(view: View, divBase: DivBase, type: DivAccessibility.Type, resolver: ExpressionResolver) { - if (!accessibilityStateProvider.isAccessibilityEnabled(view.context)) { + if (newDiv.accessibility == null && oldDiv?.accessibility == null) { + // Shortcut for empty accessibility binding + if (enabled) { + view.applyMode() + } return } - val originalDelegate = ViewCompat.getAccessibilityDelegate(view) - val accessibilityType = type.toAccessibilityType(divBase, resolver) + view.bindType(newDiv, oldDiv) + view.bindDescriptionAndHint(newDiv, oldDiv, resolver, subscriber) + view.bindMode(newDiv, oldDiv, resolver, subscriber) + view.bindStateDescription(newDiv, oldDiv, resolver, subscriber) + //TODO: bind 'muteAfterAction' property + } - val accessibilityDelegate = - if (accessibilityType == AccessibilityType.LIST && view is BackHandlingRecyclerView) { - AccessibilityListDelegate(view) - } else if (originalDelegate is AccessibilityDelegateWrapper) { - originalDelegate.apply { - initializeAccessibilityNodeInfo = { _, info -> - info?.bindType(accessibilityType) - } + // region Type + + private fun View.bindType(newDiv: DivBase, oldDiv: DivBase?) { + if (!accessibilityStateProvider.isAccessibilityEnabled(context)) return + + if (oldDiv != null && newDiv.accessibility?.type == oldDiv.accessibility?.type) return + applyType(newDiv, newDiv.accessibility?.type) + } + + private fun View.applyType(divBase: DivBase, accessibilityType: DivAccessibility.Type? = null) { + val type = accessibilityType ?: DivAccessibility.Type.AUTO + getAccessibilityDelegate(this, type.toAccessibilityType(divBase))?.let { + ViewCompat.setAccessibilityDelegate(this, it) + } + } + + private fun getAccessibilityDelegate(view: View, type: AccessibilityType): AccessibilityDelegateCompat? { + if (type == AccessibilityType.LIST && view is BackHandlingRecyclerView) { + return AccessibilityListDelegate(view) + } + + val className = type.toClassName + val heading = type == AccessibilityType.HEADER + val autoClassName = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) view.accessibilityClassName else null + if ((className.isEmpty() || className == autoClassName) && !heading) return null + + return object : AccessibilityDelegateCompat() { + override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) { + super.onInitializeAccessibilityNodeInfo(host, info) + if (className.isNotEmpty()) { + info.className = className } - } else { - AccessibilityDelegateWrapper( - originalDelegate, - initializeAccessibilityNodeInfo = { _, info -> - info?.bindType(accessibilityType) - }) + info.isHeading = heading } - - ViewCompat.setAccessibilityDelegate(view, accessibilityDelegate) - } - - private val DivBase.getDefaultAccessibilityMode: DivAccessibility.Mode - get() = when (this) { - is DivImage -> if (accessibility == null && doubletapActions.isNullOrEmpty() && - actions.isNullOrEmpty() && longtapActions.isNullOrEmpty()) { - DivAccessibility.Mode.EXCLUDE - } else { - DivAccessibility.Mode.DEFAULT - } - - is DivSeparator -> if (accessibility == null && doubletapActions.isNullOrEmpty() && - actions.isNullOrEmpty() && longtapActions.isNullOrEmpty()) { - DivAccessibility.Mode.EXCLUDE - } else { - DivAccessibility.Mode.DEFAULT - } - - else -> DivAccessibility.Mode.DEFAULT - } - - /** - * Sets [AccessibilityNodeInfoCompat]'s className so that TalkBack could - * properly recognize role of View provided by [DivAccessibility.Type]. - * For example, if [type] is [DivAccessibility.Type.BUTTON], TalkBack announces View as "Button". - */ - private fun AccessibilityNodeInfoCompat.bindType(type: AccessibilityType) { - this.className = when (type) { - AccessibilityType.NONE -> "" - AccessibilityType.BUTTON -> "android.widget.Button" - AccessibilityType.EDIT_TEXT -> "android.widget.EditText" - AccessibilityType.HEADER -> "android.widget.TextView" - AccessibilityType.IMAGE -> "android.widget.ImageView" - AccessibilityType.LIST -> "" - AccessibilityType.PAGER -> "androidx.viewpager.widget.ViewPager" - AccessibilityType.SLIDER -> "android.widget.SeekBar" - AccessibilityType.SELECT -> "android.widget.Spinner" - AccessibilityType.TAB_WIDGET -> "android.widget.TabWidget" - AccessibilityType.TEXT -> "android.widget.TextView" - AccessibilityType.CHECK_BOX -> "android.widget.CheckBox" - AccessibilityType.RADIO_BUTTON -> "android.widget.RadioButton" - } - - if (AccessibilityType.HEADER == type) { - this.isHeading = true } } - private val DivAccessibility.Mode.priority - get() = when (this) { - DivAccessibility.Mode.EXCLUDE -> 0 - DivAccessibility.Mode.MERGE -> 1 - DivAccessibility.Mode.DEFAULT -> 2 - } - - private fun getPropagatedMode( - parentMode: DivAccessibility.Mode, - mode: DivAccessibility.Mode - ): DivAccessibility.Mode { - return if (parentMode.priority < mode.priority) parentMode else mode - } - - private fun View.applyAccessibilityMode( - mode: DivAccessibility.Mode, - divView: Div2View, - isDescendant: Boolean - ) { - when (mode) { - DivAccessibility.Mode.MERGE -> { - importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_YES - if (!isDescendant) { - isFocusable = this !is DivSliderView - } else { - setActionable(false) - } - } - DivAccessibility.Mode.EXCLUDE -> { - importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS - isFocusable = false - if (this is DivInputView) isFocusableInTouchMode = true - } - DivAccessibility.Mode.DEFAULT -> { - importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_AUTO - isFocusable = this !is DivSliderView - } - } - divView.setPropagatedAccessibilityMode(this, mode) - } - - private fun View.setActionable(actionable: Boolean) { - isClickable = actionable - isLongClickable = actionable - isFocusable = actionable - } - - private fun DivImage.isClickable(resolver: ExpressionResolver): Boolean = - if (action != null && action?.isEnabled?.evaluate(resolver) == true) { - true - } else if (actions != null && actions?.any { it.isEnabled.evaluate(resolver) } == true) { - true - } else longtapActions != null && longtapActions?.any { it.isEnabled.evaluate(resolver) } == true - - private fun DivAccessibility.Type.toAccessibilityType( - div: DivBase, resolver: ExpressionResolver - ): AccessibilityType = when (this) { + private fun DivAccessibility.Type.toAccessibilityType(div: DivBase): AccessibilityType { + return when (this) { DivAccessibility.Type.AUTO -> when { - div.accessibility?.mode?.evaluate(resolver) == DivAccessibility.Mode.EXCLUDE -> AccessibilityType.NONE div is DivInput -> AccessibilityType.EDIT_TEXT div is DivText -> AccessibilityType.TEXT div is DivTabs -> AccessibilityType.TAB_WIDGET div is DivSelect -> AccessibilityType.SELECT div is DivSlider -> AccessibilityType.SLIDER - div is DivImage && (div.accessibility != null || div.isClickable(resolver))-> AccessibilityType.IMAGE + div is DivImage -> AccessibilityType.IMAGE + div is DivGifImage -> AccessibilityType.IMAGE div is DivGallery && div.accessibility?.description != null -> AccessibilityType.PAGER - div is RadioButton -> AccessibilityType.RADIO_BUTTON - div is CheckBox -> AccessibilityType.CHECK_BOX + div is DivContainer -> AccessibilityType.CONTAINER else -> AccessibilityType.NONE } DivAccessibility.Type.NONE -> AccessibilityType.NONE @@ -216,6 +130,161 @@ internal class DivAccessibilityBinder @Inject constructor( DivAccessibility.Type.RADIO -> AccessibilityType.RADIO_BUTTON DivAccessibility.Type.CHECKBOX -> AccessibilityType.CHECK_BOX } + } + + private val AccessibilityType.toClassName: String get() { + return when (this) { + AccessibilityType.NONE -> "" + AccessibilityType.BUTTON -> "android.widget.Button" + AccessibilityType.EDIT_TEXT -> "android.widget.EditText" + AccessibilityType.HEADER -> "" + AccessibilityType.IMAGE -> "android.widget.ImageView" + AccessibilityType.LIST -> "" + AccessibilityType.PAGER -> "androidx.viewpager.widget.ViewPager" + AccessibilityType.SLIDER -> "" + AccessibilityType.SELECT -> "android.widget.Spinner" + AccessibilityType.TAB_WIDGET -> "android.widget.TabWidget" + AccessibilityType.TEXT -> "android.widget.TextView" + AccessibilityType.CHECK_BOX -> "android.widget.CheckBox" + AccessibilityType.RADIO_BUTTON -> "android.widget.RadioButton" + AccessibilityType.CONTAINER -> "android.view.ViewGroup" + } + } + + // endregion + + // region Description and Hint + + private fun View.bindDescriptionAndHint( + newDiv: DivBase, + oldDiv: DivBase?, + resolver: ExpressionResolver, + subscriber: ExpressionSubscriber + ) { + val newDescription = newDiv.accessibility?.description + val newHint = newDiv.accessibility?.hint + if (newDescription.equalsToConstant(oldDiv?.accessibility?.description) && + newHint.equalsToConstant(oldDiv?.accessibility?.hint)) { + return + } + + applyDescriptionAndHint(newDescription?.evaluate(resolver), newHint?.evaluate(resolver)) + + if (newDescription.isConstantOrNull() && newHint.isConstantOrNull()) return + + val callback = { _: Any -> + applyDescriptionAndHint(newDescription?.evaluate(resolver), newHint?.evaluate(resolver)) + } + subscriber.addSubscription(newDescription?.observe(resolver, callback)) + subscriber.addSubscription(newHint?.observe(resolver, callback)) + } + + private fun View.applyDescriptionAndHint(description: String?, hint: String?) { + contentDescription = when { + description == null -> hint + hint == null -> description + else -> "$description\n$hint" + } + } + + // endregion + + // region Mode + + private fun View.bindMode( + newDiv: DivBase, + oldDiv: DivBase?, + resolver: ExpressionResolver, + subscriber: ExpressionSubscriber + ) { + if (!enabled) return + + val newMode = newDiv.accessibility?.mode + if (newMode.equalsToConstant(oldDiv?.accessibility?.mode)) return + + applyMode(newMode?.evaluate(resolver)) + + if (newMode.isConstantOrNull()) return + + subscriber.addSubscription(newMode?.observe(resolver) { applyMode(it) }) + } + + private fun View.applyMode(mode: DivAccessibility.Mode? = null) { + if (this !is ViewGroup) { + importantForAccessibility = when { + mode == DivAccessibility.Mode.EXCLUDE -> View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS + !contentDescription.isNullOrBlank() -> View.IMPORTANT_FOR_ACCESSIBILITY_YES + else -> View.IMPORTANT_FOR_ACCESSIBILITY_AUTO + } + return + } + + if (this !is DivCollectionHolder) return + + if (mode == DivAccessibility.Mode.MERGE) { + updateContainerMode() + if (accessibilityObserver != null) return + + val observer = createContentObserver() + expressionSubscriber.addSubscription(observer) + accessibilityObserver = observer + return + } + + accessibilityObserver?.close() + accessibilityObserver = null + + ViewCompat.setScreenReaderFocusable(this, false) + importantForAccessibility = if (mode == DivAccessibility.Mode.EXCLUDE) { + View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS + } else { + View.IMPORTANT_FOR_ACCESSIBILITY_NO + } + } + + private fun ViewGroup.createContentObserver() = object : OnLayoutChangeListener, Disposable { + + init { + addOnLayoutChangeListener(this) + } + + override fun onLayoutChange( + v: View?, left: Int, top: Int, right: Int, bottom: Int, + oldLeft: Int, oldTop: Int, oldRight: Int, oldBottom: Int + ) = updateContainerMode() + + override fun close() = removeOnLayoutChangeListener(this) + } + + private fun ViewGroup.updateContainerMode() { + val hasContent = children.any { it.isVisible } + ViewCompat.setScreenReaderFocusable(this, hasContent) + importantForAccessibility = + if (hasContent) View.IMPORTANT_FOR_ACCESSIBILITY_YES else View.IMPORTANT_FOR_ACCESSIBILITY_NO + } + + // endregion + + // region State description + + private fun View.bindStateDescription( + newDiv: DivBase, + oldDiv: DivBase?, + resolver: ExpressionResolver, + subscriber: ExpressionSubscriber + ) { + val newStateDescription = newDiv.accessibility?.stateDescription + if (newStateDescription.equalsToConstant(oldDiv?.accessibility?.stateDescription)) return + + applyStateDescription(newStateDescription?.evaluate(resolver)) + + if (newStateDescription.isConstantOrNull()) return + + subscriber.addSubscription(newStateDescription?.observe(resolver) { applyStateDescription(it) }) + } + + private fun View.applyStateDescription(stateDescription: String?) = + ViewCompat.setStateDescription(this, stateDescription) private enum class AccessibilityType { NONE, @@ -231,5 +300,6 @@ internal class DivAccessibilityBinder @Inject constructor( TEXT, RADIO_BUTTON, CHECK_BOX, + CONTAINER, } } diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/backbutton/BackKeyPressedHelper.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/backbutton/BackKeyPressedHelper.kt index f32c0dbfc..14fbf2ea9 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/backbutton/BackKeyPressedHelper.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/backbutton/BackKeyPressedHelper.kt @@ -3,6 +3,7 @@ package com.yandex.div.core.view2.backbutton import android.view.KeyEvent import android.view.View import com.yandex.div.core.view2.backbutton.BackKeyPressedHelper.OnBackClickListener +import com.yandex.div.core.view2.divs.gainAccessibilityFocus /** * This class helps to handle BACK key inside some View. @@ -30,7 +31,7 @@ internal class BackKeyPressedHelper(private val mOwnerView: View) { */ fun setOnBackClickListener(onBackClickListener: OnBackClickListener?) { mOnBackClickListener = onBackClickListener - setupFocus() + setupAccessibilityFocus() } /** @@ -61,7 +62,7 @@ internal class BackKeyPressedHelper(private val mOwnerView: View) { */ fun onWindowFocusChanged(hasWindowFocus: Boolean) { if (hasWindowFocus) { - setupFocus() + setupAccessibilityFocus() } } @@ -69,18 +70,16 @@ internal class BackKeyPressedHelper(private val mOwnerView: View) { * Call this from [View.onVisibilityChanged]. */ fun onVisibilityChanged() { - setupFocus() + setupAccessibilityFocus() } - private fun setupFocus() { + private fun setupAccessibilityFocus() { if (mOnBackClickListener == null || !mOwnerView.hasWindowFocus()) return mOwnerView.apply { - isFocusable = true - isFocusableInTouchMode = true when { - isShown -> requestFocus() - hasFocus() -> rootView?.requestFocus(View.FOCUS_UP) + isShown -> gainAccessibilityFocus() + isAccessibilityFocused -> rootView?.gainAccessibilityFocus() } } } diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/BaseDivViewExtensions.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/BaseDivViewExtensions.kt index 6ec59ad80..e8dde62fa 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/BaseDivViewExtensions.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/BaseDivViewExtensions.kt @@ -24,7 +24,6 @@ import androidx.core.view.children import androidx.core.view.doOnNextLayout import androidx.core.view.doOnPreDraw import com.yandex.div.core.expression.suppressExpressionErrors -import com.yandex.div.core.util.AccessibilityStateProvider import com.yandex.div.core.util.doOnActualLayout import com.yandex.div.core.util.isLayoutRtl import com.yandex.div.core.util.toIntSafely @@ -56,7 +55,6 @@ import com.yandex.div.json.expressions.equalsToConstant import com.yandex.div.json.expressions.isConstant import com.yandex.div.json.expressions.isConstantOrNull import com.yandex.div2.Div -import com.yandex.div2.DivAccessibility import com.yandex.div2.DivAction import com.yandex.div2.DivAlignmentHorizontal import com.yandex.div2.DivAlignmentVertical @@ -536,7 +534,6 @@ internal fun View.applyDivActions( pressStartActions: List?, pressEndActions: List?, actionAnimation: DivAnimation, - accessibility: DivAccessibility?, captureFocusOnAction: Expression, ) { val actionBinder = context.divView.div2Component.actionBinder @@ -556,7 +553,6 @@ internal fun View.applyDivActions( pressStartActions, pressEndActions, actionAnimation, - accessibility, captureFocusOnAction, ) } @@ -908,24 +904,6 @@ internal fun View.gainAccessibilityFocus() { sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED) } -internal fun sendAccessibilityEventUnchecked( - event: Int, - view: View?, - accessibilityStateProvider: AccessibilityStateProvider -) { - view ?: return - if (accessibilityStateProvider.isAccessibilityEnabled(view.context)) { - view.sendAccessibilityEventUnchecked( - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - AccessibilityEvent(event) - } else { - @Suppress("DEPRECATION") - AccessibilityEvent.obtain(event) - } - ) - } -} - internal fun ViewGroup.bindClipChildren( newClipToBounds: Expression, oldClipToBounds: Expression?, diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivActionBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivActionBinder.kt index 6510aad99..a3c202e68 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivActionBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivActionBinder.kt @@ -5,12 +5,10 @@ import android.view.Gravity import android.view.MotionEvent import android.view.View import android.view.ViewGroup -import android.widget.ImageView import androidx.annotation.StringDef import androidx.annotation.VisibleForTesting import androidx.appcompat.widget.PopupMenu -import androidx.core.view.ViewCompat -import androidx.core.view.accessibility.AccessibilityNodeInfoCompat +import androidx.core.view.size import com.yandex.div.R import com.yandex.div.core.Div2Logger import com.yandex.div.core.DivActionHandler @@ -19,10 +17,8 @@ import com.yandex.div.core.DivViewFacade import com.yandex.div.core.annotations.Mockable import com.yandex.div.core.dagger.DivScope import com.yandex.div.core.dagger.ExperimentFlag -import com.yandex.div.core.experiments.Experiment.ACCESSIBILITY_ENABLED import com.yandex.div.core.experiments.Experiment.IGNORE_ACTION_MENU_ITEMS_ENABLED import com.yandex.div.core.experiments.Experiment.LONGTAP_ACTIONS_PASS_TO_CHILD_ENABLED -import com.yandex.div.core.view2.AccessibilityDelegateWrapper import com.yandex.div.core.view2.BindingContext import com.yandex.div.core.view2.Div2View import com.yandex.div.core.view2.DivGestureListener @@ -44,7 +40,6 @@ import com.yandex.div.internal.util.allIsNullOrEmpty import com.yandex.div.internal.widget.menu.OverflowMenuWrapper import com.yandex.div.json.expressions.Expression import com.yandex.div.json.expressions.ExpressionResolver -import com.yandex.div2.DivAccessibility import com.yandex.div2.DivAction import com.yandex.div2.DivAnimation import java.util.UUID @@ -58,7 +53,6 @@ internal class DivActionBinder @Inject constructor( private val divActionBeaconSender: DivActionBeaconSender, @ExperimentFlag(LONGTAP_ACTIONS_PASS_TO_CHILD_ENABLED) private val longtapActionsPassToChild: Boolean, @ExperimentFlag(IGNORE_ACTION_MENU_ITEMS_ENABLED) private val shouldIgnoreActionMenuItems: Boolean, - @ExperimentFlag(ACCESSIBILITY_ENABLED) private val accessibilityEnabled: Boolean ) { private val passToParentLongClickListener: (View) -> Boolean = { view -> var isLongClickHandled = false @@ -83,7 +77,6 @@ internal class DivActionBinder @Inject constructor( pressStartActions: List?, pressEndActions: List?, actionAnimation: DivAnimation, - accessibility: DivAccessibility?, captureFocusOnAction: Expression, ) { val resolver = context.expressionResolver @@ -99,7 +92,6 @@ internal class DivActionBinder @Inject constructor( pressStartActions = pressStartActions.onlyEnabled(resolver), pressEndActions = pressEndActions.onlyEnabled(resolver), actionAnimation = actionAnimation, - accessibility = accessibility, captureFocusOnAction = captureFocusOnAction, ) } @@ -123,12 +115,8 @@ internal class DivActionBinder @Inject constructor( pressStartActions: List, pressEndActions: List, actionAnimation: DivAnimation, - accessibility: DivAccessibility?, captureFocusOnAction: Expression, ) { - val clickableState = target.isClickable - val longClickableState = target.isLongClickable - val divGestureListener = DivGestureListener( awaitLongClick = longTapActions.isNotEmpty() || target.parentIsLongClickable() ) @@ -155,54 +143,6 @@ internal class DivActionBinder @Inject constructor( bindHoverActions(context, target, hoverStartActions, hoverEndActions) target.attachTouchListeners(animatedTouchListener, pressTouchListener) - - if (accessibilityEnabled) { - if (DivAccessibility.Mode.MERGE == context.divView.getPropagatedAccessibilityMode(target) && - context.divView.isDescendantAccessibilityMode(target)) { - target.isClickable = clickableState - target.isLongClickable = longClickableState - } - - bindAccessibilityDelegate(target, actions, longTapActions, accessibility) - } - } - - private fun bindAccessibilityDelegate( - target: View, - actions: List, - longTapActions: List, - accessibility: DivAccessibility?, - ) { - val originalDelegate = ViewCompat.getAccessibilityDelegate(target) - - val action = { _: View?, info: AccessibilityNodeInfoCompat? -> - if (actions.isNotEmpty()) { - info?.addAction(AccessibilityNodeInfoCompat - .AccessibilityActionCompat.ACTION_CLICK) - } - if (longTapActions.isNotEmpty()) { - info?.addAction(AccessibilityNodeInfoCompat - .AccessibilityActionCompat.ACTION_LONG_CLICK) - } - if (target is ImageView && (accessibility?.type == DivAccessibility.Type.AUTO || accessibility == null)) { - if (longTapActions.isNotEmpty() || actions.isNotEmpty() || accessibility?.description != null) { - info?.className = "android.widget.ImageView" - } else { - info?.className = "" - } - } - } - - val accessibilityWrapper = if (originalDelegate is AccessibilityDelegateWrapper) { - originalDelegate.actionsAccessibilityNodeInfo = action - originalDelegate - } else { - AccessibilityDelegateWrapper( - originalDelegate, - actionsAccessibilityNodeInfo = action) - } - - ViewCompat.setAccessibilityDelegate(target, accessibilityWrapper) } private fun bindTapActions( @@ -602,7 +542,7 @@ internal class DivActionBinder @Inject constructor( val expressionResolver = context.expressionResolver val menu = popupMenu.menu for (itemData in items) { - val itemPosition = menu.size() + val itemPosition = menu.size val menuItem = menu.add(itemData.text.evaluate(expressionResolver)) menuItem.setOnMenuItemClickListener { var actionsHandled = false diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivBaseBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivBaseBinder.kt index 1a3e53411..d6d27758a 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivBaseBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivBaseBinder.kt @@ -7,7 +7,6 @@ import android.view.View import android.view.ViewGroup.LayoutParams import android.view.ViewGroup.MarginLayoutParams import android.view.ViewTreeObserver -import androidx.core.view.ViewCompat import androidx.transition.Transition import androidx.transition.TransitionManager import androidx.transition.Visibility @@ -37,10 +36,11 @@ import com.yandex.div.json.expressions.equalsToConstant import com.yandex.div.json.expressions.isConstant import com.yandex.div.json.expressions.isConstantOrNull import com.yandex.div2.Div -import com.yandex.div2.DivAccessibility import com.yandex.div2.DivAction import com.yandex.div2.DivBase +import com.yandex.div2.DivInput import com.yandex.div2.DivSize +import com.yandex.div2.DivSwitch import com.yandex.div2.DivVisibility import javax.inject.Inject @@ -73,7 +73,7 @@ internal class DivBaseBinder @Inject constructor( bindId(divView, div, oldDiv) bindLayoutParams(div, oldDiv, resolver, subscriber) bindLayoutProvider(bindingContext, div, oldDiv) - bindAccessibility(divView, div, oldDiv, resolver, subscriber) + bindAccessibility(div, oldDiv, resolver, subscriber) bindAlpha(div, oldDiv, resolver, subscriber) bindBackground(bindingContext, div, oldDiv, subscriber) @@ -87,10 +87,7 @@ internal class DivBaseBinder @Inject constructor( div.tooltips?.let { tooltipController.mapTooltip(this, it) } - // DivAccessibilityBinder is responsible for focus setup, so changing isFocusable only if binder is disabled - if (!divAccessibilityBinder.enabled) { - applyFocusableState(div) - } + applyFocusableState(div) } //region Id @@ -379,135 +376,11 @@ internal class DivBaseBinder @Inject constructor( //region Accessibility private fun View.bindAccessibility( - divView: Div2View, newDiv: DivBase, oldDiv: DivBase?, resolver: ExpressionResolver, subscriber: ExpressionSubscriber - ) { - if (newDiv.accessibility == null && oldDiv?.accessibility == null) { - // Shortcut for empty accessibility binding - applyAccessibilityMode(divView, newDiv, mode = null) - divAccessibilityBinder.bindType(this, newDiv, DivAccessibility.Type.AUTO, resolver) - return - } - - bindAccessibilityType(newDiv, oldDiv, resolver) - bindAccessibilityDescriptionAndHint(newDiv, oldDiv, resolver, subscriber) - bindAccessibilityMode(divView, newDiv, resolver, subscriber) - bindAccessibilityStateDescription(newDiv, oldDiv, resolver, subscriber) - //TODO: bind 'muteAfterAction' property - } - - private fun View.bindAccessibilityType( - newDiv: DivBase, - oldDiv: DivBase?, - resolver: ExpressionResolver, - ) { - if (oldDiv != null && newDiv.accessibility?.type == oldDiv.accessibility?.type) { - return - } - - divAccessibilityBinder.bindType(this, newDiv, newDiv.accessibility?.type - ?: DivAccessibility.Type.AUTO, resolver) - } - - private fun View.bindAccessibilityDescriptionAndHint( - newDiv: DivBase, - oldDiv: DivBase?, - resolver: ExpressionResolver, - subscriber: ExpressionSubscriber - ) { - if (newDiv.accessibility?.description.equalsToConstant(oldDiv?.accessibility?.description) - && newDiv.accessibility?.hint.equalsToConstant(oldDiv?.accessibility?.hint)) { - return - } - - applyAccessibilityDescriptionAndHint( - newDiv.accessibility?.description?.evaluate(resolver), - newDiv.accessibility?.hint?.evaluate(resolver) - ) - - if (newDiv.accessibility?.description.isConstantOrNull() - && newDiv.accessibility?.hint.isConstantOrNull()) { - return - } - - val callback = { _: Any -> - applyAccessibilityDescriptionAndHint( - newDiv.accessibility?.description?.evaluate(resolver), - newDiv.accessibility?.hint?.evaluate(resolver) - ) - } - subscriber.addSubscription(newDiv.accessibility?.description?.observe(resolver, callback)) - subscriber.addSubscription(newDiv.accessibility?.hint?.observe(resolver, callback)) - } - - private fun View.applyAccessibilityDescriptionAndHint(contentDescription: String?, hint: String?) { - this.contentDescription = when { - contentDescription == null -> hint - hint == null -> contentDescription - else -> "$contentDescription\n$hint" - } - } - - private fun View.bindAccessibilityMode( - divView: Div2View, - newDiv: DivBase, - resolver: ExpressionResolver, - subscriber: ExpressionSubscriber - ) { - // We can't compare accessibility mode with previous one due to actual value depends on parent mode - // and should be recalculated. - - applyAccessibilityMode(divView, newDiv, newDiv.accessibility?.mode?.evaluate(resolver)) - - if (newDiv.accessibility?.mode.isConstantOrNull()) { - return - } - - subscriber.addSubscription( - newDiv.accessibility?.mode?.observe(resolver) { mode -> - applyAccessibilityMode(divView, newDiv, mode) - - val type = newDiv.accessibility?.type ?: DivAccessibility.Type.AUTO - if (type == DivAccessibility.Type.AUTO) { - divAccessibilityBinder.bindType(this, newDiv, type, resolver) - } - } - ) - } - - private fun View.applyAccessibilityMode(divView: Div2View, base: DivBase, mode: DivAccessibility.Mode?) { - divAccessibilityBinder.bindAccessibilityMode(this, divView, mode, base) - } - - private fun View.bindAccessibilityStateDescription( - newDiv: DivBase, - oldDiv: DivBase?, - resolver: ExpressionResolver, - subscriber: ExpressionSubscriber - ) { - if (newDiv.accessibility?.stateDescription.equalsToConstant(oldDiv?.accessibility?.stateDescription)) { - return - } - - applyAccessibilityStateDescription(newDiv.accessibility?.stateDescription?.evaluate(resolver)) - - if (newDiv.accessibility?.stateDescription.isConstantOrNull()) { - return - } - - subscriber.addSubscription( - newDiv.accessibility?.stateDescription?.observe(resolver) { stateDescription -> - applyAccessibilityStateDescription(stateDescription) - } - ) - } - - private fun View.applyAccessibilityStateDescription(stateDescription: String?) { - ViewCompat.setStateDescription(this, stateDescription) - } + ) = divAccessibilityBinder.bind(this, newDiv, oldDiv, resolver, subscriber) //endregion @@ -765,6 +638,7 @@ internal class DivBaseBinder @Inject constructor( //endregion private fun View.applyFocusableState(div: DivBase) { + if (div is DivInput || div is DivSwitch) return isFocusable = div.focus != null } diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivContainerBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivContainerBinder.kt index 0c1755ca4..86402f5ed 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivContainerBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivContainerBinder.kt @@ -110,7 +110,6 @@ internal class DivContainerBinder @Inject constructor( div.pressStartActions, div.pressEndActions, div.actionAnimation, - div.accessibility, div.captureFocusOnAction, ) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivGifImageBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivGifImageBinder.kt index ee1542fe5..bdec187d8 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivGifImageBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivGifImageBinder.kt @@ -59,7 +59,6 @@ internal class DivGifImageBinder @Inject constructor( div.pressStartActions, div.pressEndActions, div.actionAnimation, - div.accessibility, div.captureFocusOnAction, ) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivGridBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivGridBinder.kt index 83ee5015b..3e4519a7b 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivGridBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivGridBinder.kt @@ -56,7 +56,6 @@ internal class DivGridBinder @Inject constructor( div.pressStartActions, div.pressEndActions, div.actionAnimation, - div.accessibility, div.captureFocusOnAction, ) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivImageBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivImageBinder.kt index ee0a82a5c..da723fa36 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivImageBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivImageBinder.kt @@ -53,7 +53,6 @@ internal class DivImageBinder @Inject constructor( div.pressStartActions, div.pressEndActions, div.actionAnimation, - div.accessibility, div.captureFocusOnAction, ) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivInputBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivInputBinder.kt index eed334bbf..aba5bf673 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivInputBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivInputBinder.kt @@ -74,8 +74,6 @@ internal class DivInputBinder @Inject constructor( path: DivStatePath ) { val expressionResolver = bindingContext.expressionResolver - isFocusable = true - isFocusableInTouchMode = true textAlignment = TextView.TEXT_ALIGNMENT_VIEW_START accessibilityEnabled = accessibilityStateProvider.isAccessibilityEnabled(context) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivSeparatorBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivSeparatorBinder.kt index af230ca2f..b679e3391 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivSeparatorBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivSeparatorBinder.kt @@ -30,7 +30,6 @@ internal class DivSeparatorBinder @Inject constructor( div.pressStartActions, div.pressEndActions, div.actionAnimation, - div.accessibility, div.captureFocusOnAction, ) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivTextBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivTextBinder.kt index 73fe657ea..39d6f5f60 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivTextBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/DivTextBinder.kt @@ -80,7 +80,6 @@ internal class DivTextBinder @Inject constructor( div.pressStartActions, div.pressEndActions, div.actionAnimation, - div.accessibility, div.captureFocusOnAction, ) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerAdapter.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerAdapter.kt index 182b92436..45212c4e3 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerAdapter.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerAdapter.kt @@ -20,7 +20,6 @@ internal class DivPagerAdapter( private val pageTranslations: SparseArray, private val viewCreator: DivViewCreator, path: DivStatePath, - private val accessibilityEnabled: Boolean, private val pagerView: DivPagerView, ) : DivCollectionAdapter(bindingContext, path, items) { @@ -65,7 +64,6 @@ internal class DivPagerAdapter( view, divBinder, viewCreator, - accessibilityEnabled, { isHorizontal }, { crossAxisAlignment }, ) diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerBinder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerBinder.kt index cda28c5fb..4b554b230 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerBinder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerBinder.kt @@ -91,7 +91,6 @@ internal class DivPagerBinder @Inject constructor( pageTranslations, viewCreator, path, - a11yEnabled, this ) viewPager.adapter = adapter diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerViewHolder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerViewHolder.kt index 4bac4dabf..783eb7a08 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerViewHolder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/pager/DivPagerViewHolder.kt @@ -1,7 +1,6 @@ package com.yandex.div.core.view2.divs.pager import android.view.Gravity -import com.yandex.div.R import com.yandex.div.core.state.DivStatePath import com.yandex.div.core.util.doOnEveryDetach import com.yandex.div.core.view2.BindingContext @@ -22,7 +21,6 @@ internal class DivPagerViewHolder( private val pageLayout: DivPagerPageLayout, divBinder: DivBinder, viewCreator: DivViewCreator, - private val accessibilityEnabled: Boolean, private val isHorizontal: () -> Boolean, private val crossAxisAlignment: () -> ItemAlignment, ) : DivCollectionViewHolder(pageLayout, parentContext, divBinder, viewCreator) { @@ -40,10 +38,6 @@ internal class DivPagerViewHolder( (pageLayout.child?.layoutParams as? DivLayoutParams) ?.setCrossAxisAlignment(div.value(), bindingContext.expressionResolver) - - if (accessibilityEnabled) { - pageLayout.setTag(R.id.div_pager_item_clip_id, position) - } } private fun DivLayoutParams.setCrossAxisAlignment(div: DivBase, resolver: ExpressionResolver) { diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivCollectionHolder.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivCollectionHolder.kt index dc6e6491c..57f58d6b2 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivCollectionHolder.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivCollectionHolder.kt @@ -1,11 +1,14 @@ package com.yandex.div.core.view2.divs.widgets +import com.yandex.div.core.Disposable import com.yandex.div.internal.core.DivItemBuilderResult internal interface DivCollectionHolder { var items: List? + var accessibilityObserver: Disposable? } internal class DivCollectionHolderMixin : DivCollectionHolder { override var items: List? = null + override var accessibilityObserver: Disposable? = null } diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivInputView.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivInputView.kt index 79d9feaf0..ddc9efc66 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivInputView.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivInputView.kt @@ -50,14 +50,13 @@ internal class DivInputView @JvmOverloads constructor( private var _hint: String? = null - private var _isFocusable = true - private var editorActionListener: OnEditorActionListener? = null var enabled = true internal set(value) { field = value - isFocusable = _isFocusable + isFocusable = value + isFocusableInTouchMode = value } internal var accessibilityEnabled: Boolean = false @@ -96,13 +95,6 @@ internal class DivInputView @JvmOverloads constructor( drawBorderClipped(canvas, scrollX, scrollY) { super.draw(it) } } - override fun setFocusable(focusable: Boolean) { - _isFocusable = focusable - val isFocusable = _isFocusable && enabled - super.setFocusable(isFocusable) - isFocusableInTouchMode = isFocusable - } - override fun setOnEditorActionListener(l: OnEditorActionListener?) { super.setOnEditorActionListener(l) editorActionListener = l diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivPagerView.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivPagerView.kt index ae9974d8e..37953086e 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivPagerView.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/widgets/DivPagerView.kt @@ -9,12 +9,13 @@ import android.view.ViewGroup import android.view.accessibility.AccessibilityEvent import android.view.accessibility.AccessibilityNodeInfo import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate import androidx.viewpager2.widget.ViewPager2 -import com.yandex.div.R import com.yandex.div.core.annotations.Mockable import com.yandex.div.core.view2.divs.drawShadow import com.yandex.div.core.view2.divs.pager.PagerSelectedActionsDispatcher +import com.yandex.div.core.widget.DivViewWrapper import com.yandex.div.core.widget.ViewPager2Wrapper import com.yandex.div.internal.widget.OnInterceptTouchEventListener import com.yandex.div.internal.widget.OnInterceptTouchEventListenerHost @@ -82,25 +83,29 @@ internal class DivPagerView @JvmOverloads constructor( private val accessibilityDelegate by lazy(LazyThreadSafetyMode.NONE) { val recycler = getRecyclerView() ?: return@lazy null - recycler.descendantFocusability = ViewGroup.FOCUS_AFTER_DESCENDANTS object : RecyclerViewAccessibilityDelegate(recycler) { override fun onRequestSendAccessibilityEvent( - host: ViewGroup, child: View, event: AccessibilityEvent + host: ViewGroup, + child: View, + event: AccessibilityEvent ): Boolean { - if (event.eventType == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) { - getFocusedChildPos(child)?.let { pos -> - if (currentItem != pos) { - recycler.performAccessibilityAction( - if (pos > currentItem) AccessibilityNodeInfo.ACTION_SCROLL_FORWARD - else AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD, - null - ) - } - } - } + performActionIfNeeded(child, event) return super.onRequestSendAccessibilityEvent(host, child, event) } + + private fun performActionIfNeeded(child: View, event: AccessibilityEvent) { + if (event.eventType != AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) return + val pos = getWrapperFor(child)?.let { recycler.getChildAdapterPosition(it) } ?: return + if (currentItem == pos || pos == RecyclerView.NO_POSITION) return + + val action = if (pos > currentItem) { + AccessibilityNodeInfo.ACTION_SCROLL_FORWARD + } else { + AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD + } + recycler.performAccessibilityAction(action, null) + } } } @@ -156,11 +161,11 @@ internal class DivPagerView @JvmOverloads constructor( return wrappedChild.getChildAt(0) } - private fun getFocusedChildPos(child: View): Int? { - var child = child - while (child != this) { - (child.getTag(R.id.div_pager_item_clip_id) as? Int)?.let { return it } - child = child.parent as? View ?: return null + private fun getWrapperFor(child: View): View? { + var parent = child + while (parent != getRecyclerView()) { + if (parent is DivViewWrapper) return parent + parent = parent.parent as? View ?: return null } return null } diff --git a/client/android/div/src/main/java/com/yandex/div/core/widget/DivViewWrapper.kt b/client/android/div/src/main/java/com/yandex/div/core/widget/DivViewWrapper.kt index 9d0f713eb..fa70c9858 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/widget/DivViewWrapper.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/widget/DivViewWrapper.kt @@ -1,10 +1,11 @@ package com.yandex.div.core.widget import android.content.Context +import android.os.Build import android.util.AttributeSet import android.view.View import android.view.ViewGroup.LayoutParams -import com.yandex.div.core.util.makeFocusable +import androidx.core.view.isEmpty import com.yandex.div.core.view2.BindingContext import com.yandex.div.core.view2.divs.widgets.DivBorderDrawer import com.yandex.div.core.view2.divs.widgets.DivBorderSupports @@ -26,15 +27,17 @@ internal open class DivViewWrapper @JvmOverloads constructor( ): FrameContainerLayout(context, attrs, defStyleAttr), DivBorderSupports, TransientView by TransientViewMixin() { val child: View? - get() = if (childCount == 0) null else getChildAt(0) + get() = if (isEmpty()) null else getChildAt(0) init { - makeFocusable() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + defaultFocusHighlightEnabled = false + } importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_NO } override fun addView(child: View?, index: Int, params: LayoutParams?) { - require(childCount == 0) { "ViewWrapper can host only one child view" } + require(isEmpty()) { "ViewWrapper can host only one child view" } super.addView(child, 0, params) } diff --git a/client/android/div/src/main/java/com/yandex/div/core/widget/ViewPager2Wrapper.kt b/client/android/div/src/main/java/com/yandex/div/core/widget/ViewPager2Wrapper.kt index 264a69fe9..99a689683 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/widget/ViewPager2Wrapper.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/widget/ViewPager2Wrapper.kt @@ -111,4 +111,6 @@ internal open class ViewPager2Wrapper @JvmOverloads constructor( } return maxValue } + + override fun getAccessibilityClassName() = "androidx.viewpager.widget.ViewPager" } diff --git a/client/android/div/src/main/java/com/yandex/div/internal/widget/SelectView.kt b/client/android/div/src/main/java/com/yandex/div/internal/widget/SelectView.kt index 2db3796d0..0e270f39a 100644 --- a/client/android/div/src/main/java/com/yandex/div/internal/widget/SelectView.kt +++ b/client/android/div/src/main/java/com/yandex/div/internal/widget/SelectView.kt @@ -3,7 +3,6 @@ package com.yandex.div.internal.widget import android.annotation.SuppressLint import android.content.Context import android.graphics.Color -import android.graphics.drawable.ColorDrawable import android.text.TextUtils import android.util.AttributeSet import android.view.View @@ -14,14 +13,15 @@ import android.widget.AbsListView.CHOICE_MODE_SINGLE import android.widget.BaseAdapter import android.widget.TextView import androidx.appcompat.widget.ListPopupWindow +import androidx.core.graphics.drawable.toDrawable import com.yandex.div.core.annotations.Mockable -import com.yandex.div.core.view2.divs.dpToPx import com.yandex.div.core.view2.divs.clearFocusOnClick +import com.yandex.div.core.view2.divs.dpToPx import com.yandex.div.core.view2.reuse.InputFocusTracker private const val POPUP_ITEM_HEIGHT = 48 -internal open class SelectView constructor(context: Context) : EllipsizedTextView(context) { +internal open class SelectView(context: Context) : EllipsizedTextView(context) { init { this.setOnClickListener { focusTracker?.let { tracker -> clearFocusOnClick(tracker) } @@ -45,7 +45,7 @@ internal open class SelectView constructor(context: Context) : EllipsizedTextVie } setOverlapAnchor(true) - setBackgroundDrawable(ColorDrawable(Color.WHITE)) + setBackgroundDrawable(Color.WHITE.toDrawable()) setAdapter(adapter) } @@ -87,6 +87,8 @@ internal open class SelectView constructor(context: Context) : EllipsizedTextVie info.text = text } + override fun getAccessibilityClassName() = "android.widget.Spinner" + @Mockable private class PopupWindow @JvmOverloads constructor( private val context: Context, diff --git a/client/android/div/src/main/java/com/yandex/div/internal/widget/TextViewWithAccessibleSpans.kt b/client/android/div/src/main/java/com/yandex/div/internal/widget/TextViewWithAccessibleSpans.kt index 65d81a9c2..703efc66d 100644 --- a/client/android/div/src/main/java/com/yandex/div/internal/widget/TextViewWithAccessibleSpans.kt +++ b/client/android/div/src/main/java/com/yandex/div/internal/widget/TextViewWithAccessibleSpans.kt @@ -28,7 +28,7 @@ internal open class TextViewWithAccessibleSpans( init { AccessibilityStateProvider.evaluateTouchModeEnabled(context) - if (AccessibilityStateProvider.touchModeEnabled == true) { + if (AccessibilityStateProvider.touchExplorationEnabled == true) { spanHelper = SpanHelper() ViewCompat.setAccessibilityDelegate(this, spanHelper) accessibilityLiveRegion = ACCESSIBILITY_LIVE_REGION_POLITE @@ -38,7 +38,7 @@ internal open class TextViewWithAccessibleSpans( } internal fun addImageSpan(span: ImageSpan) { - if (AccessibilityStateProvider.touchModeEnabled == true) { + if (AccessibilityStateProvider.touchExplorationEnabled == true) { imageSpans.add(span) if (span.accessibility?.contentDescription != null || span.accessibility?.onClickAction != null) { accessibleImageSpans.add(span) @@ -56,7 +56,7 @@ internal open class TextViewWithAccessibleSpans( } private fun evaluateAndSetContentDescription() { - if (AccessibilityStateProvider.touchModeEnabled != true) { + if (AccessibilityStateProvider.touchExplorationEnabled != true) { super.setContentDescription(_contentDescription) return } diff --git a/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderAccessibilityHelper.kt b/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderAccessibilityHelper.kt new file mode 100644 index 000000000..72d473448 --- /dev/null +++ b/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderAccessibilityHelper.kt @@ -0,0 +1,150 @@ +package com.yandex.div.internal.widget.slider + +import android.graphics.Rect +import android.os.Bundle +import android.view.View +import android.view.View.ACCESSIBILITY_LIVE_REGION_POLITE +import android.view.accessibility.AccessibilityEvent +import android.view.accessibility.AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_INT +import android.widget.SeekBar +import androidx.core.view.ViewCompat +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat +import androidx.customview.widget.ExploreByTouchHelper +import com.yandex.div.R +import com.yandex.div.internal.widget.slider.SliderView.Companion.boundsHeight +import com.yandex.div.internal.widget.slider.SliderView.Companion.boundsWidth +import com.yandex.div.internal.widget.slider.SliderView.Thumb +import kotlin.math.max +import kotlin.math.roundToInt + +private const val THUMB_VIRTUAL_VIEW_ID = 0 +private const val SECONDARY_THUMB_VIRTUAL_VIEW_ID = 1 + +/** + * Provides info about virtual view hierarchy for accessibility services. + */ +internal class SliderAccessibilityHelper(private val slider: SliderView) : ExploreByTouchHelper(slider) { + + private val bounds = Rect() + private val step get() = max(((slider.maxValue - slider.minValue) * 0.05).roundToInt(), 1) + + init { + ViewCompat.setAccessibilityDelegate(slider, this) + slider.accessibilityLiveRegion = ACCESSIBILITY_LIVE_REGION_POLITE + } + + override fun onInitializeAccessibilityNodeInfo(host: View, info: AccessibilityNodeInfoCompat) = Unit + + override fun getVirtualViewAt(x: Float, y: Float): Int { + if (x < slider.paddingLeft) return THUMB_VIRTUAL_VIEW_ID + + return when (slider.getClosestThumb(x.toInt())) { + Thumb.THUMB -> THUMB_VIRTUAL_VIEW_ID + Thumb.THUMB_SECONDARY -> SECONDARY_THUMB_VIRTUAL_VIEW_ID + } + } + + override fun getVisibleVirtualViews(virtualViewIds: MutableList) { + virtualViewIds.add(THUMB_VIRTUAL_VIEW_ID) + slider.thumbSecondaryValue?.let { + virtualViewIds.add(SECONDARY_THUMB_VIRTUAL_VIEW_ID) + } + } + + override fun onPopulateNodeForVirtualView( + virtualViewId: Int, + node: AccessibilityNodeInfoCompat + ) { + node.apply { + className = SeekBar::class.java.name + rangeInfo = AccessibilityNodeInfoCompat.RangeInfoCompat.obtain( + RANGE_TYPE_INT, + slider.minValue, + slider.maxValue, + virtualViewId.toThumbValue() + ) + + val description = StringBuilder() + slider.contentDescription?.let { description.append(it).append(",") } + description.append(startOrEndDescription(virtualViewId)) + contentDescription = description.toString() + + addAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_FORWARD) + addAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_BACKWARD) + + updateBounds(virtualViewId) + setBoundsInParent(bounds) + } + } + + override fun onPerformActionForVirtualView(virtualViewId: Int, action: Int, arguments: Bundle?): Boolean { + val value = when (action) { + android.R.id.accessibilityActionSetProgress -> { + if (arguments?.containsKey(AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE) != true) { + return false + } + arguments.getFloat(AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE) + } + + AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD -> virtualViewId.toThumbValue() + step + AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD -> virtualViewId.toThumbValue() - step + else -> return false + } + setThumbValue(virtualViewId, value) + return true + } + + private fun startOrEndDescription(virtualViewId: Int): String { + return when { + slider.thumbSecondaryValue == null -> "" + virtualViewId == THUMB_VIRTUAL_VIEW_ID -> slider.context.getString(R.string.div_slider_range_start) + virtualViewId == SECONDARY_THUMB_VIRTUAL_VIEW_ID -> slider.context.getString(R.string.div_slider_range_end) + else -> "" + } + } + + private fun updateBounds(index: Int) { + val width: Int + val height: Int + when (index) { + SECONDARY_THUMB_VIRTUAL_VIEW_ID -> { + width = slider.thumbSecondaryDrawable.boundsWidth + height = slider.thumbSecondaryDrawable.boundsHeight + } + else -> { + width = slider.thumbDrawable.boundsWidth + height = slider.thumbDrawable.boundsHeight + } + } + + val position = slider.getPositionInView(index.toThumbValue()) + bounds.apply { + left = position + right = position + width + top = (slider.height + slider.paddingTop - slider.paddingBottom - height) / 2 + bottom = (slider.height + slider.paddingTop - slider.paddingBottom + height) / 2 + } + } + + private fun setThumbValue(virtualViewId: Int, value: Float) { + slider.setValueToAccessibilityThumb(virtualViewId.toThumb(), value) + sendEventForVirtualView(virtualViewId, AccessibilityEvent.TYPE_VIEW_SELECTED) + invalidateVirtualView(virtualViewId) + } + + private fun Int.toThumb(): Thumb { + return when { + this == THUMB_VIRTUAL_VIEW_ID -> Thumb.THUMB + slider.thumbSecondaryValue != null -> Thumb.THUMB_SECONDARY + else -> Thumb.THUMB + } + } + + private fun Int.toThumbValue(): Float { + return if (this == THUMB_VIRTUAL_VIEW_ID) { + slider.thumbValue + } else { + slider.thumbSecondaryValue ?: slider.thumbValue + } + } +} diff --git a/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderThumbAnimatorListener.kt b/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderThumbAnimatorListener.kt new file mode 100644 index 000000000..6e21957c1 --- /dev/null +++ b/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderThumbAnimatorListener.kt @@ -0,0 +1,22 @@ +package com.yandex.div.internal.widget.slider + +import android.animation.Animator + +internal class SliderThumbAnimatorListener( + private val onAnimationEnd: (Boolean) -> Unit +) : Animator.AnimatorListener { + + private var hasCanceled = false + + override fun onAnimationEnd(animation: Animator) = onAnimationEnd(hasCanceled) + + override fun onAnimationCancel(animation: Animator) { + hasCanceled = true + } + + override fun onAnimationStart(animation: Animator) { + hasCanceled = false + } + + override fun onAnimationRepeat(animation: Animator) = Unit +} diff --git a/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderView.kt b/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderView.kt index 868c808d5..c2c631a20 100644 --- a/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderView.kt +++ b/client/android/div/src/main/java/com/yandex/div/internal/widget/slider/SliderView.kt @@ -1,6 +1,5 @@ package com.yandex.div.internal.widget.slider -import android.animation.Animator import android.animation.ValueAnimator import android.annotation.SuppressLint import android.content.Context @@ -8,21 +7,13 @@ import android.graphics.Canvas import android.graphics.Rect import android.graphics.Region import android.graphics.drawable.Drawable -import android.os.Bundle import android.util.AttributeSet import android.view.KeyEvent import android.view.MotionEvent import android.view.View import android.view.ViewConfiguration -import android.view.accessibility.AccessibilityEvent -import android.view.accessibility.AccessibilityNodeInfo.RangeInfo.RANGE_TYPE_INT import android.view.animation.AccelerateDecelerateInterpolator -import android.widget.SeekBar import androidx.annotation.Px -import androidx.core.view.ViewCompat -import androidx.core.view.accessibility.AccessibilityNodeInfoCompat -import androidx.customview.widget.ExploreByTouchHelper -import com.yandex.div.R import com.yandex.div.core.ObserverList import com.yandex.div.core.util.isLayoutRtl import com.yandex.div.internal.widget.slider.shapes.TextDrawable @@ -40,8 +31,6 @@ private const val UNSET_VALUE = -1 private const val DEFAULT_ANIMATION_DURATION = 300L private const val DEFAULT_ANIMATION_ENABLED = true private const val DEFAULT_INTERCEPTION_ANGLE = 45f -private const val THUMB_VIRTUAL_VIEW_ID = 0 -private const val SECONDARY_THUMB_VIRTUAL_VIEW_ID = 1 open class SliderView @JvmOverloads constructor( context: Context, @@ -70,56 +59,25 @@ open class SliderView @JvmOverloads constructor( } private var sliderAnimator: ValueAnimator? = null + private var prevThumbValue: Float = DEFAULT_MIN_VALUE private var sliderSecondaryAnimator: ValueAnimator? = null + private var prevThumbSecondaryValue: Float? = null - private val animatorListener = object : Animator.AnimatorListener { - - var prevThumbValue: Float = DEFAULT_MIN_VALUE - - private var hasCanceled = false - - override fun onAnimationEnd(animation: Animator) { - sliderAnimator = null - if (!hasCanceled) { - notifyThumbChangedListeners(prevThumbValue, thumbValue) - } + private val animatorListener = SliderThumbAnimatorListener { hasCanceled -> + sliderAnimator = null + if (!hasCanceled) { + notifyThumbChangedListeners(prevThumbValue, thumbValue) } - - override fun onAnimationCancel(animation: Animator) { - hasCanceled = true - } - - override fun onAnimationStart(animation: Animator) { - hasCanceled = false - } - - override fun onAnimationRepeat(animation: Animator) = Unit } - private val animatorSecondaryListener = object : Animator.AnimatorListener { - var prevThumbSecondaryValue: Float? = null - - private var hasCanceled = false - - override fun onAnimationEnd(animation: Animator) { - sliderSecondaryAnimator = null - if (!hasCanceled) { - notifyThumbSecondaryChangedListeners( - prevThumbSecondaryValue, - thumbSecondaryValue - ) - } + private val animatorSecondaryListener = SliderThumbAnimatorListener { hasCanceled -> + sliderSecondaryAnimator = null + if (!hasCanceled) { + notifyThumbSecondaryChangedListeners( + prevThumbSecondaryValue, + thumbSecondaryValue + ) } - - override fun onAnimationCancel(animation: Animator) { - hasCanceled = true - } - - override fun onAnimationStart(animation: Animator) { - hasCanceled = false - } - - override fun onAnimationRepeat(animation: Animator) = Unit } val ranges = mutableListOf() @@ -138,7 +96,7 @@ open class SliderView @JvmOverloads constructor( * This allows the basic animation effects (alpha, scale, translate, rotate) to be accelerated, * decelerated, repeated, etc. */ - var animationInterpolator = AccelerateDecelerateInterpolator() + private var animationInterpolator = AccelerateDecelerateInterpolator() /** * Animation enabled flag. @@ -240,7 +198,7 @@ open class SliderView @JvmOverloads constructor( if (thumbValue == newValue) return if (animated && animationEnabled) { if (sliderAnimator == null) { - animatorListener.prevThumbValue = thumbValue + prevThumbValue = thumbValue } sliderAnimator?.cancel() sliderAnimator = ValueAnimator.ofFloat(thumbValue, newValue).apply { @@ -257,9 +215,9 @@ open class SliderView @JvmOverloads constructor( sliderAnimator?.cancel() } if (forced || sliderAnimator == null) { - animatorListener.prevThumbValue = thumbValue + prevThumbValue = thumbValue thumbValue = newValue - notifyThumbChangedListeners(animatorListener.prevThumbValue, thumbValue) + notifyThumbChangedListeners(prevThumbValue, thumbValue) } } invalidate() @@ -277,7 +235,7 @@ open class SliderView @JvmOverloads constructor( /** * The appearance of thumb text. - * Returns [null] if doesn't exist. + * Returns null if doesn't exist. */ var thumbTextDrawable: TextDrawable? = null set(drawable) { @@ -287,21 +245,16 @@ open class SliderView @JvmOverloads constructor( /** * The value of thumb secondary. Should be in range from [minValue] to [maxValue]. - * Returns [null] if doesn't exist. + * Returns null if doesn't exist. */ var thumbSecondaryValue: Float? = null private set - private val a11yHelper: A11yHelper = A11yHelper(this) - - init { - ViewCompat.setAccessibilityDelegate(this, a11yHelper) - accessibilityLiveRegion = ACCESSIBILITY_LIVE_REGION_POLITE - } + private val a11yHelper = SliderAccessibilityHelper(this) /** * Set the value of thumb secondary. - * @param value should be in range from [minValue] to [maxValue] or be [null] + * @param value should be in range from [minValue] to [maxValue] or be null * @param animated change value with animation */ fun setThumbSecondaryValue(value: Float?, animated: Boolean = animationEnabled) { @@ -310,7 +263,7 @@ open class SliderView @JvmOverloads constructor( /** * Tries to set the value of thumb secondary. - * @param value should be in range from [minValue] to [maxValue] or be [null] + * @param value should be in range from [minValue] to [maxValue] or be null * @param animated change value with animation * @param forced if [animated] is false and [forced] is true, * then value will be set regardless of the running animation @@ -324,7 +277,7 @@ open class SliderView @JvmOverloads constructor( if (thumbSecondaryValue == newValue) return if (animated && animationEnabled && thumbSecondaryValue != null && newValue != null) { if (sliderSecondaryAnimator == null) { - animatorSecondaryListener.prevThumbSecondaryValue = thumbSecondaryValue + prevThumbSecondaryValue = thumbSecondaryValue } sliderSecondaryAnimator?.cancel() sliderSecondaryAnimator = ValueAnimator.ofFloat(thumbSecondaryValue!!, newValue).apply { @@ -341,10 +294,10 @@ open class SliderView @JvmOverloads constructor( sliderSecondaryAnimator?.cancel() } if (forced || sliderSecondaryAnimator == null) { - animatorSecondaryListener.prevThumbSecondaryValue = thumbSecondaryValue + prevThumbSecondaryValue = thumbSecondaryValue thumbSecondaryValue = newValue notifyThumbSecondaryChangedListeners( - animatorSecondaryListener.prevThumbSecondaryValue, + prevThumbSecondaryValue, thumbSecondaryValue ) } @@ -354,7 +307,7 @@ open class SliderView @JvmOverloads constructor( /** * The appearance of thumb secondary. - * Returns [null] if doesn't exist. + * Returns null if doesn't exist. */ var thumbSecondaryDrawable: Drawable? = null set(value) { @@ -365,7 +318,7 @@ open class SliderView @JvmOverloads constructor( /** * The appearance of thumb secondary text. - * Returns [null] if doesn't exist. + * Returns null if doesn't exist. */ var thumbSecondTextDrawable: TextDrawable? = null set(drawable) { @@ -393,10 +346,6 @@ open class SliderView @JvmOverloads constructor( listeners.addObserver(listener) } - fun removeOnChangedListener(listener: ChangedListener) { - listeners.removeObserver(listener) - } - fun clearOnThumbChangedListener() = listeners.clear() override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { @@ -441,10 +390,6 @@ open class SliderView @JvmOverloads constructor( return maxOf(thumbHeight, trackHeight, rangesHeight) } - private val Drawable?.boundsWidth get() = this?.bounds?.width() ?: 0 - - private val Drawable?.boundsHeight get() = this?.bounds?.height() ?: 0 - override fun getSuggestedMinimumWidth(): Int { val tickCount = (maxValue - minValue + 1).toInt() @@ -592,7 +537,7 @@ open class SliderView @JvmOverloads constructor( return false } - private fun getClosestThumb(position: Int): Thumb { + internal fun getClosestThumb(position: Int): Thumb { if (!isThumbSecondaryEnabled()) { return Thumb.THUMB } @@ -618,6 +563,9 @@ open class SliderView @JvmOverloads constructor( return a11yHelper.dispatchKeyEvent(event) || super.dispatchKeyEvent(event) } + internal fun setValueToAccessibilityThumb(thumb: Thumb, value: Float) = + setValueToThumb(thumb, value.inBoarders(), animated = false, forced = true) + private fun setValueToThumb(thumb: Thumb, value: Float, animated: Boolean, forced: Boolean = false) = when (thumb) { Thumb.THUMB -> trySetThumbValue(value, animated, forced) @@ -683,6 +631,8 @@ open class SliderView @JvmOverloads constructor( interpolator = animationInterpolator } + internal fun getPositionInView(thumbValue: Float) = thumbValue.toPosition() + paddingLeft + /** * Calculates slider active range presented by two values, where start <= end. * If there is only one thumb then its value will be considered as the end of the range. @@ -714,7 +664,7 @@ open class SliderView @JvmOverloads constructor( } } - private enum class Thumb { + internal enum class Thumb { THUMB, THUMB_SECONDARY } @@ -732,114 +682,9 @@ open class SliderView @JvmOverloads constructor( @Px var endPosition = 0 } - /** - * Provides info about virtual view hierarchy for accessibility services. - */ - private inner class A11yHelper(private val slider: SliderView) : ExploreByTouchHelper(slider) { - private val bounds = Rect() - private val step get() = max(((maxValue - minValue) * 0.05).roundToInt(), 1) + internal companion object { + val Drawable?.boundsWidth get() = this?.bounds?.width() ?: 0 - override fun getVirtualViewAt(x: Float, y: Float): Int { - if (x < leftPaddingOffset) { - return THUMB_VIRTUAL_VIEW_ID - } - val position = when (getClosestThumb(x.toInt())) { - Thumb.THUMB -> THUMB_VIRTUAL_VIEW_ID - Thumb.THUMB_SECONDARY -> SECONDARY_THUMB_VIRTUAL_VIEW_ID - } - return position - } - - override fun getVisibleVirtualViews(virtualViewIds: MutableList) { - virtualViewIds.add(THUMB_VIRTUAL_VIEW_ID) - if (thumbSecondaryValue != null) virtualViewIds.add(SECONDARY_THUMB_VIRTUAL_VIEW_ID) - } - - override fun onPopulateNodeForVirtualView( - virtualViewId: Int, - node: AccessibilityNodeInfoCompat - ) { - node.className = SeekBar::class.java.name - node.rangeInfo = AccessibilityNodeInfoCompat.RangeInfoCompat.obtain( - RANGE_TYPE_INT, minValue, maxValue, virtualViewId.toThumbValue() - ) - val contentDescription = StringBuilder() - slider.contentDescription?.let { - contentDescription.append(it).append(",") - } - contentDescription.append(startOrEndDescription(virtualViewId)) - node.contentDescription = contentDescription.toString() - node.addAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_FORWARD) - node.addAction(AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_BACKWARD) - - updateBounds(virtualViewId) - node.setBoundsInParent(bounds) - } - - override fun onPerformActionForVirtualView(virtualViewId: Int, action: Int, arguments: Bundle?): Boolean { - when (action) { - android.R.id.accessibilityActionSetProgress -> { - if (arguments == null || !arguments.containsKey(AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE)) { - return false - } - val value = arguments.getFloat(AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE) - setThumbValue(virtualViewId, value) - } - - AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD -> - setThumbValue(virtualViewId, virtualViewId.toThumbValue() + step) - AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD -> - setThumbValue(virtualViewId, virtualViewId.toThumbValue() - step) - else -> return false - } - return true - } - - private fun startOrEndDescription(virtualViewId: Int): String { - return when { - thumbSecondaryValue == null -> "" - virtualViewId == THUMB_VIRTUAL_VIEW_ID -> context.getString(R.string.div_slider_range_start) - virtualViewId == SECONDARY_THUMB_VIRTUAL_VIEW_ID -> context.getString(R.string.div_slider_range_end) - else -> "" - } - } - - private fun updateBounds(index: Int) { - val width: Int - val height: Int - when (index) { - SECONDARY_THUMB_VIRTUAL_VIEW_ID -> { - width = thumbSecondaryDrawable.boundsWidth - height = thumbSecondaryDrawable.boundsHeight - } - else -> { - width = thumbDrawable.boundsWidth - height = thumbDrawable.boundsHeight - } - } - - val position = index.toThumbValue().toPosition() + slider.paddingLeft - bounds.left = position - bounds.right = position + width - bounds.top = slider.height / 2 - height / 2 - bounds.bottom = slider.height / 2 + height / 2 - } - - private fun setThumbValue(virtualViewId: Int, value: Float) { - setValueToThumb(virtualViewId.toThumb(), value.inBoarders(), animated = false, forced = true) - sendEventForVirtualView(virtualViewId, AccessibilityEvent.TYPE_VIEW_SELECTED) - invalidateVirtualView(virtualViewId) - } - - private fun Int.toThumb(): Thumb = when { - this == THUMB_VIRTUAL_VIEW_ID -> Thumb.THUMB - thumbSecondaryValue != null -> Thumb.THUMB_SECONDARY - else -> Thumb.THUMB - } - - private fun Int.toThumbValue(): Float = when { - this == THUMB_VIRTUAL_VIEW_ID -> thumbValue - else -> thumbSecondaryValue ?: thumbValue - } + val Drawable?.boundsHeight get() = this?.bounds?.height() ?: 0 } } diff --git a/client/android/div/src/main/java/com/yandex/div/internal/widget/tabs/TabView.java b/client/android/div/src/main/java/com/yandex/div/internal/widget/tabs/TabView.java index 369caf580..c6f51eb3a 100644 --- a/client/android/div/src/main/java/com/yandex/div/internal/widget/tabs/TabView.java +++ b/client/android/div/src/main/java/com/yandex/div/internal/widget/tabs/TabView.java @@ -12,9 +12,6 @@ import android.text.TextUtils; import android.text.method.TransformationMethod; import android.util.AttributeSet; import android.view.Gravity; -import android.view.View; -import android.view.accessibility.AccessibilityEvent; -import android.view.accessibility.AccessibilityNodeInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -146,10 +143,6 @@ public final class TabView extends SuperLineHeightTextView { if (mBoldTextOnSelection && changed) { setupTypeface(); } - - if (changed && selected) { - sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); - } } private void setupTypeface() { @@ -178,19 +171,9 @@ public final class TabView extends SuperLineHeightTextView { } @Override - public void onInitializeAccessibilityEvent(AccessibilityEvent event) { - super.onInitializeAccessibilityEvent(event); - // This view masquerades as an action bar tab. + public CharSequence getAccessibilityClassName() { //noinspection deprecation - event.setClassName(ActionBar.Tab.class.getName()); - } - - @Override - public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { - super.onInitializeAccessibilityNodeInfo(info); - // This view masquerades as an action bar tab. - //noinspection deprecation - info.setClassName(ActionBar.Tab.class.getName()); + return ActionBar.Tab.class.getName(); } /** diff --git a/client/android/div/src/main/java/com/yandex/div/internal/widget/tabs/TabsLayout.kt b/client/android/div/src/main/java/com/yandex/div/internal/widget/tabs/TabsLayout.kt index 4d25cada0..71cdfc3d8 100644 --- a/client/android/div/src/main/java/com/yandex/div/internal/widget/tabs/TabsLayout.kt +++ b/client/android/div/src/main/java/com/yandex/div/internal/widget/tabs/TabsLayout.kt @@ -84,4 +84,6 @@ internal open class TabsLayout @JvmOverloads constructor( bottomMargin = resources.getDimensionPixelSize(R.dimen.title_tab_title_margin_vertical) } } + + override fun getAccessibilityClassName() = "android.widget.TabWidget" } diff --git a/client/android/div/src/main/res/values/ids.xml b/client/android/div/src/main/res/values/ids.xml index 54cbeb674..d1890b407 100644 --- a/client/android/div/src/main/res/values/ids.xml +++ b/client/android/div/src/main/res/values/ids.xml @@ -30,7 +30,6 @@ - diff --git a/client/android/div/src/test/java/com/yandex/div/core/view2/TypeAutoAccessibilityTest.kt b/client/android/div/src/test/java/com/yandex/div/core/view2/TypeAutoAccessibilityTest.kt new file mode 100644 index 000000000..cff5f3ef2 --- /dev/null +++ b/client/android/div/src/test/java/com/yandex/div/core/view2/TypeAutoAccessibilityTest.kt @@ -0,0 +1,77 @@ +package com.yandex.div.core.view2 + +import android.app.Activity +import android.view.View +import com.yandex.div.DivDataTag +import com.yandex.div.core.Div2Context +import com.yandex.div.core.DivConfiguration +import com.yandex.div.core.images.DivImageDownloadCallback +import com.yandex.div.core.images.DivImageLoader +import com.yandex.div.core.images.LoadReference +import com.yandex.div.core.util.AccessibilityStateProvider +import com.yandex.div.core.view2.divs.UnitTestData +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.robolectric.Robolectric +import org.robolectric.RobolectricTestRunner + +@RunWith(RobolectricTestRunner::class) +class TypeAutoAccessibilityTest { + + private val activity = Robolectric.buildActivity(Activity::class.java).get() + private val imageLoader = mock { + on { loadImage(any(), any()) } doReturn LoadReference { } + } + private val divContext = Div2Context(activity, DivConfiguration.Builder(imageLoader).build()) + private val data = UnitTestData("accessibility", "auto_types.json", "regression_test_data").dataWithTemplates + private val divView: Div2View + + init { + AccessibilityStateProvider.touchExplorationEnabled = true + divView = Div2View(divContext) + divView.setData(data, DivDataTag("tag")) + } + + @Test + fun `text is important for accessibility`() { + checkViewIsImportantForAccessibility("text") + } + + @Test + fun `input is important for accessibility`() { + checkViewIsImportantForAccessibility("input") + } + + @Test + fun `select is important for accessibility`() { + checkViewIsImportantForAccessibility("select") + } + + @Test + fun `image with description is important for accessibility`() { + checkViewIsImportantForAccessibility("image with description") + } + + @Test + fun `image without action or description is not important for accessibility`() { + checkViewIsImportantForAccessibility("image", isImportant = false) + } + + @Test + fun `slider is important for accessibility`() { + checkViewIsImportantForAccessibility("slider") + } + + @Test + fun `separator is not important for accessibility`() { + checkViewIsImportantForAccessibility("separator", isImportant = false) + } + + private fun checkViewIsImportantForAccessibility(tag: String, isImportant: Boolean = true) { + Assert.assertEquals(isImportant, divView.findViewWithTag(tag)?.isImportantForAccessibility) + } +} diff --git a/client/android/div/src/test/java/com/yandex/div/core/view2/divs/Assertions.kt b/client/android/div/src/test/java/com/yandex/div/core/view2/divs/Assertions.kt index 2244e955f..250bb8740 100644 --- a/client/android/div/src/test/java/com/yandex/div/core/view2/divs/Assertions.kt +++ b/client/android/div/src/test/java/com/yandex/div/core/view2/divs/Assertions.kt @@ -25,7 +25,6 @@ internal fun assertActionApplied(context: BindingContext, target: View, actionUr pressStartActions = anyOrNull(), pressEndActions = anyOrNull(), actionAnimation = any(), - accessibility = anyOrNull(), captureFocusOnAction = any(), ) diff --git a/client/android/div/src/test/java/com/yandex/div/core/view2/divs/DivBinderTest.kt b/client/android/div/src/test/java/com/yandex/div/core/view2/divs/DivBinderTest.kt index cf55e23e2..3ef33dbaa 100644 --- a/client/android/div/src/test/java/com/yandex/div/core/view2/divs/DivBinderTest.kt +++ b/client/android/div/src/test/java/com/yandex/div/core/view2/divs/DivBinderTest.kt @@ -33,7 +33,8 @@ import org.robolectric.RuntimeEnvironment open class DivBinderTest { internal val actionBinder = mock { - on { bindDivActions(any(), any(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), any(), anyOrNull(), any()) }.thenCallRealMethod() + on { bindDivActions(any(), any(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), + anyOrNull(), any(), any()) }.thenCallRealMethod() } private val mockComponent = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) { on { actionBinder } doReturn actionBinder @@ -83,6 +84,7 @@ open class DivBinderTest { private val viewIdProvider = DivViewIdProvider() + @Suppress("unused") private val viewComponent = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) { on { viewIdProvider } doReturn viewIdProvider on { releaseViewVisitor } doReturn visitor diff --git a/client/android/div/src/test/java/com/yandex/div/core/view2/divs/DivViewMocks.kt b/client/android/div/src/test/java/com/yandex/div/core/view2/divs/DivViewMocks.kt index d6bfc89a5..47f93092e 100644 --- a/client/android/div/src/test/java/com/yandex/div/core/view2/divs/DivViewMocks.kt +++ b/client/android/div/src/test/java/com/yandex/div/core/view2/divs/DivViewMocks.kt @@ -38,7 +38,8 @@ internal fun divView( ) val actionBinder = mock { - on { bindDivActions(any(), any(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), any(), anyOrNull(), any()) }.thenCallRealMethod() + on { bindDivActions(any(), any(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), anyOrNull(), + anyOrNull(), any(), any()) }.thenCallRealMethod() } val component = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) { diff --git a/client/android/div/src/test/java/com/yandex/div/core/view2/divs/UnitTestData.kt b/client/android/div/src/test/java/com/yandex/div/core/view2/divs/UnitTestData.kt index aacc9d3c2..8077ba95d 100644 --- a/client/android/div/src/test/java/com/yandex/div/core/view2/divs/UnitTestData.kt +++ b/client/android/div/src/test/java/com/yandex/div/core/view2/divs/UnitTestData.kt @@ -12,6 +12,7 @@ import java.io.File class UnitTestData( private val dir: String, private val fileName: String, + private val testDataDir: String = "unit_test_data" ) { val data: DivData @@ -21,7 +22,7 @@ class UnitTestData( val div: Div get() { if (_div == null) { - val path = "${BuildConfig.DIV2_JSON_PATH}/unit_test_data/$dir/$fileName" + val path = "${BuildConfig.DIV2_JSON_PATH}/$testDataDir/$dir/$fileName" val jsonString = File(path).readText(Charsets.UTF_8) val json = JSONObject(jsonString) val environment = DivParsingEnvironment(ParsingErrorLogger.LOG) @@ -32,7 +33,7 @@ class UnitTestData( val dataWithTemplates: DivData get() { - val path = "${BuildConfig.DIV2_JSON_PATH}/unit_test_data/$dir/$fileName" + val path = "${BuildConfig.DIV2_JSON_PATH}/$testDataDir/$dir/$fileName" val jsonString = File(path).readText(Charsets.UTF_8) val json = JSONObject(jsonString) val templates = json.getJSONObject("templates") @@ -46,7 +47,7 @@ class UnitTestData( val patchWithTemplates: DivPatch get() { - val path = "${BuildConfig.DIV2_JSON_PATH}/unit_test_data/$dir/$fileName" + val path = "${BuildConfig.DIV2_JSON_PATH}/$testDataDir/$dir/$fileName" val jsonString = File(path).readText(Charsets.UTF_8) val json = JSONObject(jsonString) val templates = json.getJSONObject("templates") diff --git a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/DivFocusableInputTest.kt b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/DivFocusableInputTest.kt index b4c21c51e..4e6f2959b 100644 --- a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/DivFocusableInputTest.kt +++ b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/DivFocusableInputTest.kt @@ -10,7 +10,7 @@ import org.junit.Test class DivFocusableInputTest { - private val activityTestRule = ActivityTestRule(DummyActivity::class.java) + private val activityTestRule = ActivityTestRule(DummyActivity::class.java, true) @get:Rule val rule = uiTestRule { activityTestRule } diff --git a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/DivInputKeyboardTypeTest.kt b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/DivInputKeyboardTypeTest.kt index 1c4f349ea..252145cc6 100644 --- a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/DivInputKeyboardTypeTest.kt +++ b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/DivInputKeyboardTypeTest.kt @@ -7,13 +7,15 @@ import com.yandex.divkit.demo.DummyActivity import org.junit.Rule import org.junit.Test -private const val TEXT_BEFORE_BREAK = "https://Text_with different+symbols(123)@site.ru" -internal const val TEXT_WITH_DIFFERENT_SYMBOLS = "$TEXT_BEFORE_BREAK\nsecond_line" -internal const val SEARCH_KEY_TAPPED = "Search key tapped!" +internal const val TEXT_WITH_DIFFERENT_SYMBOLS = + "https://Text_with different\nsymbols+(123)@site.ru" + +private const val TEXT_WITHOUT_BREAK = "https://Text_with differentsymbols+(123)@site.ru" +private const val SEARCH_KEY_TAPPED = "Search key tapped!" class DivInputKeyboardTypeTest { - private val activityRule = ActivityTestRule(DummyActivity::class.java) + private val activityRule = ActivityTestRule(DummyActivity::class.java, true) @get:Rule val rule = uiTestRule { activityRule } @@ -30,7 +32,7 @@ class DivInputKeyboardTypeTest { fun checkSingleLineText() { checkType( type = "single_line_text", - expectedText = TEXT_BEFORE_BREAK + expectedText = TEXT_WITHOUT_BREAK ) } @@ -72,7 +74,7 @@ class DivInputKeyboardTypeTest { fun checkEmail() { checkType( type = "email", - expectedText = TEXT_BEFORE_BREAK + expectedText = TEXT_WITHOUT_BREAK ) } @@ -80,7 +82,7 @@ class DivInputKeyboardTypeTest { fun checkUri() { checkType( type = "uri", - expectedText = TEXT_BEFORE_BREAK + expectedText = TEXT_WITHOUT_BREAK ) } diff --git a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/TypeAutoAccessibilityTest.kt b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/TypeAutoAccessibilityTest.kt deleted file mode 100644 index 8be7553ae..000000000 --- a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/TypeAutoAccessibilityTest.kt +++ /dev/null @@ -1,88 +0,0 @@ -package com.yandex.div - -import androidx.test.rule.ActivityTestRule -import com.yandex.div.rule.uiTestRule -import com.yandex.div.steps.accessibility -import com.yandex.divkit.demo.DummyActivity -import org.junit.Before -import org.junit.Rule -import org.junit.Test - -class TypeAutoAccessibilityTest { - private val activityTestRule = ActivityTestRule(DummyActivity::class.java) - - @get:Rule - val rule = uiTestRule { activityTestRule } - - @Before - fun buildContainer() { - accessibility { - testAsset = "regression_test_data/accessibility/auto_types.json" - activityTestRule.buildContainer() - } - } - - @Test - fun checkTextHasCorrectClassnameAndFocusable() { - accessibility { - assert { - checkTextIsFocusable() - } - } - } - - @Test - fun checkInputHasCorrectClassnameAndFocusable() { - accessibility { - assert { - checkInputIsFocusable() - } - } - } - - @Test - fun checkSelectHasCorrectClassnameAndFocusable() { - accessibility { - assert { - checkSelectIsFocusable() - } - } - } - - @Test - fun checkImageWithDescriptionHasCorrectClassnameAndFocusable() { - accessibility { - assert { - checkImageWithDescriptionIsFocusable() - } - } - } - - @Test - fun checkImageWithoutActionOrDescriptionHasNoClassnameAndNotFocusable() { - accessibility { - assert { - checkImageWithoutDescriptionIsNotFocusable() - } - } - } - - @Test - fun checkSliderHasCorrectClassnameAndNotFocusable() { - accessibility { - assert { - // slider itself should be to focusable, only it's thumbs are focusable - checkSliderIsNotFocusable() - } - } - } - - @Test - fun checkSeparatorHasNoClassnameAndNotFocusable() { - accessibility { - assert { - checkSeparatorIsNotFocusable() - } - } - } -} diff --git a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/ActivityParamsTestRule.kt b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/ActivityParamsTestRule.kt index 7355c40b7..157e4eb8e 100644 --- a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/ActivityParamsTestRule.kt +++ b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/rule/ActivityParamsTestRule.kt @@ -11,7 +11,7 @@ open class ActivityParamsTestRule( launchActivity: Boolean = true, private val action: String? = null, private val params: Bundle? = null -) : IntentsTestRule(activityClass, false, launchActivity) { +) : IntentsTestRule(activityClass, true, launchActivity) { constructor(activityClass: Class, vararg params: Pair) : this( activityClass = activityClass, diff --git a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/SliderViews.kt b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/SliderViews.kt index a7ff1005c..7082a9574 100644 --- a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/SliderViews.kt +++ b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/SliderViews.kt @@ -1,26 +1,39 @@ package com.yandex.div.steps import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.ViewInteraction import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom -import androidx.test.espresso.matcher.ViewMatchers.withContentDescription +import androidx.test.espresso.matcher.ViewMatchers.withTagValue import com.yandex.div.internal.widget.slider.SliderView import org.hamcrest.Matchers.allOf +import org.hamcrest.Matchers.equalTo object SliderViews { - val commonSlider get() = onView(isAssignableFrom(SliderView::class.java)) - val defaultSlider get() = onView(allOf(withContentDescription("Default slider"), - isAssignableFrom(SliderView::class.java))) + val commonSlider: ViewInteraction get() = onView(isAssignableFrom(SliderView::class.java)) - val max10Slider get() = onView(allOf(withContentDescription("Min - 0, max - 10"), - isAssignableFrom(SliderView::class.java))) + val defaultSlider: ViewInteraction get() = onView(allOf( + withTagValue(equalTo("default_slider")), + isAssignableFrom(SliderView::class.java)) + ) - val max3Slider get() = onView(allOf(withContentDescription("Min - 0, max - 3"), - isAssignableFrom(SliderView::class.java))) + val max10Slider: ViewInteraction get() = onView(allOf( + withTagValue(equalTo("min_0_max_10")), + isAssignableFrom(SliderView::class.java)) + ) - val doubleDefaultSlider get() = onView(allOf(withContentDescription("Double without ticks"), - isAssignableFrom(SliderView::class.java))) + val max3Slider: ViewInteraction get() = onView(allOf( + withTagValue(equalTo("min_0_max_3")), + isAssignableFrom(SliderView::class.java)) + ) - val doubleWithDivisionsSlider get() = onView(allOf(withContentDescription("Double with ticks"), - isAssignableFrom(SliderView::class.java))) + val doubleDefaultSlider: ViewInteraction get() = onView(allOf( + withTagValue(equalTo("double_without_ticks")), + isAssignableFrom(SliderView::class.java)) + ) + + val doubleWithDivisionsSlider: ViewInteraction get() = onView(allOf( + withTagValue(equalTo("double_with_ticks")), + isAssignableFrom(SliderView::class.java)) + ) } diff --git a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/TypeAutoAccessibilitySteps.kt b/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/TypeAutoAccessibilitySteps.kt deleted file mode 100644 index 42f0714ef..000000000 --- a/client/android/divkit-demo-app/src/androidTest/java/com/yandex/div/steps/TypeAutoAccessibilitySteps.kt +++ /dev/null @@ -1,79 +0,0 @@ -package com.yandex.div.steps - -import android.view.ViewGroup -import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.ViewInteraction -import androidx.test.espresso.assertion.ViewAssertions.matches -import androidx.test.espresso.matcher.ViewMatchers.isFocusable -import androidx.test.espresso.matcher.ViewMatchers.isNotFocusable -import androidx.test.espresso.matcher.ViewMatchers.withTagValue -import androidx.test.rule.ActivityTestRule -import com.yandex.test.util.Report.step -import com.yandex.test.util.StepsDsl -import org.hamcrest.Matchers.`is` - -private const val TEXT_ID = "text" -private const val INPUT_ID = "input" -private const val SELECT_ID = "select" -private const val IMAGE_ID = "image" -private const val IMAGE_WITH_DESCRIPTION_ID = "image with description" -private const val SLIDER_ID = "slider" -private const val SEPARATOR_ID = "separator" - -private val textView get() = getViewWithId(TEXT_ID) -private val inputView get() = getViewWithId(INPUT_ID) -private val selectView get() = getViewWithId(SELECT_ID) -private val imageView get() = getViewWithId(IMAGE_ID) -private val imageWithDescriptionView get() = getViewWithId(IMAGE_WITH_DESCRIPTION_ID) -private val sliderView get() = getViewWithId(SLIDER_ID) -private val separatorView get() = getViewWithId(SEPARATOR_ID) - -internal fun accessibility(f: TypeAutoAccessibilitySteps.() -> Unit) = f(TypeAutoAccessibilitySteps()) - -@StepsDsl -internal class TypeAutoAccessibilitySteps: DivTestAssetSteps() { - - fun ActivityTestRule<*>.buildContainer(): Unit = step("Build container") { - buildContainer(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) - } - - internal fun assert(f: TypeAutoAccessibilityAssertions.() -> Unit) = f(TypeAutoAccessibilityAssertions()) -} - -@StepsDsl -internal class TypeAutoAccessibilityAssertions { - - fun checkTextIsFocusable(): Unit = step("Check text view is focusable ") { - textView.checkFocusable() - } - fun checkInputIsFocusable(): Unit = step("Check input view is focusable ") { - inputView.checkFocusable() - } - fun checkSelectIsFocusable(): Unit = step("Check select view is focusable ") { - selectView.checkFocusable() - } - fun checkImageWithDescriptionIsFocusable(): Unit = - step("Check image with description is focusable ") { - imageWithDescriptionView.checkFocusable() - } - fun checkSeparatorIsNotFocusable(): Unit = step("Check separator is not focusable") { - separatorView.checkNotFocusable() - } - fun checkImageWithoutDescriptionIsNotFocusable(): Unit = - step("Check image without description is not focusable") { - imageView.checkNotFocusable() - } - fun checkSliderIsNotFocusable(): Unit = step("Check slider is not focusable") { - sliderView.checkNotFocusable() // only it's virtual view should be focusable - } - - private fun ViewInteraction.checkFocusable(): Unit { - check(matches(isFocusable())) - } - - private fun ViewInteraction.checkNotFocusable(): Unit { - check(matches(isNotFocusable())) - } -} - -private fun getViewWithId(id: String) = onView(withTagValue(`is`(id))) diff --git a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/screenshot/DivScreenshotActivity.kt b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/screenshot/DivScreenshotActivity.kt index cf894a2b0..cabc5473f 100644 --- a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/screenshot/DivScreenshotActivity.kt +++ b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/screenshot/DivScreenshotActivity.kt @@ -4,17 +4,15 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter +import android.os.Build import android.os.Bundle import android.text.InputType import android.view.View import android.view.ViewGroup -import android.view.ViewGroup.FOCUS_BEFORE_DESCENDANTS import android.widget.EditText import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.view.children -import androidx.core.view.descendants -import androidx.recyclerview.widget.RecyclerView import com.yandex.div.core.Div2Context import com.yandex.div.core.view2.Div2View import com.yandex.divkit.demo.R @@ -76,8 +74,8 @@ class DivScreenshotActivity : AppCompatActivity() { ViewGroup.LayoutParams.MATCH_PARENT else ViewGroup.LayoutParams.WRAP_CONTENT layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, divViewHeight) id = R.id.morda_screenshot_div + removeAutofocusForOldApis() hideCursor() - focusRecyclersBeforeDescendants() } applyConfiguration(divView) setContentView(divView) @@ -85,6 +83,12 @@ class DivScreenshotActivity : AppCompatActivity() { fun getTestCaseJson() = assetReader.read(cardAssetName) + private fun View.removeAutofocusForOldApis() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) { + isFocusableInTouchMode = true + } + } + private fun ViewGroup.hideCursor() { for (child in children) { if (child is EditText) { @@ -96,14 +100,6 @@ class DivScreenshotActivity : AppCompatActivity() { } } - private fun ViewGroup.focusRecyclersBeforeDescendants() { - descendants.forEach { - if (it is RecyclerView) { - it.descendantFocusability = FOCUS_BEFORE_DESCENDANTS - } - } - } - private fun applyConfiguration(view: View) { val divJson = getTestCaseJson() val configuration = if (divJson.has("configuration")) { diff --git a/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/Div2FocusScreenshotTest.kt b/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/Div2FocusScreenshotTest.kt index 5c0b36710..837cadb7e 100644 --- a/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/Div2FocusScreenshotTest.kt +++ b/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/Div2FocusScreenshotTest.kt @@ -31,11 +31,11 @@ class Div2FocusScreenshotTest(case: String, escapedCase: String) { @Test @Screenshot(viewId = R.id.morda_screenshot_div, relativePath = "not_focused") - fun divScreenshotTopFocused() = Unit + fun divScreenshotNotFocused() = Unit @Test @Screenshot(viewId = R.id.morda_screenshot_div, relativePath = "focused") - fun divScreenshotBottomFocused() { + fun divScreenshotFocused() { divFocus { clickOnTopInput() } } diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png index 7c0e21f5f97481380d78992264623a35b7eb1bbf..38d38a5927dbdec398951f0b329b5b12098ce209 100644 GIT binary patch delta 2074 zcmV+#2<7+k6Y~?0G=Hi|L_t(|obBCxj9gV2$MN5DXJ%WvpgX%N5n5j`yfi2;t{}~# z+3mfvZc|GkFd9Hor5axm0s$dl2nmu9#8ln{jD{K{klG+NIPLD8?S?mnkS11*NGq*c zK&Wt6Oj(zixyL{DE*X|>_ic7(+Wmf#&Ca>!+;g5Y+2lTZ<^$d{5|P25kC=+7g<;rU%f0~smn5XbR5R%*)Sa!nJdiTYo;a%FaSc=*Jm?zw@1fq&N{ z&RUx6oa*ghi4y?kyN12sO+{~iZ|^Qiw@CVrq;>uM{ePd!{)dN$+a*0N>G5;rD&tKT^`gW_FIGV9NPr0*ofZ-rs_lX1o~-}fIevsGrcr>Uvw zq@kgq*6GFx0GNC8ZG~fhK`xi;FthDuc9W#jG;&cqOwvitxf{~y^fO69GUtLII5Uc( zosu@1*_S09tC3`Ak)>b894R^?iSx8Z221f?#Pjo82yHy`-}w9VKajq$L_jKsE+J zu(`9d^YH5PGMUV^lKzntZ%Lly8Qb?oX0}R_;yC`=qmMos&E8CZ006ULz9k&TJLeve z^nnAkIo9*M8|EsYF;3IS1^R%@?9yB=clI2_Gbuq393$yTNheIuv^$+n-(P*8P$;|+ z$MH9kVsoWZxmQ)mR4$i0O45&$;@!n!adVBr1^~>V`Ic~;C8^EKo{@BRDwR4algTVh zr_&#mbn|E<=iC>6^Z9&gqR#sJ`~Mb(p-IYB9X>k@L#z6k%94Ib(nd)aJLgW$WHRr~ zX0z#i`}QsJJa4I_+pA*y(iHlgv}w-i7m~6`T>WOYvRp2IFq_RTD3{AiBwZ-!FG<_g zxm?a4GiJd#cYktzE|<%#9j$ZD-6g5TIk!8L$$W2yaRLB;>g14lN@WTjN~hCn3WdUO z)v?`@t`35rT~Z*a<@MKJZ;|xcTm}|~;hmE17^iAT(sPo&8w5eOq~j$moy*wvCkTR0 zjogzWNxy7uZC$fr!-h&#lRc6i@O^)aneC92bPvQh2n(HE6U<*+%5shXRxfpgC% zFAqOp!@09E`R(F3zIIHq@wQ^I_?o1rlH$Ae%P15Id!2KaB*h~nt#{7dmXz1+??zbw zz`AehW)M~`=~SS&si1i|@|R!izk4)5?h@48yV3IM2|`Ic}rwC?WiB~cVTBI(oy z$tNacX4841C*EI0I-S0(TrRI3Eqk7K#etGU0KmavzI~+9u=4qQDvslgl1{C6EK@X{ z%;=RB{Z*99<@2h`aU8FiM*jeS2Ez(RgOlwABY!lAS0x>1W_$Yj`eyX)w_RObCrbK3 zQhY_yk&@2!egC{-vG}VQ#t8tZBUU&XgqcM|vB-vQ8V#NY8 zJEcAmj?c`tNs@DJags1hOFo}(N~KckB{ezc9!sawXGr>QGR7Ug@3++^VgNurkZ{zP zbAN8(bk2+8c){rFR4VnZoiy|Le5zC`{ZNzG7_8O~G^a|X^7cktp6A`RYSpSm6ZO~G z+4;V)#|8%nua?vU*{dETuvi4y=&Uwoue1JzHrc%HYmr>E!X zy?gh**w)sz*g1DfUtizD6ZK(cdq!VZDjk(uySlnAUAS=J&Qhtg&^dQ{6h+ra>YBY- zywhZpD+gK%#d{9`n0>5p)W(yK2Ni$OWID)XGFvsW!IvcYsZ{DurBdmCk_OGJS0l+r zWM&V}#stPOsX1-fu%VLddO8~WQZu{H^SqtS&CPE{QB+Rm@CQlvNIJ86kY&r39p-u7 zdX4-oKH1vZdS_L&GqbNt+9ye7cF&3xE8a7mH~|3lMZ!@7#bWU_Gg~*4J_>(@!d^+2 z9iYjeb8e+`?$46soSX2YiXy@uTHUI$gmDT0ipRUKCiM#7KHj%+_7&M~)1MfzZDEV%AjsO4v07*qoM6N<$ Ef-%l3i2wiq delta 2092 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 AqW}N^ delta 2088 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
=f5`uUtle3c+hU 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 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-input/without-text.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2ScreenshotTest/div-input/without-text.png index d5348a0ea8e4b2a182a5cc3e863e560e0f8ffecd..826edb38bbab35cde82cfe54c905b314f28e7b5f 100644 GIT binary patch delta 2548 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 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png index 1eedd015d68b5434f95b5e40abd8d287beb2f876..080cefb03666383843274fa464bd4c2830bf12e7 100644 GIT binary patch delta 292 zcmX>me@uSE8ov5DU&|Mq|90Pjf#JvfM|>s>3@QQ_7#JovI50CfFfsBnFmSTaQm~$G iHet6&2JF$M|Ln3KUvIIPJ5!1Q2s~Z=T-G@yGywoWn>7>w delta 59 zcmX>me@uSE8a@e*3bP0l+XkKlj;^_ diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png index ebae68b9340ea1011aeeda4bf935b0bfe5d184be..d47a854d52362eb2f3c899aac5f33bdd2f31c294 100644 GIT binary patch delta 292 zcmX>me@uSE8ov5DU&|Mq|90Pjf#JvfM|>s>3@QQ_7#JovI50CfFfsBnFmSTaQm~$G hHet6&2JF$M|Ln4#UvFvQQ*B}Z0#8>zmvv4FO#nO)G{*n{ delta 59 zcmX>me@uSE8a@e*3bP0l+XkKk@6No diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png deleted file mode 100644 index ababc8a6a84b4d364651500808bb400ee053ccca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10327 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 Y*MIoj9eWAX6arR1*nMAf$>aY21A(({CjbBd diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-input/without-text.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2ScreenshotTest/div-input/without-text.png index 57c7bb6fafd4924d9cce9096a5204c426dc9ce1d..a4abe52eb62c70fc77e4391c3076a3ed46ba9928 100644 GIT binary patch literal 6759 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 literal 6766 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 UtO%pMdnDlM6&s5(bMHU?3ugVd<^TWy diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png index ffee01c26deb3aeaf48ed1f025db1153ec5e9d7d..8e773c4b38ce3a5f1fcd58602ebd75ca580e05aa 100644 GIT binary patch delta 40 ucmbO%(<3v%gz@l3Q%l~7hub6~JpS?Dl49;;EZZEx00f?{elF{r5}E)dRt=v3 delta 52 zcmeB?nJhEGgz?lyQ%hd12oI493=9P#A{QneY?3_S`RYG|$$jQt%eU%93_#%N>gTe~ HDWM4f;?fd4 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png index d1ec5ac985cf3b6e4391cb63b1d34274924a5ce4..ec56b4cdf9c45b8322fbb255a02c3c6a2f17460e 100644 GIT binary patch delta 40 vcmbOt(gTe~ HDWM4f<|7hn diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png deleted file mode 100644 index 2a924a4449ad45dbd3bde0eeb335fcde73823088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8713 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 CYkqeC literal 5236 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 OapCM0hnh3De*OpY@^}pZ diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png index e7718e74b2558680a8cf07ff4bd74f231e435bbc..f821b3b42ca92385d7179bd4bcc27b2cd325f782 100644 GIT binary patch delta 59 zcmeB{@0Q{b?7bXAz delta 61 zcmeB{@0Q&9dsX;+W@d&1*SobR&*!@~Ie}kXWOCc%OFD5a QCm4Xh)78&qol`;+07x(t2LJ#7 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png index 45e39c095f7e6ef9008782480da848de28a64e31..00a7740203ac5f6ee4e8b33c3a0290e1ac7c7dd7 100644 GIT binary patch delta 59 zcmeB{@0QyVb@0Scf;OXk; Jvd$@?2>{f|7hnJY delta 61 zcmeB{@0Q&9dsX;+W@d&1*SobR&*!@~Ie}kXWOB#jOKWya QVPgOSPgg&ebxsLQ08FA3F#rGn diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png deleted file mode 100644 index 6fddc38d12e076bd662352a78a49e3d6132dfc56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10313 zcmd^lX;@Ng+x8+$Yp1!Zr_@ZXox^VDP!5oqL$%A))XH+6+Rg)zBROKDyV5L7Nl~$~ zY)~mpO+hd%4d)@n5i)Q@Awfk%;9KrzfA6v1Ki}`?cs~DluvqKnzSn)-=XIXvb=^7V zXru7co}T~!P_RAo`vm~l&k$VpA{uT4Y^Twe?M= ze(gowF!h-mcYpD)j!!?K@vrm07Hzmb>d{zca{KzJPY;0F{G0gmCXd#;Qr>%leBgkHE&aOX?nMIin0`JF{r zJ$wBReqQ=@A^F|%hg;k8O&`Sb2PQu-2ZCB3Jycg{__AjKsE=@u>NI8YZyBVw-Q9J- zbO(?(6p+O#&Kj6p?89#_zNRqnr|h(l-!kEh--Fk(KOMFac<(>_o|SG?NZq1Ssy6ck zkSA{6(v4z_VV#}S@a*!+i!w!6wJQzQmV(+~!|;KZZVH)y7oMo%1KMm26>Ug`pr z53H_YgnT^pT}xhuEL6V9LvD4kuVw0_#*RWrGv?Yg)=7;$_&z5MtKO3k<=stC84DzR z#VhJgvM117Q5#L0e0r}?W#%#<|LXFVZW|2?%dNXNcLA!`58QXdwdwDCdhK2K7w36W ze4|mr?SPNhBXeP0QQQ3H_VflMuFmAZfrvl#YXkC4dKw;^1k5ZS@>Rj|J9idBpckhK zVEVqoyKLa_vOIOqG?B|`Q%^j54ld&-L!)6w6WDuVpI$o>c;qRR&DQdM9cTr++cH3m8v&K+-pP$7>PCZKq~P+xwC@Q14}9QuDhGJ*Q5?qgOMPW_x}R<34kz&>itK>5OMLmF;>s*;%wRFj)Nb+7#w z;9Se!pKLUie%WlTM%z||jon*>zxq_Q3Gh4leHgM>0gl_6J*F%RsP6dtYdP7vBk}-L zbA9AW{BQrgu<&1scK>n9I()fU4tU$5P90Cv5zS@Iy?0(mSQgdR*S8`nke6nqDWK!L zV$Me`d_G{|0YGCm#N4{E&91!mMI^3X;E1RTz1l2O&-r#EtIyG%zW5?wbRRygo~1Pr zJ_655)7V`EQI6jbgH@1EU))>-%a3*8Jn_#JY0YyCW5xIL~s?UCFRIbYOh3j(#+=$Uhb4IAuw{5Xf`3x9ozv+*L$@$&- zXZ1hq6ZT|cPTj+V_F)Q8jzL|Hg-KCg(zXB&Te`iqt(#WW;@n=bN5AyD>e#5~>iSCN z1UUu<6YO##;!K(xpvS))hIMa*uxq+3Gcpal^V)HOwIA}pvxmS~U{KLzarIdB!UA4m z9KYBzuCf(~IRUQ2sQYb-a|zUvd}aJcx(r|zs1SoKL&~le-N5+Yw~b?13|&qO;IS%1 z!@LP9T8fJ5vY=Mca`f(MppypE&fc1@J~Rbh%Th7Il-1}@MSuSk(EmDMsDky-rqxtD z)P-r&SCvGYp%A=*8g2AiOW=S&%ith#t}v-0eSUc)ODd4I4&Lr#QP*cYES{RX#n09x za`M(b`)Z0fI1(?LDivB$Rf6TEM}ZIrUo;wRb8nlrL*8K7yYvJ(wMSmj4ooN^B{qtY zJV6nR!A$w>yx>Y)31-JW{aQ`oC!JZ#)|4L~14;^Htt4Wuj?Lbl1T>1_tv`K3*rFh)G4c4Bz^1C@%6^wXmnd(yvMv6$6*DiW=JbbN=wx0M!Nj-uoIk$< zFXl>@D0VYsm!{|oK>-wD2MaCbaxy}TGbZ^#!P;m6 zD$xC0StJvqnDSQGY+Ud69#5E(opyF|&?mk9`a!lxu({iNSqFU~NXD}uR=vI0ma0T? zYXq8*-1@9T1l{lfV(4Uh#qlqt?gavq*f4i)(r{>jAeKiB96Cvuy~Q^Pv=j2{xq8Ti z;rJ$*hUtCQsG(rXzWPjm9Yb)TWwr=74&n7t!E>64tHlzyAwqtStk|YW%E@uZH?7)ykVNQL2_tCi+UiO-G!zPGczsC zgnd?Ubg4m%R7@QT#x5W!$tr#Mrc_&&bpOh$%=Sb1H$EDwu?3W${P06PAoJ>{U zFopMp{vP^ywjX4#P=+|-p5D#rCr}iEKh#c0))UeN9&GOSdpN1NGE6_7M)Y7KlO2yf zxp*h!bCaSDMF=7d4lyioyX|RENN7<%guLo#_6kv{37l4f)U|<-HYe-Kq*3%WCZI;a zj*0$HO+<5jD_7BIcYiOYhUAH`bTUQMza;c3D`$95&6KEWaNnQn*_*n%kLUI|WYc?1Sdta8^d&91g` zrf-Bz%vS9jt{;b=oJfKk#(?i9QOq7m94$ zW>C<~H~st7fb3zpwWEH@qGM!DM4<`n!(9lDyY(YRgO=w8T1zZw9HI^(9*hgYsDE;z z-qhCAhngU=e0@c2v2+nUhF9C(x2%gNvI)LY0S<2A<$UB@rsUV5sJ4NTn(&v0?!NCs zSHj=vIM_K_)t7gH$k}Wnq(r>s+xf4r>l7HW=p|R`d7G+%xbL4>*SF@S4cMrwB&mK2 zT6*SLa0_?LRLDVPl~sq8iT(06t!jeVx`!sMp^TBZ0*X~U+tZWHE#T_TC9yrr zmRkN=+P@$Po6qJw@=A*2jVrK(3N+&Myi>pm#dVS7p&Pgssi)NCroSjlO_lO7M+{4^rj=&i16W; zTIT&`xSQ4bEBVD*@u36Mw$lP8>?dF{(Z_}oxrS{d=KXbs$Dh(c(R24ko#B&R%IwIC z&p&3?T-g4N#K&yfim8ombGYD%$epY4jT()lUUJm}_1W6wD;GWYUJ{F*ZyG4OkSfz! zfmMq;L+9lfs-oNUCRWZYN{70%yN>mJ0E5XMJVh)WD_hGS*P<$i--iZ@=MI)=!bTq? z3EMi@2?Bu*UU-%XHJ$_`WQTV8BG8O632*(J^em%LOy>}>1V^tp_b9>G4GjvXZpTg4 z+@tT39*xbm3>B;{5pZ%m7fVA8j)Xw5tX<Zu5vV17rea;1nA=kM1yQIY78f+^2RZ4l5pMYT%ti^-+%4$9R1yu#D5RzH>?O!p(K6V7}EgpZV%a$&;6lp?95G zq{M{s%28F-19fVO78h4*)M8NJX_tpV>h6J*k+_LGWkL1Nj2)o8zVtk=<@%?l!Vwc-J;>N&FrOaja$|0 zsup?qN4bmqE)Ah1i`8S(rVy58krh*g&$an1>hs?kFj`a%$vMju$wH>R$u%weI(~j%3AS}_ zWw4Gp*UPRJ{{H-yflMnOJBD{6oR@*rlrH&>#dn?t({=j;E)iKFUZy@eNPU6JY2bZz zo_HoO=lqJhIC_;i%|;ifp>*-v=4yk5YRLN7gIUnXKMqDOf7&^5yEBoicU;_SZ|>W9 zQj|~VDWfn7r>&7YKtZ#8gK_s8-ErVQ!I|3$x`*lT#JPuiQ?6EYSyCO%wQ$J7vxWJK zOIo0JhF&=t#jU5FQqofLJ=Xhd6Am3Ce*&vxqh`|k3;>kP5Wf_MTMA6aRRCoXc=LBq zzc@Rp%$x@Rc?(Eh`N{}IZ7t|HkoxY^o)EL;+b~Tz^+D2D<1OkYB~7c<^A#cI4dEUY z{7&lJ5H-tboA59Ms5_DR!XM=4vu3cUrGDx|8|^l%m8gEA&0bi?E?4axhX66zieoc_ zmLg+Ia!jZplFn~30;~x;ie?6@N1&FHKD;(a^N#sL0Oha^#%egTs)dDHThoH~0zlJ8 za30Y3C??Y$8z(ib8PPYLd>rsULW=qL=n;_NxmWAPvmUYv6ES$PZtYwJYoUc`bw3tV z4kmAXrK?f?EEmsg*ltz$BYAmEv6#Bk=~3>Aocfs*37^$#pT&^GO*b2RNmx!8D=9yK z=H1q185=hAG`Y_q3nW&%4q>$HF=^^{oO+m$hIWu}rB%gpsr3GJAGq6AE=${CZoqAN zyQ|lE#NN4_H1*%Eeb^eKcztEn**w#fXkLDG}8V`WDdKCwP9 zF*MSPr77RwnO@fGHyBVXvL-L-a}$s{>iSwaYeF zA-TmI!zMV9m#Ze*9P>asl~p~0;U?(}At}pYe#i>jEfnc0VV$lAGgTaof*!RV^j-TS zaoqGEMOqu3rHc3!c^4?cZthM`NaTQ=lCf~V6BeF(^hi8I)S8ZbmOFS_vP#GTlM$`H zyz<>K)Y<6Cm=eMhsQ>9)Dg!O$EW#rHcqO+DsQ*1R=;BBsm(_YGOD%31K`{!>nb=tw z)NjGTOAeZ{OAQlA`|B2ao9*pDGi{%>Q5d|^VM~N(#1UgL<@+uwih?7}1(sDw*%Zh7 zRw*IPy<06M3jsA_rxX4K9Ohjd_xoxlU7Iv{VQ!L~z#Z3xk#vxOpd9R!l=G{&c z$fqXLW|KW zO_huhc#R>Bq5DXtAw<*KdHzQeUMc{EjrHF4&=M`Y$ZIS*KOwA_M*Gmw=cJ=kaPf86 zF&exkn-JaQ;COVu=~RAmcuq@(J(vnV$}Apf(L`Q7$v?tCqj^shwXB5Hdzlu(0N$Yg zbN!`Vu8+9&YZFvCt3lPa6M5n_P<*d8@%=zUKOe{M3{NS9_`QE8n|D6AGvAOo^d--P znn>q=|FL$0KZQ-Li-R-cL|i<`cvmwEqU@M0+Eg{vBZX4~N`-R#5r%ef{=>Be4VcvQ z^ssbABO_BfLaCy0#R46{7>(`^@hb)+$}D;ciqBpfreV0rger+X`6!sjn&HhE_VlH4 zB{aG@eX^1ODj7Sb#cD`6GyVyfwa80l%j)J{d3wI_Ox1O)IJ{?lq>ceSfdD%u3R`Qk zGREJcBPmK~?w<$p7;|yLi9p!|-NdnM`wz+rR?@FSit04Z|lVXf)EM z_RbEVc?Sd>jpnV&c<@*gHP-LL5RCR6{TY-I@sbfFdO4Ah6v(v1>K?oVYpw%zy}iSp z{&o)g5b{La(1ftn>Wrs&-Uj0Q)Z+{7`U-xG&{Wi z$JT7BVoEpNzh(?74@qWO5n{Yje0;VjmOI7_%WpyA9;@DUI9pd)aP#AM2q_~zAP3!nH>dc^J8 zY|EBBUr9wo4F98|HjFV!I_77@O+oQ9q5(hS^Dp%e*D;J)r@H_5)z~b;ZTGz^g*6%XbgrC8OIdyM@d#1cma01smE;MQF zRf*jz;?!!FG-B;Bwq6(H+{?{IE^Di_zysL_GIe*s;s&2QdS@=01JTw)bn$XBZV+e) z(Xuvr4Kgt(GbCVL;*9-M;_$zlbd}8=UXciB8G)sqq@%*+nsx7}6ibhvVyQAh)*kCs zD;K_lSi{ys77RuvGfP{m1n)zedR3y$%v%emNLH25$dA`qxxss^IP*v(+J%%G#J-1v zoAJHSi#F68&p2pd+_7ah9$jFGzLBRChVnKC(l>%3I5omRsPAQfz*dHYmr+pU$|RGD zAO~IE{zQitfvMI zV&@o2F{QLmbvxv*h%$qXU4#yW1T@}ceZOb#{r$9rXOKlmsS?idce%=wK>;s)x8R=@ zkZI8>znpK{F;ZSRkwayOz1_`tuIMTWv|~V#GJEOyp3?^s=P#v{fX>nCpic-R+5U4z z5c2mup~fO{n$>%T0U%$aJ@R|QmzBBTw$rN27DakcWe0|Uwh-Qf~VlArrA(>Ed1eFN_{%$O65^~SKv5BY-8m-AHD$LlxehzeUC4~u=R zRvDCiSkw%&^u(=7L^Q^fjH0I8-tLw7E^`CWZ*tJDEgroo9Q3EAt5Dl>L1n2Wr~WwN z{duOP$2;-zMBg=M$Ac8XJp)9tPV-4cJu9xCtVjs)Gu~08l3o6n#$ioAQ>|gM4}B~> ze>8mZ-zp~(=ajV0qx0l?BAI3yUD4hsZ&0sgjGWDP%c*={SNz<$G8jv!>~ciZo2+X< zv{X)uLfQNpmGV9sLmhWj}SaHUo{Kc^Mt^mrF%}Ffk}+NJ08r+3`upn4=Su9??Mh?%xu`;{ZLR~9BD{C-YD}J2Gn?C z%G&{X#c*)29DTi|n>ct-Z#hV1#FQ%{&PR}*M192m(I4l> zT;PcqHG&n!+T>@G3Uiag5AvfO-TnVf4!(*e4B8NAhR|_pqSJ+-4{MmO7u-XsMfB$e z=TtUA@w7JmMVOL7?a;Dz|C6pvWqJ`B2Ge5uT zdzlBBH2PQwL-!R({({EEn>HGHuz#s1gz%Ue*d>yQOX;sLi27AO(7>&#u8%nY(p}Jw z%+cBhV|WEQhwFK|y!M!@N4+xZ{qpqG^QT{KDOFpF>i?2c*f4E&3f(cMX^o}x+>0Sy z!#{8Tc6ZlOa;cX)V%wO1W`!6AEIuVmBoe5;xGT>%^pBe64SFMyEv(1>7z=?e>@&PR zw)PeL`=<*zoI5(L9Vh|aGsns+A@m>@dNHWO?*6fg2o-XlV_@IIgU)sncR(}x(wjoH zzGOl6ZwIj6IbdB?>h-s@!on*`9QC>?qXJ*0E;PtIPp8Ak=k2Byva$80Ywe&T&eHBueSuOv?nM3ulhKQ{^5U>&nIyxe`O%zjF)+;&p>1!k>Q^ z>doiA{i9Id^|&YFGVpePf;j)F)U79j4k(91hcx4- zpY-P%1{T|F=*|UiaLUEx$6#_d0RvpHALXa6hR5AiD$~X7C%7d3C$LOXrVdfw`oh6p z{c6LU(P3x|T-NMhWp{A?!dVz`qo4dyW_s|=V88b1S@}h?w7rJ=Y2GEj$N^M{oIGea zUZR7&8TsU_yMGf2Z4qpCsWI6%BiL9`kNaDd-}EZvfJ}a9{knGG1%RKm!|)a zPd7ceqbQ3t=uewuWnG#82G12F@rL&%mj1hCWXJufJQy+w>@N8dWd=O!9<2?J?m1<7 zXJhk={fgbTQHwpyO22DAE4rP*lh5mXVDwt8~9_aeI3oXe#i-Ybs02J-)d!dDw zt{K&?hT)0<)xyiZjSDA0b8IT#$kKPE@k6QG5zGNdQ7-7ZI+}&T9j(N<>rE@qAj&ES z)Qf1KuTcB#dSvbN(@6IZZ;{1mG7ZuH=ra1Lvq2X5b>s9@9oUSr_Dzln`X9-S#toZu zO{4dL`|+TL6bPSeSBb^`l)ByMH<`s~J)cpmCt{|p0JS_p7J)VFRo?WoEle^SQ$hz=H8uoa&dkq4hX5cnh$NW@W&ZvUKfb+JAd{+5ZED b*U)a~#LB_SYrlg1cYy6F$KT6O_+9@$5|RZo diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png deleted file mode 100644 index 340cccb99b7ac4515d2d93030ad14ed693a52e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10483 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 delta 942 zcmV;f15y03F}pF4Gy!t4HH;H~9?<#Bj{pFG{bDb)W9El&=ukBxB34&3KNJ7}_NZnn zHrp{vBcB7E%jKfcXmotu{4!QR`r(H+BA<_V z@x?=8v?d_4N-Vk|Be;<@LJ zj_Ys$0N5v(7yCZs>(>OAl1D((3TM_-(V^<;~;+bb|w;Bfk z04=Ml`FQ4;+an_4vB$2o;<*{n5jXK1=8$lZp0H$T#WPQi}B=> zC&zI}008U*Pd<4v&Yv&F6Hi=>yYFs9p-_m4iHV+(=W&igk366Q+h0hNI2G=H&QBYT zMx)X3QLooKKC0DfRIAmfR4P#}m*cPg>X!JMzuAoE`T1%*^2k!0K7BRrzke-Go-D`A zOnqF34gkOqt*+){VWAXnyfGawy>u{MeDP2$E*2sp;)y3Nw&pxHr*5>5K5sV)Jq}|J z=;ohWMRdJhk4mM|3h8&>&Bfn;|NX)Ehkuxlx?TnVxGClH5syB)7>_-6HNNtdMk}0) z#bQr5XFUgctN|UdeMGnay;iG5tyXJ|N?*HHkDvTxGG2XkI^KF~D$boN#nMtiR09C) zGx>bPp+nWU^UiYIci(z^>sxE_JHNBhx=BiNx<>nyjrJ+PS;lij1_2#^v2{du|JfbW z-Om94VE<}gj;?uKT)%nF-G62o&k+%YvF|Z9UudJz=y<{Te7^Nqyvspiej(i*%~{5CM8*Lf(SIbmJ*2y*YY1lm zfSXHq2W}V4S;uq49th}&=$NL_@0-&8n1BWVxViM3(%b#`UI^!=JrU4N{X)8ZG`jsc z007*4wuATUi`)Z05BSRz5VuNK)2iL-#`EWK40>YzIqn$e-YDnxGDyt Q3jhEB07*qoM6N<$f~fP?jsO4v diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png index ffee01c26deb3aeaf48ed1f025db1153ec5e9d7d..8e773c4b38ce3a5f1fcd58602ebd75ca580e05aa 100644 GIT binary patch delta 40 ucmbO%(<3v%gz@l3Q%l~7hub6~JpS?Dl49;;EZZEx00f?{elF{r5}E)dRt=v3 delta 52 zcmeB?nJhEGgz?lyQ%hd12oI493=9P#A{QneY?3_S`RYG|$$jQt%eU%93_#%N>gTe~ HDWM4f;?fd4 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png index d1ec5ac985cf3b6e4391cb63b1d34274924a5ce4..ec56b4cdf9c45b8322fbb255a02c3c6a2f17460e 100644 GIT binary patch delta 40 vcmbOt(gTe~ HDWM4f<|7hn diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png deleted file mode 100644 index 2a924a4449ad45dbd3bde0eeb335fcde73823088..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8713 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 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png index d2954faf48d10243b9923eeee8b32c4df2ebf579..de5c11355a2cb748df804281828e89b74fec0440 100644 GIT binary patch delta 2041 zcmc&x`&W_)0^Mv^8_Q+d8O5|B&ozI$gS8|**bJFZ>rGchmDiV%~sleA{lZ_5# znu=q|NmoY`O+g;{>Lk7a(eMGIf(rQ-M?nR7eA~`B`!~$}@!oUKz2{!p$c_og4)cpa zr%zwTHk$jGnOP?k_?w}>%#^Z|e(uu-_F!40I*Lq>*_|n3a?GmX07b7#@1i06=0{yq z#8`OgWE0M~(I-{EpHV*j#CB7!C#u_|Sl=7O%r73|elB6b?@&(hmr4)ajTX>Zx&emNEY-TZS4ET#ZLz@LArZ3OYTp9VGJ|^k`$T@XHK6vEeNy zz%3k5HdLA;xFSSd^VMQXt9PCa6U?8_Frwm_lHYFv#P{YXj#<5D`WUo>o zhAG9u9oEVVEgqmJSgTE~1?}7)=r{m>aRdpQO!;oG3}PZ(5LIO5c^7$THwIs#Zw~cu zXJ=}Kjc3n&j0Ri#4D;pIe?@JWY-T9N;vg?=cgR{w=8xCaaD~plX5V*6 zTb7sdzhO!(EuD3EW=U^S3-Gs)79!4197-tTduU*n%*&{|Jrl;8bL_!%pwse*x}cQ5 z85Lc*3T0a&=rQqQFsH{EShz+(Fp76d29QnlGmGAz`lC2x9RxIKSLHxt1XD6+44J#X zgfjNg*d&cePFyQW?!vrF3eSQf3td(#GuutY5RTC_>6m60v)^dSuX1*JOa!@ab9(A3 zZR=r#G9iw-3y>KWs;9B00mf9%Vq@MF>B8$b!MJ>#!X>NVP0~+1vKK02(lz-r4O3z6 z;Ow+$S9Q(eo4Yfll)b-_o65Yf)1V>nUxh}zVXnKOnJsrJ*x*OOzn2$H&AbXNqsj79 zG!cEzXue+8iMbq@>z}Iz1ySf3BDK!F>P+#l&;~+YAZISQz-~2Ko4H-4Fvx zv;gg{=AzgGGp)%*#~YQN!PaaWh#>VPGl>4-pL#H{gzC_#UuHN~lfVwAlpRojQGe@< zbX)8ipC;;xXlC8R)Gs|3#w7oPIhJ=2;ee0Yh@tw2^xh-F3FBdp0;b;4>((!4AAVK| zd{D_B_#lSQ%JyG0%l2!wm7}MDdBE1>rK^N#MtpuRP-dJ+Lk9eO1YXR8Hzqaf^igbsW7vkK$Fg zYF|<0=8NL2t2$nHlhCG*a-=N~lMBLI2Q^*N_q3dS`9Y&K0`)0~9em`SW=I(oUX|W^ zX#9SCTf!|s^=7QL)h*m1TCq^qk;GHII{-DzHu!o|kt+(;u`xkF1Q+lhOD*kX+#QQD z+b}&@G#blNl96v?1YY4!UE2<<7W$3eGE&+&mS~z)z;|iqRXuS}S{{Q8(V&K(dQ873 zz_%*4tzDPxR4-X(?9HJ?&^OjLZRNV#l>YNdg`+rC1lcFG)Z?A0!X+ycA$!<#uQ=U7 zi?+H0x497kbM*(p(*%O{Q}d~=Vq-H!Xn%cVs`KLN`CXBXP3!;RY(a7J-)qi?-X`9z z+4(4zivBl;fr(B?0rMtV(U>RptwdLs=M&8LI!vwYi-8C^ikpt-;(Ld!VCRer-&*WZ zNC~3oqv9b|;8{IZ*gf3b)u2$u<<{JEysd9KC%U!30Fv1*&PVS_Pctgak;uQ3dPs5G zN7~beu<(Yq(VhmDYAZLV9_H`c*j#wR9&O)!KMQ5#S-?zdD{kl;LE})2B1Y*AYPB>Z zF~+o*ZMfUO@uTDLF8Qs;XWyEM9g}chao&_=0sa7OeMQ1 zjFiSr-H5+5G}(7h5`XPS9sY!4A~%kp;}ygmU@RTXMsFHuX_3{s8DWpgnaTg*h+Mzo z6ph!NBKeS|YkF0)8Ws2gkV8RMJZTeHqa}d@BekGm?0uYRCv(WmVK+dW1?L#L5|GBn iT=^3K{0W)=j~oGM{~O`>p*>mwDEfNU4MbM>{N=x(FGpwq delta 2044 zcmc(b|2xx*0>{tc#-XlNC)GpQS+{bplcVJ_(b|=JsDnDuAzw1X(6KG02%AqG$5l;+ z9fmz?IU1Gkrp*}gb`N1!{(Yibp-}=%cKz|!gFr) zM3M;SN|!Yf3>!k8x^wCs<+IyY9Fm}J8^@gvC8mGKEEK zZcW6b{{X6T^X$s=v+&*aPbiR-L%G=jLS0iE*Gd)P<)zt~@V1^W99-*TR>`9v? z*7FG8JBI<&^(-?)^B|(X-v;~pI&<(O2rXh5)f6t_)ao6X#zR#~134~lw2%%%4_2_m zo|k7cZW`1mMH)^w!H7H1BwaFRTo=S~@h0@vIwUS^yw+cB^l?JA$W#6 zeIS-Sj&p^r78IKQf}UW5P5i+2=DXDdATeMB1y!W~FeHb7q>F>f%)Hhjx2=sK2Kvg| z{y(yHTLY`U=Vz24U#Ooeu>MPg+PHVB#*}u>eLajESVav!o35K%=M{L=JZtWDs?5Fv zOIc9RMFjS^rKOWDkzMi%pPsnQzm-Jr6kkYYh}`thK(j}s+fT+yTOQECRN$SZy;@8c zX)w{OWg5p4Q4@1@6Y6*`Ey{IWnQRc7j@6=?YNy_}e%^nY3uqyracfxt#D}xTmJR;1 zk8LABA(KN|A5;)mIoEqtckp4EG*lscnWbwt(jZ)e(K&ee#49(A;fOyvbf?y6kz{=# z)E6F(T5zY!{<#a_YsK*HaXkauNg0WTRW*uS&?OUx)dHoNJzBau+i;V=-h!XnJr`%c z<4i=zI~TtOtBAQCbJd~qU_A2HSQn_J_&ew(w+0_#Zs9w^j?UA%anpAlJ6T>#zFXUo z*)d*0IjSVyCYF%-pXE1;OIq9cV~;`(EpEXy4Vk#xz?nX6HyO7rWCN`Tc-RQd=RlQA({vsp67nrthgIj57plHnxqUGGbN zNNE+?6y7HeLr($Xt3FE|d1;)Vif6g6W7*Ge9N{8dI^*x+_~7IkGa;a&ypdwZIsOFa zSbI4ijw0yRL^0y0SlS}bDIwq}mrrT|wx{^skmn}$B$KHA%7sr6^8pnp4fu<1LJMKG zw?Y*NZ^t+ipD^RRy~+kc)Y1SjQlIZ=l&+i+?~BXMaELv7G^FyxAOsmRb_wkFp=RSt zRIp5(X^W=xzJb>fQMV??W#v4K<65TdXa$qQSESv4EJPY}D3a&lh<(>rf!$XSxI?1h zE7=zBbRN$)H`51u4bzSAc^tBTJ(({t3n6bHG%^Pw$#u^^WS%@I6S;KAD9Z2>J4v1` zAoggBi#Aj$D5p7!E%p9;Mq0zDpf#E}TkhiEl~1YjlOR#Jm~R)l+u~j85L?oN0Xn5j zmGuE|;g4UAzfO9!6Tr*h&N@h$MCi9^>*{(f=BLcBecQZXcY25Wsd72GxlGjHg)Cbw zV_Df0VKN#f`b!@^8!&h!OL9w2Vpi6KJwM)1n9b5_q7vPcNa>TR&dDxVAcE*-sN8<= zcut%YNn!cMNK%m4eLCRnT_6Qzb{E(WztXC=l z<4S|J3aSxz%FP;DI(yHqbv^mmQ`xQ&07U(y0?_hwl!;npU`6dcd2tI?h4B&(25}ng zfM|!J^p`h7wY&HJtzO_~&xDZKz(GPmz30N6&a5n|bFlCl^Fu$3ax3k%?X`%F$p=BB zLDhEp+Zh&BS9PP`1x5>RD}RH;sk;$#ysjXG+p5*R+LZ)5p4Pxm9Ljs_9&|YTMvbQD z*Fu*ARMGxmKlbk&M4xT1<0VD0Pb8!SP*`9x$983s#ZTij;ggaq^*UmI&`(V1Ggqk(RxY6#yBVdIEL2XI-?qG?qM)zzcqnv2gW{vvyD74 pIEZCG{}TlK3C#Z^KY`z{O~kUl>z_& diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png index 14badc961f13c55983c460000bc1ad397d560e7d..3555a2c7caf7414970d8a7551dc08f54d93fb103 100644 GIT binary patch delta 2005 zcmc(c`8(SQ0>&5Jnk~xHSydBCX|*$kxPy?4(du-n_4JA(jwKRTG(y~x?{*D3rHvi; z)l83ZR0*OHLTJ?;O;sEbM_oZ25m$&vw)4aO4fFo|KF{a#yzktI(&urdxSoCRu0l$NAu~HCMf9(6n%m<>Lw!6(%M33Oyx>DP&ZN1I>#w7Bt#T7huM`3 z-uG#eOBdD-{)OMlAvx&$+|>PSarcH+izQ}sA|*u6ht>R#A0gfBB<4ZZm(E;I$)%l4 zP3N7Dt~hEarrHK<&3IeJx`i0EodMbxvyZ6q0nCXuB5d53mNVm^1BA%8$&gw&soihS zLHJ5XLAU*IpxJ&je&MR<&Gyrb(x`PBd?pEdIJsV-UpG*zS{lbs=G#5k{phrK(EKPv zEV>$3GKfLRd+x{MkS@z-;AMjt8V_q%lASQrukseWF%j=GeJx<}2L!~vN=PAZI9v$j zs47^MOG7Tb`qu$HS<>{7{5@lRS!%DlL$j6l&ML8nz&m&a9&?l(^WO{ ztLe)&B0=cew?2AzQcy7L+K~<26AhvZc-X(E6{IkD?hEv(_WzXo!J2+wxd`Q;^`zu) zRXo^fdT%2Ax*jW>g3@vh`UcU5b@iVlYREJYqM>mWAfLYMYzLC!ner7S?2>_xCw^D| zi$4|FF3SJ_nM4G)sP$gkmY2tL#8Tx89(HQzRUt9eY@sIZ>x`KLOB?S`!SrHz>Ts4LcBLoyI#Go)(9h>CIF;Q zCN6y2H%5OS2-gR<-7jJslk)JX*#)O#HSWAt(Qy>BnjhYQ`*`TnHvzeEPCvC1yX595C@yClC4_u!^Qtd*ohe>gI5&!pDW(o}5tdGw!Ot|xLV181D;3bFz5+&u;HT}c7kX{!m7hRnstQ^@@XjMv{(Gc& zO{S6;+VK!U+G(^IFp5Zg<@#Ii?Jx<>V2tAC5k96$uK$$XZ~if0qf3rpS@D9-IO!%;TgP5o9%GuET~ z%>)nIGh6sAxhsAE7MW{}K=-!Yw?;vLBfs&agYNQx1 ziawjNC-%vU5Ez;JK3{FQ5$xTvYVjZmxVkGRahe$vz}E^>R&%vz`iZ39Frr@GJ&jDG za?*|dfL@Z!Tle_A2Y4Z&(nZHSV!DyRaD)Ghtn;)dHjejImxuYNG$A=ll+x&izO*II zTWML!$ik)(89Hpi?s0(W8VU_R&A-q_U-5oSzE38@WrtvR zyl9pmo6^tK9*Vfr#C8e}mGb%#qbT>TXi3RU(|~tD$Mz~$7PbTNdsLwF#wojp`WB43 zsA%bT2kT$^!WQapk`w0#t6{!F{S%KyQVlrffwqw|6Jg=s>*7kcX0fFGksUxs&PHlL?!~nawT;+EN zFI3Y#+q*{rZR@30gG#yEONV>j(a4Ev7Id;j+E}%`5v;jp^ZH#1qd3oY(wZro?W3LK z#gaS0$#M?Vf}0{1pd`G-jvUd^UcMzm_6&BmeQlo@KLtvp8h>aPWhy2bVTbMe96GQh z90BC3pRE;2v{~hIY5;6o5yO+Q6&y6})n5?cFJS&3DO7O&9Kpg+Jw>1h$(0l-D7Vi3 F?SD=gZ`uF= delta 2008 zcmc(d{Xf%-0>=;TsZ$-Pb1rqwLtb)Du1-kiA-1cd)JZ9cGH4q0piesr#v;G$NHVgt z9RV)mp@LhrsyUG|JaMrI=XU6qwBD+D-lYR?9HYlRX52Qr$!Onm#-(>4ovv*7(vh*t zj&0=Td&v5%rKFhX`cw8!ZC&MztAS(AlK^w2$$-4Wjo#al1Q`!$Et+&Y1YFiB*)W$1 zOeachp2XtQg>AaIyX})_43ZAk0xcEpanm{t`-f*c37Uo8 zrZ=?7pNclQ5nx$o@zijYU+9a8!ldO8&bvzAQ-)5hUOj0GsR~VAiV6St(^Sm?^|%+< z!)jJDeU_#VwM>_++T6rB#3Pl3odpLW(>uP>r07RSdF17=K_;q@@-fJn=g!zre!9Dj{MM zPVm0ehq((*6$br!c8b~1C=0+JeOfbYA$s`M;r+!4v%uGtDtV25Sny|nj=03PI0;>q zkEwk(hSx&5+|mw67K*k+_-4hohAxKZ^?O4kMiop+i?t%`yr=Nr19I4xhXsIzb6bQJ z8S%LZ%S_34wjH@D@G*iN_NSQyHS`fITd_(6CH6gqyCo`dwk?89K*ZT}8#lC%Yb2e) zAtt7#kW*|&=)gGb*zLytf;{&|DX6-b3JGnMm1bYh+s)8$nSg_~&qNoGsgmSUe})=6 z9W83OR=R+@l?ZIA z1JKJxUMH31wqYKVK;Wkc3908Fi#z6{YIVoL3=X&}Af(VN5b38UkeLlE6-bRTWM1Rg#jWfGto?hA%fgNp1uSX%@s={}bAAV`*0G$dJD?eOA@S4k9j9 zSb{0WThpPZ%07TJEBotq)=}~^YfRILxZ^Et5cnh7Dxq`-KePlVstrM9E|k|@k86O5 zsso*ovGW(uQhU+R{CHKx(Dso3ZbPmE^9BmR>wW)8Yeh%02VOW}l<>%7?dVK7FVNAo zyq(dJAfHN@E~o=RUT8rh~OTr+BEcg9Yb18go6v-5WFZcB zey-IoVZMOv?)fRtg{(?AYlpN8G{Si>vqoF6$dbBd_}j#OJXJXj+6alL2fe`H_XTY` z=ZiGBP}i9ASIq6cJJB9^KeD^u^a%&?n;kLust`1rH)HY|Jz(90ACP7>c`ZNcV#U69 zx=&hL>Q?R|OaiOU0awC`WADx#aMW_Lo^66gN?#foe*G2RCfD8C&niC&OR<0&2Ejkf@rx$rPahvwar|$%gCGeMJ_*%YOoTB5& z+Zh&A+IdCJg5^)5TQmJSbV69~lnk%J$a20{OkzPFuutBsJ+RjzM^wwYS*TDet`E{F z$(iL^1M0NC)jnW(Lzg5FNpuU8;Ol=wfWLwH7jhFQ5a>&wUv_A+_%^&&S9x{fvJP79 H@zwtUtrCOp0g?1By~D5TqYPdIt%e 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 BCnEp= literal 26058 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 Wi~vU9D-(D>4$)gYJQ2n_dHe@q%Ny1J diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png index 0307068d7767e1bb965111f956e66b4a654c76e6..4f74754f06624aac0d4d87bd63915b1c0cc2b788 100644 GIT binary patch delta 79 zcmV-V0I>hu*8$qv0R~b@Mn+O?u?9Q>0u*brL;_9$0~hulvy}r}Jq};|ciVsc_SJv> l>)?q0v#|pr3zH#C`vU(tv#|p(APj&b{(nY!NBsYc@&FomBO(9* delta 81 zcmV-X0IvVq+5z0x0R~b@Mn=?Yu?9Q>0+wmBL;_9$1Gje=vy}r}Jq~~TciVsc_SJv> n>)?q0v#|pr3zH#C`vo6lj`$C=u>-Ik3pnEcXOwru|Ia87vM42T diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png index ba6e34b28f2ca1cc5b120c7fdb27727b515ee566..fee6250306d8e2113d1eed803839b1865e920ee1 100644 GIT binary patch delta 61 zcmV-D0K)&+*8$Yp0R~b@Mn+6+u?9Q>0uF1lL;^_x0}FePvycN^JpnJX?LaCF0{&w53&0WoKcl=O{(nY!hQ1Zz delta 65 zcmV-H0KWg!+5y0+DI6L;^_x1KT@{vycN^Jpn(n?LaCF1rIVu X{0FnK1F#+p9P$4%$~)r!XOss3Bh(nq diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png deleted file mode 100644 index c7f4bfcbc2fed09223dc759d4cc3dc399074c1d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23790 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 R_)Fj}gWMun$zgfk`aAo!oihLc diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png deleted file mode 100644 index 420aceeb6e431b09e7815454dab8f04afca78ee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23814 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 V1N9QKkOSWZ3FQBc^78*ic>qe)Gob(g delta 1568 zcmV+*2H*L%mjbev0tHe@Mn2u%j3A@wemubdcH1e9@ePg-)uJezd^vxeHUs38tbI-Rh>9mWr zzF&dfTlCnj&Mh_Xs(Dwf+XD46_2Sl-Hov&#g@3I#-G1X80m4nUAJF*oC8vCq9(KVJ z{T};nPFbUkU84I=#eV=0r&Y&Aob(N_C3nj$f4}dSF97d$pE~@*2MPibgMO1_{CRWc z_%^4$8?9+(LqjP3L(FPvX0Dw12~Px{|L&&Sf$zTAZ-aeh%DSt);u zjrCH&+&D<~P5@?4vaL$d-+mz;jat>&uYa%n%uieT12zq`y^q`{WeMfaPbrX#xKbicfUyU|9~QYEbgG@U7_r(U)Wg_K7_*AR_>Pg|LMNzQ*%dH(Ml{w z$0XPtlhD@dYRnZ&*tm!!wUU;1>5xzld z#B=Px!K>`-DG|I_o684_BdPjGq#&iPaU{vua3U>zz&Mhs4^?_5&{Eepl2q_2JrmEh z>JPJl1NRcMkOQd@1wj5EM4Yp@Jd+Air=wT?cl3Ix^^K-+1x*jV_=$wkyw8SLTM96x zZhY{A_uZ@@Iw?#gH~jU9hS8ra#T3i?KS;;KIBS0b<6SJ28I6?Qnt8mxg-<4oMoY5G z_5!nk1NRcMkOSxvvycPR0)N;~GZE+iOvJ7leD@nV_rIdsDfeV$@GLm*NZ#!4nkVFm z0!{{Jy)oD==G~JW((VIC<^-gB%==TrI-pK?);(8ui+L*z3}hx!+yVLX!(FqS+OJ-5 z#{#qNxM6kYi!42(BBG+RG@vExoAzj3`xDD6G4$dI!t<$rWB^qOxm6{Yj! zX!4aOCcky194_JLKK1cd;9%=ksTh>?&G&#~e?H=mE-4=3bVR@QxTxC%?H;0Mf181=I`y!7ytaW@?HuSl zWr_Ug?yh+IbkDc3HH!=ZCYaUA;t#~~2*Li(%vG;^;n}V+bC&w0y+5obFx%KN9<=Mu5qFuwUu9{x%nvP!y{9LPCF<KqJz79&$gv9b&~alddQQ;K<+qwX3_H z_98NQyhlP8`zM(JJQFqAf`q=ev9P%nq4pb@ed^CQe4?43HPFTMpWM}TPpLN(wVthh zD@Or57dg>P0LlA`&80X$xkIcl)g#Vl?Imd@$*j1Q@fcJ zU1)bpOO6Vw>c&k)J~ePn@sSpV*BpiX{IUbt-QA#6KBpr&>;g`l_h*6O6HPy+TG*wA zMi(=hSe?)5sKWfFoq5=$$pkZ38u&_Rs3lZPJ!`v|Q4GqVHWvQ&2;GS;|A@1J1NRcM SkOSQX3V{6IC@=pv$^!r+K`ZJ2 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png index 7c89c40f9612459654e0f6f3c55e94dfe63aeb60..1def8de5333fad718d346345fb0b394aa170132e 100644 GIT binary patch delta 2083 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 CI-lPF diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png deleted file mode 100644 index 4bff202688573ea6454ef4d8b8fc56bd69e899b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24496 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 BCnEp= literal 26058 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 Wi~vU9D-(D>4$)gYJQ2n_dHe@q%Ny1J diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step0.png index 0307068d7767e1bb965111f956e66b4a654c76e6..4f74754f06624aac0d4d87bd63915b1c0cc2b788 100644 GIT binary patch delta 79 zcmV-V0I>hu*8$qv0R~b@Mn+O?u?9Q>0u*brL;_9$0~hulvy}r}Jq};|ciVsc_SJv> l>)?q0v#|pr3zH#C`vU(tv#|p(APj&b{(nY!NBsYc@&FomBO(9* delta 81 zcmV-X0IvVq+5z0x0R~b@Mn=?Yu?9Q>0+wmBL;_9$1Gje=vy}r}Jq~~TciVsc_SJv> n>)?q0v#|pr3zH#C`vo6lj`$C=u>-Ik3pnEcXOwru|Ia87vM42T diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-input/specific-properties/step1.png index ba6e34b28f2ca1cc5b120c7fdb27727b515ee566..fee6250306d8e2113d1eed803839b1865e920ee1 100644 GIT binary patch delta 61 zcmV-D0K)&+*8$Yp0R~b@Mn+6+u?9Q>0uF1lL;^_x0}FePvycN^JpnJX?LaCF0{&w53&0WoKcl=O{(nY!hQ1Zz delta 65 zcmV-H0KWg!+5y0+DI6L;^_x1KT@{vycN^Jpn(n?LaCF1rIVu X{0FnK1F#+p9P$4%$~)r!XOss3Bh(nq diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step0.png deleted file mode 100644 index c7f4bfcbc2fed09223dc759d4cc3dc399074c1d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23790 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 R_)Fj}gWMun$zgfk`aAo!oihLc diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-text/text_focused_text_color/step1.png deleted file mode 100644 index 420aceeb6e431b09e7815454dab8f04afca78ee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23814 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 V1N9QKkOSWZ3FQBc^78*ic>qe)Gob(g delta 1568 zcmV+*2H*L%mjbev0tHe@Mn2u%j3A@wemubdcH1e9@ePg-)uJezd^vxeHUs38tbI-Rh>9mWr zzF&dfTlCnj&Mh_Xs(Dwf+XD46_2Sl-Hov&#g@3I#-G1X80m4nUAJF*oC8vCq9(KVJ z{T};nPFbUkU84I=#eV=0r&Y&Aob(N_C3nj$f4}dSF97d$pE~@*2MPibgMO1_{CRWc z_%^4$8?9+(LqjP3L(FPvX0Dw12~Px{|L&&Sf$zTAZ-aeh%DSt);u zjrCH&+&D<~P5@?4vaL$d-+mz;jat>&uYa%n%uieT12zq`y^q`{WeMfaPbrX#xKbicfUyU|9~QYEbgG@U7_r(U)Wg_K7_*AR_>Pg|LMNzQ*%dH(Ml{w z$0XPtlhD@dYRnZ&*tm!!wUU;1>5xzld z#B=Px!K>`-DG|I_o684_BdPjGq#&iPaU{vua3U>zz&Mhs4^?_5&{Eepl2q_2JrmEh z>JPJl1NRcMkOQd@1wj5EM4Yp@Jd+Air=wT?cl3Ix^^K-+1x*jV_=$wkyw8SLTM96x zZhY{A_uZ@@Iw?#gH~jU9hS8ra#T3i?KS;;KIBS0b<6SJ28I6?Qnt8mxg-<4oMoY5G z_5!nk1NRcMkOSxvvycPR0)N;~GZE+iOvJ7leD@nV_rIdsDfeV$@GLm*NZ#!4nkVFm z0!{{Jy)oD==G~JW((VIC<^-gB%==TrI-pK?);(8ui+L*z3}hx!+yVLX!(FqS+OJ-5 z#{#qNxM6kYi!42(BBG+RG@vExoAzj3`xDD6G4$dI!t<$rWB^qOxm6{Yj! zX!4aOCcky194_JLKK1cd;9%=ksTh>?&G&#~e?H=mE-4=3bVR@QxTxC%?H;0Mf181=I`y!7ytaW@?HuSl zWr_Ug?yh+IbkDc3HH!=ZCYaUA;t#~~2*Li(%vG;^;n}V+bC&w0y+5obFx%KN9<=Mu5qFuwUu9{x%nvP!y{9LPCF<KqJz79&$gv9b&~alddQQ;K<+qwX3_H z_98NQyhlP8`zM(JJQFqAf`q=ev9P%nq4pb@ed^CQe4?43HPFTMpWM}TPpLN(wVthh zD@Or57dg>P0LlA`&80X$xkIcl)g#Vl?Imd@$*j1Q@fcJ zU1)bpOO6Vw>c&k)J~ePn@sSpV*BpiX{IUbt-QA#6KBpr&>;g`l_h*6O6HPy+TG*wA zMi(=hSe?)5sKWfFoq5=$$pkZ38u&_Rs3lZPJ!`v|Q4GqVHWvQ&2;GS;|A@1J1NRcM SkOSQX3V{6IC@=pv$^!r+K`ZJ2 diff --git a/client/android/ui-test-common/src/main/java/com/yandex/test/rules/ActivityParamsTestRule.kt b/client/android/ui-test-common/src/main/java/com/yandex/test/rules/ActivityParamsTestRule.kt index f078bea66..c2bfd6ec8 100644 --- a/client/android/ui-test-common/src/main/java/com/yandex/test/rules/ActivityParamsTestRule.kt +++ b/client/android/ui-test-common/src/main/java/com/yandex/test/rules/ActivityParamsTestRule.kt @@ -11,7 +11,7 @@ open class ActivityParamsTestRule( launchActivity: Boolean = true, private val action: String? = null, private val params: Bundle? = null -) : IntentsTestRule(activityClass, false, launchActivity) { +) : IntentsTestRule(activityClass, true, launchActivity) { constructor(activityClass: Class, vararg params: Pair) : this( activityClass = activityClass, diff --git a/test_data/interactive_snapshot_test_data/div-text/text_focused_text_color.json b/test_data/interactive_snapshot_test_data/div-text/text_focused_text_color.json index 8cac0293b..ad1142247 100644 --- a/test_data/interactive_snapshot_test_data/div-text/text_focused_text_color.json +++ b/test_data/interactive_snapshot_test_data/div-text/text_focused_text_color.json @@ -1,7 +1,6 @@ { "description": "Text with focused text color and focus background", "platforms": [ - "android", "ios" ], "div_data": { diff --git a/test_data/regression_test_data/double_slider.json b/test_data/regression_test_data/double_slider.json index 457cce3a5..53f41c530 100644 --- a/test_data/regression_test_data/double_slider.json +++ b/test_data/regression_test_data/double_slider.json @@ -160,6 +160,7 @@ }, { "type": "slider", + "id": "double_with_ticks", "width": { "type": "match_parent" }, diff --git a/test_data/regression_test_data/slider_nps.json b/test_data/regression_test_data/slider_nps.json index 42c90468b..076a139bf 100644 --- a/test_data/regression_test_data/slider_nps.json +++ b/test_data/regression_test_data/slider_nps.json @@ -158,6 +158,7 @@ "width": { "type": "match_parent" }, + "id": "min_0_max_10", "accessibility": { "description": "Min - 0, max - 10" }, diff --git a/test_data/regression_test_data/slider_presets.json b/test_data/regression_test_data/slider_presets.json index 6d4c8e17f..4458d75bf 100644 --- a/test_data/regression_test_data/slider_presets.json +++ b/test_data/regression_test_data/slider_presets.json @@ -453,7 +453,7 @@ }, { "type": "slider_preset", - "id": "slider_default", + "id": "default_slider", "thumb_value_variable": "first_thumb_value", "accessibility": { "description": "Default slider" @@ -465,7 +465,7 @@ }, { "type": "slider_preset", - "id": "slider_default", + "id": "min_0_max_10", "min_value": 0, "max_value": 10, "thumb_value_variable": "second_thumb_value", @@ -525,7 +525,7 @@ }, { "type": "slider_preset", - "id": "slider_default", + "id": "min_0_max_3", "min_value": 0, "max_value": 3, "thumb_value_variable": "third_thumb_value", @@ -585,7 +585,7 @@ }, { "type": "slider_preset", - "id": "slider_default", + "id": "double_with_ticks", "min_value": 0, "max_value": 10, "thumb_value_variable": "fourth_thumb_value", @@ -665,7 +665,7 @@ }, { "type": "slider_preset", - "id": "slider_default", + "id": "double_without_ticks", "thumb_value_variable": "fifth_thumb_value", "thumb_secondary_value_variable": "fifth_thumb_secondary_value", "accessibility": { diff --git a/test_data/regression_test_data/slider_scroll_horizontal.json b/test_data/regression_test_data/slider_scroll_horizontal.json index 703e81256..c105fb09f 100644 --- a/test_data/regression_test_data/slider_scroll_horizontal.json +++ b/test_data/regression_test_data/slider_scroll_horizontal.json @@ -61,6 +61,7 @@ "items": [ { "type": "slider", + "id": "min_0_max_10", "accessibility": { "description": "Min - 0, max - 10" }, diff --git a/test_data/regression_test_data/slider_scroll_vertical.json b/test_data/regression_test_data/slider_scroll_vertical.json index 829f52bf1..16083ff2f 100644 --- a/test_data/regression_test_data/slider_scroll_vertical.json +++ b/test_data/regression_test_data/slider_scroll_vertical.json @@ -71,6 +71,7 @@ }, { "type": "slider", + "id": "min_0_max_10", "accessibility": { "description": "Min - 0, max - 10" },