add scroll actions and change item actions in gallery

commit_hash:87014adfd73ebb2d79314c9119fc534c54902f75
This commit is contained in:
avmushtukov
2024-09-27 18:00:15 +03:00
parent 43f792c328
commit 6fd59e04ea
69 changed files with 1524 additions and 95 deletions
+62
View File
@@ -1032,6 +1032,7 @@
"client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedHandlerCombiner.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedHandlerCombiner.kt",
"client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedHandlerProxy.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedHandlerProxy.kt",
"client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedHideTooltipHandler.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedHideTooltipHandler.kt",
"client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedScrollHandler.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedScrollHandler.kt",
"client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedSetStateHandler.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedSetStateHandler.kt",
"client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedSetStoredValueHandler.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedSetStoredValueHandler.kt",
"client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedSetVariableHandler.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/actions/DivActionTypedSetVariableHandler.kt",
@@ -1297,6 +1298,7 @@
"client/android/div/src/main/java/com/yandex/div/core/view2/errors/ErrorVisualMonitor.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/errors/ErrorVisualMonitor.kt",
"client/android/div/src/main/java/com/yandex/div/core/view2/items/DivItemChangeActionHandler.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/items/DivItemChangeActionHandler.kt",
"client/android/div/src/main/java/com/yandex/div/core/view2/items/DivViewWithItems.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/items/DivViewWithItems.kt",
"client/android/div/src/main/java/com/yandex/div/core/view2/items/DivViewWithItemsController.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/items/DivViewWithItemsController.kt",
"client/android/div/src/main/java/com/yandex/div/core/view2/items/OverflowItemStrategy.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/items/OverflowItemStrategy.kt",
"client/android/div/src/main/java/com/yandex/div/core/view2/logging/EventMessageBuilder.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/logging/EventMessageBuilder.kt",
"client/android/div/src/main/java/com/yandex/div/core/view2/logging/bind/BindingEventReporter.kt":"divkit/public/client/android/div/src/main/java/com/yandex/div/core/view2/logging/bind/BindingEventReporter.kt",
@@ -1958,6 +1960,12 @@
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API24_HDPI_540x1200/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png",
@@ -2862,6 +2870,12 @@
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png",
@@ -3766,6 +3780,12 @@
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png",
@@ -4670,6 +4690,12 @@
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png",
@@ -5574,6 +5600,12 @@
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png",
@@ -6478,6 +6510,12 @@
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png",
@@ -7382,6 +7420,12 @@
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png",
@@ -8286,6 +8330,12 @@
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png",
@@ -9190,6 +9240,12 @@
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/specific-properties/step3.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step2.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step4.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step7.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/typed-actions/step9.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step0.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step1.png",
"client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2InteractiveScreenshotTest/div-gallery/visibility/step2.png",
@@ -16825,6 +16881,10 @@
"schema/div-action-download.json":"divkit/public/schema/div-action-download.json",
"schema/div-action-focus-element.json":"divkit/public/schema/div-action-focus-element.json",
"schema/div-action-hide-tooltip.json":"divkit/public/schema/div-action-hide-tooltip.json",
"schema/div-action-scroll-base.json":"divkit/public/schema/div-action-scroll-base.json",
"schema/div-action-scroll-by.json":"divkit/public/schema/div-action-scroll-by.json",
"schema/div-action-scroll-destination.json":"divkit/public/schema/div-action-scroll-destination.json",
"schema/div-action-scroll-to.json":"divkit/public/schema/div-action-scroll-to.json",
"schema/div-action-set-state.json":"divkit/public/schema/div-action-set-state.json",
"schema/div-action-set-stored-value.json":"divkit/public/schema/div-action-set-stored-value.json",
"schema/div-action-set-variable.json":"divkit/public/schema/div-action-set-variable.json",
@@ -17164,6 +17224,7 @@
"test_data/interactive_snapshot_test_data/div-gallery/scroll-actions.json":"divkit/public/test_data/interactive_snapshot_test_data/div-gallery/scroll-actions.json",
"test_data/interactive_snapshot_test_data/div-gallery/select-elements.json":"divkit/public/test_data/interactive_snapshot_test_data/div-gallery/select-elements.json",
"test_data/interactive_snapshot_test_data/div-gallery/specific-properties.json":"divkit/public/test_data/interactive_snapshot_test_data/div-gallery/specific-properties.json",
"test_data/interactive_snapshot_test_data/div-gallery/typed-actions.json":"divkit/public/test_data/interactive_snapshot_test_data/div-gallery/typed-actions.json",
"test_data/interactive_snapshot_test_data/div-gallery/visibility.json":"divkit/public/test_data/interactive_snapshot_test_data/div-gallery/visibility.json",
"test_data/interactive_snapshot_test_data/div-image/blur.json":"divkit/public/test_data/interactive_snapshot_test_data/div-image/blur.json",
"test_data/interactive_snapshot_test_data/div-indicator/shapes.json":"divkit/public/test_data/interactive_snapshot_test_data/div-indicator/shapes.json",
@@ -17324,6 +17385,7 @@
"test_data/regression_test_data/gallery/gallery-bottom-multiline.json":"divkit/public/test_data/regression_test_data/gallery/gallery-bottom-multiline.json",
"test_data/regression_test_data/gallery/gallery-bottom-singleline.json":"divkit/public/test_data/regression_test_data/gallery/gallery-bottom-singleline.json",
"test_data/regression_test_data/gallery/gallery-columns.json":"divkit/public/test_data/regression_test_data/gallery/gallery-columns.json",
"test_data/regression_test_data/gallery/gallery-item-actions-typed.json":"divkit/public/test_data/regression_test_data/gallery/gallery-item-actions-typed.json",
"test_data/regression_test_data/gallery/gallery-item-actions.json":"divkit/public/test_data/regression_test_data/gallery/gallery-item-actions.json",
"test_data/regression_test_data/gallery/gallery-items-posing.json":"divkit/public/test_data/regression_test_data/gallery/gallery-items-posing.json",
"test_data/regression_test_data/gallery/gallery-top-multiline.json":"divkit/public/test_data/regression_test_data/gallery/gallery-top-multiline.json",
@@ -0,0 +1,75 @@
package com.yandex.div.core.actions
import com.yandex.div.core.view2.Div2View
import com.yandex.div.core.view2.items.DivViewWithItemsController
import com.yandex.div.json.expressions.ExpressionResolver
import com.yandex.div2.DivActionScrollBy
import com.yandex.div2.DivActionScrollDestination
import com.yandex.div2.DivActionScrollTo
import com.yandex.div2.DivActionTyped
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
internal class DivActionTypedScrollHandler @Inject constructor() : DivActionTypedHandler {
override fun handleAction(
scopeId: String?,
action: DivActionTyped,
view: Div2View,
resolver: ExpressionResolver
): Boolean = when(action) {
is DivActionTyped.ScrollBy -> {
handleAction(action.value, view, resolver)
true
}
is DivActionTyped.ScrollTo -> {
handleAction(action.value, view, resolver)
true
}
else -> false
}
private fun handleAction(
action: DivActionScrollBy,
view: Div2View,
resolver: ExpressionResolver
) {
val id = action.id.evaluate(resolver)
val offset = action.offset.evaluate(resolver).toInt()
val step = action.itemCount.evaluate(resolver).toInt()
val overflow = DivActionScrollBy.Overflow.toString(action.overflow.evaluate(resolver))
val animated = action.animated.evaluate(resolver)
val viewController = DivViewWithItemsController.create(id, view, resolver) ?: return
viewController.changeCurrentItemByStep(overflow, step, animated)
viewController.scrollByOffset(overflow, offset, animated)
}
private fun handleAction(
action: DivActionScrollTo,
view: Div2View,
resolver: ExpressionResolver
) {
val id = action.id.evaluate(resolver)
val animated = action.animated.evaluate(resolver)
val viewController = DivViewWithItemsController.create(id, view, resolver) ?: return
when(val destination = action.destination) {
is DivActionScrollDestination.Offset -> {
val offset = destination.value.value.evaluate(resolver).toInt()
viewController.scrollTo(offset, animated)
}
is DivActionScrollDestination.Index -> {
val index = destination.value.value.evaluate(resolver).toInt()
viewController.setCurrentItem(index, animated)
}
is DivActionScrollDestination.End -> {
viewController.scrollToEnd(animated)
}
is DivActionScrollDestination.Start -> {
viewController.scrollToStart(animated)
}
}
}
}
@@ -7,6 +7,7 @@ import com.yandex.div.core.actions.DivActionTypedDictSetValueHandler
import com.yandex.div.core.actions.DivActionTypedFocusElementHandler
import com.yandex.div.core.actions.DivActionTypedHandler
import com.yandex.div.core.actions.DivActionTypedHideTooltipHandler
import com.yandex.div.core.actions.DivActionTypedScrollHandler
import com.yandex.div.core.actions.DivActionTypedSetStateHandler
import com.yandex.div.core.actions.DivActionTypedSetStoredValueHandler
import com.yandex.div.core.actions.DivActionTypedSetVariableHandler
@@ -39,6 +40,7 @@ internal interface DivActionTypedModule {
impl: DivActionTypedClearFocusHandler
): DivActionTypedHandler
@Binds
@IntoSet
fun provideCopyToClipboardActionHandler(
@@ -63,6 +65,12 @@ internal interface DivActionTypedModule {
impl: DivActionTypedHideTooltipHandler
): DivActionTypedHandler
@Binds
@IntoSet
fun provideScrollActionHandler(
impl: DivActionTypedScrollHandler
): DivActionTypedHandler
@Binds
@IntoSet
fun provideSetStateActionHandler(
@@ -1,12 +1,9 @@
package com.yandex.div.core.view2.items
import android.net.Uri
import android.util.DisplayMetrics
import android.view.View
import com.yandex.div.core.DivViewFacade
import com.yandex.div.internal.KAssert
import com.yandex.div.json.expressions.ExpressionResolver
import com.yandex.div2.DivSizeUnit
private const val AUTHORITY_SET_CURRENT_ITEM = "set_current_item"
private const val AUTHORITY_NEXT_ITEM = "set_next_item"
@@ -49,103 +46,86 @@ internal object DivItemChangeActionHandler {
KAssert.fail { "$PARAM_ID param is required to set item" }
return false
}
val targetView = view.view.findViewWithTag<View>(id) ?: return false
val authority = uri.authority
val viewWithItems = DivViewWithItems.create(targetView, resolver) { direction(authority) } ?: return false
val viewController = DivViewWithItemsController.create(id, view, resolver, direction(authority)) ?: return false
return when (authority) {
AUTHORITY_SET_CURRENT_ITEM ->
handleSetCurrentItem(uri, viewWithItems)
handleSetCurrentItem(uri, viewController)
AUTHORITY_NEXT_ITEM ->
handleNextItem(uri, viewWithItems)
handleNextItem(uri, viewController)
AUTHORITY_PREVIOUS_ITEM ->
handlePreviousItem(uri, viewWithItems)
handlePreviousItem(uri, viewController)
AUTHORITY_SCROLL_BACKWARD ->
handleScrollBackward(uri, viewWithItems)
handleScrollBackward(uri, viewController)
AUTHORITY_SCROLL_FORWARD ->
handleScrollForward(uri, viewWithItems)
handleScrollForward(uri, viewController)
AUTHORITY_SCROLL_TO_POSITION ->
handleScrollTo(uri, viewWithItems)
handleScrollTo(uri, viewController)
AUTHORITY_SCROLL_TO_END ->
handleScrollToTheEnd(viewWithItems)
handleScrollToTheEnd(viewController)
AUTHORITY_SCROLL_TO_START ->
handleScrollToTheStart(viewWithItems)
handleScrollToTheStart(viewController)
else -> false
}
}
private fun handleSetCurrentItem(uri: Uri, view: DivViewWithItems): Boolean {
val item = uri.getQueryParameter(PARAM_ITEM)
if (item == null) {
private fun handleSetCurrentItem(uri: Uri, viewController: DivViewWithItemsController): Boolean {
val rawItem = uri.getQueryParameter(PARAM_ITEM)
if (rawItem == null) {
KAssert.fail { "$PARAM_ITEM is required to set current item" }
return false
}
return try {
view.currentItem = item.toInt()
true
val item = try {
rawItem.toInt()
} catch (e: NumberFormatException) {
KAssert.fail { "$item is not a number" }
false
KAssert.fail { "$rawItem is not a number" }
return false
}
}
private fun handleNextItem(uri: Uri, view: DivViewWithItems): Boolean {
return handleItemNavigation(uri, view) { strategy, step ->
view.currentItem = strategy.nextItem(step)
}
}
private fun handlePreviousItem(uri: Uri, view: DivViewWithItems): Boolean {
return handleItemNavigation(uri, view) { strategy, step ->
view.currentItem = strategy.previousItem(step)
}
}
private fun handleScrollForward(uri: Uri, view: DivViewWithItems): Boolean {
return handleItemNavigation(uri, view) { strategy, step ->
view.scrollTo(strategy.positionAfterScrollBy(step))
}
}
private fun handleScrollBackward(uri: Uri, view: DivViewWithItems): Boolean {
return handleItemNavigation(uri, view) { strategy, step ->
view.scrollTo(strategy.positionAfterScrollBy(-step))
}
}
private fun handleScrollTo(uri: Uri, view: DivViewWithItems): Boolean {
return handleItemNavigation(uri, view) { _, step ->
view.scrollTo(step, DivSizeUnit.DP)
}
}
private fun handleScrollToTheEnd(view: DivViewWithItems): Boolean {
view.scrollToTheEnd()
viewController.setCurrentItem(item)
return true
}
private fun handleScrollToTheStart(view: DivViewWithItems): Boolean {
view.currentItem = 0
return true
private fun handleNextItem(uri: Uri, viewController: DivViewWithItemsController): Boolean {
return withOverflowAndStep(uri, viewController::changeCurrentItemByStep)
}
private inline fun handleItemNavigation(
uri: Uri,
view: DivViewWithItems,
navigate: (strategy: OverflowItemStrategy, step: Int) -> Unit
): Boolean {
val strategy = overflowStrategy(uri, view.currentItem, view.itemCount, view.scrollRange,
view.scrollOffset, view.metrics)
private fun handlePreviousItem(uri: Uri, viewController: DivViewWithItemsController): Boolean {
return withOverflowAndStep(uri) { overflow, step ->
viewController.changeCurrentItemByStep(overflow, -step)
}
}
private fun handleScrollForward(uri: Uri, viewController: DivViewWithItemsController): Boolean {
return withOverflowAndStep(uri, viewController::scrollByOffset)
}
private fun handleScrollBackward(uri: Uri, viewController: DivViewWithItemsController): Boolean {
return withOverflowAndStep(uri) { overflow, step ->
viewController.scrollByOffset(overflow, -step)
}
}
private fun handleScrollTo(uri: Uri, viewController: DivViewWithItemsController): Boolean {
val step = uri.getStepParam()
navigate(strategy, step)
viewController.scrollTo(step)
return true
}
private fun handleScrollToTheEnd(viewController: DivViewWithItemsController): Boolean {
viewController.scrollToEnd()
return true
}
private fun handleScrollToTheStart(viewController: DivViewWithItemsController): Boolean {
viewController.scrollToStart()
return true
}
@@ -158,18 +138,22 @@ internal object DivItemChangeActionHandler {
default
}
}
}
private fun overflowStrategy(uri: Uri, currentItem: Int, itemCount: Int, scrollRange: Int,
scrollOffset: Int, metrics: DisplayMetrics): OverflowItemStrategy {
val overflow = uri.getQueryParameter(PARAM_OVERFLOW)
return OverflowItemStrategy.create(overflow, currentItem, itemCount, scrollRange, scrollOffset, metrics)
}
private inline fun withOverflowAndStep(
uri: Uri,
actionOnViewController: (String?, Int) -> Unit
): Boolean {
val step = uri.getStepParam()
val overflow = uri.getQueryParameter(PARAM_OVERFLOW)
actionOnViewController(overflow, step)
return true
}
private fun direction(authority: String?): Direction {
return when (authority) {
AUTHORITY_PREVIOUS_ITEM -> Direction.PREVIOUS
AUTHORITY_NEXT_ITEM -> Direction.NEXT
else -> Direction.NEXT
private fun direction(authority: String?): Direction {
return when (authority) {
AUTHORITY_PREVIOUS_ITEM -> Direction.PREVIOUS
AUTHORITY_NEXT_ITEM -> Direction.NEXT
else -> Direction.NEXT
}
}
}
@@ -49,12 +49,17 @@ internal sealed class DivViewWithItems {
/**
* Scroll to @param dp value.
*/
open fun scrollTo(value: Int, sizeUnit: DivSizeUnit = DivSizeUnit.PX) = Unit
open fun scrollTo(value: Int, sizeUnit: DivSizeUnit = DivSizeUnit.PX, animated: Boolean = true) = Unit
/**
* Scroll to the end of recycler view.
*/
open fun scrollToTheEnd() = Unit
open fun scrollToTheEnd(animated: Boolean = true) = Unit
/**
* sets Current item without scroll animation
*/
open fun setCurrentItemNoAnimation(index: Int) = Unit
/**
* Implementation of [DivViewWithItems] specific for div gallery with `scroll_mode` "paging"
@@ -75,9 +80,17 @@ internal sealed class DivViewWithItems {
override val scrollRange get() = view.scrollRange()
override val scrollOffset get() = view.scrollOffset()
override fun scrollTo(value: Int, sizeUnit: DivSizeUnit) =
view.scrollTo(value, sizeUnit, metrics)
override fun scrollToTheEnd() = view.scrollToTheEnd(metrics)
override fun scrollTo(value: Int, sizeUnit: DivSizeUnit, animated: Boolean) =
view.scrollTo(value, sizeUnit, metrics, animated)
override fun scrollToTheEnd(animated: Boolean) {
view.scrollToTheEnd(metrics, animated)
}
override fun setCurrentItemNoAnimation(index: Int) {
checkItem(index, itemCount) {
view.scrollToPosition(index)
}
}
}
/**
@@ -109,9 +122,15 @@ internal sealed class DivViewWithItems {
override val scrollRange get() = view.scrollRange()
override val scrollOffset get() = view.scrollOffset()
override fun scrollTo(value: Int, sizeUnit: DivSizeUnit) =
view.scrollTo(value, sizeUnit, metrics)
override fun scrollToTheEnd() = view.scrollToTheEnd(metrics)
override fun scrollTo(value: Int, sizeUnit: DivSizeUnit, animated: Boolean) =
view.scrollTo(value, sizeUnit, metrics, animated)
override fun scrollToTheEnd(animated: Boolean) = view.scrollToTheEnd(metrics, animated)
override fun setCurrentItemNoAnimation(index: Int) {
checkItem(index, itemCount) {
view.scrollToPosition(index)
}
}
}
/**
@@ -127,8 +146,14 @@ internal sealed class DivViewWithItems {
override val itemCount: Int
get() = view.viewPager.adapter?.itemCount ?: 0
override fun scrollToTheEnd() {
view.viewPager.setCurrentItem(itemCount - 1, true)
override fun scrollToTheEnd(animated: Boolean) {
view.viewPager.setCurrentItem(itemCount - 1, animated)
}
override fun setCurrentItemNoAnimation(index: Int) {
checkItem(index, itemCount) {
view.viewPager.setCurrentItem(index, false)
}
}
}
@@ -145,8 +170,14 @@ internal sealed class DivViewWithItems {
override val itemCount: Int
get() = view.viewPager.adapter?.count ?: 0
override fun scrollToTheEnd() {
view.viewPager.setCurrentItem(itemCount - 1, true)
override fun scrollToTheEnd(animated: Boolean) {
view.viewPager.setCurrentItem(itemCount - 1, animated)
}
override fun setCurrentItemNoAnimation(index: Int) {
checkItem(index, itemCount) {
view.viewPager.setCurrentItem(index, false)
}
}
}
@@ -206,16 +237,17 @@ private fun <T : RecyclerView> T.canScroll(): Boolean {
}
}
private fun <T : RecyclerView> T.scrollTo(value: Int, sizeUnit: DivSizeUnit, metrics: DisplayMetrics) {
private fun <T : RecyclerView> T.scrollTo(value: Int, sizeUnit: DivSizeUnit, metrics: DisplayMetrics, animated: Boolean = true) {
val valuePx = when (sizeUnit) {
DivSizeUnit.PX -> value
DivSizeUnit.SP -> value.spToPx(metrics)
DivSizeUnit.DP -> value.dpToPx(metrics)
}
val lm = linearLayoutManager ?: return
val scroll: (dx: Int, dy: Int) -> Unit = if (animated) this::smoothScrollBy else this::scrollBy
when (lm.orientation) {
RecyclerView.HORIZONTAL -> smoothScrollBy(valuePx - computeHorizontalScrollOffset(), 0)
RecyclerView.VERTICAL -> smoothScrollBy(0, valuePx - computeVerticalScrollOffset())
RecyclerView.HORIZONTAL -> scroll(valuePx - computeHorizontalScrollOffset(), 0)
RecyclerView.VERTICAL -> scroll(0, valuePx - computeVerticalScrollOffset())
}
}
@@ -229,8 +261,8 @@ private fun <T : RecyclerView> T.scrollOffset() = when (linearLayoutManager?.ori
else -> computeVerticalScrollOffset()
}
private fun <T : RecyclerView> T.scrollToTheEnd(metrics: DisplayMetrics) =
scrollTo(scrollRange(), DivSizeUnit.PX, metrics)
private fun <T : RecyclerView> T.scrollToTheEnd(metrics: DisplayMetrics, animated: Boolean = true) =
scrollTo(scrollRange(), DivSizeUnit.PX, metrics, animated)
private fun LinearLayoutManager.visibleItemPosition(direction: Direction): Int {
return when (direction) {
@@ -0,0 +1,71 @@
package com.yandex.div.core.view2.items
import android.view.View
import com.yandex.div.core.DivViewFacade
import com.yandex.div.json.expressions.ExpressionResolver
import com.yandex.div2.DivSizeUnit
internal class DivViewWithItemsController private constructor(private val view: DivViewWithItems) {
fun setCurrentItem(index: Int, animated: Boolean = true) {
if (animated) {
view.currentItem = index
} else {
view.setCurrentItemNoAnimation(index)
}
}
fun changeCurrentItemByStep(overflow: String?, step: Int = 1, animated: Boolean = true) {
val strategy = createStrategy(overflow)
val index = when {
step > 0 -> strategy.nextItem(step)
step < 0 -> strategy.previousItem(-step)
else -> return
}
setCurrentItem(index, animated)
}
fun scrollByOffset(overflow: String? = null, offset: Int, animated: Boolean = true) {
if (offset == 0) return
val strategy = createStrategy(overflow)
view.scrollTo(strategy.positionAfterScrollBy(offset), animated = animated)
}
fun scrollTo(offset: Int, animated: Boolean = true) {
view.scrollTo(offset, DivSizeUnit.DP, animated)
}
fun scrollToEnd(animated: Boolean = false) {
view.scrollToTheEnd(animated)
}
fun scrollToStart(animated: Boolean = false) {
setCurrentItem(0, animated)
}
private fun createStrategy(overflow: String? = null): OverflowItemStrategy {
return OverflowItemStrategy.create(
overflow,
view.currentItem,
view.itemCount,
view.scrollRange,
view.scrollOffset,
view.metrics
)
}
companion object {
fun create(
id: String,
view: DivViewFacade,
resolver: ExpressionResolver,
direction: Direction = Direction.NEXT
): DivViewWithItemsController? {
val targetView = view.view.findViewWithTag<View>(id) ?: return null
val viewWithItems = DivViewWithItems.create(targetView, resolver) { direction } ?: return null
return DivViewWithItemsController(viewWithItems)
}
const val TAG = "DivViewWithItems"
}
}
+13
View File
@@ -0,0 +1,13 @@
{
"properties": {
"id": {
"$description": "translations.json#/div_action_scroll_id",
"type": "string"
},
"animated": {
"$description": "translations.json#/div_action_scroll_animated",
"type": "boolean",
"default_value": "true"
}
}
}
+45
View File
@@ -0,0 +1,45 @@
{
"allOf": [
{
"$ref": "div-action-scroll-base.json"
},
{
"type": "object",
"$description": "translations.json#/div_action_scroll_by",
"properties": {
"type": {
"type": "string",
"enum": [
"scroll_by"
]
},
"overflow": {
"$description": "translations.json#/div_action_scroll_overflow",
"type": "string",
"enum": [
"clamp",
"ring"
],
"default_value": "clamp"
},
"offset": {
"$description": "translations.json#/div_action_scroll_by_offset",
"type": "integer",
"default_value": "0"
},
"item_count": {
"$description": "translations.json#/div_action_scroll_by_item_count",
"type": "integer",
"default_value": "0"
}
},
"platforms": [
"android"
],
"required": [
"type",
"id"
]
}
]
}
+89
View File
@@ -0,0 +1,89 @@
{
"$description": "translations.json#/div_action_scroll_destination",
"definitions": {
"offset_destination": {
"$description": "translations.json#/div_action_scroll_destination_offset",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"offset"
]
},
"value": {
"$description": "translations.json#/div_action_scroll_destination_offset_value",
"$ref": "common.json#/non_negative_integer"
}
},
"required": [
"type",
"value"
]
},
"index_destination": {
"$description": "translations.json#/div_action_scroll_destination_index",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"index"
]
},
"value": {
"$description": "translations.json#/div_action_scroll_destination_index_value",
"$ref": "common.json#/non_negative_integer"
}
},
"required": [
"type",
"value"
]
},
"start_destination": {
"$description": "translations.json#/div_action_scroll_destination_start",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"start"
]
}
},
"required": [
"type"
]
},
"end_destination": {
"$description": "translations.json#/div_action_scroll_destination_end",
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"end"
]
}
},
"required": [
"type"
]
}
},
"anyOf": [
{
"$ref": "#/definitions/offset_destination"
},
{
"$ref": "#/definitions/index_destination"
},
{
"$ref": "#/definitions/start_destination"
},
{
"$ref": "#/definitions/end_destination"
}
]
}
+31
View File
@@ -0,0 +1,31 @@
{
"allOf": [
{
"$ref": "div-action-scroll-base.json"
},
{
"type": "object",
"$description": "translations.json#/div_action_scroll_to",
"properties": {
"type": {
"type": "string",
"enum": [
"scroll_to"
]
},
"destination": {
"$description": "translations.json#/div_action_scroll_to_destination",
"$ref": "div-action-scroll-destination.json"
}
},
"platforms": [
"android"
],
"required": [
"type",
"id",
"destination"
]
}
]
}
+6
View File
@@ -33,6 +33,12 @@
{
"$ref": "div-action-hide-tooltip.json"
},
{
"$ref": "div-action-scroll-by.json"
},
{
"$ref": "div-action-scroll-to.json"
},
{
"$ref": "div-action-set-state.json"
},
+60
View File
@@ -147,6 +147,66 @@
"en": "Context menu.",
"ru": "Контекстное меню."
},
"div_action_scroll_animated": {
"en": "If `true` (default value) scroll will be animated, else not.",
"ru": "Если `true` (значение по умолчанию) то пролистывание будет анимировано, иначе без анимации."
},
"div_action_scroll_by": {
"en": "Scrolls scrollable container from current position by `item_count` or by `offset`, if both provided scroll action will be combined, negative numbers associated with backward scroll.",
"ru": "Пролистывает контейнер со скроллом от текущей позиции на `item_count` или `offset`, если оба значения указаны, действие будет скомбинированным, отрицательные значения пролистывают назад."
},
"div_action_scroll_by_offset": {
"en": "Distance to scroll measured in `dp` from current position, negative value is associated with backward scroll. Applicable only in `gallery`.",
"ru": "Расстояние для скроллинга измеряемое в `dp` от текущей позиции, отрицательные значения пролистывают назад. Применим только в `gallery`"
},
"div_action_scroll_by_item_count": {
"en": "Count of container items to scroll, negative value is associated with backward scroll.",
"ru": "Количество элементов контейнера, которые надо пролистать, отрицательные значения пролистывают назад."
},
"div_action_scroll_destination": {
"en": "Specifies the destination of scroll in a container.",
"ru": "Указывает кончную точку пролистывания в контейнере."
},
"div_action_scroll_destination_end": {
"en": "Specifies container's end as scroll destination.",
"ru": "Указывает конец контейнера как кончную точку пролистывания."
},
"div_action_scroll_destination_index": {
"en": "Specifies element with provided index as scroll destination.",
"ru": "Указывает элемент с заданным индексом как кончную точку пролистывания."
},
"div_action_scroll_destination_index_value": {
"en": "Index of contaner's item.",
"ru": "Индекс элемента контейнера."
},
"div_action_scroll_destination_offset": {
"en": "Specifies position measured in `dp` from container's start as scroll destination. Applicable only in `gallery`.",
"ru": "Указывает позицию измеренную в `dp` от начала контейнера как кончную точку пролистывания. Применм только в `gallery`"
},
"div_action_scroll_destination_offset_value": {
"en": "Position in `dp`.",
"ru": "Позиция в `dp`."
},
"div_action_scroll_destination_start": {
"en": "Specifies container's start as scroll destination.",
"ru": "Указывает начало контейнера как кончную точку пролистывания."
},
"div_action_scroll_id": {
"en": "Identifier of the view that is going to be manipulated.",
"ru": "Идентификатор вью в котором нужно выполнить операцию."
},
"div_action_scroll_overflow": {
"en": "Specifies how navigation will occur when the boundary elements are reached:<li>`clamp` — Transition will stop at the boundary element (default value);</li><li>`ring` — Transition will be to the beginning or the end depending on the current element.</li>",
"ru": "Указывает, как будет происходить навигация при достижении граничных элементов:<li>`clamp` — переход остановится на граничном элементе (значение по умолчанию);</li><li>`ring` — произойдет переход в начало или конец в зависимости от текущего элемента.</li>"
},
"div_action_scroll_to": {
"en": "Scrolls or switches container to given destination provided by `destination`.",
"ru": "Выполняет скролл к позиции или переключает элемент в контейнере на указанный папаметром`destiantion`."
},
"div_action_scroll_to_destination": {
"en": "Specifies destination of scroll:<li>`index` - scroll or switch to item with index provided by `value`;</li><li>`offset` - scroll to position measured in `dp` from container's start and provided by `value`. Applicable only in `gallery`;</li><li>`start` - scrolls to start of container;</li><li>`end` - scrolls to end of container.</li>.",
"ru": "Указывает конечную точку пролистывания:<li>`index` - пролистывание до элемента с индексом, указанным в `value`;</li><li>`offset` - пролистывание до позиции измеренной в `dp` от начала контейнера, указанной в `value`. Применим только в `gallery`;</li><li>`start` - пролистывание в начало контейнера;</li><li>`end` - пролистывание в конец контейнера.</li>."
},
"div_action_set_state": {
"en": "Switches the appearance of content in `div-state`.",
"ru": "Устанавливает новый внешний вид контента в `div-state`."
@@ -0,0 +1,217 @@
{
"description": "Use typed actions for scroll and navigation in gallery",
"platforms": [
"android"
],
"div_data": {
"templates": {
"text_block": {
"type": "text",
"width": {
"type": "match_parent"
},
"height": {
"type": "fixed",
"value": 80
},
"background": [
{
"type": "solid",
"color": "#eeeeee"
}
],
"font_size": 20,
"text_alignment_vertical": "center",
"text_alignment_horizontal": "center",
"text_color": "#000000",
"margins": {
"left": 10,
"right": 10
}
}
},
"card": {
"log_id": "card",
"states": [
{
"state_id": 0,
"div": {
"type": "container",
"orientation": "vertical",
"items": [
{
"type": "gallery",
"id": "gallery1",
"scroll_mode": "default",
"items": [
{
"text": "Item 0",
"type": "text_block"
},
{
"text": "Item 1",
"type": "text_block"
},
{
"text": "Item 2",
"type": "text_block"
},
{
"text": "Item 3",
"type": "text_block"
},
{
"text": "Item 4",
"type": "text_block"
},
{
"text": "Item 5",
"type": "text_block"
}
]
}
]
}
}
]
}
},
"steps": [
{
"expected_screenshot": "step0.png"
},
{
"div_actions": [
{
"log_id": "gallery1/current",
"typed": {
"type": "scroll_to",
"id": "gallery1",
"destination": {
"type": "index",
"value": 1
}
}
}
],
"expected_screenshot": "step1.png"
},
{
"div_actions": [
{
"log_id": "gallery1/next",
"typed": {
"type": "scroll_by",
"id": "gallery1",
"item_count": 1
}
}
],
"expected_screenshot": "step2.png"
},
{
"div_actions": [
{
"log_id": "gallery1/prev",
"typed": {
"type": "scroll_by",
"id": "gallery1",
"item_count": -1
}
}
],
"expected_screenshot": "step1.png"
},
{
"div_actions": [
{
"log_id": "gallery1/end",
"typed": {
"type": "scroll_to",
"destination": {
"type": "end"
},
"id": "gallery1"
}
}
],
"delay": 500,
"expected_screenshot": "step4.png"
},
{
"div_actions": [
{
"log_id": "gallery1/start",
"typed": {
"type": "scroll_to",
"destination": {
"type": "start"
},
"id": "gallery1"
}
}
],
"delay": 500,
"expected_screenshot": "step0.png"
},
{
"div_actions": [
{
"log_id": "gallery1/current 2",
"typed": {
"type": "scroll_to",
"id": "gallery1",
"destination": {
"type": "index",
"value": 1
}
}
}
],
"expected_screenshot": "step1.png"
},
{
"div_actions": [
{
"log_id": "gallery1/forward",
"typed": {
"type": "scroll_by",
"id": "gallery1",
"offset": 50
}
}
],
"expected_screenshot": "step7.png"
},
{
"div_actions": [
{
"log_id": "gallery1/backward",
"typed": {
"type": "scroll_by",
"id": "gallery1",
"offset": -50
}
}
],
"expected_screenshot": "step1.png"
},
{
"div_actions": [
{
"log_id": "gallery1/to_position",
"typed": {
"type": "scroll_to",
"id": "gallery1",
"destination": {
"type": "offset",
"value": 200
}
}
}
],
"expected_screenshot": "step9.png"
}
]
}
@@ -0,0 +1,718 @@
{
"templates": {
"header": {
"type": "text",
"font_size": 18,
"paddings": {
"left": 10,
"right": 10,
"top": 10,
"bottom": 5
}
},
"button": {
"type": "text",
"height": {
"type": "fixed",
"value": 30
},
"width": {
"type": "fixed",
"value": 60
},
"text_alignment_horizontal": "center",
"text_alignment_vertical": "center",
"font_size": 18,
"font_weight": "bold",
"text_color": "#ffffff",
"background": [
{
"color": "#D098D3",
"type": "solid"
}
],
"margins": {
"left": 5,
"right": 5
},
"border": {
"corner_radius": 6
}
},
"text_block": {
"type": "text",
"$text": "header",
"width": {
"type": "match_parent"
},
"height": {
"type": "fixed",
"value": 80
},
"border": {
"corner_radius": 6
},
"background": [
{
"color": "#0e000000",
"type": "solid"
}
],
"font_size": 20,
"text_alignment_vertical": "center",
"text_alignment_horizontal": "center",
"text_color": "#000000",
"margins": {
"left": 10,
"right": 10
}
}
},
"card": {
"log_id": "card",
"states": [
{
"state_id": 0,
"div": {
"type": "container",
"orientation": "vertical",
"items": [
{
"type": "header",
"text": "scroll_mode = default"
},
{
"type": "gallery",
"id": "gallery1",
"scroll_mode": "default",
"default_item": 1,
"items": [
{
"text": "Item 0",
"type": "text_block"
},
{
"text": "Item 1",
"type": "text_block"
},
{
"text": "Item 2",
"type": "text_block"
},
{
"text": "Item 3",
"type": "text_block"
},
{
"text": "Item 4",
"type": "text_block"
},
{
"text": "Item 5",
"type": "text_block"
}
]
},
{
"type": "header",
"text": "scroll_mode = default. overflow=ring"
},
{
"type": "gallery",
"id": "gallery4",
"scroll_mode": "default",
"default_item": 1,
"items": [
{
"text": "Item 0",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
},
{
"text": "Item 1",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
},
{
"text": "Item 2",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
},
{
"text": "Item 3",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
},
{
"text": "Item 4",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
},
{
"text": "Item 5",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
}
]
},
{
"type": "header",
"text": "scroll_mode = paging"
},
{
"type": "gallery",
"id": "gallery2",
"scroll_mode": "paging",
"default_item": 1,
"items": [
{
"text": "Item 0",
"type": "text_block"
},
{
"text": "Item 1",
"type": "text_block"
},
{
"text": "Item 2",
"type": "text_block"
},
{
"text": "Item 3",
"type": "text_block"
},
{
"text": "Item 4",
"type": "text_block"
},
{
"text": "Item 5",
"type": "text_block"
}
]
},
{
"type": "header",
"text": "scroll_mode = paging. overflow=ring"
},
{
"type": "gallery",
"id": "gallery3",
"scroll_mode": "paging",
"default_item": 1,
"items": [
{
"text": "Item 0",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
},
{
"text": "Item 1",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
},
{
"text": "Item 2",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
},
{
"text": "Item 3",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
},
{
"text": "Item 4",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
},
{
"text": "Item 5",
"type": "text_block",
"width": {
"type": "fixed",
"value": 600
}
}
]
},
{
"type": "container",
"orientation": "horizontal",
"content_alignment_horizontal": "center",
"items": [
{
"type": "button",
"text": "<<",
"actions": [
{
"log_id": "gallery1/first",
"typed": {
"type": "scroll_to",
"id": "gallery1",
"animated": false,
"destination": {
"type": "index",
"value": 0
}
}
},
{
"log_id": "gallery2/first",
"typed": {
"type": "scroll_to",
"id": "gallery2",
"destination": {
"type": "index",
"value": 0
}
}
},
{
"log_id": "gallery3/first",
"typed": {
"type": "scroll_to",
"id": "gallery3",
"animated": false,
"destination": {
"type": "index",
"value": 0
}
}
},
{
"log_id": "gallery4/first",
"typed": {
"type": "scroll_to",
"id": "gallery4",
"destination": {
"type": "index",
"value": 0
}
}
}
]
},
{
"type": "button",
"text": "<",
"actions": [
{
"log_id": "gallery1/prev",
"typed": {
"type": "scroll_by",
"id": "gallery1",
"item_count": -1,
"animated": false
}
},
{
"log_id": "gallery2/prev",
"typed": {
"type": "scroll_by",
"id": "gallery2",
"item_count": -1
}
},
{
"log_id": "gallery3/prev",
"typed": {
"type": "scroll_by",
"id": "gallery3",
"overflow": "ring",
"item_count": -1,
"animated": false
}
},
{
"log_id": "gallery4/prev",
"typed": {
"type": "scroll_by",
"id": "gallery4",
"overflow": "ring",
"item_count": -1
}
}
]
},
{
"type": "button",
"text": ">",
"actions": [
{
"log_id": "gallery1/next",
"typed": {
"type": "scroll_by",
"id": "gallery1",
"item_count": 1,
"animated": false
}
},
{
"log_id": "gallery2/next",
"typed": {
"type": "scroll_by",
"id": "gallery2",
"item_count": 1
}
},
{
"log_id": "gallery3/next",
"typed": {
"type": "scroll_by",
"id": "gallery3",
"overflow": "ring",
"item_count": 1,
"animated": false
}
},
{
"log_id": "gallery4/next",
"typed": {
"type": "scroll_by",
"id": "gallery4",
"overflow": "ring",
"item_count": 1
}
}
]
},
{
"type": "button",
"text": ">>",
"actions": [
{
"log_id": "gallery1/last",
"typed": {
"type": "scroll_to",
"id": "gallery1",
"animated": false,
"destination": {
"type": "index",
"value": 5
}
}
},
{
"log_id": "gallery2/last",
"typed": {
"type": "scroll_to",
"id": "gallery2",
"destination": {
"type": "index",
"value": 5
}
}
},
{
"log_id": "gallery3/last",
"typed": {
"type": "scroll_to",
"id": "gallery3",
"animated": false,
"destination": {
"type": "index",
"value": 5
}
}
},
{
"log_id": "gallery4/last",
"typed": {
"type": "scroll_to",
"id": "gallery4",
"destination": {
"type": "index",
"value": 5
}
}
}
]
}
],
"paddings": {
"top": 10
}
},
{
"type": "container",
"orientation": "horizontal",
"content_alignment_horizontal": "center",
"items": [
{
"type": "button",
"text": "<<",
"actions": [
{
"log_id": "gallery1/scroll_to_start",
"typed": {
"type": "scroll_to",
"destination": {
"type": "start"
},
"id": "gallery1",
"animated": false
}
},
{
"log_id": "gallery2/scroll_to_start",
"typed": {
"type": "scroll_to",
"destination": {
"type": "start"
},
"id": "gallery2"
}
},
{
"log_id": "gallery3/scroll_to_start",
"typed": {
"type": "scroll_to",
"destination": {
"type": "start"
},
"id": "gallery3",
"animated": false
}
},
{
"log_id": "gallery4/scroll_to_start",
"typed": {
"type": "scroll_to",
"destination": {
"type": "start"
},
"id": "gallery4"
}
}
]
},
{
"type": "button",
"text": "<",
"actions": [
{
"log_id": "gallery1/scroll_backward by 50dp",
"typed": {
"type": "scroll_by",
"id": "gallery1",
"offset": -50,
"animated": false
}
},
{
"log_id": "gallery2/scroll_backward by 50dp",
"typed": {
"type": "scroll_by",
"id": "gallery2",
"offset": -50
}
},
{
"log_id": "gallery3/scroll_backward by 50dp",
"typed": {
"type": "scroll_by",
"id": "gallery3",
"offset": -50,
"overflow": "ring",
"animated": false
}
},
{
"log_id": "gallery4/scroll_backward by 50dp",
"typed": {
"type": "scroll_by",
"id": "gallery4",
"offset": -50,
"overflow": "ring"
}
}
]
},
{
"type": "button",
"text": "*",
"actions": [
{
"log_id": "gallery1/scroll to position 300dp",
"typed": {
"type": "scroll_to",
"id": "gallery1",
"animated": false,
"destination": {
"type": "offset",
"value": 300
}
}
},
{
"log_id": "gallery2/scroll to position 300dp",
"typed": {
"type": "scroll_to",
"id": "gallery2",
"destination": {
"type": "offset",
"value": 300
}
}
},
{
"log_id": "gallery3/scroll to position 300dp",
"typed": {
"type": "scroll_to",
"id": "gallery3",
"animated": false,
"destination": {
"type": "offset",
"value": 300
}
}
},
{
"log_id": "gallery4/scroll to position 300dp",
"typed": {
"type": "scroll_to",
"id": "gallery4",
"destination": {
"type": "offset",
"value": 300
}
}
}
]
},
{
"type": "button",
"text": ">",
"actions": [
{
"log_id": "gallery1/scroll_forward by 50dp",
"typed": {
"type": "scroll_by",
"id": "gallery1",
"offset": 50,
"animated": false
}
},
{
"log_id": "gallery2/scroll_forward by 50dp",
"typed": {
"type": "scroll_by",
"id": "gallery2",
"offset": 50
}
},
{
"log_id": "gallery3/scroll_forward by 50dp",
"typed": {
"type": "scroll_by",
"id": "gallery3",
"offset": 50,
"overflow": "ring",
"animated": false
}
},
{
"log_id": "gallery4/scroll_forward by 50dp",
"typed": {
"type": "scroll_by",
"id": "gallery4",
"offset": 50,
"overflow": "ring"
}
}
]
},
{
"type": "button",
"text": ">>",
"actions": [
{
"log_id": "gallery1/scroll_to_end",
"typed": {
"type": "scroll_to",
"destination": {
"type": "end"
},
"id": "gallery1",
"animated": false
}
},
{
"log_id": "gallery2/scroll_to_end",
"typed": {
"type": "scroll_to",
"destination": {
"type": "end"
},
"id": "gallery2"
}
},
{
"log_id": "gallery3/scroll_to_end",
"typed": {
"type": "scroll_to",
"destination": {
"type": "end"
},
"id": "gallery3",
"animated": false
}
},
{
"log_id": "gallery4/scroll_to_end",
"typed": {
"type": "scroll_to",
"destination": {
"type": "end"
},
"id": "gallery4"
}
}
]
}
],
"paddings": {
"top": 10
}
}
]
}
}
]
}
}
+18
View File
@@ -224,6 +224,24 @@
],
"file": "gallery/gallery-item-actions.json"
},
{
"title": "Gallery item actions typed",
"tags": [
"DivGallery",
"TypedActions"
],
"steps": [
"Horizontal swipe to left",
"Horizontal swipe to right",
"Click on buttons"
],
"expected_results": [
"Content is changes depending on scroll direction or clicked buttons",
"Gallery scroll is logged",
"first and last galleries are scrolled without animation"
],
"file": "gallery/gallery-item-actions-typed.json"
},
{
"title": "Gallery default item states",
"automated": [