Loading packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotActionsProvider.kt +20 −9 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import dagger.assisted.AssistedInject */ interface ScreenshotActionsProvider { fun onScrollChipReady(onClick: Runnable) fun onScrollChipInvalidated() fun setCompletedScreenshot(result: ScreenshotSavedResult) /** Loading Loading @@ -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 Loading Loading @@ -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), Loading @@ -130,8 +135,14 @@ constructor( ), showDuringEntrance = true, ) { onClick.run() onScrollClick?.run() } addedScrollChip = true } } override fun onScrollChipInvalidated() { onScrollClick = null } override fun setCompletedScreenshot(result: ScreenshotSavedResult) { Loading packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +5 −1 Original line number Diff line number Diff line Loading @@ -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( Loading packages/SystemUI/tests/src/com/android/systemui/screenshot/DefaultScreenshotActionsProviderTest.kt +42 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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, Loading Loading
packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotActionsProvider.kt +20 −9 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import dagger.assisted.AssistedInject */ interface ScreenshotActionsProvider { fun onScrollChipReady(onClick: Runnable) fun onScrollChipInvalidated() fun setCompletedScreenshot(result: ScreenshotSavedResult) /** Loading Loading @@ -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 Loading Loading @@ -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), Loading @@ -130,8 +135,14 @@ constructor( ), showDuringEntrance = true, ) { onClick.run() onScrollClick?.run() } addedScrollChip = true } } override fun onScrollChipInvalidated() { onScrollClick = null } override fun setCompletedScreenshot(result: ScreenshotSavedResult) { Loading
packages/SystemUI/src/com/android/systemui/screenshot/ScreenshotController.java +5 −1 Original line number Diff line number Diff line Loading @@ -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( Loading
packages/SystemUI/tests/src/com/android/systemui/screenshot/DefaultScreenshotActionsProviderTest.kt +42 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading @@ -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, Loading