Documentation

    Listening for Events

    You can listen for SDK events by implementing the UpscopeListener interface and assigning it to the Upscope object:

    Upscope.listener = object : UpscopeListener {
        // Override methods you need
    }
    

    UpscopeListener Interface

    All listener methods have default empty implementations, so you only need to override the ones you care about.

    Upscope.listener = object : UpscopeListener {
        override fun onConnectionStateChanged(state: ConnectionState) {
            // Connection state changed
            when (state) {
                is ConnectionState.Inactive -> println("Inactive")
                is ConnectionState.Connecting -> println("Connecting...")
                is ConnectionState.Connected -> println("Connected")
                is ConnectionState.Reconnecting -> println("Reconnecting...")
                is ConnectionState.Error -> println("Error: ${state.error.message}")
            }
        }
    
        override fun onSessionStarted(agentName: String?) {
            println("Session started with ${agentName ?: "an agent"}")
        }
    
        override fun onSessionEnded(reason: SessionEndReason) {
            when (reason) {
                is SessionEndReason.UserStopped -> println("User ended session")
                is SessionEndReason.AgentStopped -> println("Agent ended session")
                is SessionEndReason.Timeout -> println("Session timed out")
                is SessionEndReason.Error -> println("Session error: ${reason.error.message}")
            }
        }
    
        override fun onCustomMessageReceived(message: String, viewerId: String) {
            println("Message from $viewerId: $message")
        }
    
        override fun onError(error: UpscopeError) {
            println("Error: ${error.code} - ${error.message}")
        }
    
        override fun onViewerJoined(viewer: Viewer) {
            println("Viewer joined: ${viewer.name ?: viewer.id}")
        }
    
        override fun onViewerLeft(viewerId: String) {
            println("Viewer left: $viewerId")
        }
    
        override fun onViewerCountChanged(count: Int) {
            println("Viewers: $count")
        }
    
        override fun onRemoteControlStateChanged(state: RemoteControlState) {
            when (state) {
                RemoteControlState.ACTIVE -> println("Remote control active")
                RemoteControlState.INACTIVE -> println("Remote control inactive")
            }
        }
    
        override fun onFullDeviceSharingStateChanged(state: FullDeviceSharingState) {
            when (state) {
                FullDeviceSharingState.ACTIVE -> println("Full device sharing active")
                FullDeviceSharingState.INACTIVE -> println("Full device sharing inactive")
            }
        }
    }
    

    Event Reference

    MethodDescription
    onConnectionStateChanged(state)Called when the connection state changes.
    onSessionStarted(agentName)A screen sharing session has started. agentName is the agent's display name if available.
    onSessionEnded(reason)A session has ended. reason indicates why (user stopped, agent stopped, timeout, or error).
    onCustomMessageReceived(message, viewerId)A custom message was received from a viewer.
    onError(error)An SDK error occurred.
    onViewerJoined(viewer)An agent started viewing the session. The Viewer includes id, name, screen dimensions, and focus state.
    onViewerLeft(viewerId)An agent stopped viewing the session.
    onViewerCountChanged(count)The total number of active viewers changed.
    onRemoteControlStateChanged(state)Whether an agent currently has remote control of the device (ability to tap and scroll) changed. Independent of the session being active. RemoteControlState: INACTIVE, ACTIVE.
    onFullDeviceSharingStateChanged(state)Whether full-device (entire screen) sharing is currently running changed, as opposed to default in-app screen sharing. FullDeviceSharingState: INACTIVE, ACTIVE.