Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix ending Call Visualizer freezing app
Browse files Browse the repository at this point in the history
MOB-3997
gugalo committed Jan 30, 2025

Verified

This commit was signed with the committer’s verified signature.
1 parent 38c9546 commit 79a49b7
Showing 5 changed files with 19 additions and 15 deletions.
Original file line number Diff line number Diff line change
@@ -76,13 +76,17 @@ internal class EngagementCompletionActivityWatcher(
if (actionOnEnd == Engagement.ActionOnEnd.UNKNOWN) {
Logger.w(TAG, "Engagement ended with unknown case.")
}
if (isEndedByVisitor) {
finishActivities()
onEventHandled()
} else if (actionOnEnd == Engagement.ActionOnEnd.RETAIN || actionOnEnd == Engagement.ActionOnEnd.SHOW_SURVEY) {
onEventHandled()
} else if (actionOnEnd == Engagement.ActionOnEnd.END_NOTIFICATION || actionOnEnd == Engagement.ActionOnEnd.UNKNOWN) {
showOperatorEndedEngagementDialog(activity, onEventHandled)
when {
isEndedByVisitor || isCallVisualizer -> {
finishActivities()
onEventHandled()
}
actionOnEnd == Engagement.ActionOnEnd.RETAIN || actionOnEnd == Engagement.ActionOnEnd.SHOW_SURVEY -> {
onEventHandled()
}
actionOnEnd == Engagement.ActionOnEnd.END_NOTIFICATION || actionOnEnd == Engagement.ActionOnEnd.UNKNOWN -> {
showOperatorEndedEngagementDialog(activity, onEventHandled)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -40,7 +40,7 @@ internal class EngagementCompletionController(
// Even though we need to retain the chat screen we still need to reset view states and controllers and later setup them again
releaseResourcesUseCase()
}
_state.onNext(EngagementCompletionState.EngagementEnded(state.isEndedByVisitor, state.onEnd))
_state.onNext(EngagementCompletionState.EngagementEnded(state.isEndedByVisitor, state.isCallVisualizer, state.onEnd))
}

State.QueueUnstaffed -> {
Original file line number Diff line number Diff line change
@@ -6,6 +6,6 @@ import com.glia.androidsdk.engagement.Survey
internal sealed interface EngagementCompletionState {
data object QueueUnstaffed : EngagementCompletionState
data object UnexpectedErrorHappened : EngagementCompletionState
data class EngagementEnded(val isEndedByVisitor: Boolean, val actionOnEnd: ActionOnEnd) : EngagementCompletionState
data class EngagementEnded(val isEndedByVisitor: Boolean, val isCallVisualizer: Boolean, val actionOnEnd: ActionOnEnd) : EngagementCompletionState
data class SurveyLoaded(val survey: Survey) : EngagementCompletionState
}
Original file line number Diff line number Diff line change
@@ -86,7 +86,7 @@ class EngagementCompletionActivityWatcherTest {
Logger.setIsDebug(false)
every { Logger.d(any(), any()) } just Runs

val event = createMockEvent(EngagementCompletionState.EngagementEnded(true, Engagement.ActionOnEnd.END_NOTIFICATION))
val event = createMockEvent(EngagementCompletionState.EngagementEnded(true, false, Engagement.ActionOnEnd.END_NOTIFICATION))
every { event.consumed } returns true

val activity = mockkActivity<Activity>()
@@ -113,7 +113,7 @@ class EngagementCompletionActivityWatcherTest {

@Test
fun `handleState will finish activities when state is EngagementEnded even if activity is null or finishing`() {
val event = createMockEvent(EngagementCompletionState.EngagementEnded(true, Engagement.ActionOnEnd.END_NOTIFICATION))
val event = createMockEvent(EngagementCompletionState.EngagementEnded(true, false, Engagement.ActionOnEnd.END_NOTIFICATION))
val activity = mockkActivity<Activity>()

every { activity.isFinishing } returns true
@@ -244,7 +244,7 @@ class EngagementCompletionActivityWatcherTest {

@Test
fun `handleState will show operator ended engagement dialog when event is ActionOnEnd is END_NOTIFICATION`() {
val event = createMockEvent(EngagementCompletionState.EngagementEnded(false, Engagement.ActionOnEnd.END_NOTIFICATION))
val event = createMockEvent(EngagementCompletionState.EngagementEnded(false, false, Engagement.ActionOnEnd.END_NOTIFICATION))

val activity = mockkActivity<ChatActivity>()

Original file line number Diff line number Diff line change
@@ -60,15 +60,15 @@ class EngagementCompletionControllerTest {
engagementStateProcessor.onNext(State.EngagementEnded(EngagementType.CallVisualizer, true, Engagement.ActionOnEnd.UNKNOWN))

verify { releaseResourcesUseCase() }
assertEquals(EngagementCompletionState.EngagementEnded(true, Engagement.ActionOnEnd.UNKNOWN), controller.state.blockingFirst().value)
assertEquals(EngagementCompletionState.EngagementEnded(true, true, Engagement.ActionOnEnd.UNKNOWN), controller.state.blockingFirst().value)
}

@Test
fun `State EngagementEnded(OmniCore) should release resources and emit completion event EngagementEnded`() {
engagementStateProcessor.onNext(State.EngagementEnded(EngagementType.OmniCore, true, Engagement.ActionOnEnd.UNKNOWN))

verify { releaseResourcesUseCase() }
assertEquals(EngagementCompletionState.EngagementEnded(true, Engagement.ActionOnEnd.UNKNOWN), controller.state.blockingFirst().value)
assertEquals(EngagementCompletionState.EngagementEnded(true, false, Engagement.ActionOnEnd.UNKNOWN), controller.state.blockingFirst().value)
}

@Test
@@ -121,7 +121,7 @@ class EngagementCompletionControllerTest {

verify { releaseResourcesUseCase() }

testState.assertValues(EngagementCompletionState.EngagementEnded(false, Engagement.ActionOnEnd.UNKNOWN))
testState.assertValues(EngagementCompletionState.EngagementEnded(false, false, Engagement.ActionOnEnd.UNKNOWN))
}

@Test

0 comments on commit 79a49b7

Please sign in to comment.