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

Commit e5773136 authored by Miranda Kephart's avatar Miranda Kephart Committed by Android (Google) Code Review
Browse files

Merge "Update scroll chip on rotation" into 24D1-dev

parents 55e53393 6bd9e220
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
@@ -591,7 +591,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,