From fc123e035a5b1342e5c8587e417eccfb92ac12b0 Mon Sep 17 00:00:00 2001 From: burstein Date: Mon, 25 May 2026 16:42:47 +0300 Subject: [PATCH] Supported div-video commit_hash:ca1673ef1da065578ca126318498915ccda9b5d3 --- .mapping.json | 34 ++ client/android/build.gradle | 1 + .../compose-video-view-based/build.gradle.kts | 25 ++ .../viewbased/ViewBasedDivVideoPlayer.kt | 163 ++++++++ .../ViewBasedDivVideoPlayerFactory.kt | 30 ++ .../div/compose/DivComposeConfiguration.kt | 27 ++ .../div/compose/actions/DivActionSource.kt | 1 + .../div/compose/dagger/DivContextComponent.kt | 2 + .../variables/DivVariableMutableState.kt | 17 + .../div/compose/video/DivVideoPlayer.kt | 72 ++++ .../div/compose/video/DivVideoPlayerConfig.kt | 43 ++ .../compose/video/DivVideoPlayerFactory.kt | 17 + .../yandex/div/compose/views/DivBlockView.kt | 9 +- .../div/compose/views/video/DivVideoView.kt | 140 +++++++ .../views/video/VideoActionPerformer.kt | 83 ++++ .../div/compose/DivViewWithVideoTest.kt | 381 ++++++++++++++++++ client/android/divkit-demo-app/build.gradle | 1 + .../divkit/demo/div/DemoRendererFacade.kt | 7 +- .../RegressionComposeViewCreator.kt | 5 + .../DivComposeScreenshotActivity.kt | 8 +- .../yandex/div/DivComposeScreenshotTest.kt | 2 + .../div-container/baseline-with-images.png | Bin 4366 -> 5063 bytes .../div-video/video-preview-scale-fill.png | Bin 0 -> 7682 bytes .../div-video/video-preview-scale-fit.png | Bin 0 -> 3416 bytes .../video-preview-scale-no-scale.png | Bin 0 -> 1957 bytes .../div-container/baseline-with-images.png | Bin 2926 -> 3660 bytes .../div-video/video-preview-scale-fill.png | Bin 0 -> 3268 bytes .../div-video/video-preview-scale-fit.png | Bin 0 -> 2572 bytes .../video-preview-scale-no-scale.png | Bin 0 -> 1963 bytes .../div-container/baseline-with-images.png | Bin 4314 -> 5020 bytes .../div-video/video-preview-scale-fill.png | Bin 0 -> 8093 bytes .../div-video/video-preview-scale-fit.png | Bin 0 -> 3861 bytes .../video-preview-scale-no-scale.png | Bin 0 -> 1957 bytes .../div-container/baseline-with-images.png | Bin 2926 -> 3660 bytes .../div-video/video-preview-scale-fill.png | Bin 0 -> 3268 bytes .../div-video/video-preview-scale-fit.png | Bin 0 -> 2572 bytes .../video-preview-scale-no-scale.png | Bin 0 -> 1963 bytes .../div-container/baseline-with-images.png | Bin 4868 -> 7044 bytes .../div-video/video-preview-scale-fill.png | Bin 0 -> 7476 bytes .../div-video/video-preview-scale-fit.png | Bin 0 -> 6004 bytes .../video-preview-scale-no-scale.png | Bin 0 -> 1206 bytes .../div-container/baseline-with-images.png | Bin 3750 -> 8012 bytes .../div-video/video-preview-scale-fill.png | Bin 0 -> 1608 bytes .../div-video/video-preview-scale-fit.png | Bin 0 -> 2184 bytes .../video-preview-scale-no-scale.png | Bin 0 -> 1490 bytes .../div-container/baseline-with-images.png | Bin 4868 -> 7044 bytes .../div-video/video-preview-scale-fill.png | Bin 0 -> 7476 bytes .../div-video/video-preview-scale-fit.png | Bin 0 -> 6004 bytes .../video-preview-scale-no-scale.png | Bin 0 -> 1206 bytes .../div-container/baseline-with-images.png | Bin 3750 -> 8170 bytes .../div-video/video-preview-scale-fill.png | Bin 0 -> 29558 bytes .../div-video/video-preview-scale-fit.png | Bin 0 -> 18744 bytes .../video-preview-scale-no-scale.png | Bin 0 -> 1858 bytes client/android/settings.gradle | 1 + .../com/yandex/div/test/data/DivVideoUtils.kt | 63 +++ 55 files changed, 1124 insertions(+), 8 deletions(-) create mode 100644 client/android/compose-video-view-based/build.gradle.kts create mode 100644 client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayer.kt create mode 100644 client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayerFactory.kt create mode 100644 client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayer.kt create mode 100644 client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerConfig.kt create mode 100644 client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerFactory.kt create mode 100644 client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/DivVideoView.kt create mode 100644 client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/VideoActionPerformer.kt create mode 100644 client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithVideoTest.kt create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png create mode 100644 client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png create mode 100644 client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/DivVideoUtils.kt diff --git a/.mapping.json b/.mapping.json index 6b73534eb..54f033314 100644 --- a/.mapping.json +++ b/.mapping.json @@ -603,6 +603,9 @@ "client/android/compose-interop/src/main/java/com/yandex/div/compose/interop/DivViewInterop.kt":"divkit/public/client/android/compose-interop/src/main/java/com/yandex/div/compose/interop/DivViewInterop.kt", "client/android/compose-lottie/build.gradle.kts":"divkit/public/client/android/compose-lottie/build.gradle.kts", "client/android/compose-lottie/src/main/kotlin/com/yandex/div/compose/lottie/LottieExtensionHandler.kt":"divkit/public/client/android/compose-lottie/src/main/kotlin/com/yandex/div/compose/lottie/LottieExtensionHandler.kt", + "client/android/compose-video-view-based/build.gradle.kts":"divkit/public/client/android/compose-video-view-based/build.gradle.kts", + "client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayer.kt":"divkit/public/client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayer.kt", + "client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayerFactory.kt":"divkit/public/client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayerFactory.kt", "client/android/compose/build.gradle.kts":"divkit/public/client/android/compose/build.gradle.kts", "client/android/compose/proguard-rules.pro":"divkit/public/client/android/compose/proguard-rules.pro", "client/android/compose/src/androidTest/kotlin/com/yandex/div/compose/DivViewPreview.kt":"divkit/public/client/android/compose/src/androidTest/kotlin/com/yandex/div/compose/DivViewPreview.kt", @@ -683,6 +686,9 @@ "client/android/compose/src/main/kotlin/com/yandex/div/compose/utils/scroll/ScrollableChildItem.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/utils/scroll/ScrollableChildItem.kt", "client/android/compose/src/main/kotlin/com/yandex/div/compose/utils/variables/DivVariableMutableState.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/utils/variables/DivVariableMutableState.kt", "client/android/compose/src/main/kotlin/com/yandex/div/compose/variables/DivVariableAdapter.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/variables/DivVariableAdapter.kt", + "client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayer.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayer.kt", + "client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerConfig.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerConfig.kt", + "client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerFactory.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerFactory.kt", "client/android/compose/src/main/kotlin/com/yandex/div/compose/views/DivBlockView.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/DivBlockView.kt", "client/android/compose/src/main/kotlin/com/yandex/div/compose/views/DivCustomView.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/DivCustomView.kt", "client/android/compose/src/main/kotlin/com/yandex/div/compose/views/DivSelectView.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/DivSelectView.kt", @@ -735,6 +741,8 @@ "client/android/compose/src/main/kotlin/com/yandex/div/compose/views/text/DivTextView.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/text/DivTextView.kt", "client/android/compose/src/main/kotlin/com/yandex/div/compose/views/text/SpanStyle.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/text/SpanStyle.kt", "client/android/compose/src/main/kotlin/com/yandex/div/compose/views/text/TextStyle.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/text/TextStyle.kt", + "client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/DivVideoView.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/DivVideoView.kt", + "client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/VideoActionPerformer.kt":"divkit/public/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/VideoActionPerformer.kt", "client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewAccessibilityTest.kt":"divkit/public/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewAccessibilityTest.kt", "client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewRecompositionTest.kt":"divkit/public/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewRecompositionTest.kt", "client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewTest.kt":"divkit/public/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewTest.kt", @@ -743,6 +751,7 @@ "client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithExtensionsTest.kt":"divkit/public/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithExtensionsTest.kt", "client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithFunctionsTest.kt":"divkit/public/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithFunctionsTest.kt", "client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithTriggersTest.kt":"divkit/public/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithTriggersTest.kt", + "client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithVideoTest.kt":"divkit/public/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithVideoTest.kt", "client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithVisibilityActionsRecompositionTest.kt":"divkit/public/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithVisibilityActionsRecompositionTest.kt", "client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithVisibilityActionsTest.kt":"divkit/public/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithVisibilityActionsTest.kt", "client/android/compose/src/test/kotlin/com/yandex/div/compose/IntegrationTest.kt":"divkit/public/client/android/compose/src/test/kotlin/com/yandex/div/compose/IntegrationTest.kt", @@ -5585,6 +5594,9 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png", @@ -7505,6 +7517,9 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png", @@ -9425,6 +9440,9 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png", @@ -11345,6 +11363,9 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png", @@ -13265,6 +13286,9 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png", @@ -15185,6 +15209,9 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png", @@ -17105,6 +17132,9 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_div_input_selection.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.Div2FocusScreenshotTest/focused/snapshot_with_blurred_and_focused_background_and_border.png", @@ -19025,6 +19055,9 @@ "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_left_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_45_around_top_right_corner.png", "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-transform/transform_turn_90_around_center.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png", + "client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png":"divkit/public/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png", "client/android/divkit-demo-app/ui-tests.gradle":"divkit/public/client/android/divkit-demo-app/ui-tests.gradle", "client/android/divkit-perftests/build.gradle":"divkit/public/client/android/divkit-perftests/build.gradle", "client/android/divkit-perftests/proguard-rules.pro":"divkit/public/client/android/divkit-perftests/proguard-rules.pro", @@ -19223,6 +19256,7 @@ "client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/DivTriggerUtils.kt":"divkit/public/client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/DivTriggerUtils.kt", "client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/DivTypedValueUtils.kt":"divkit/public/client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/DivTypedValueUtils.kt", "client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/DivVariableUtils.kt":"divkit/public/client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/DivVariableUtils.kt", + "client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/DivVideoUtils.kt":"divkit/public/client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/DivVideoUtils.kt", "client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/ExpressionUtils.kt":"divkit/public/client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/ExpressionUtils.kt", "client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/Utils.kt":"divkit/public/client/android/test-utils/src/main/kotlin/com/yandex/div/test/data/Utils.kt", "client/android/ui-test-common/build.gradle.kts":"divkit/public/client/android/ui-test-common/build.gradle.kts", diff --git a/client/android/build.gradle b/client/android/build.gradle index b8ba4ed69..5a5ab57b3 100644 --- a/client/android/build.gradle +++ b/client/android/build.gradle @@ -113,6 +113,7 @@ apiValidation { "api-generator-test", "compose", "compose-lottie", + "compose-video-view-based", "divkit-benchmark-app", "divkit-demo-app", "divkit-perftests", diff --git a/client/android/compose-video-view-based/build.gradle.kts b/client/android/compose-video-view-based/build.gradle.kts new file mode 100644 index 000000000..e58e326e2 --- /dev/null +++ b/client/android/compose-video-view-based/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.compose) +} + +apply(from = "../div-library.gradle") +apply(from = "../publish-android.gradle") + +android { + namespace = "com.yandex.div.compose.video.viewbased" + + defaultConfig { + minSdk = 23 + } +} + +dependencies { + implementation(project(":compose")) + implementation(project(":div")) + implementation(project(":div-data")) + + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.coreKtx) +} diff --git a/client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayer.kt b/client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayer.kt new file mode 100644 index 000000000..5d91136bf --- /dev/null +++ b/client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayer.kt @@ -0,0 +1,163 @@ +package com.yandex.div.compose.video.viewbased + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.viewinterop.AndroidView +import com.yandex.div.compose.video.DivVideoPlayer +import com.yandex.div.compose.video.DivVideoPlayerConfig +import com.yandex.div.compose.video.DivVideoSource +import com.yandex.div.core.player.DivPlayer +import com.yandex.div.core.player.DivPlayerFactory +import com.yandex.div.core.player.DivPlayerPlaybackConfig +import com.yandex.div.core.player.DivVideoResolution as PlayerDivVideoResolution +import com.yandex.div.core.player.DivVideoSource as PlayerDivVideoSource +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow + +/** + * Bridges any `View`-based [DivPlayer] implementation into the Compose-native + * [DivVideoPlayer] surface. + * + * Translates the delegate's callback-based [DivPlayer.Observer] into [StateFlow] + * properties, and forwards [DivVideoPlayerConfig] updates handed to [Content] to + * the delegate via `setSource` / `setMuted` / `setPlaybackSpeed` / `seek`. + * + * The underlying delegate is created lazily on the first composition of [Content]: + * some `DivPlayer` implementations need a non-empty source list at construction time + * to wire their internal listeners, and only at composition time do we have the real + * config. + */ +internal class ViewBasedDivVideoPlayer( + private val delegateFactory: DivPlayerFactory +) : DivVideoPlayer { + + private val _isReady = MutableStateFlow(false) + override val isReady: StateFlow = _isReady + + private val _isPlaying = MutableStateFlow(false) + override val isPlaying: StateFlow = _isPlaying + + private val _isBuffering = MutableStateFlow(false) + override val isBuffering: StateFlow = _isBuffering + + private val _isEnded = MutableStateFlow(false) + override val isEnded: StateFlow = _isEnded + + private val _error = MutableStateFlow(null) + override val error: StateFlow = _error + + private val _currentTimeMs = MutableStateFlow(0L) + override val currentTimeMs: StateFlow = _currentTimeMs + + private var delegate: DivPlayer? = null + + private val stateObserver = object : DivPlayer.Observer { + override fun onReady() { + _isReady.value = true + _isBuffering.value = false + } + + override fun onPlay() { + _isPlaying.value = true + _isEnded.value = false + } + + override fun onPause() { + _isPlaying.value = false + } + + override fun onBuffering() { + _isBuffering.value = true + } + + override fun onEnd() { + _isPlaying.value = false + _isEnded.value = true + } + + override fun onFatal(error: Throwable) { + _error.value = error + } + + override fun onCurrentTimeChange(timeMs: Long) { + _currentTimeMs.value = timeMs + } + } + + override fun play() { + delegate?.play() + } + + override fun pause() { + delegate?.pause() + } + + override fun seek(timeMs: Long) { + delegate?.seek(timeMs) + } + + override fun release() { + delegate?.let { + it.removeObserver(stateObserver) + it.release() + delegate = null + } + } + + @Composable + override fun Content(config: DivVideoPlayerConfig, modifier: Modifier) { + val player = remember { + delegateFactory.makePlayer( + config.sources.toPlayerSources(), + config.toPlayerPlaybackConfig(), + ).also { + it.addObserver(stateObserver) + delegate = it + } + } + + LaunchedEffect(config.sources, config.autoplay, config.repeatable, config.payload) { + player.setSource(config.sources.toPlayerSources(), config.toPlayerPlaybackConfig()) + } + LaunchedEffect(config.muted) { player.setMuted(config.muted) } + LaunchedEffect(config.playbackSpeed) { player.setPlaybackSpeed(config.playbackSpeed) } + + AndroidView( + modifier = modifier, + factory = { ctx -> + delegateFactory.makePlayerView(ctx).apply { + attach(player) + setScale(config.scale) + } + }, + update = { view -> + view.setScale(config.scale) + if (view.getAttachedPlayer() !== player) { + view.detach() + view.attach(player) + } + }, + onRelease = { view -> view.detach() }, + ) + } +} + +private fun List.toPlayerSources(): List = map { source -> + PlayerDivVideoSource( + url = source.url, + mimeType = source.mimeType, + resolution = source.resolution?.let { PlayerDivVideoResolution(it.width, it.height) }, + bitrate = source.bitrate, + ) +} + +private fun DivVideoPlayerConfig.toPlayerPlaybackConfig(): DivPlayerPlaybackConfig = + DivPlayerPlaybackConfig( + autoplay = autoplay, + isMuted = muted, + repeatable = repeatable, + payload = payload, + playbackSpeed = playbackSpeed, + ) diff --git a/client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayerFactory.kt b/client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayerFactory.kt new file mode 100644 index 000000000..996c768f5 --- /dev/null +++ b/client/android/compose-video-view-based/src/main/kotlin/com/yandex/div/compose/video/viewbased/ViewBasedDivVideoPlayerFactory.kt @@ -0,0 +1,30 @@ +package com.yandex.div.compose.video.viewbased + +import com.yandex.div.compose.video.DivVideoPlayer +import com.yandex.div.compose.video.DivVideoPlayerFactory +import com.yandex.div.core.annotations.ExperimentalApi +import com.yandex.div.core.player.DivPlayerFactory + +/** + * Compose-native adapter that exposes any `View`-based [DivPlayerFactory] (e.g. the + * media3 ExoPlayer factory or the Yandex `ListYandexPlayer` factory) through the + * Compose-native [DivVideoPlayerFactory] surface. + * + * The produced [DivVideoPlayer] renders itself via [androidx.compose.ui.viewinterop.AndroidView] + * interop wrapping the underlying [com.yandex.div.core.player.DivPlayerView]. A future + * pure-Compose implementation would use a Compose-native player surface instead. + * + * Usage: + * ``` + * val configuration = DivComposeConfiguration( + * playerFactory = ViewBasedDivVideoPlayerFactory(ExoDivPlayerFactory(context)), + * ... + * ) + * ``` + */ +@ExperimentalApi +class ViewBasedDivVideoPlayerFactory( + private val delegateFactory: DivPlayerFactory, +) : DivVideoPlayerFactory { + override fun makePlayer(): DivVideoPlayer = ViewBasedDivVideoPlayer(delegateFactory) +} diff --git a/client/android/compose/src/main/kotlin/com/yandex/div/compose/DivComposeConfiguration.kt b/client/android/compose/src/main/kotlin/com/yandex/div/compose/DivComposeConfiguration.kt index 467bb8a48..f89ed91e7 100644 --- a/client/android/compose/src/main/kotlin/com/yandex/div/compose/DivComposeConfiguration.kt +++ b/client/android/compose/src/main/kotlin/com/yandex/div/compose/DivComposeConfiguration.kt @@ -1,6 +1,8 @@ package com.yandex.div.compose import android.graphics.Typeface +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import com.yandex.div.compose.actions.DivExternalActionHandler import com.yandex.div.compose.custom.DivCustomViewFactory @@ -8,10 +10,15 @@ import com.yandex.div.compose.dagger.Names import com.yandex.div.compose.extensions.DivExtensionHandler import com.yandex.div.compose.font.DivFontSource import com.yandex.div.compose.font.DivFontSourceProvider +import com.yandex.div.compose.video.DivVideoPlayer +import com.yandex.div.compose.video.DivVideoPlayerConfig +import com.yandex.div.compose.video.DivVideoPlayerFactory import com.yandex.div.core.annotations.ExperimentalApi import com.yandex.div.core.expression.variables.DivVariableController import com.yandex.yatagan.Module import com.yandex.yatagan.Provides +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow import javax.inject.Named /** @@ -42,6 +49,9 @@ class DivComposeConfiguration( @get:Provides val fontSourceProvider: DivFontSourceProvider = defaultFontSourceProvider, + @get:Provides + val playerFactory: DivVideoPlayerFactory = defaultDivVideoPlayerFactory, + @get:Provides val reporter: DivReporter = DivReporter(), @@ -57,3 +67,20 @@ private val defaultFontSourceProvider = object : DivFontSourceProvider { return DivFontSource.Typeface(Typeface.DEFAULT) } } + +private val defaultDivVideoPlayerFactory = DivVideoPlayerFactory { + object : DivVideoPlayer { + override val isReady: StateFlow = MutableStateFlow(false) + override val isPlaying: StateFlow = MutableStateFlow(false) + override val isBuffering: StateFlow = MutableStateFlow(false) + override val isEnded: StateFlow = MutableStateFlow(false) + override val error: StateFlow = MutableStateFlow(null) + override val currentTimeMs: StateFlow = MutableStateFlow(0L) + override fun seek(timeMs: Long) = Unit + override fun play() = Unit + override fun pause() = Unit + override fun release() = Unit + @Composable + override fun Content(config: DivVideoPlayerConfig, modifier: Modifier) = Unit + } +} diff --git a/client/android/compose/src/main/kotlin/com/yandex/div/compose/actions/DivActionSource.kt b/client/android/compose/src/main/kotlin/com/yandex/div/compose/actions/DivActionSource.kt index f374f2227..7590434b4 100644 --- a/client/android/compose/src/main/kotlin/com/yandex/div/compose/actions/DivActionSource.kt +++ b/client/android/compose/src/main/kotlin/com/yandex/div/compose/actions/DivActionSource.kt @@ -13,5 +13,6 @@ enum class DivActionSource { LONG_TAP, TAP, TRIGGER, + VIDEO, VISIBILITY } diff --git a/client/android/compose/src/main/kotlin/com/yandex/div/compose/dagger/DivContextComponent.kt b/client/android/compose/src/main/kotlin/com/yandex/div/compose/dagger/DivContextComponent.kt index 92bb22382..b72fb1480 100644 --- a/client/android/compose/src/main/kotlin/com/yandex/div/compose/dagger/DivContextComponent.kt +++ b/client/android/compose/src/main/kotlin/com/yandex/div/compose/dagger/DivContextComponent.kt @@ -12,6 +12,7 @@ import com.yandex.div.compose.font.DivFontSourceProvider import com.yandex.div.compose.images.ImageRequestListener import com.yandex.div.compose.internal.DivDebugConfiguration import com.yandex.div.compose.internal.DivDebugFeatures +import com.yandex.div.compose.video.DivVideoPlayerFactory import com.yandex.div.core.expression.variables.DivVariableController import com.yandex.yatagan.BindsInstance import com.yandex.yatagan.Component @@ -35,6 +36,7 @@ internal interface DivContextComponent { val fontFamilyCache: DivFontFamilyCache val imageLoader: ImageLoader val imageRequestListener: ImageRequestListener + val playerFactory: DivVideoPlayerFactory val viewContextStorage: DivViewContextStorage @get:Named(Names.HOST_VARIABLES) diff --git a/client/android/compose/src/main/kotlin/com/yandex/div/compose/utils/variables/DivVariableMutableState.kt b/client/android/compose/src/main/kotlin/com/yandex/div/compose/utils/variables/DivVariableMutableState.kt index 3d4b5b228..c0a2b3b24 100644 --- a/client/android/compose/src/main/kotlin/com/yandex/div/compose/utils/variables/DivVariableMutableState.kt +++ b/client/android/compose/src/main/kotlin/com/yandex/div/compose/utils/variables/DivVariableMutableState.kt @@ -20,6 +20,11 @@ internal fun mutableStateFromVariable(variableName: String, defaultValue: Boolea return mutableStateFromBooleanVariable(variableName) ?: remember { mutableStateOf(defaultValue) } } +@Composable +internal fun mutableStateFromVariable(variableName: String, defaultValue: Long): MutableState { + return mutableStateFromIntegerVariable(variableName) ?: remember { mutableStateOf(defaultValue) } +} + @Composable internal fun mutableStateFromStringVariable(variableName: String): MutableState? { return rememberVariableMutableState( @@ -44,6 +49,18 @@ internal fun mutableStateFromBooleanVariable(variableName: String): MutableState ) } +@Composable +internal fun mutableStateFromIntegerVariable(variableName: String): MutableState? { + return rememberVariableMutableState( + variableName = variableName, + readValue = { it.getValue() as Long }, + validate = { variable -> + if (variable is Variable.IntegerVariable) null + else "variable [$variableName] is not an integer variable" + }, + ) +} + @Composable private fun rememberVariableMutableState( variableName: String, diff --git a/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayer.kt b/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayer.kt new file mode 100644 index 000000000..b6948aba0 --- /dev/null +++ b/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayer.kt @@ -0,0 +1,72 @@ +package com.yandex.div.compose.video + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.yandex.div.core.annotations.ExperimentalApi +import kotlinx.coroutines.flow.StateFlow + +/** + * Compose-native player abstraction for `div-video`. + * + * Inputs (sources, playback options, scale, ...) are pushed into the player by passing + * a [DivVideoPlayerConfig] to [Content] on every composition. Outputs — playback state + * and errors — are exposed as [StateFlow] so they can be consumed both from coroutines + * and from `@Composable` functions via `collectAsState`. + * + * Implementations are free to render either via [androidx.compose.ui.viewinterop.AndroidView] + * interop (for existing `View`-based players such as media3) or natively in Compose. + */ +@ExperimentalApi +interface DivVideoPlayer { + + /** + * `true` once the player is ready to render frames. + */ + val isReady: StateFlow + + /** + * `true` while the player is actively playing. + */ + val isPlaying: StateFlow + + /** + * `true` while the player is buffering. + */ + val isBuffering: StateFlow + + /** + * `true` when playback has reached the end. + */ + val isEnded: StateFlow + + /** + * Last fatal error, or `null` if no error has occurred. + */ + val error: StateFlow + + /** + * Current playback position in milliseconds; updated by the player as playback + * progresses. Use [seek] to change the position. + */ + val currentTimeMs: StateFlow + + fun play() + + fun pause() + + /** + * Jumps playback to the given position. Subsequent updates to [currentTimeMs] reflect + * the new position. + */ + fun seek(timeMs: Long) + + fun release() + + /** + * Renders the visual representation of the player and applies [config]. + * + * Changes to [config] between subsequent calls drive the underlying playback engine. + */ + @Composable + fun Content(config: DivVideoPlayerConfig, modifier: Modifier) +} diff --git a/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerConfig.kt b/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerConfig.kt new file mode 100644 index 000000000..00c3fdbdd --- /dev/null +++ b/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerConfig.kt @@ -0,0 +1,43 @@ +package com.yandex.div.compose.video + +import android.net.Uri +import com.yandex.div.core.annotations.ExperimentalApi +import com.yandex.div2.DivVideoScale +import org.json.JSONObject + +/** + * Input parameters supplied to a [DivVideoPlayer] via [DivVideoPlayer.Content]. + * + * Fed into the player on every composition; the player observes changes between + * subsequent values and reacts (e.g. starts a new source, mutes, changes speed). + */ +@ExperimentalApi +data class DivVideoPlayerConfig( + val sources: List = emptyList(), + val autoplay: Boolean = false, + val repeatable: Boolean = false, + val payload: JSONObject? = null, + val muted: Boolean = false, + val playbackSpeed: Float = 1f, + val scale: DivVideoScale = DivVideoScale.FIT, +) + +/** + * Single source variant passed to a [DivVideoPlayer]. + */ +@ExperimentalApi +data class DivVideoSource( + val url: Uri, + val mimeType: String = "", + val resolution: DivVideoResolution? = null, + val bitrate: Long? = null, +) + +/** + * Optional resolution metadata for a [DivVideoSource]. + */ +@ExperimentalApi +data class DivVideoResolution( + val width: Int, + val height: Int, +) diff --git a/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerFactory.kt b/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerFactory.kt new file mode 100644 index 000000000..1fcf8f07b --- /dev/null +++ b/client/android/compose/src/main/kotlin/com/yandex/div/compose/video/DivVideoPlayerFactory.kt @@ -0,0 +1,17 @@ +package com.yandex.div.compose.video + +import com.yandex.div.core.annotations.ExperimentalApi + +/** + * Factory that produces a [DivVideoPlayer]. + * + * The returned player applies configuration when its [DivVideoPlayer.Content] composable + * receives a [DivVideoPlayerConfig]; the factory itself doesn't take any input. + * + * @see com.yandex.div.compose.DivComposeConfiguration + */ +@ExperimentalApi +fun interface DivVideoPlayerFactory { + + fun makePlayer(): DivVideoPlayer +} diff --git a/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/DivBlockView.kt b/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/DivBlockView.kt index 3da0d3ea0..11ab1fb30 100644 --- a/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/DivBlockView.kt +++ b/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/DivBlockView.kt @@ -8,17 +8,18 @@ import com.yandex.div.compose.dagger.LocalComponent import com.yandex.div.compose.dagger.WithLocalComponent import com.yandex.div.compose.expressions.observedValue import com.yandex.div.compose.extensions.DivExtensionEnvironment -import com.yandex.div.compose.utils.reportError import com.yandex.div.compose.views.container.DivContainerView import com.yandex.div.compose.views.gallery.DivGalleryView import com.yandex.div.compose.views.grid.DivGridView import com.yandex.div.compose.views.image.DivImageView -import com.yandex.div.compose.views.input.DivInputView +import com.yandex.div.compose.views.pager.DivPagerView import com.yandex.div.compose.views.modifiers.apply import com.yandex.div.compose.views.modifiers.applyPaddings -import com.yandex.div.compose.views.pager.DivPagerView +import com.yandex.div.compose.utils.reportError +import com.yandex.div.compose.views.input.DivInputView import com.yandex.div.compose.views.state.DivStateView import com.yandex.div.compose.views.text.DivTextView +import com.yandex.div.compose.views.video.DivVideoView import com.yandex.div2.Div import com.yandex.div2.DivExtension import com.yandex.div2.DivVisibility @@ -101,11 +102,11 @@ private fun BaseView( is Div.State -> DivStateView(modifier, data.value) is Div.Switch -> DivSwitchView(modifier.applyPaddings(data), data.value) is Div.Text -> DivTextView(modifier.applyPaddings(data), data.value) + is Div.Video -> DivVideoView(modifier.applyPaddings(data), data.value) is Div.GifImage -> NotSupported("gif") is Div.Indicator -> NotSupported("indicator") is Div.Slider -> NotSupported("slider") is Div.Tabs -> NotSupported("tabs") - is Div.Video -> NotSupported("video") } } diff --git a/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/DivVideoView.kt b/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/DivVideoView.kt new file mode 100644 index 000000000..5aae5cf7a --- /dev/null +++ b/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/DivVideoView.kt @@ -0,0 +1,140 @@ +package com.yandex.div.compose.views.video + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.layout.FixedScale +import androidx.compose.ui.platform.LocalDensity +import coil3.ImageLoader +import coil3.compose.rememberAsyncImagePainter +import com.yandex.div.compose.context.divContext +import com.yandex.div.compose.dagger.LocalComponent +import com.yandex.div.compose.expressions.observedValue +import com.yandex.div.compose.images.ImageRequestParams +import com.yandex.div.compose.images.decodePreview +import com.yandex.div.compose.images.rememberImageRequest +import com.yandex.div.compose.utils.reportError +import com.yandex.div.compose.utils.variables.mutableStateFromIntegerVariable +import com.yandex.div.compose.video.DivVideoPlayer +import com.yandex.div.compose.video.DivVideoPlayerConfig +import com.yandex.div.compose.video.DivVideoResolution +import com.yandex.div.compose.video.DivVideoSource +import com.yandex.div2.DivVideo +import com.yandex.div2.DivVideoScale +import com.yandex.div2.DivVideoSource as Div2VideoSource + +@Composable +internal fun DivVideoView(modifier: Modifier, data: DivVideo) { + val context = divContext + val config = data.observedConfig() + + if (config.sources.isEmpty() && data.playerSettingsPayload == null) { + reportError( + "Neither 'video_source' nor 'player_settings_payload' are specified for video with id '${data.id}'" + ) + } + + val player = remember { context.component.playerFactory.makePlayer() } + + DisposableEffect(player) { + onDispose { player.release() } + } + + ObserveVideoActions( + player = player, + data = data, + actionHandler = context.component.actionHandler, + actionHandlingContext = LocalComponent.current.actionHandlingContext, + ) + + data.elapsedTimeVariable?.let { variableName -> + ObserveElapsedTimeVariable(player = player, variableName = variableName) + } + + Box(modifier = modifier) { + player.Content(config = config, modifier = Modifier.fillMaxSize()) + + if (!player.isReady.collectAsState().value) { + data.preview?.let { + VideoPreviewImage( + imageLoader = divContext.component.imageLoader, + scale = config.scale, + preview = it.observedValue(transform = ::decodePreview) + ) + } + } + } +} + +@Composable +private fun ObserveElapsedTimeVariable(player: DivVideoPlayer, variableName: String) { + val variableState = mutableStateFromIntegerVariable(variableName) ?: return + + LaunchedEffect(player) { + player.currentTimeMs.collect { timeMs -> + variableState.value = timeMs + } + } + + LaunchedEffect(variableState.value) { + if (variableState.value != player.currentTimeMs.value) { + player.seek(variableState.value) + } + } +} + +@Composable +private fun VideoPreviewImage(imageLoader: ImageLoader, scale: DivVideoScale, preview: ByteArray) { + val density = LocalDensity.current.density + val contentScale = scale.toContentScale(density) + val imageRequest = rememberImageRequest( + ImageRequestParams(data = preview, transformations = emptyList()) + ) + Image( + modifier = Modifier.fillMaxSize(), + painter = rememberAsyncImagePainter(model = imageRequest, imageLoader = imageLoader), + contentDescription = null, + contentScale = contentScale, + ) +} + +@Composable +private fun DivVideo.observedConfig(): DivVideoPlayerConfig { + return DivVideoPlayerConfig( + sources = videoSources.orEmpty().map { it.observedPlayerSource() }, + autoplay = autostart.observedValue(), + repeatable = repeatable.observedValue(), + payload = playerSettingsPayload?.observedValue(), + muted = muted.observedValue(), + playbackSpeed = playbackSpeed.observedValue().toFloat(), + scale = scale.observedValue(), + ) +} + +@Composable +private fun Div2VideoSource.observedPlayerSource(): DivVideoSource { + return DivVideoSource( + url = url.observedValue(), + mimeType = mimeType.observedValue(), + resolution = resolution?.let { + DivVideoResolution( + width = it.width.observedValue().toInt(), + height = it.height.observedValue().toInt(), + ) + }, + bitrate = bitrate?.observedValue(), + ) +} + +private fun DivVideoScale.toContentScale(density: Float): ContentScale = when (this) { + DivVideoScale.FILL -> ContentScale.Crop + DivVideoScale.FIT -> ContentScale.Fit + DivVideoScale.NO_SCALE -> FixedScale(density) +} diff --git a/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/VideoActionPerformer.kt b/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/VideoActionPerformer.kt new file mode 100644 index 000000000..a5451779b --- /dev/null +++ b/client/android/compose/src/main/kotlin/com/yandex/div/compose/views/video/VideoActionPerformer.kt @@ -0,0 +1,83 @@ +package com.yandex.div.compose.views.video + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import com.yandex.div.compose.DivReporter +import com.yandex.div.compose.actions.DivActionHandler +import com.yandex.div.compose.actions.DivActionHandlingContext +import com.yandex.div.compose.actions.DivActionSource +import com.yandex.div.compose.dagger.LocalComponent +import com.yandex.div.compose.video.DivVideoPlayer +import com.yandex.div2.DivAction +import com.yandex.div2.DivVideo +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.drop +import kotlinx.coroutines.launch + +@Composable +internal fun ObserveVideoActions( + player: DivVideoPlayer, + data: DivVideo, + actionHandler: DivActionHandler, + actionHandlingContext: DivActionHandlingContext, +) { + val reporter = LocalComponent.current.reporter + LaunchedEffect(player, data) { + val performer = VideoActionPerformer(player, data, actionHandler, actionHandlingContext, reporter) + performer.perform() + } +} + +private class VideoActionPerformer( + private val player: DivVideoPlayer, + private val data: DivVideo, + private val actionHandler: DivActionHandler, + private val actionHandlingContext: DivActionHandlingContext, + private val reporter: DivReporter, +) { + + suspend fun perform() = coroutineScope { + launch { observePlayingChanges() } + launch { observeBufferingChanges() } + launch { observeEndedChanges() } + launch { observeErrors() } + } + + private suspend fun observePlayingChanges() { + player.isPlaying.drop(1).collect { playing -> + if (playing) { + performActions(data.resumeActions) + } else if (!player.isEnded.value) { + performActions(data.pauseActions) + } + } + } + + private suspend fun observeBufferingChanges() { + player.isBuffering.drop(1).collect { buffering -> + if (buffering) performActions(data.bufferingActions) + } + } + + private suspend fun observeEndedChanges() { + player.isEnded.drop(1).collect { ended -> + if (ended) performActions(data.endActions) + } + } + + private suspend fun observeErrors() { + player.error.collect { err -> + if (err != null) { + reporter.reportError( + "Playback in div with id '${data.id}' encountered an error: ${err.message}" + ) + performActions(data.fatalActions) + } + } + } + + private fun performActions(actions: List?) { + if (actions.isNullOrEmpty()) return + actionHandler.handle(actionHandlingContext, actions, source = DivActionSource.VIDEO) + } +} diff --git a/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithVideoTest.kt b/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithVideoTest.kt new file mode 100644 index 000000000..b59270f85 --- /dev/null +++ b/client/android/compose/src/test/kotlin/com/yandex/div/compose/DivViewWithVideoTest.kt @@ -0,0 +1,381 @@ +package com.yandex.div.compose + +import androidx.compose.foundation.layout.Box +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.mutableStateOf +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.test.junit4.v2.createComposeRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.yandex.div.compose.actions.DivActionData +import com.yandex.div.compose.actions.DivActionHandlingContext +import com.yandex.div.compose.actions.DivExternalActionHandler +import com.yandex.div.compose.video.DivVideoPlayer +import com.yandex.div.compose.video.DivVideoPlayerConfig +import com.yandex.div.compose.video.DivVideoPlayerFactory +import com.yandex.div.core.expression.variables.DivVariableController +import com.yandex.div.data.Variable +import com.yandex.div.test.data.action +import com.yandex.div.test.data.constant +import com.yandex.div.test.data.data +import com.yandex.div.test.data.video +import com.yandex.div.test.data.videoSource +import com.yandex.div2.Div +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import org.junit.Rule +import org.junit.runner.RunWith +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNull +import kotlin.test.assertTrue + +@RunWith(AndroidJUnit4::class) +class DivViewWithVideoTest { + + @get:Rule + val rule = createComposeRule() + + private val reporter = TestReporter() + private val variableController = DivVariableController() + private val playerFactory = FakeDivVideoPlayerFactory() + private val externalActionHandler = RecordingExternalActionHandler() + + private val configuration = DivComposeConfiguration( + actionHandler = externalActionHandler, + playerFactory = playerFactory, + reporter = reporter, + variableController = variableController, + ) + + @Test + fun `error is reported if no sources and no payload`() { + reporter.failOnError = false + + setContent( + video(id = "video") + ) + + assertEquals( + "Neither 'video_source' nor 'player_settings_payload' are specified for video with id 'video'", + reporter.lastError + ) + } + + @Test + fun `no error reported when only player_settings_payload is set`() { + setContent( + video(playerSettingsPayload = constant(org.json.JSONObject())) + ) + + assertNull(reporter.lastError) + } + + @Test + fun `no error reported when only video_sources is set`() { + setContent( + video(videoSources = listOf(videoSource())) + ) + + assertNull(reporter.lastError) + } + + @Test + fun `release is called when video leaves composition`() { + val visible = mutableStateOf(true) + val divData = data(video(videoSources = listOf(videoSource()))) + rule.setContent { + val divContext = DivContext( + baseContext = LocalContext.current, + configuration = configuration, + ) + CompositionLocalProvider(LocalContext provides divContext) { + Box { + if (visible.value) { + DivView(data = divData) + } + } + } + } + + rule.waitForIdle() + val player = playerFactory.lastCreatedPlayer!! + assertFalse(player.released) + + visible.value = false + rule.waitForIdle() + + assertTrue(player.released) + } + + @Test + fun `config sources reflect sources from data`() { + setContent( + video(videoSources = listOf(videoSource(mimeType = constant("video/webm")))) + ) + + rule.waitForIdle() + + val sources = playerFactory.lastCreatedPlayer!!.lastConfig!!.sources + assertEquals(1, sources.size) + assertEquals("video/webm", sources[0].mimeType) + } + + @Test + fun `config muted reflects muted value from data`() { + setContent( + video( + muted = constant(true), + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + + assertEquals(true, playerFactory.lastCreatedPlayer!!.lastConfig!!.muted) + } + + @Test + fun `config playbackSpeed reflects speed from data`() { + setContent( + video( + playbackSpeed = constant(1.5), + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + + assertEquals(1.5f, playerFactory.lastCreatedPlayer!!.lastConfig!!.playbackSpeed) + } + + @Test + fun `resume actions are invoked when player starts playing`() { + setContent( + video( + resumeActions = listOf(action(id = "resume", url = "test://resume")), + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + playerFactory.lastCreatedPlayer!!.isPlayingState.value = true + rule.waitForIdle() + + assertEquals("resume", externalActionHandler.lastAction?.id) + } + + @Test + fun `pause actions are invoked when player pauses without ending`() { + setContent( + video( + pauseActions = listOf(action(id = "pause", url = "test://pause")), + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + val player = playerFactory.lastCreatedPlayer!! + player.isPlayingState.value = true + rule.waitForIdle() + player.isPlayingState.value = false + rule.waitForIdle() + + assertEquals("pause", externalActionHandler.lastAction?.id) + } + + @Test + fun `pause actions are not invoked when player has ended`() { + setContent( + video( + pauseActions = listOf(action(id = "pause", url = "test://pause")), + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + val player = playerFactory.lastCreatedPlayer!! + player.isPlayingState.value = true + rule.waitForIdle() + player.isEndedState.value = true + player.isPlayingState.value = false + rule.waitForIdle() + + assertNull(externalActionHandler.lastAction) + } + + @Test + fun `buffering actions are invoked when player buffers`() { + setContent( + video( + bufferingActions = listOf(action(id = "buffer", url = "test://buffer")), + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + playerFactory.lastCreatedPlayer!!.isBufferingState.value = true + rule.waitForIdle() + + assertEquals("buffer", externalActionHandler.lastAction?.id) + } + + @Test + fun `end actions are invoked when player ends`() { + setContent( + video( + endActions = listOf(action(id = "end", url = "test://end")), + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + playerFactory.lastCreatedPlayer!!.isEndedState.value = true + rule.waitForIdle() + + assertEquals("end", externalActionHandler.lastAction?.id) + } + + @Test + fun `fatal actions are invoked when player errors out`() { + reporter.failOnError = false + + setContent( + video( + id = "video", + fatalActions = listOf(action(id = "fatal", url = "test://fatal")), + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + playerFactory.lastCreatedPlayer!!.errorState.value = IllegalStateException("boom") + rule.waitForIdle() + + assertEquals("fatal", externalActionHandler.lastAction?.id) + } + + @Test + fun `error is reported when player encounters an error`() { + reporter.failOnError = false + + setContent( + video( + id = "video", + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + playerFactory.lastCreatedPlayer!!.errorState.value = IllegalStateException("boom") + rule.waitForIdle() + + assertEquals( + "Playback in div with id 'video' encountered an error: boom", + reporter.lastError + ) + } + + @Test + fun `elapsed_time_variable is updated from player time`() { + val elapsed = Variable.IntegerVariable("elapsed", 0) + variableController.declare(elapsed) + + setContent( + video( + elapsedTimeVariable = "elapsed", + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + playerFactory.lastCreatedPlayer!!.currentTimeMsState.value = 5_000L + rule.waitForIdle() + + assertEquals(5_000L, elapsed.getValue()) + } + + @Test + fun `player seeks when elapsed_time_variable changes`() { + val elapsed = Variable.IntegerVariable("elapsed", 0) + variableController.declare(elapsed) + + setContent( + video( + elapsedTimeVariable = "elapsed", + videoSources = listOf(videoSource()), + ) + ) + + rule.waitForIdle() + elapsed.set(7_500L) + rule.waitForIdle() + + assertEquals(7_500L, playerFactory.lastCreatedPlayer!!.currentTimeMs.value) + } + + private fun setContent(content: Div) { + rule.setContent( + configuration = configuration, + data = data(content) + ) + } +} + +private class RecordingExternalActionHandler : DivExternalActionHandler { + var lastAction: DivActionData? = null + private set + + override fun handle(context: DivActionHandlingContext, action: DivActionData) { + lastAction = action + } +} + +private class FakeDivVideoPlayerFactory : DivVideoPlayerFactory { + + var lastCreatedPlayer: FakeDivVideoPlayer? = null + private set + + override fun makePlayer(): DivVideoPlayer { + return FakeDivVideoPlayer().also { lastCreatedPlayer = it } + } +} + +private class FakeDivVideoPlayer : DivVideoPlayer { + val isReadyState = MutableStateFlow(false) + val isPlayingState = MutableStateFlow(false) + val isBufferingState = MutableStateFlow(false) + val isEndedState = MutableStateFlow(false) + val currentTimeMsState = MutableStateFlow(0L) + val errorState = MutableStateFlow(null) + + override val isReady: StateFlow = isReadyState + override val isPlaying: StateFlow = isPlayingState + override val isBuffering: StateFlow = isBufferingState + override val isEnded: StateFlow = isEndedState + override val currentTimeMs: StateFlow = currentTimeMsState + override val error: StateFlow = errorState + + var lastConfig: DivVideoPlayerConfig? = null + private set + var released: Boolean = false + private set + + override fun play() = Unit + override fun pause() = Unit + + override fun seek(timeMs: Long) { + currentTimeMsState.value = timeMs + } + + override fun release() { + released = true + } + + @Composable + override fun Content(config: DivVideoPlayerConfig, modifier: Modifier) { + lastConfig = config + } +} diff --git a/client/android/divkit-demo-app/build.gradle b/client/android/divkit-demo-app/build.gradle index 5082bec04..75a932abb 100644 --- a/client/android/divkit-demo-app/build.gradle +++ b/client/android/divkit-demo-app/build.gradle @@ -89,6 +89,7 @@ dependencies { implementation project(path: ':coil') implementation project(path: ':compose') implementation project(path: ':compose-lottie') + implementation project(path: ':compose-video-view-based') implementation project(path: ':div') implementation project(path: ':div-gesture') implementation project(path: ':div-lottie') diff --git a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/div/DemoRendererFacade.kt b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/div/DemoRendererFacade.kt index ca0d50c1c..b0c050494 100644 --- a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/div/DemoRendererFacade.kt +++ b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/div/DemoRendererFacade.kt @@ -8,10 +8,10 @@ import androidx.compose.ui.platform.ComposeView import androidx.core.net.toUri import com.yandex.div.DivDataTag import com.yandex.div.compose.DivComposeConfiguration -import com.yandex.div.compose.DivView as ComposeDivView -import com.yandex.div.compose.DivContext as ComposeDivContext +import com.yandex.div.compose.video.viewbased.ViewBasedDivVideoPlayerFactory import com.yandex.div.core.Div2Context import com.yandex.div.core.annotations.InternalApi +import com.yandex.div.video.m3.ExoDivPlayerFactory import com.yandex.div.core.expression.variables.DivVariableController import com.yandex.div.core.view2.Div2View import com.yandex.div.data.DivParsingEnvironment @@ -23,6 +23,8 @@ import com.yandex.divkit.demo.font.ComposeFontSourceProvider import com.yandex.divkit.demo.utils.applyPatchByConfig import org.json.JSONException import org.json.JSONObject +import com.yandex.div.compose.DivContext as ComposeDivContext +import com.yandex.div.compose.DivView as ComposeDivView interface DemoRendererFacade { val view: View @@ -107,6 +109,7 @@ class ComposeRendererFacade( baseContext = context, configuration = DivComposeConfiguration( fontSourceProvider = ComposeFontSourceProvider(), + playerFactory = ViewBasedDivVideoPlayerFactory(ExoDivPlayerFactory(context)), variableController = divVariableController, ) ) diff --git a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/regression/RegressionComposeViewCreator.kt b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/regression/RegressionComposeViewCreator.kt index c88687406..1767758ee 100644 --- a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/regression/RegressionComposeViewCreator.kt +++ b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/regression/RegressionComposeViewCreator.kt @@ -9,6 +9,9 @@ import com.yandex.div.compose.DivComposeConfiguration import com.yandex.div.compose.DivContext import com.yandex.div.compose.DivReporter import com.yandex.div.compose.lottie.LottieExtensionHandler +import com.yandex.div.compose.video.viewbased.ViewBasedDivVideoPlayerFactory +import com.yandex.div.core.annotations.ExperimentalApi +import com.yandex.div.video.m3.ExoDivPlayerFactory import com.yandex.divkit.demo.div.ChronometerViewFactory import com.yandex.divkit.demo.div.CustomContainerViewFactory import com.yandex.divkit.demo.div.CustomTextViewFactory @@ -17,6 +20,7 @@ import com.yandex.divkit.demo.font.ComposeFontSourceProvider import com.yandex.div.compose.DivView as ComposeDivView import com.yandex.divkit.demo.screenshot.DivAssetReader +@OptIn(ExperimentalApi::class) class RegressionComposeViewCreator(context: Context) { private val assetReader = DivAssetReader(context) @@ -47,6 +51,7 @@ class RegressionComposeViewCreator(context: Context) { ) ), fontSourceProvider = ComposeFontSourceProvider(), + playerFactory = ViewBasedDivVideoPlayerFactory(ExoDivPlayerFactory(activity)), reporter = reporter ) ) diff --git a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/screenshot/DivComposeScreenshotActivity.kt b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/screenshot/DivComposeScreenshotActivity.kt index 9b51e24b0..0e423eaac 100644 --- a/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/screenshot/DivComposeScreenshotActivity.kt +++ b/client/android/divkit-demo-app/src/main/java/com/yandex/divkit/demo/screenshot/DivComposeScreenshotActivity.kt @@ -11,7 +11,10 @@ import com.yandex.div.compose.DivContext import com.yandex.div.compose.DivView import com.yandex.div.compose.internal.DivDebugConfiguration import com.yandex.div.compose.internal.ImageLoaderProvider +import com.yandex.div.compose.video.viewbased.ViewBasedDivVideoPlayerFactory +import com.yandex.div.core.annotations.ExperimentalApi import com.yandex.div.core.annotations.InternalApi +import com.yandex.div.video.m3.ExoDivPlayerFactory import com.yandex.div.data.DivParsingEnvironment import com.yandex.div.json.ParsingErrorLogger import com.yandex.div2.DivAction @@ -25,7 +28,7 @@ import org.json.JSONObject adb shell am start -n com.yandex.divkit.demo/com.yandex.divkit.demo.screenshot.DivComposeScreenshotActivity \ -e DivComposeScreenshotActivity.EXTRA_DIV_ASSET_NAME snapshot_test_data/div-text/all_attributes.json */ -@OptIn(InternalApi::class) +@OptIn(InternalApi::class, ExperimentalApi::class) class DivComposeScreenshotActivity : ComponentActivity() { private lateinit var divContext: DivContext @@ -46,7 +49,8 @@ class DivComposeScreenshotActivity : ComponentActivity() { divContext = DivContext( baseContext = this, configuration = DivComposeConfiguration( - fontSourceProvider = ComposeFontSourceProvider() + fontSourceProvider = ComposeFontSourceProvider(), + playerFactory = ViewBasedDivVideoPlayerFactory(ExoDivPlayerFactory(this)) ), debugConfiguration = DivDebugConfiguration( imageLoaderProvider = imageLoaderProvider diff --git a/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/DivComposeScreenshotTest.kt b/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/DivComposeScreenshotTest.kt index b65259dc1..56d60a437 100644 --- a/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/DivComposeScreenshotTest.kt +++ b/client/android/divkit-demo-app/src/screenshotTest/java/com/yandex/div/DivComposeScreenshotTest.kt @@ -271,6 +271,8 @@ class DivComposeScreenshotTest(case: String, escapedCase: String) { // div-grid "snapshot_test_data/div-grid", "snapshot_test_data/div-grid/examples", + // div-video + "snapshot_test_data/div-video", ).expandDirectories().withEscapedParameter() } diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png index 23b2f6bb9904d74d260d66866cbd43123bfab1dd..48faf0fa91b027a5a344d11e602049683814057c 100644 GIT binary patch literal 5063 zcmb_gi9eLx`+mwUCHpe6m)%g=OV(^dmXKYRWF1VRj3vw1BEnD-lI^u+4cW3Yh-@Qd z9Ypqh{~quA`xAcWGoN{$ndkZ3=bZc8*L7d_9igkEcA1iu5`v)18tN+g5Ol!`+{==a zf^ViH({XSiMk#4LBnJacZWj(gbp9GDiVuB0tfaosrB{QsaXe2V=qd!$fBKZ4z)CAl zuD20hKq}$MYr`TD`ab!opn!0M%I)jitQ$g^*f!#lnL-+xjc@`(;uMLGXRbAEEU~IB zc~?cyO}4F*5*@iRslTOB_=bN3-mlo!c)$F(^5STPU5L?IF+-Q1zKpx{83{iOfv$ON}Gb1A-UN#sk${vSxd`$#l8RXNY_}~L=2lK{dMU_*y~|Vckad5n`CZQ8vgqrk|cdb3(UjV7>Sa|q;sRE%#tvv_O#DW z?2&?pt2BudW?G}X=Ii{9B%z%M*;9uP8blB)45nvg_2%&K*38}vQ5m}od93Ke}RT3w29U7bNO_iHt)7I7wYB=6P5hNufGV1HushZO>G8DDZ z*J&wQY{bE*ps#x2axljc2))Jc_nmy22QdHM3K^XdM^ ztdZOgoKl1TNyna^p`oh0)J{d#?KCjYLnEV4pFRbJ2nh-O`(Po!$j~r!X~_u$@SPW% z#1aw`b8x1jqM{p))wSmSS7bN+DAYAIm7JUeAx;sI%K`!d~m zuG9|=4Jq!|kE>&06aVOBZ`@^raoLDVWcndClw5EXo+F@8ymI zgFnj&mFj70;}7)OW1Y1eEtZy+ItEw*)~xFblj!seACq#bw`X(~CmkNthu}v?r?>wM zV2kcYWz6KKCY}7MB&%wrW&03zG2o{5KnQGMrIBNLbL(Q$L?1LAAEWVH!q-Ht{sVv2 zw{MxbxgAXv;xY5(tvx-L-*DW+)Ya8Bw)ZE16Zw>zOAd%2H$UGw5mk%WULK)tZEb}D zOG|G`%gC5iDls&l4AENRk|EZ(?Wn z+(T4Q)q5 zLqmNQQoVI8En`G2YB+g#i0XXzFolJMQ%t#^KdZPtn_pXdbIYN3vB1~FgvIVA%hK{P zSEA;|)OVt2DMLlY3$?Yi9j)OJ5sC=J>$aOR{rVygQmk1A7*AF3s}tW!oJT~*t5Ia< zdj?=Z+)#FR7yFc%`PjiBXX{%ZX~S%)w8upX3W^RKt~pcfjkT>U(K`etFc1=c^aT{2fV(Js=?hhJ`F=-d=i@}xR~40&lKej=zIl(9*tWk#zrRxQsJr*Qgq8?WLxW;@ ze*XSX5%VhDS(&O$Kx+7q5aP{hb>5#ZETMvih6crz#mRZz z5ytxZO_8lOjL^}13X*c>Lu#rCQ~&~KY71K)DunCoj1Ymt9h8-np3U!VY&_P|(n=ZP zyL0DGhlCw7COR_mr-?BbyL}nTthmFKual49aCqHHf@YSBi%UVN?-FaI%tgPuNQw9Fyp3kjTA%o?I_hP`r-59pri=}rptcFH&-~1Jj)(v2I)UyIVAXa22YB`i~E` zG|V4A<^tyiK^EVhw^H9b=Il87J9_KY0_NK{Ic5wE+o7xgnZq(^V2Tvd2@#)|sQQZ% zA`l4D{>N3OvZv9laAT&na@7o7P8k^%{XF`Nj0}83z&-!76Ysf&h1r}m|Dc>4J`LZ^ zIgQ|@OiEno{_3|i2=c6E11nPnSk%Iz` z18|&PRmGf@mDSPFp@2Y8iT?l!z-FO0HK=y1(zSUY=fMU3fT|?$>Ln)8DS%&}{dF!+ zPtPxYN6*oRe{$SWC6dZ_)n_E%uR-s85W{yMJJ)N_6ax$%@wY_~= zIH$JugWvvoM(0s}$rCc$qC|l;8QUxV0fCVMT#}N**5{()ed*S!wrx}fMpn@o%3+_hl0>1v zqrJ7+wT3gsmNZ!}N{Ev&issri?O!OcwTjZy{aI?LtN&dFkCm-SsU3y<;UZ78hu_hz zYO!S<#IN?{?0D-zRIj)TUaY{hLeu#e1UC&UtLEuFkC_nDQ>l*)&vaqHxID!@kR7i& zAdwH6Xd_l-=3}nOHI0tGJ4SY$Ith!^8M)?NPGCy5Kp*V(M$qvsA;!KUt)yjTFY3xa zcjUfvhYjG06dD{HwBA`7f&#&*+fLMYW#^V!R;kHj?c=c68{xCEUqI*`pPX>TgY5Cu zZG!f1c0yX(n}D+uV_i#UTO{&LM~8Z<LG^tMvmo^6{N_!0Wbm1zl(;3hE*Q3q)_9JAJowL?ii9t_m|TFoyBoP_A4T? zN+-Xbo?N}m?QE7?PpCYG`saOXK_UvlV44O7=z!MvQdUN{&ETq{qGG++mjNYY&YVM9 zSeWWO`Gtj%DJdykWnv2R-CNBgxJI8kxq(G8CsvcMM$_!H{$?DInHtc)3RmY?UQ$%cTa-T~TuI)?Gjq!63jbE=Ap3MddHHAsm|)_awWVqtDB zR*Y|OC6xW{%SCNl2M01UGc$;Dl0^+L2!@&?Mg}!M1%w*EpkRdBZPP#xeoD)<1;gS$BF|oppcp6xaQig(yi?E~%USYH1 zet?A3O2*|CnzAUklne838x83q81m|mCXIn=nnp-o}Op~`vg!CVBVnJ7d}3*lI2XImbJN3+CX`h z7;KIO9PfK@*8;JAPMIaPWTmC0x~8U@hiWD!?-ae_G_#VWJ-CgEEu-o9bkft)At|@< z#smQa0J3J7lpF6K?FlOp#s72O^2&;K)8U7s9Uy^2K~RfP1p`2Fb8%gWVie)t$Tu!# ze63Ope{e7aU}>f)^pYLsH(QiYcTc_F(RTJUHi}3o zMJk{L?EN7xA0H10G)qg%i*fRvbLvscdxy)#wm&}JT^z`vhR#X1Wz`WNSKya2>=zFR zFOW!LrH9t=CCallMB3}FpV;*D^!SB^iJ|VadmQre^5L&v^DZBOgn0SpJ@+g7ZH?ZS zaXme)aXe}r>N;M9$I0Th>e6@broK+NK;R!`M)Wfp#J_tNk)@U76#W2!XaR`nIOF2t z;_ZIN4L$Ya2FaoE?RBkk>{%yYTI^+9#m4p@0~?sV2^OEKJ!&PQ`k$v@%TzE)s@b;a z=FWINJp+T_JcAr=etvSg8;HQ-V))D5zZ96q>p&>Z&CN~y%+gZV)(%Zef1r^1f>F(gakv1q-#@>m4BWQ6R2b!8XM2{XR3uqMmBwr zL0JQ$DKEbb>XDGJFxa?gwYg5ySLEakDJ0;`@Gv4ZYimv*`#_Byo0xbVKXrekO{_-D z-V8zE@W7(Ni2(%0RYpb(a7|Nh@0F2aD>YBgoBI0t9R=Hg7l_1A^N6>T6BDT+baZrp z=|C|R4oY7hDJiBfYL5H*`m|0?PMow6w`-awYG2TO|Neb_YpZ#&KXZCvA zhP|~(wI@$*(9+R$3Kf}KSai00$UDrx?nv$WG%49P6xJ;E*DB!T`lAio4)GV8c5lzV z2a~yg(>H-!!meDycXuNyPz8@lg66zDJRV=7q#XRYe|YG0cM?dAl#{#e`71!RJpy{J z;^o#Gu#LAUkNjkFbMta+Au`kq_3Kly@Ts_UBc!k6?_d9YlH_Ys&+p$KQ}4VeRUE;8 z|NiQ(?`}c*hnX3h;m%GCV}<$p)w}HQ{nC=MEs%iB4NX0GXZuLW zzUJFutwvQBG)FSy`5xHpuTPU^d3$+XKaz$t>4+BMWdcso6>--gVbk((yeY1$>$V#` zEdv7y43>hut;jR3VrpS=jYV}stp&Xwb2eV-e`w_Kr)khtoB?PY0Kb+H3c6?6C={ys zcb)Ih-&sKV%AlC&O>_jM3%<;O`rVMj!`*Dl2LHN7CNm}ws7|X-+IB}O70%LZg9JZHpnv-qtrvASvOs6*lEQh%MOPR)Z(IC-KHS|p iHy?SB&hww)GqMU)mNyrMTncpNAPrR=l_DkUp#K4=SCf4J literal 4366 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 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..9360c9ef1734a162940d2235772de9299f05b131 GIT binary patch literal 7682 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 literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png new file mode 100644 index 0000000000000000000000000000000000000000..35ebdeddeca3c733165137a0e2c4e4470678baa9 GIT binary patch literal 3416 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 literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd02aea35faae50b4bd7d13f86b4deedd0d467b GIT binary patch literal 1957 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 b)6V1j@3AY*V$OFN_7GrcW($37;{D{mOUMUJ literal 2926 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 b zaSW-L^Y)e@pX_l_m%vLGvbM;-uh$HF)G$rNqM~;v>)go#f1a>v$=G~3FTel)Z+rW? zkDs5{|NnFO{{MH|~FfjC0 zHa~s+rxwMZFmJb5i|a5nB-??NJ^8l?!)Gv$_CplP?fh+3e;*!PFk?W0`S2VoH^YM& z<`MdcaDnNDh8i@Oo-ug4n59&rxic|hBj@8ki{80mole^b{{>GZ%I3O{y=U~-Etmy-k z*^Wb!zdR`FY>LYN)!F>xK%V^aOcPS^B6z| zT3Tmpdp_BcxA(Txfm2Paz1mJN^)Z538DGAG1h3AKHMtG;2Gmf|g>7#0n8A*>1v&m+ z2H5d+TJBJHB3u@5_H%pe?8_H+tYut-;?848hWtsq{>;QAFB@#izJ$z-CzcAEfc{=y zWMcBG8sv|xb9}Sj{!9S|+cvfhASpzU{G6xHDHw$jg^G75-M3B#V|MSv0Fv2}0uwbH;Q0n;7X8t*6q;mvL80%h3% literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API26_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png new file mode 100644 index 0000000000000000000000000000000000000000..a475643e1851403f02315d3ff1064b1231a19083 GIT binary patch literal 1963 zcmeAS@N?(olHy`uVBq!ia0y~yV2S{;PjIjSNt5~Ww*e`ZVkgfK4j`!ENa2d-aXeA>&}`oV2N$fspWW|#BBeAiF%ul={;=kMG7 z^X2X5|Nob@cI&lY-rt|ke{XO6aQ$2T54Y|9fByaNmp)KDs(vru&*IH1PR}N&%iClaA3o|rl-8qu0>`4O>2+Xz`)SI^-OsE8boSvY z?rG)`QQ2$1&X!F&$iyIVEqcSb;C3<(kW z2d&QEeCrKVvh~_`>jO=!3mdKI;Vst089U>{r~^~ literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png index a8a106510b95e7f53e99bd30b306d660e07b8072..a83278e917f98db9b2a72dfb409a4b12bf4519e3 100644 GIT binary patch literal 5020 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 literal 4314 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 TV;t~j1q6SpCSUl(Jn+8&+N4ja diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2c29cc493e2cbe9dec38bf1cfa71cefe77acb3 GIT binary patch literal 8093 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 Ya^}L;tX~#@=j}@Nc1LWP`+Q>m1uo`FB>(^b literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png new file mode 100644 index 0000000000000000000000000000000000000000..abba1f83089ff699a264191ee07ea54df5c1ad57 GIT binary patch literal 3861 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 literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd02aea35faae50b4bd7d13f86b4deedd0d467b GIT binary patch literal 1957 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 b)6V1j@3AY*V$OFN_7GrcW($37;{D{mOUMUJ literal 2926 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 b zaSW-L^Y)e@pX_l_m%vLGvbM;-uh$HF)G$rNqM~;v>)go#f1a>v$=G~3FTel)Z+rW? zkDs5{|NnFO{{MH|~FfjC0 zHa~s+rxwMZFmJb5i|a5nB-??NJ^8l?!)Gv$_CplP?fh+3e;*!PFk?W0`S2VoH^YM& z<`MdcaDnNDh8i@Oo-ug4n59&rxic|hBj@8ki{80mole^b{{>GZ%I3O{y=U~-Etmy-k z*^Wb!zdR`FY>LYN)!F>xK%V^aOcPS^B6z| zT3Tmpdp_BcxA(Txfm2Paz1mJN^)Z538DGAG1h3AKHMtG;2Gmf|g>7#0n8A*>1v&m+ z2H5d+TJBJHB3u@5_H%pe?8_H+tYut-;?848hWtsq{>;QAFB@#izJ$z-CzcAEfc{=y zWMcBG8sv|xb9}Sj{!9S|+cvfhASpzU{G6xHDHw$jg^G75-M3B#V|MSv0Fv2}0uwbH;Q0n;7X8t*6q;mvL80%h3% literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API28_XHDPI_720x1600/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png new file mode 100644 index 0000000000000000000000000000000000000000..a475643e1851403f02315d3ff1064b1231a19083 GIT binary patch literal 1963 zcmeAS@N?(olHy`uVBq!ia0y~yV2S{;PjIjSNt5~Ww*e`ZVkgfK4j`!ENa2d-aXeA>&}`oV2N$fspWW|#BBeAiF%ul={;=kMG7 z^X2X5|Nob@cI&lY-rt|ke{XO6aQ$2T54Y|9fByaNmp)KDs(vru&*IH1PR}N&%iClaA3o|rl-8qu0>`4O>2+Xz`)SI^-OsE8boSvY z?rG)`QQ2$1&X!F&$iyIVEqcSb;C3<(kW z2d&QEeCrKVvh~_`>jO=!3mdKI;Vst089U>{r~^~ literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png index 2de76ac4549a71304dd4b2b64fcf5d4142cc9a5d..fdf777eda9845fbe45013f52400843329dd56f89 100644 GIT binary patch delta 4729 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 H{@)M=lfi=V literal 4868 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 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..67fa3ba8c77682ed4a2613487de8bc808d507723 GIT binary patch literal 7476 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 U>z^OpUY#s22gc=Zk^X1~0AVmyJOBUy literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png index 2898268b86c3bb8c0c81bd612c5c5acfe8c50cbc..38ed62184f40606ce225b99adbf45a0232287e59 100644 GIT binary patch delta 4105 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 pFpDchO5Dwzg?a!0 literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png new file mode 100644 index 0000000000000000000000000000000000000000..6a6a27e5b67708b8791b11b32c5366b3bf049d6b GIT binary patch literal 2184 zcmb_beN+=y7JtC3OlSg=gvww*GL!(_DhBBi7FmT%fbjk4S3#Ntm2?X+Kv-!(rO7ZQ zhy@g-2un$zEqd6>Zd=RJ6&r}u6;?>=NnO4S;IV$xnzPypF4cW$*V41c-Ths-KdP9T9K({X3`2%PcnM+|@>m8K*! zUd-RN{RO@w_Soe4rRvA{39}Ob-&z420r-6F6W;%~5M$@A(tMa?hps7shXdfW6JpPT zA8@$?D}KOr4qTF*Ny3~Ch=U7$f)zi(do^ke%sKDK&sUc?@D#*RMTKRKvmEAN%-p5g zoCW7?(0xED$OQ2~4DtWfmi63Y1R&xY09+cDV~Q34KB@))pID9sbO7K%0dRUuEiaLO zPX>Xb^X}aM{Ow%;Sla>MjsxJ9^O)%J+U0NYZ))YkH9oM;J@6_3g>N{=2Jt+H>xYTW2Wi;3DET^VSz%9#NzFBHp5!&!tfZZja1d z$+_q?$Ufy|)8A6{U7StDKc4le^{ty$d)N9MGuY+6k>A$U-H{Hb&r$F5-t&6HC8%w> zH#frFukNW&ExNMVg?jCy+aqmvq}QtFZH&JU7GHvSZBKo=o%|~7;d;+aYslH5NR8F| z+`uiIv~aECSHv3LsKI7heZlunhD#>j$c4Hk!>Im~alaT1&!5zj%3w9>evV}^aL0n9 zJj2<3{S}rXDf66Lb?cXz3Ut#N0c{(4L80vNetN%4SR&I9)WabsSFT0hH)G|!Nz7u` zQ)aA8oy25qeCDhfEA>xTD9;)v(`Pja=&(nUSXjA@tG(~GqWPOnAxCTBZV}s4V>b;Z zqbodqBNpzpbF?RPtymPKMaiy7_(b_ZqaQl~4Rkk9G8>kR4znzjO<&-diqa`&xKrQ* zww{tTs3%wV`-qU2&I^!IdZ*al9d;oQ$qM|8VQS@kS5qk#miN~4oI{%e5EuG5W%Dk` zZo=xCyA#owL&{9a8$9O_&p_lZecM-r=thobOX_*r@ZX=ArR+I!zp zT5Fu1xJPYPC|!)j@?*G`xj0YT-1GFrP1`YiRb||MJ#kIaVIDtna5%QhjO_^Cph9if znox>o6wra~8GUA~&_7Rcy)ky)KSO~&m+j|Ze-xi%{+UB|UJTAr)U0m|3BA{2EN)yE zYUZjURcM>q%5vg<-A`O=vB*V8q9RWuIWqTwgBrtRm#3inqlJAvA67SFb?v}~^va^ETz#N79q3@ma;jDMD=b$b3f z%?D5S6Ldqy>#CZEUXbT;&$SL(upmDxWlQ^+ZX}o;Clawt@H-75cSJ zfMmIfh;qn_VH(v(i|wy760rnSRj#?|;6=%%uoSetJZ_efU6w=<3t5N&%DFf4WEt5& z=Zb{|(m

