in amazon-chime-sdk/src/main/java/com/amazonaws/services/chime/sdk/meetings/internal/audio/DefaultAudioClientObserver.kt [85:180]
override fun onAudioClientStateChange(newInternalAudioState: Int, newInternalAudioStatus: Int) {
val newAudioStatus: MeetingSessionStatusCode? = toAudioStatus(newInternalAudioStatus)
var newAudioState: SessionStateControllerAction = toAudioClientState(newInternalAudioState, newAudioStatus)
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)
primaryMeetingPromotionObserver?.onPrimaryMeetingDemotion(MeetingSessionStatus(MeetingSessionStatusCode.AudioInternalServerError))
?: run {
logger.info(TAG, "Primary meeting demotion occurred from audio (on reconnect) but no primary meeting demotion callback is set")
}
primaryMeetingPromotionObserver = null
}
}
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() }
}
else -> Unit
}
else -> Unit
}
}
SessionStateControllerAction.Reconnecting -> {
if (currentAudioState == SessionStateControllerAction.FinishConnecting) {
notifyAudioClientObserver { observer -> observer.onAudioSessionDropped() }
}
}
SessionStateControllerAction.FinishDisconnecting -> {
when (currentAudioState) {
SessionStateControllerAction.Connecting,
SessionStateControllerAction.FinishConnecting -> {
if (shouldCloseAndNotifyEndMeeting(newAudioStatus)) {
handleAudioSessionEndedByServer(newAudioStatus)
}
}
SessionStateControllerAction.Reconnecting -> {
notifyAudioClientObserver { observer -> observer.onAudioSessionCancelledReconnect() }
if (shouldCloseAndNotifyEndMeeting(newAudioStatus)) {
handleAudioSessionEndedByServer(newAudioStatus)
}
}
else -> Unit
}
}
SessionStateControllerAction.Fail -> {
when (currentAudioState) {
SessionStateControllerAction.Connecting,
SessionStateControllerAction.FinishConnecting -> {
handleOnAudioSessionFailed(newAudioStatus)
}
SessionStateControllerAction.Reconnecting -> {
notifyAudioClientObserver { observer ->
observer.onAudioSessionCancelledReconnect()
}
handleOnAudioSessionFailed(newAudioStatus)
}
else -> Unit
}
}
else -> Unit
}
currentAudioState = newAudioState
currentAudioStatus = newAudioStatus
}