in amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/internal/audio/DefaultAudioClientObserver.kt [79:151]
override fun onAudioClientStateChange(newInternalAudioState: Int, newInternalAudioStatus: Int) {
val newAudioState: SessionStateControllerAction = toAudioClientState(newInternalAudioState)
val newAudioStatus: MeetingSessionStatusCode? = toAudioStatus(newInternalAudioStatus)
if (newAudioStatus == null) {
logger.warn(
TAG,
"AudioClient State raw value: $newInternalAudioState Unknown Status raw value: $newInternalAudioStatus"
)
} else {
logger.info(TAG, "AudioClient State: $newAudioState Status: $newAudioStatus")
}
if (newAudioState == SessionStateControllerAction.Unknown) return
if (newAudioState == currentAudioState && newAudioStatus == currentAudioStatus) return
when (newAudioState) {
SessionStateControllerAction.FinishConnecting -> {
when (currentAudioState) {
SessionStateControllerAction.Connecting -> {
notifyStartSucceeded()
notifyAudioClientObserver { observer -> observer.onAudioSessionStarted(false) }
}
SessionStateControllerAction.Reconnecting -> {
meetingStatsCollector.incrementRetryCount()
eventAnalyticsController.pushHistory(
MeetingHistoryEventName.meetingReconnected
)
notifyStartSucceeded()
notifyAudioClientObserver { observer -> observer.onAudioSessionStarted(true) }
}
SessionStateControllerAction.FinishConnecting ->
when (newAudioStatus) {
MeetingSessionStatusCode.OK ->
if (currentAudioStatus == MeetingSessionStatusCode.NetworkBecamePoor) {
notifyAudioClientObserver { observer -> observer.onConnectionRecovered() }
}
MeetingSessionStatusCode.NetworkBecamePoor ->
if (currentAudioStatus == MeetingSessionStatusCode.OK) {
meetingStatsCollector.incrementPoorConnectionCount()
notifyAudioClientObserver { observer -> observer.onConnectionBecamePoor() }
}
}
}
}
SessionStateControllerAction.Reconnecting -> {
if (currentAudioState == SessionStateControllerAction.FinishConnecting) {
notifyAudioClientObserver { observer -> observer.onAudioSessionDropped() }
}
}
SessionStateControllerAction.FinishDisconnecting -> {
if (currentAudioState == SessionStateControllerAction.Reconnecting) {
notifyAudioClientObserver { observer -> observer.onAudioSessionCancelledReconnect() }
}
}
SessionStateControllerAction.Fail -> {
when (currentAudioState) {
SessionStateControllerAction.Connecting,
SessionStateControllerAction.FinishConnecting -> {
handleOnAudioSessionFailed(newAudioStatus)
}
SessionStateControllerAction.Reconnecting -> {
notifyAudioClientObserver { observer ->
observer.onAudioSessionCancelledReconnect()
}
handleOnAudioSessionFailed(newAudioStatus)
}
}
}
}
currentAudioState = newAudioState
currentAudioStatus = newAudioStatus
}