override suspend fun updateAppInstanceUserEndpoint()

in apps/chat-android/app/src/main/java/com/amazonaws/services/chime/sdkdemo/data/source/DefaultUserRepository.kt [50:87]


    override suspend fun updateAppInstanceUserEndpoint(
        name: String?,
        allowMessage: AllowMessages,
        endpointId: String,
        appInstanceUserArn: String
    ) = chimeSDKService.updateAppInstanceUserEndpoint(name, allowMessage, endpointId, appInstanceUserArn)

    override suspend fun deregisterAppInstanceUserEndpoint(endpointId: String, appInstanceUserArn: String) =
        chimeSDKService.deregisterAppInstanceUserEndpoint(endpointId, appInstanceUserArn)

    override suspend fun getCurrentUserEndpoint(): Result<UserEndpoint> {
        val result = CompletableDeferred<Result<UserEndpoint>>()
        var token = ""
        Firebase.messaging.token.addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                return@OnCompleteListener
            }
            token = task.result.toString()
        })

        getCurrentUser().onSuccess { user ->
            listAppInstanceUserEndpoints(user.chimeAppInstanceUserArn)
                .onSuccess { listAppInstanceUserEndpointsResult ->
                    for (endpoint in listAppInstanceUserEndpointsResult.appInstanceUserEndpoints) {
                        describeAppInstanceUserEndpoint(endpoint.endpointId, endpoint.appInstanceUserArn)
                            .onSuccess {
                                if (it.appInstanceUserEndpoint.endpointAttributes.deviceToken == token) {
                                    val ep = it.appInstanceUserEndpoint
                                    result.complete(Success(UserEndpoint(ep.endpointId, ep.appInstanceUserArn, ep.name, ep.allowMessages)))
                                }
                            }
                    }
                }
        }
        result.complete(Failure(RuntimeException("Failed to fetch current endpoint")))

        return result.await()
    }