va?Vu+~xmUtn%XyWRbG1j30WkoEt4&*Z<0L@^a&9H}L)`r}1TxC(Uhu)!*^u$tc6R!1mS#LO@xYQ(T!o_J**$Oo1O#%IhZik}gU-c9n#RnOU z9MVj{tOz8DIZG?`2Kal0gd(kdC(Kx?6z;)l;gDU#Rz*!%Koav1B&{bdm{SC_T0CIJ z@`HmzDLgTe=|msrkYN|QyUkeM+&dgHrFJbfa;C^WRI-P+fc1aG(v4JchtCv^a}5=f t!1eA-_+M%hsFC!gUS_q&t#P^hdA*Don|7J}qwbfUQ9n)xPL36Te*lKv(Xapj literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API30_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-no-scale.png new file mode 100644 index 0000000000000000000000000000000000000000..bad320034efbc960c21b2ee3c511eb4d4fd5940d GIT binary patch literal 1490 zcmWIYbaOk!%D@or>J$(bU=hK^z`$St#LdhM+KddI&dvc6Oh7IJlLVL)U|`72D=7+c zcT$Lmj8XuJ!9ZeiaRH2tg=S=6_;!r}NHQ>7*2N-ENQg5fwKy55=mQX!6ag(~U|>uE zvPIG%>I{b6WdH(XsEz|yGT@{j-HNlBI_fym^^|D8EFy8g(Y z&ADZEx5?xBx3-RsfD7AtQ~qsOuDCl#IQHCGYh<{eSa00 zobiDVte-6y9QK&cU1#2Z&-l#c?{oQ^fPNSS6okMJ#)qF-_sGwi-T$BS@cR|Al81Zd zO0DjZm6_Z#SGKxGRzA5$^ng&Zpuyn?_8fz0Ow2u35By4UG}s#<{6=pY>*DUI2OlLB z8f=e{&(WR6;oKd1=v2}|gN+f|Z?vazKkgDeyea9T!RiR}9Ia`5&0SXy&q`u6TpHp0 zMq`?wa@W)&O-Y7^^CSFo)TfCY?hHMem6T{WGa~wp>NN4>PSImQNfQkxN2KSdOp{{n zyn4(k>7Ze6MDZJ?X|jturXE*H`e@i5QJ+2G)%!H#%k*=D6obn5nYyL<_%eDa<{~?o#8K&-(Y)V>VXdl=JNl$)~f>mY{xPZ literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png index 2de76ac4549a71304dd4b2b64fcf5d4142cc9a5d..fdf777eda9845fbe45013f52400843329dd56f89 100644 GIT binary patch delta 4729 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 H{@)M=lfi=V literal 4868 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 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewPixelCopy/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..67fa3ba8c77682ed4a2613487de8bc808d507723 GIT binary patch literal 7476 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 U>z^OpUY#s22gc=Zk^X1~0AVmyJOBUy literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-container/baseline-with-images.png index 9fa161b3a67725eec7e225cfe648d49f36956316..b35df385c4c74020bd2044e4ae90d0d48b857777 100644 GIT binary patch delta 4259 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 Rr%L6jrg@;Ts-3w??ca^sgCzg} diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..0a945c3dc0908edfb21d6315cc03a8698b68d800 GIT binary patch literal 29558 zcmb@tXH*kk_%#}uf`Hf%DI%zV2pWn=FN&y0Q;{Z+NEZ-8HH0JxN>LF(dPhJ(YA7NC zVdymwI+2#pI|KqGBoV#&z3+P0|9-f4-7j~t&df6>Gi&NOXFq%Id2D$1?n^%q$jadM zL(7M1*2h2~kOZr|G3ofrhXBKm7myRmJ1%;^)NLXq#31eOU(wf!Lf`@fo-O9S8mw zJO1zZpa?cz;da*L-W%iMwpWRzf(q@9hWd3k%BdJx$Yck-H z;m^^hU)@|S3Kg!v^OoL7D{wXKa~Q@=mGkfayH^a7eT4E96Vpzrhxv z%Z5pp4J${P>d$RMQuUZHDyGX0I#}3Dh>!feUZ%munful|giGd>Uir+x=NsN<&U2jLdnbWC z!^f@1`3$6XES9@T%%D^6e))1=!IvFrRRqVZ$;(+T>jiB&F+FZXt2XRUoDl3GH>8BN z3U_GeV(tllr&(ZVt8=E1ZGVs%rmg^=o+TX&E7(A)^8f_s7iMrx<-zb`{rbzD>B-4i zxuxb6CVFLLx&9!28g9Rt?gym@6J~Ks!4CWOD*$h^RZnXfjlw12YZ>w>Ts(v46MNu* zXvk4FF7KRMowwg8H?zGtnjh*oH=jT|p$};-#a_N_+uI~(d|AKz{wyMNN$V?UDDUf0 zqU9{2;KK2)CyDA=+~9rAv7(@b^YlK!VAWn)ed9JDxf=niZh(FSE|{bKJ!V8)+0!-^ zCuK520d*RQ2e=}jLuv@WPWt|SFZ`kedpXG8(*HzAT|rl-Hu=3lGcrQyyn%?hr=D!s zd-!MW4kcNzET8#wqt?hmxNb}795`nMb4!L3d4;ff5)&ZDDNL>>Awp3zAF6e>dlS> zY$?\-`DJvuGQ`F)h=BXh{CawOPH1{|P9D;BxQ2tJx|4*L8%>y7zsRlMpBwT>UI z>5HW;X5N6tMh1BLFpbj5L>X=pH)w#3gI!HUX(mSa)WUG_eed3`Hb#^&h)2Ynvwn8b z{I#Wm0s`VNH*9C@YvQbdQ)Hv1<_#Y=9|<#Vp0vaIshv4pOxX6nD0UIEC?s|jcq6&p z!0!&lKcr2Y9*1hk{qul6!ED$H`vUDcvpWW+H90FtDo+QEFXRcl;N}*Ce&S@ie9>#i zTnOA)6f!uSB)iVpS!`^A6Pk=zm11%x7kXSY9@W32dwKnv{Rd}9^!s&H2Je`VFa&Mr z6&RF+b1%nusNrc_c_l!h=bPEB%%lO}Xze7d;pQ zl|!?Wv57;33_%PmJ*U+Qe{2P9NdNW9%_;I4b{clp_!p&YD5Wy=y`jhoHvjci-#f=# zqHY~LC67A}Xqsc$3B^*2M<9=fB?Api_R~yK-VmPUVta?Xz%FJZ^)KI3xJ(nkWjyrY zn!o|o3>2`+OzKz7%0#!pbvdHY_O(YNHUR>>D}0XGOsAMK5i^b#fWN;}xiiQ~pg>UM zz}u?a){5Vtch4e^TW@oB$=rqfW=k+*<2lK#9ism`=Mo=kLHqO-uvqaTS~eSH_U3If|?m3uK8ktfl+uHmhd5gr+bXD;XV73A(gQHmr!|TZf{* zSU7#h%j<{Fp0Yj0T+tk^Its0`d9B%fucaeFC2Y||3QSXybm35>{A$`hmU=2l`U1lC z_2jS6no(TpLA6#Pd*IQm?SESiE2;qst*FN0j96G#3JPvA4TKLTDblmFexp;h9s>1C zL#rpDk~ESKI`3F9dHnXmneH5PympT^Ws_`lS0Nsfz4qPo5qb2XzRYlC#Bar0(N@nB z+)E^_O>(VrvFaujBljxSQVWzA-Yuye!4>f{_5bQd!UO1cF>MD#sxsQoBo{U)H}2P_ z_8C~df29wCLlID#t3MF}nwD zY5P(0;>GHyeC0*#5r>Ig-i#})uSmnuVHoEtOr;2EQsWw>AtvJy!vF(&5#F7=!J`8G zWoC_{|4rHnXSQ7-9Uj(}ycfuG+Tz>ycAp=b&Mhq@6qeqTUJDo;i^M1F52VS~+Q>bE z=V4NcfD_Vz62=20K&v}zz_BImLt%Xv@s^@+mZ|OWYmGB=;4Ul0ULaw1POSnck(@U= zr-8aYq-RpUvf;w?R`pU+@W;r6%4a>@;XLM$q|4@hJA1`P@lS+gn@6;z zP6sNbSpGQ`QAyq$Sr?7`M2PqZ_PT%Y!6p=NwA5)Sq>ffnJW;gIuD_(aV|N2Yl2mT# z_rWzEsU#Yd{aK$=vFcQ}UtIJjpILoWW1M+n$M}+D$`#)mVJ@d4u})Vb|LC0?I%14S z=PBsoK_ttL+8Vdb=96ArVOpBn1NAL8N#Xs3tVHw?qs?L$mk5lcoP~*_e zGEB;M>`UqB{4;-A+t>ZMOlcC~!Ccja)bHJz=6gb~Vk{2Bn>i0p*zJ4fkIDH!=Ddf= ziWv(?y!r~QPun3GLwZOJkMKjU2UlzhRw|9qoRJ@4Td?<4s%s7#l5xmotJFL6c}+z)pBXnk@ocA-RPRT-rou~gmYnci4@VAcZ}fv7^y0h z6Ypp6>;lE!hncU;My2`!>tlBs(!lt)GxhyNt9#RKOe@ph$vuagBb&ITzhe1)^p+`G zbic4j5xDD6Xh=xUJLFlj`kVUNp7&4WJNkkx{StR$xJAD!*`$Qj&2W5zTvtWTXPu`Y zFgClE9Q1@U;8L1kw!d!F_86>BIZOy>ikd-NEmv!ef_W8GwgT(*7zU<&0FpL{l9L&u z{o!f=veij;v^BvFt1gaZGk>=WF@%zHODWX@6@;;oRe`UWrf!T7(zO14 zl~VF{L*@{|WzmdPW**{vfkRS{PG- zksMkDh8LpJ29!$I4ICysd>6kRmOi5}+Z`#$n7Zw*zhmCNM)Xto`%h0Vi>Q|{kLj6&Nm3K}MA0;L zj)58lEod^q9oRv;eTRuvFWf|p(DaqUfTxxb^xLiBOZ6W1o4oymD^@|;Wr)dDe={03 z@5)0XAMUagt#Gxm3X(!%qGhVL(!Y(W7t(*&KNgyFnVTU#PkFHC!|kMp$pa3Xaw5Py z?+71YZ$ocQPP{*Q^9(wkYct)$m;P6hdDg~y1b2E~xvo<2oc?YM?G{cG z(F;($5)Ov9f>>zs_zCWVuT`OpXi1n~2`o^6VjJ>sA4$Ba!RC|K!v#Zyc1*6BKuT2e zX9kDkQzpn+A<2941Ns>Ti1!888h0#oVVLF`|2fp>;XFV=z?CEw1Jm$po@EX$*uEq` zBUubsb-!H^MR+rbrUi|Cz&`NxS5IrF$i=#`6Qi`tb(2r*&J8XobzT~!M%4TWm>1lP z9(<}-J1rK25-`4j_*Dqj0Nat_5KGuPS1ys7nt+XLsww_lzb|x_JOx{8#_u{4s1vAR zWzR(N{sg88uDJ@lF&~vHt)j;vRw&mpq?t+Dv#U~mTW+kjQ$Skp$noy7@?!_;ulK+& ztUB$rA9_(Y=T%+>HN>owM#IV=Km1fYNLKEi>w4CnzKjj4EyNh|g!CwrTJ)Y*akzQ; zLW#KJ98E*1jf}La_&|v+eTdR^hUSZM*xo+~LP{mW+}Tk5sl25CVMldE(G3-qre~Rk z4xcIpj7?~kB^t|-S85B;WbLRm^knPtQ2ac%8|Jgx^g85L0kYn_sp7*M^4O0oDYYbO zWX@4+l*B+P9*2xuUKERoRu$dG4(TRd51fs5r$Wf9K{CZAq|V~Ai>3W1Wr-Ob64;U9 zidk7=1&7&Yl?OL$lxf(=1ph(_<$`^S(4Wn#$PEqE1R!7X%!-CC5Z~ndr0(Z>Q267QxDu8P$cE246R>M0u>D*I#}0i; zQ5E1$3FWEeJYx=jR3o91zabghy?y5TfH}41qv}$yNc_4gk~<2la2ZVqO*{KLS>?~C zy=xh2q++Wge(0`&deC@s5zk)KU6R**#@UDu;CN(v`Chc&fgDtA*|CVnKB*~bwIuzd zK>qdaWJXbI~BzSB@FiGq_occu8w1GO<} zOT75>Sk!tDJm%kbjPnX5+->xUeQ_&cfcYUJz$6eK4wtZV<+)#a=V;4^_jQws?xPap zM>*mpEd=qpPB(P8ER-tN;@uOZW|S;m-&%1CJ|D3v&(^$+lG0ZBCVcKZkeJg4ci6Ll zAggW~V+eV!Qv22`0S;~qr3h0}yBrWcQI<=wsJwjuS@s+eJ50xhfX0{k!r-Q@wlAq! zLJzTi5WPO8?gCffR*&(D@#wvF+cr&`vuf<}6!zy0Dj!7Q&jV9=enNwS$U8TDK34tQm>JNWZ_4wr)*tt*p*D|yA4OnQsE5*mPQ^&s{OU7^U zD2N-K$m0!K&j?MUL8~~&uyHOv=|UmIRNt@;gCxDR>-j~5u2bCKZh*h!&jchj3CF@{g05 zIn2k1@`JyLTSl3ZoTya4o$JcYgfK&&NBZ34pVF7fWu{k#Y%o6(Q_GWFe8yplxZJ(y z*dUT?yXew`4 z#Tsl$lHJ!}CVz#D5N>;Yq3|qTf6PclKk^=(oCulHy#tR&&LvLBSIJ)wtTqh^a=0Eo zW<&lrx*voj7X!iq398%^!VOL%ug_yEvE8;_c&zuZ7(VkF&J0I^^K-gXgjOnak})99uatG7?~^u?Q4*!=z<%Z|6haKYKA3`$Jg7oy8XROWqB zPvPDuMPZcomiEneVOv{8d#=8h8E5(xoEo|B$x3RFN20bw-MAA0CwzE%U-lNl@`#mj zeOfGEQlXM~l5xv)>irIVmt7xe8?XzdlCz0x@4?h*r9QC^ErERLXV&zq5n-@B@o3-z z7Urdf7wVPpXJn0Eu0mDibXqBWMH#j#0=3e~V9ym|vfUEbM#_ONFtRY&8zz^3w<6v} z5qE09_?2ttPtu6CHM%&>^tC2I=({5D!14~sH!D(It_tPe`dc}J1>qy;xmwSGq>>*y zBDqD2KDpUQlKFlN-gtBO=8Mz^@liyeoA-CjKoh*^jQMi-gX4Mfye*!+$Se6Sjm#wNlHf(N`%xDfky@uZ9mJVjHq>N$ci1ao6t`a~2tkvn{ z?}ffYuCLA@K*D~@D_JgzZON(`i@eK-K)<$wT(9xhw;q|}dXLi$@(qq1SV|!ij-NR- z>z|05`WtYv?|kc#->nIbZ?((Yi?@#KecAbWLkmErbX zj?|^U7?qLF_$y1XTFjvYEd9l4=hmh~siSD*amCxluS?3cK#Aub{rTa>NLQxt)W#ZsT54%;*P_PN24M;7?bz%Z&S zT;Sp=ZRDBs6>#28iDApIcB2n9bVbxOjLc5AGz|lLpF)SmkJG+h#q&y_{KR9yJ#V*g z3tjW+_+O!>aj?%vd*JpM*z6PfZJAM3U(zB|Soiwta9@FoW^3(byEQ6pCTPh|Jgq;5 z7OW6#*vbZC9?442mpP+-YZSb7Ajo(0Aov9EJ%+-7n1;jdHL8szd)MK)6dAc%-T*P! zr%Oi>C)Af z?HQPk)Tw~qsq&2)^ErdtBMT{^pZPqYJtvqQ^H=FgHim8z#?*kt6}9~X-zxdb(2m$W zuNxa_&AId?H2YZCvR&7UKT@2&H~)_51t)2L`{gnh^|z^QguU~L4ZD!>Y;-qtxav~% zv!*kRBc->0g@xSU_P9GJCuFGRch2wn*3~hzG#@Xty?nCf<{hB3{9&;;&yecXO=`5^ z$(O7q_9JJ>NYn#pCn|Rf!Kzs?JNNMud~V`*jRVXBE}W;Bn8>|k-a%zFLPz~2u4Z5% z;clzN*tIN7K}#WxQOd$hA&c4?Kgx25YqMs2-1hgDxPBDF7ozQsFK}(a10W2}cN;u^ zbB)|tG;I_-ggX-jbQhM;UZt(3@6PNr)DYH0mATQt^72PRV8ESVy9iLiYa7v@PtW3( zgWr)?U)cld0@Y-d<=ez$&KnHpLl;k}(!n~p=_S60=25sWt1m@@Utx2*O&}o}Zbu+} zRi20K%7gkRAb;3PBfHci)=qQ6Aa@sx?}^-!ZpSgAI*PTf9W-S00?Xh5lr96+-)upq zNBq~Y9|6Dq^_vPDKpMU-rN`joP;l{HU_iE!!%!K*;b|p@&QAUEr01*3Y;V}RBzP5P zZlrZD?{i^+k{I8>YMH9Wa3Bgo+B^Co_53veF8<;$*X3rn9w{ivpbAU^QyCgdRT<*Y zU6V;$Mu*?Z@0uUU=Mjrs2jp#`)b4~y{M zeu5r5gz8kJti{6pv?MqHE zncFsrXhk`gzOEZlD1CunEN_yJ{@9s>N2_+xnce5J> zb;O4|ODlBdj2xuw9!W<0J0GugQrUc(UvxO4X083RmB{l;ClYEr-u%6}{>|9q7^L=@ zah$5($(8d`0|K&<#lf=r8|gKKMI*IAl|mqFIIfwtCKSokpm?_j|A1`?c>y)yOHs7< zw}54wn~iyYZFwECNK!iA(6)HO6#@#NWyyNB2$~Ns_@Q~tVnvUTFv?u(w~p#UAh=^HfPU5)#dIqsAV+DJJME-{R*TsaMUbbthIQS6? z!ec>wrv^UrUNR35wNrS%PEx91Qx<7aE_7;$CQ861+NMR1m=_nius>^v6#|*@syO6c z=N{&7#F>)RP8-mot5oYyJ|>AdbCaJ1sq%tmmMLN;+fsb)q>hrd-cPpxqz>0mj{i=V@Tafn5g>w!?%+C(TG|cguetpIK3(UBlJ2zX?_uXPzMy)}>}SPzSg}`PC1rLv>f*I0o1YIyJU!yq%9)zUY6@Ql&~6O9lprGwIi+ zfI{hbSWrSAF!>%gxEWMwd*$cK`izuZ_cD?IGzumM-DC{f| z#)f?*`22BgjALSIh;f1@*lN!Ai1Lj!(+%%ih|unSo#*i8_yDylk;#AFcz*b;fI3FZ|GsYGBgnD<&8FvW`PZZh7U*5)tzIAPn4!Otu z9>|dNyZ*A0b8J6Xfv({(un=LmHd!tG+7`O85BRaToROSv+7^!rDe%*AFY<#Z@HqG> zD$_=mab>6`hjxCUUg1Eas)ZKCYP!?0w0(OkgVL(*k+7#mJyHI{lTksR$4~I)8^&uk z;ISbl_{m^x<09Pv%0?35&BD&(#%ujA7gU3v`!OvKH^(6a6|nZ4Xha-_nfB#Ds|_%; zudoVKpH37UrDZ&@TOev29oa%s$&MGw{^>J}o|<&cRt#3NsWlB)m`>Xx*i7P=v4>C7 z4fGbV2qNPLDl^$EhoS@ysb*!1n4rTGx2`Tn2cPY(lJk*B!v^l!7IP4LctfUu4qF6U zv``SJilVxoNdDzwEt4D5duJxu+3gCs}0 z3EgO8zL_GgJ6uG4n_34H``_*-X1;`~oq*G^meL;d$Fp)KWtVPbNE1YIi9C;At{9j1 zoq9+^?NCJ=KToRSPo2OHon8#ks+KVeI!A8^dS?i@#f8p=p)qA^MQ4~DN&Gtv9u)c( zEA6r$T`BIXR5)0gf-}cz?`cae^ZLQ|wcVauqlN=4yn!Wj_XvgTA@Jd2y$X2Rjc3F2 z+kS7Dr_EWJ#&!5VHhke)(FD3W?GCiTYRGrwCN8&~HlaTSq{R=-_wTTtS~$@hu!n`Y z%*}6&z1cH>=nZv1FBnVvHwV%gnNunT3%lpN4z6YV@ceMX;}m~;+6Lh84pp5N{1&Da zuh9yJvK2Z$-?1nw&ixtrpQ_>LdNjqaqNh^9Zx^2L+e|8LW#zOI{FPRzJOl*WHPRQw z!T_}=)aI?atMZMp%Q^VKEBw4r7T4LvbZvD!a>V8NuC@)`1%Q7dvZTjrfTeyE7`BpS z64$t09WC@|k=Y_iN;zn~p}>{-UONrtxY5OhOE8;w)BS5)1>6)JC;^9kdEs>IuU^42 z)Zp6C>GaqO3fCCn5tXpTk!4#=N$9xuS90*N)-@#l7oDZOGYC$}d%_yfw^* zy@B_}q3L-BEB_jYD>l*gz)csKKi#-`rDxH#CDy(Pf7y${PSy-o6@FudQp%DiWaUa= zM9j^Jx{R&*po$ooUxN$E=KHTKre)Glk7zapF^PUBweQS(9kypyON?e{FRC1xihbG+ zUlugp5yWh|$L6fbL3U4Vmm;B!uz=}s7~^)qD`;6`JJP;yxkLP-hZFVwBU>Xg%h40{ zX1LBe)=7>mESO~KQa)vG#V|4(OdsoyXno4Gx(jwA=WWkvqR+w(t9jN;h#TmrnyosF zTSElyM~M(K47FUk<9H#_EcpsTCTpOc88xp`347&1n?5|TJ>8F$ByoLLb$#{@&=fci zx_eR^-16$>XO6Xd4{KJwL44?s@KEwc>Vd!POBG9o%3P6N0iQ9)aGhUDh!Yy3SE+Bi)59P(=T*ryrh6ZKFx|aK&TS~+0+#2P)I20Mi7G&nm-*shkqcnFn zgZ5!)WFPY3<`*0Gb3~ZhoWoq{qyFgRL*tdKSl9vN`*KMGOWdE-+{DkJKFgH-|H@#+!K#y6}X4SFr8x#l=vH zSGK^~BM68r6SsQ=mY1xGjgS>xF&<#^efcky@M)l{T4K}rf`YO+g};jW`%n@stR0Yp#CX!)!ZzhY`?=SJP{t-wZQ^YTEh15S$jy+?RXl)ajrVe z4q;GJwN`~-Yk<5kwg5vEOm;WEME>qOb>EDmaijP6VO=)2jF;+h7Ja^rF*E=t3C7Rv7cBj)@Dfm|Ea^L71H>dm|rYQY9bS zSFOFT&a`pu^tTse34d~DNCL?)ROVSU(>4A(z_h+Nv#>Kw(zOHHUYvSMPGla3c2;Y* z?^23jSV$2;RcVRh;^x*9$gjbZCVljlOOwf({aRFh?yAz4k}Fnsio9n>1Fp$peBt|L z*xIvS1!3xA;~}3ozw86sK~bs&vPF4#1o@3GY@$wOA%=o$=|R){p-&#H^0Un~f4Zs@Izy`Yip zqS)Jap<7&6LQ1FJ&sTna(iN=%OK`ycjt8ws^tJc}NoaOJMsn zPwm}{i>qZMH4oBivHByxiq+1?A=9*Tb*O*08NR0HfibOf=weoBbV3WtY#@DO&<^4{ zV?x4oM|C^ z({I4EHCMXGs?ynD-+*AD=zQ}%)vn_Nv}a(^=zON2jj;0Dc9O4+>-q~1bWZD~ z{?`3w{MPAq3ghGFefQ|Q`It)i8Eu6`DFrtrY5kvn&Q=MO08vLsOqrPPb7`To3MJw^ z9acRbaI~OOk#QlYX1Myjfq`|={w58y5az&9rGt=`xPEwxUuVx1*pyd}|L1Hv-S|>g z#OU9TduM`{{6wlx3T(wo>=!pNd4BK8A^PEMsoq4LEb{Yg_f9Y>(nOl|_OjrM_`b?$ zSmhhEMe7bgxI`}jmpsI!wATdo+wDWF=2gCm9|PTLex!FnLpztdJlpY#-IC9U87ZOc z@MnyRCb5d0Q=+gmDtWIZeQLqv<(NE(C&J7#>?CoHiZE>WmZepCawH0?CV4@%>;^H9 zBajlf96WsJs84=SNKz#>oZg-`tpf*H8U5~_wOzQi9}RZxYhpP2&@j&f{ z)dOy7F6t`u39+!=7BBLfB!H)<{1#dcE&`LEP@^uPhqDYAW3TNtoyM;+XKsRLR-eXF z5p3boMlqULL*r)JoOm~sT0*)ljhRQ z_&K$#Rt(NsW?Qn;8t<%}h9qiFbt*XoRY2X!e-;b|XVTXll&I^ylWsp}H9o%pWP;13 zTdO4oS%Qtr%HCn|Enxi;DKl{yg+s)%3~1kIJVVL-=+)xse>Dr9I94JecISJ3bTQW5 z_Y>sr%L_P58+HMjxEBC*YmgD!keYnky`UM^efbGX-`XzacROeavS=-2Vf5B@(cOEl z2Xn$S$ChG%cM=ziAZSm|!rK9j6+;~;<~=( z_fmR#yda1yYOS}%yO;=n^L-IHL z;?KdHdHf->JZs^H8XS-%S(%0A;eNXPDHMw;zwj0{+;4K7;0ivfswts$0Jvw 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 I*Nz?k4`ctQbN~PV literal 0 HcmV?d00001 diff --git a/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png b/client/android/divkit-demo-app/src/screenshotTest/screenshots/API32_XXHDPI_1080x2400/viewRender/com.yandex.div.DivComposeScreenshotTest/div-video/video-preview-scale-fit.png new file mode 100644 index 0000000000000000000000000000000000000000..e4e8a3e3dee617f4465d88b342dcbe268b14ba11 GIT binary patch literal 18744 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 = constant(false), + bufferingActions: List? = null, + elapsedTimeVariable: String? = null, + endActions: List? = null, + fatalActions: List? = null, + id: String? = null, + muted: Expression = constant(false), + pauseActions: List? = null, + playbackSpeed: Expression = constant(1.0), + playerSettingsPayload: Expression? = null, + preview: Expression? = null, + repeatable: Expression = constant(false), + resumeActions: List? = null, + scale: Expression = constant(DivVideoScale.FIT), + videoSources: List? = null, +): Div { + return Div.Video( + value = DivVideo( + autostart = autostart, + bufferingActions = bufferingActions, + elapsedTimeVariable = elapsedTimeVariable, + endActions = endActions, + fatalActions = fatalActions, + id = id, + muted = muted, + pauseActions = pauseActions, + playbackSpeed = playbackSpeed, + playerSettingsPayload = playerSettingsPayload, + preview = preview, + repeatable = repeatable, + resumeActions = resumeActions, + scale = scale, + videoSources = videoSources, + ) + ) +} + +fun videoSource( + url: Expression = constant("empty://".toUri()), + mimeType: Expression = constant("video/mp4"), + bitrate: Expression? = null, + resolution: DivVideoSource.Resolution? = null, +): DivVideoSource { + return DivVideoSource( + bitrate = bitrate, + mimeType = mimeType, + resolution = resolution, + url = url, + ) +}