Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c09b82f authored by Matthew DeVore's avatar Matthew DeVore Committed by Android (Google) Code Review
Browse files

Merge "DisplayTopology: user cannot drag only display" into main

parents 7bada839 b9ea2e32
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -415,8 +415,12 @@ class DisplayTopologyPreference(context : Context)

    private fun onBlockTouchDown(
            displayId: Int, displayPos: RectF, block: DisplayBlock, ev: MotionEvent): Boolean {
        val stationaryDisps = (mTopologyInfo ?: return false)
                .positions.filter { it.first != displayId }
        val positions = (mTopologyInfo ?: return false).positions

        // Do not allow dragging for single-display topology, since there is nothing to clamp it to.
        if (positions.size <= 1) { return false }

        val stationaryDisps = positions.filter { it.first != displayId }

        // We have to use rawX and rawY for the coordinates since the view receiving the event is
        // also the view that is moving. We need coordinates relative to something that isn't
+39 −0
Original line number Diff line number Diff line
@@ -102,6 +102,15 @@ class DisplayTopologyPreferenceTest {
                .map { preference.mPaneContent.getChildAt(it) as DisplayBlock }
                .toList()

    fun singleDisplayTopology(): DisplayTopology {
        val primaryId = 22;

        val root = DisplayTopology.TreeNode(
                primaryId, /* width= */ 200f, /* height= */ 160f, POSITION_LEFT, /* offset= */ 0f)

        return DisplayTopology(root, primaryId)
    }

    fun twoDisplayTopology(childPosition: Int, childOffset: Float): DisplayTopology {
        val primaryId = 1

@@ -287,6 +296,36 @@ class DisplayTopologyPreferenceTest {
        assertThat(preference.mTimesReceivedSameTopology).isEqualTo(1)
    }

    @Test
    fun cannotMoveSingleDisplay() {
        injector.topology = singleDisplayTopology()
        preparePane()

        val paneChildren = getPaneChildren()
        assertThat(paneChildren).hasSize(1)
        val block = paneChildren[0]

        val origY = block.unpaddedY

        block.dispatchTouchEvent(MotionEventBuilder.newBuilder()
                .setAction(MotionEvent.ACTION_DOWN)
                .setPointer(0f, 0f)
                .build())
        block.dispatchTouchEvent(MotionEventBuilder.newBuilder()
                .setAction(MotionEvent.ACTION_MOVE)
                .setPointer(0f, 30f)
                .build())

        assertThat(block.unpaddedY).isWithin(0.01f).of(origY)

        block.dispatchTouchEvent(MotionEventBuilder.newBuilder()
                .setAction(MotionEvent.ACTION_UP)
                .build())

        // Block should be back to original position.
        assertThat(block.unpaddedY).isWithin(0.01f).of(origY)
    }

    @Test
    fun updatedTopologyCancelsDragIfNonTrivialChange() {
        val (leftBlock, rightBlock) = setupTwoDisplays(POSITION_LEFT, /* childOffset= */ 42f)