diff --git a/src/com/android/settings/connecteddevice/display/DisplayTopology.kt b/src/com/android/settings/connecteddevice/display/DisplayTopology.kt index 50ad5d12c71..c30d98a0c2b 100644 --- a/src/com/android/settings/connecteddevice/display/DisplayTopology.kt +++ b/src/com/android/settings/connecteddevice/display/DisplayTopology.kt @@ -73,9 +73,6 @@ fun Float.atLeast(n: Number): Float = max(this, n.toFloat()) * position. In practice the origin will be the upper-left coordinate of the primary display. * * @param paneWidth width of the pane in view coordinates - * @param minPaneHeight smallest allowed height of the pane in view coordinates. This will not - * affect the block ratio, but only the final height of the pane and the - * position of the display bounds' center. * @param minEdgeLength the smallest length permitted of a display block. This should be set based * on accessibility requirements, but also accounting for padding that appears * around each button. @@ -85,7 +82,7 @@ fun Float.atLeast(n: Number): Float = max(this, n.toFloat()) * @param displaysPos the absolute topology coordinates for each display in the topology. */ class TopologyScale( - paneWidth: Int, minPaneHeight: Float, minEdgeLength: Float, maxEdgeLength: Float, + paneWidth: Int, minEdgeLength: Float, maxEdgeLength: Float, displaysPos: Collection) { /** Scale of block sizes to real-world display sizes. Should be less than 1. */ val blockRatio: Float @@ -124,12 +121,11 @@ class TopologyScale( // requirements. .atLeast(minEdgeLength / smallestDisplayDim) - paneHeight = minPaneHeight - // A tall pane is likely to result in more scrolling. So we - // prevent the height from growing too large here, by limiting vertical padding to - // 1.5x of the minEdgeLength on each side. This keeps a comfortable amount of - // padding without it resulting in too much deadspace. - .atLeast(blockRatio * displayBounds.height() + minEdgeLength * 3f) + // A tall pane is likely to result in more scrolling. So we + // prevent the height from growing too large here, by limiting vertical padding to + // 1.5x of the minEdgeLength on each side. This keeps a comfortable amount of + // padding without it resulting in too much deadspace. + paneHeight = blockRatio * displayBounds.height() + minEdgeLength * 3f // Set originPaneXY (the location of 0,0 in display space in the pane's coordinate system) // such that the display bounds rect is centered in the pane. @@ -404,7 +400,7 @@ class DisplayTopologyPreference(context : Context) // pixels, and the display coordinates are in density-independent pixels. val dpi = injector.densityDpi val scaling = TopologyScale( - mPaneContent.width, minPaneHeight = mTopologyInfo?.scaling?.paneHeight ?: 0f, + mPaneContent.width, minEdgeLength = DisplayTopology.dpToPx(60f, dpi), maxEdgeLength = DisplayTopology.dpToPx(256f, dpi), newBounds.map { it.second }.toList()) diff --git a/tests/robotests/src/com/android/settings/connecteddevice/display/TopologyScaleTest.kt b/tests/robotests/src/com/android/settings/connecteddevice/display/TopologyScaleTest.kt index e88939bb6dd..9e0aeac9022 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/display/TopologyScaleTest.kt +++ b/tests/robotests/src/com/android/settings/connecteddevice/display/TopologyScaleTest.kt @@ -45,8 +45,7 @@ class TopologyScaleTest { @Test fun oneDisplay4to3Aspect() { val scale = TopologyScale( - /* paneWidth= */ 640, minPaneHeight = 0f, - minEdgeLength = 48f, maxEdgeLength = 64f, + paneWidth = 640, minEdgeLength = 48f, maxEdgeLength = 64f, listOf(RectF(0f, 0f, 640f, 480f))) // blockRatio is is set in order to make the smallest display edge (480 dp) 48dp @@ -62,24 +61,12 @@ class TopologyScaleTest { PointF(640f, 240f) to scale.paneToDisplayCoor(352f, 96f), ), 0.001f) - - // Same as original scale but made taller with minPaneHeight. - // The paneHeight and origin coordinates are changed but the block ratio is the same. - val taller = TopologyScale( - /* paneWidth= */ 640, minPaneHeight = 155.0f, - minEdgeLength = 48f, maxEdgeLength = 64f, - listOf(RectF(0f, 0f, 640f, 480f))) - - assertEquals( - "{TopologyScale blockRatio=0.100000 originPaneXY=288.0,72.0 paneHeight=192.0}", - "" + taller) } @Test fun twoUnalignedDisplays() { val scale = TopologyScale( - /* paneWidth= */ 300, minPaneHeight = 0f, - minEdgeLength = 48f, maxEdgeLength = 96f, + paneWidth = 300, minEdgeLength = 48f, maxEdgeLength = 96f, listOf(RectF(0f, 0f, 1920f, 1200f), RectF(1920f, -300f, 3840f, 900f))) assertEquals( @@ -97,8 +84,7 @@ class TopologyScaleTest { @Test fun twoDisplaysBlockRatioBumpedForGarSizeMinimumHorizontal() { val scale = TopologyScale( - /* paneWidth= */ 192, minPaneHeight = 0f, - minEdgeLength = 48f, maxEdgeLength = 64f, + paneWidth = 192, minEdgeLength = 48f, maxEdgeLength = 64f, listOf(RectF(0f, 0f, 240f, 320f), RectF(-240f, -320f, 0f, 0f))) // blockRatio is higher than 0.05 in order to make the smallest display edge (240 dp) 48dp @@ -118,8 +104,7 @@ class TopologyScaleTest { @Test fun paneVerticalPaddingSetByMinEdgeLength() { val scale = TopologyScale( - /* paneWidth= */ 300, minPaneHeight = 0f, - minEdgeLength = 48f, maxEdgeLength = 80f, + paneWidth = 300, minEdgeLength = 48f, maxEdgeLength = 80f, listOf( RectF(0f, 0f, 640f, 480f), RectF(0f, 480f, 640f, 960f), @@ -141,8 +126,7 @@ class TopologyScaleTest { @Test fun limitedByCustomMaxBlockRatio() { val scale = TopologyScale( - /* paneWidth= */ 300, minPaneHeight = 0f, - minEdgeLength = 24f, maxEdgeLength = 77f, + paneWidth = 300, minEdgeLength = 24f, maxEdgeLength = 77f, listOf( RectF(0f, 0f, 640f, 480f), RectF(0f, 480f, 640f, 960f))) @@ -161,8 +145,7 @@ class TopologyScaleTest { fun largeCustomMinEdgeLength() { // minBlockEdgeLength/minDisplayEdgeLength = 80/480 = 1/6, so the block ratio will be 1/6 val scale = TopologyScale( - /* paneWidth= */ 300, minPaneHeight = 0f, - minEdgeLength = 80f, maxEdgeLength = 100f, + paneWidth = 300, minEdgeLength = 80f, maxEdgeLength = 100f, listOf( RectF(0f, 0f, 640f, 480f), RectF(0f, 480f, 640f, 960f)))