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

Commit a1de1721 authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
Browse files

Merge "Merge "Update scroll chip on rotation" into 24D1-dev am: e5773136" into main

parents cde46406 bcae05fa
Loading
Loading
Loading
Loading
+20 −9
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import dagger.assisted.AssistedInject
 */
interface ScreenshotActionsProvider {
    fun onScrollChipReady(onClick: Runnable)
    fun onScrollChipInvalidated()
    fun setCompletedScreenshot(result: ScreenshotSavedResult)

    /**
@@ -67,6 +68,8 @@ constructor(
    @Assisted val requestId: String,
    @Assisted val actionExecutor: ActionExecutor,
) : ScreenshotActionsProvider {
    private var addedScrollChip = false
    private var onScrollClick: Runnable? = null
    private var pendingAction: ((ScreenshotSavedResult) -> Unit)? = null
    private var result: ScreenshotSavedResult? = null

@@ -122,6 +125,8 @@ constructor(
    }

    override fun onScrollChipReady(onClick: Runnable) {
        onScrollClick = onClick
        if (!addedScrollChip) {
            viewModel.addAction(
                ActionButtonAppearance(
                    AppCompatResources.getDrawable(context, R.drawable.ic_screenshot_scroll),
@@ -130,8 +135,14 @@ constructor(
                ),
                showDuringEntrance = true,
            ) {
            onClick.run()
                onScrollClick?.run()
            }
            addedScrollChip = true
        }
    }

    override fun onScrollChipInvalidated() {
        onScrollClick = null
    }

    override fun setCompletedScreenshot(result: ScreenshotSavedResult) {
+5 −1
Original line number Diff line number Diff line
@@ -586,7 +586,11 @@ public class ScreenshotController {
                            if (mConfigChanges.applyNewConfig(mContext.getResources())) {
                                // Hide the scroll chip until we know it's available in this
                                // orientation
                                if (screenshotShelfUi2()) {
                                    mActionsProvider.onScrollChipInvalidated();
                                } else {
                                    mViewProxy.hideScrollChip();
                                }
                                // Delay scroll capture eval a bit to allow the underlying activity
                                // to set up in the new orientation.
                                mScreenshotHandler.postDelayed(
+42 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import org.junit.Assert.assertNotNull
import org.junit.Before
import org.junit.runner.RunWith
import org.mockito.Mockito.verifyNoMoreInteractions
import org.mockito.kotlin.never
import org.mockito.kotlin.verify

@RunWith(AndroidTestingRunner::class)
@@ -111,6 +112,47 @@ class DefaultScreenshotActionsProviderTest : SysuiTestCase() {
        assertThat(intentCaptor.value.action).isEqualTo(Intent.ACTION_CHOOSER)
    }

    @Test
    fun scrollChipClicked_callsOnClick() = runTest {
        actionsProvider = createActionsProvider()

        val onScrollClick = mock<Runnable>()
        val numActions = viewModel.actions.value.size
        actionsProvider.onScrollChipReady(onScrollClick)
        viewModel.actions.value[numActions].onClicked!!.invoke()

        verify(onScrollClick).run()
    }

    @Test
    fun scrollChipClicked_afterInvalidate_doesNothing() = runTest {
        actionsProvider = createActionsProvider()

        val onScrollClick = mock<Runnable>()
        val numActions = viewModel.actions.value.size
        actionsProvider.onScrollChipReady(onScrollClick)
        actionsProvider.onScrollChipInvalidated()
        viewModel.actions.value[numActions].onClicked!!.invoke()

        verify(onScrollClick, never()).run()
    }

    @Test
    fun scrollChipClicked_afterUpdate_runsNewAction() = runTest {
        actionsProvider = createActionsProvider()

        val onScrollClick = mock<Runnable>()
        val onScrollClick2 = mock<Runnable>()
        val numActions = viewModel.actions.value.size
        actionsProvider.onScrollChipReady(onScrollClick)
        actionsProvider.onScrollChipInvalidated()
        actionsProvider.onScrollChipReady(onScrollClick2)
        viewModel.actions.value[numActions].onClicked!!.invoke()

        verify(onScrollClick2).run()
        verify(onScrollClick, never()).run()
    }

    private fun createActionsProvider(): ScreenshotActionsProvider {
        return DefaultScreenshotActionsProvider(
            context,