Loading packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt +41 −15 Original line number Original line Diff line number Diff line Loading @@ -136,9 +136,9 @@ enum class ChipStateSender( ), ), ) { ) { override fun isValidNextState(nextState: ChipStateSender): Boolean { override fun isValidNextState(nextState: ChipStateSender): Boolean { return nextState == FAR_FROM_RECEIVER || // Since _SUCCEEDED is the end of a transfer sequence, we should be able to move to any nextState == ALMOST_CLOSE_TO_START_CAST || // state that represents the beginning of a new sequence. nextState == TRANSFER_TO_THIS_DEVICE_TRIGGERED return stateIsStartOfSequence(nextState) } } }, }, Loading @@ -158,9 +158,9 @@ enum class ChipStateSender( ), ), ) { ) { override fun isValidNextState(nextState: ChipStateSender): Boolean { override fun isValidNextState(nextState: ChipStateSender): Boolean { return nextState == FAR_FROM_RECEIVER || // Since _SUCCEEDED is the end of a transfer sequence, we should be able to move to any nextState == ALMOST_CLOSE_TO_END_CAST || // state that represents the beginning of a new sequence. nextState == TRANSFER_TO_RECEIVER_TRIGGERED return stateIsStartOfSequence(nextState) } } }, }, Loading @@ -173,9 +173,9 @@ enum class ChipStateSender( endItem = SenderEndItem.Error, endItem = SenderEndItem.Error, ) { ) { override fun isValidNextState(nextState: ChipStateSender): Boolean { override fun isValidNextState(nextState: ChipStateSender): Boolean { return nextState == FAR_FROM_RECEIVER || // Since _FAILED is the end of a transfer sequence, we should be able to move to any nextState == ALMOST_CLOSE_TO_START_CAST || // state that represents the beginning of a new sequence. nextState == TRANSFER_TO_THIS_DEVICE_TRIGGERED return stateIsStartOfSequence(nextState) } } }, }, Loading @@ -188,9 +188,9 @@ enum class ChipStateSender( endItem = SenderEndItem.Error, endItem = SenderEndItem.Error, ) { ) { override fun isValidNextState(nextState: ChipStateSender): Boolean { override fun isValidNextState(nextState: ChipStateSender): Boolean { return nextState == FAR_FROM_RECEIVER || // Since _FAILED is the end of a transfer sequence, we should be able to move to any nextState == ALMOST_CLOSE_TO_END_CAST || // state that represents the beginning of a new sequence. nextState == TRANSFER_TO_RECEIVER_TRIGGERED return stateIsStartOfSequence(nextState) } } }, }, Loading @@ -210,9 +210,9 @@ enum class ChipStateSender( } } override fun isValidNextState(nextState: ChipStateSender): Boolean { override fun isValidNextState(nextState: ChipStateSender): Boolean { return nextState == FAR_FROM_RECEIVER || // When far away, we can go to any state that represents the start of a transfer nextState.transferStatus == TransferStatus.NOT_STARTED || // sequence. nextState.transferStatus == TransferStatus.IN_PROGRESS return stateIsStartOfSequence(nextState) } } }; }; Loading @@ -227,6 +227,20 @@ enum class ChipStateSender( return Text.Loaded(context.getString(stringResId!!, otherDeviceName)) return Text.Loaded(context.getString(stringResId!!, otherDeviceName)) } } /** * Returns true if moving from this state to [nextState] is a valid transition. * * In general, we expect a media transfer go to through a sequence of states: * For push-to-receiver: * - ALMOST_CLOSE_TO_START_CAST => TRANSFER_TO_RECEIVER_TRIGGERED => * TRANSFER_TO_RECEIVER_(SUCCEEDED|FAILED) * - ALMOST_CLOSE_TO_END_CAST => TRANSFER_TO_THIS_DEVICE_TRIGGERED => * TRANSFER_TO_THIS_DEVICE_(SUCCEEDED|FAILED) * * This method should validate that the states go through approximately that sequence. * * See b/221265848 for more details. */ abstract fun isValidNextState(nextState: ChipStateSender): Boolean abstract fun isValidNextState(nextState: ChipStateSender): Boolean companion object { companion object { Loading Loading @@ -276,6 +290,18 @@ enum class ChipStateSender( return currentState.isValidNextState(desiredState) return currentState.isValidNextState(desiredState) } } /** * Returns true if [state] represents a state at the beginning of a sequence and false * otherwise. */ private fun stateIsStartOfSequence(state: ChipStateSender): Boolean { return state == FAR_FROM_RECEIVER || state.transferStatus == TransferStatus.NOT_STARTED || // It's possible to skip the NOT_STARTED phase and go immediately into the // IN_PROGRESS phase. state.transferStatus == TransferStatus.IN_PROGRESS } } } } } Loading packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinatorTest.kt +4 −4 Original line number Original line Diff line number Diff line Loading @@ -624,7 +624,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { } } @Test @Test fun commandQueueCallback_receiverSucceededThenReceiverTriggered_invalidTransitionLogged() { fun commandQueueCallback_receiverSucceededThenThisDeviceSucceeded_invalidTransitionLogged() { displayReceiverTriggered() displayReceiverTriggered() commandQueueCallback.updateMediaTapToTransferSenderDisplay( commandQueueCallback.updateMediaTapToTransferSenderDisplay( StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_RECEIVER_SUCCEEDED, StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_RECEIVER_SUCCEEDED, Loading @@ -634,7 +634,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { reset(windowManager) reset(windowManager) commandQueueCallback.updateMediaTapToTransferSenderDisplay( commandQueueCallback.updateMediaTapToTransferSenderDisplay( StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_RECEIVER_TRIGGERED, StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_SUCCEEDED, routeInfo, routeInfo, null null ) ) Loading @@ -644,7 +644,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { } } @Test @Test fun commandQueueCallback_thisDeviceSucceededThenThisDeviceTriggered_invalidTransitionLogged() { fun commandQueueCallback_thisDeviceSucceededThenReceiverSucceeded_invalidTransitionLogged() { displayThisDeviceTriggered() displayThisDeviceTriggered() commandQueueCallback.updateMediaTapToTransferSenderDisplay( commandQueueCallback.updateMediaTapToTransferSenderDisplay( StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_SUCCEEDED, StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_SUCCEEDED, Loading @@ -654,7 +654,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { reset(windowManager) reset(windowManager) commandQueueCallback.updateMediaTapToTransferSenderDisplay( commandQueueCallback.updateMediaTapToTransferSenderDisplay( StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_TRIGGERED, StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_RECEIVER_SUCCEEDED, routeInfo, routeInfo, null null ) ) Loading Loading
packages/SystemUI/src/com/android/systemui/media/taptotransfer/sender/ChipStateSender.kt +41 −15 Original line number Original line Diff line number Diff line Loading @@ -136,9 +136,9 @@ enum class ChipStateSender( ), ), ) { ) { override fun isValidNextState(nextState: ChipStateSender): Boolean { override fun isValidNextState(nextState: ChipStateSender): Boolean { return nextState == FAR_FROM_RECEIVER || // Since _SUCCEEDED is the end of a transfer sequence, we should be able to move to any nextState == ALMOST_CLOSE_TO_START_CAST || // state that represents the beginning of a new sequence. nextState == TRANSFER_TO_THIS_DEVICE_TRIGGERED return stateIsStartOfSequence(nextState) } } }, }, Loading @@ -158,9 +158,9 @@ enum class ChipStateSender( ), ), ) { ) { override fun isValidNextState(nextState: ChipStateSender): Boolean { override fun isValidNextState(nextState: ChipStateSender): Boolean { return nextState == FAR_FROM_RECEIVER || // Since _SUCCEEDED is the end of a transfer sequence, we should be able to move to any nextState == ALMOST_CLOSE_TO_END_CAST || // state that represents the beginning of a new sequence. nextState == TRANSFER_TO_RECEIVER_TRIGGERED return stateIsStartOfSequence(nextState) } } }, }, Loading @@ -173,9 +173,9 @@ enum class ChipStateSender( endItem = SenderEndItem.Error, endItem = SenderEndItem.Error, ) { ) { override fun isValidNextState(nextState: ChipStateSender): Boolean { override fun isValidNextState(nextState: ChipStateSender): Boolean { return nextState == FAR_FROM_RECEIVER || // Since _FAILED is the end of a transfer sequence, we should be able to move to any nextState == ALMOST_CLOSE_TO_START_CAST || // state that represents the beginning of a new sequence. nextState == TRANSFER_TO_THIS_DEVICE_TRIGGERED return stateIsStartOfSequence(nextState) } } }, }, Loading @@ -188,9 +188,9 @@ enum class ChipStateSender( endItem = SenderEndItem.Error, endItem = SenderEndItem.Error, ) { ) { override fun isValidNextState(nextState: ChipStateSender): Boolean { override fun isValidNextState(nextState: ChipStateSender): Boolean { return nextState == FAR_FROM_RECEIVER || // Since _FAILED is the end of a transfer sequence, we should be able to move to any nextState == ALMOST_CLOSE_TO_END_CAST || // state that represents the beginning of a new sequence. nextState == TRANSFER_TO_RECEIVER_TRIGGERED return stateIsStartOfSequence(nextState) } } }, }, Loading @@ -210,9 +210,9 @@ enum class ChipStateSender( } } override fun isValidNextState(nextState: ChipStateSender): Boolean { override fun isValidNextState(nextState: ChipStateSender): Boolean { return nextState == FAR_FROM_RECEIVER || // When far away, we can go to any state that represents the start of a transfer nextState.transferStatus == TransferStatus.NOT_STARTED || // sequence. nextState.transferStatus == TransferStatus.IN_PROGRESS return stateIsStartOfSequence(nextState) } } }; }; Loading @@ -227,6 +227,20 @@ enum class ChipStateSender( return Text.Loaded(context.getString(stringResId!!, otherDeviceName)) return Text.Loaded(context.getString(stringResId!!, otherDeviceName)) } } /** * Returns true if moving from this state to [nextState] is a valid transition. * * In general, we expect a media transfer go to through a sequence of states: * For push-to-receiver: * - ALMOST_CLOSE_TO_START_CAST => TRANSFER_TO_RECEIVER_TRIGGERED => * TRANSFER_TO_RECEIVER_(SUCCEEDED|FAILED) * - ALMOST_CLOSE_TO_END_CAST => TRANSFER_TO_THIS_DEVICE_TRIGGERED => * TRANSFER_TO_THIS_DEVICE_(SUCCEEDED|FAILED) * * This method should validate that the states go through approximately that sequence. * * See b/221265848 for more details. */ abstract fun isValidNextState(nextState: ChipStateSender): Boolean abstract fun isValidNextState(nextState: ChipStateSender): Boolean companion object { companion object { Loading Loading @@ -276,6 +290,18 @@ enum class ChipStateSender( return currentState.isValidNextState(desiredState) return currentState.isValidNextState(desiredState) } } /** * Returns true if [state] represents a state at the beginning of a sequence and false * otherwise. */ private fun stateIsStartOfSequence(state: ChipStateSender): Boolean { return state == FAR_FROM_RECEIVER || state.transferStatus == TransferStatus.NOT_STARTED || // It's possible to skip the NOT_STARTED phase and go immediately into the // IN_PROGRESS phase. state.transferStatus == TransferStatus.IN_PROGRESS } } } } } Loading
packages/SystemUI/tests/src/com/android/systemui/media/taptotransfer/sender/MediaTttSenderCoordinatorTest.kt +4 −4 Original line number Original line Diff line number Diff line Loading @@ -624,7 +624,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { } } @Test @Test fun commandQueueCallback_receiverSucceededThenReceiverTriggered_invalidTransitionLogged() { fun commandQueueCallback_receiverSucceededThenThisDeviceSucceeded_invalidTransitionLogged() { displayReceiverTriggered() displayReceiverTriggered() commandQueueCallback.updateMediaTapToTransferSenderDisplay( commandQueueCallback.updateMediaTapToTransferSenderDisplay( StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_RECEIVER_SUCCEEDED, StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_RECEIVER_SUCCEEDED, Loading @@ -634,7 +634,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { reset(windowManager) reset(windowManager) commandQueueCallback.updateMediaTapToTransferSenderDisplay( commandQueueCallback.updateMediaTapToTransferSenderDisplay( StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_RECEIVER_TRIGGERED, StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_SUCCEEDED, routeInfo, routeInfo, null null ) ) Loading @@ -644,7 +644,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { } } @Test @Test fun commandQueueCallback_thisDeviceSucceededThenThisDeviceTriggered_invalidTransitionLogged() { fun commandQueueCallback_thisDeviceSucceededThenReceiverSucceeded_invalidTransitionLogged() { displayThisDeviceTriggered() displayThisDeviceTriggered() commandQueueCallback.updateMediaTapToTransferSenderDisplay( commandQueueCallback.updateMediaTapToTransferSenderDisplay( StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_SUCCEEDED, StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_SUCCEEDED, Loading @@ -654,7 +654,7 @@ class MediaTttSenderCoordinatorTest : SysuiTestCase() { reset(windowManager) reset(windowManager) commandQueueCallback.updateMediaTapToTransferSenderDisplay( commandQueueCallback.updateMediaTapToTransferSenderDisplay( StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_THIS_DEVICE_TRIGGERED, StatusBarManager.MEDIA_TRANSFER_SENDER_STATE_TRANSFER_TO_RECEIVER_SUCCEEDED, routeInfo, routeInfo, null null ) ) Loading