From 9c0e888732f7607b2097405bf6d55cf727baabe7 Mon Sep 17 00:00:00 2001 From: Caitlin Shkuratov Date: Wed, 12 Oct 2022 17:19:39 +0000 Subject: [PATCH] [Chipbar] Have MediaTttSenderCoordinator be responsible for not hiding in certain cases. Bug: 245610654 Test: manual: Send a TRANSFER_TRIGGERED event then FAR_FROM_RECEIVER event and verify the chip is still displayed (i.e. the removal request is ignored) Test: manual: Send a ALMOST_CLOSE event then FAR_FROM_RECEIVER event and verify the chip is hidden Test: atest MediaTttSenderCoordinatorTest Test: atest ChipbarCoordinatorTest Change-Id: I8cd33a65ec48f37aa83179b348f60916df3990a8 Change-Id: Ic1f1d2fcb09727ebc24d649a26dcea40ca8287b2 --- .../sender/MediaTttSenderCoordinator.kt | 23 ++++- .../TemporaryViewDisplayController.kt | 17 +--- .../chipbar/ChipbarCoordinator.kt | 18 ---- .../sender/MediaTttSenderCoordinatorTest.kt | 27 ++++-- .../TemporaryViewDisplayControllerTest.kt | 26 ------ .../chipbar/ChipbarCoordinatorTest.kt | 86 ------------------- 6 files changed, 46 insertions(+), 151 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt index 5aaab14c1065e..224303ac098c4 100644 --- a/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinator.kt @@ -47,6 +47,8 @@ constructor( private val uiEventLogger: MediaTttSenderUiEventLogger, ) : CoreStartable { + private var displayedState: ChipStateSender? = null + private val commandQueueCallbacks = object : CommandQueue.Callbacks { override fun updateMediaTapToTransferSenderDisplay( @@ -84,8 +86,27 @@ constructor( uiEventLogger.logSenderStateChange(chipState) if (chipState == ChipStateSender.FAR_FROM_RECEIVER) { - chipbarCoordinator.removeView(removalReason = ChipStateSender.FAR_FROM_RECEIVER.name) + // Return early if we're not displaying a chip anyway + val currentDisplayedState = displayedState ?: return + + val removalReason = ChipStateSender.FAR_FROM_RECEIVER.name + if ( + currentDisplayedState.transferStatus == TransferStatus.IN_PROGRESS || + currentDisplayedState.transferStatus == TransferStatus.SUCCEEDED + ) { + // Don't remove the chip if we're in progress or succeeded, since the user should + // still be able to see the status of the transfer. + logger.logRemovalBypass( + removalReason, + bypassReason = "transferStatus=${currentDisplayedState.transferStatus.name}" + ) + return + } + + displayedState = null + chipbarCoordinator.removeView(removalReason) } else { + displayedState = chipState chipbarCoordinator.displayView(ChipSenderInfo(chipState, routeInfo, undoCallback)) } } diff --git a/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt b/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt index 5cbdf7c43a123..d5d904c50f209 100644 --- a/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt +++ b/packages/SystemUI/src/com/android/systemui/temporarydisplay/TemporaryViewDisplayController.kt @@ -131,7 +131,7 @@ abstract class TemporaryViewDisplayController(R.id.app_icon) private fun ViewGroup.getChipText(): String =