diff --git a/paparazzi-gradle-plugin/src/test/projects/compose-a11y/src/test/snapshots/images/app.cash.paparazzi.plugin.test_ComposeA11yTest_modalBottomSheetMaterial3.png b/paparazzi-gradle-plugin/src/test/projects/compose-a11y/src/test/snapshots/images/app.cash.paparazzi.plugin.test_ComposeA11yTest_modalBottomSheetMaterial3.png index a65a54dc3..c0d74ff35 100644 Binary files a/paparazzi-gradle-plugin/src/test/projects/compose-a11y/src/test/snapshots/images/app.cash.paparazzi.plugin.test_ComposeA11yTest_modalBottomSheetMaterial3.png and b/paparazzi-gradle-plugin/src/test/projects/compose-a11y/src/test/snapshots/images/app.cash.paparazzi.plugin.test_ComposeA11yTest_modalBottomSheetMaterial3.png differ diff --git a/paparazzi/src/main/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtension.kt b/paparazzi/src/main/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtension.kt index a390d9fd5..db455a0ba 100644 --- a/paparazzi/src/main/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtension.kt +++ b/paparazzi/src/main/java/app/cash/paparazzi/accessibility/AccessibilityRenderExtension.kt @@ -15,7 +15,9 @@ */ package app.cash.paparazzi.accessibility +import android.annotation.SuppressLint import android.graphics.Rect +import android.view.Gravity import android.view.View import android.view.View.VISIBLE import android.view.ViewGroup @@ -39,11 +41,22 @@ public class AccessibilityRenderExtension : RenderExtension { override fun renderView( contentView: View ): View { + // Window Manager needed to access accessibility elements for views that draw to other windows. + val windowManager = contentView.context.getSystemService(WindowManager::class.java) + return LinearLayout(contentView.context).apply { orientation = LinearLayout.HORIZONTAL weightSum = 2f layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) + viewTreeObserver.addOnGlobalLayoutListener { + // Window manager is rendered at the root of the view hierarchy, rendering it full width. + // We need to restrict it when taking accessibility snapshots. + val windowManagerRootView = (windowManager as WindowManagerImpl).currentRootView + val renderedContentWidth = contentView.measuredWidth + windowManagerRootView.layoutParams = FrameLayout.LayoutParams(renderedContentWidth, MATCH_PARENT, Gravity.START) + } + val overlay = AccessibilityOverlayView(context).apply { addView(contentView, FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)) } @@ -55,8 +68,6 @@ public class AccessibilityRenderExtension : RenderExtension { addView(overlayDetailsView, LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT, 1f)) OneShotPreDrawListener.add(this) { - // Window Manager needed to access accessibility elements for views that draw to other windows - val windowManager = context.getSystemService(WindowManager::class.java) val windowManagerRootView = (windowManager as WindowManagerImpl).currentRootView val elements = buildList { @@ -70,6 +81,7 @@ public class AccessibilityRenderExtension : RenderExtension { } } + @SuppressLint("VisibleForTests") private fun View.processAccessibleChildren( processElement: (AccessibilityElement) -> Unit ) {