how to close jitsi call activity when any user left Conference android kotlin

1k Views Asked by At

I was developing some Conference application and got confused on how to handle PARTICIPANT_LEFT.action in code. Here is my code



    private var roomName: String? = null
    private lateinit var anotherUser:String
    private var username: String? = SharedUserObject.userID

    private var jitsiMeetView: JitsiMeetView? = null
    @SuppressLint("LogNotTimber")
    @Suppress("DEPRECATION")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_call)
        anotherUser = intent.getStringExtra("AnotherUser").toString()
        SharedUserObject.checkCallActivity = true
        // get data from Two Activities (IncomingCall , CallFrom )
        // create jitsi call view
        //  if (!SharedUserObject.checkCallActivity) {
        dataFromIntent
        jitsiMeetView = JitsiMeetView(this@CallActivity)
        val conferenceOptions = videoChatOptions
        jitsiMeetView!!.join(conferenceOptions)
        setContentView(jitsiMeetView)
        jitsiMeetView!!.listener = this
        //   }
        val intentFilter = IntentFilter()
        intentFilter.addAction(BroadcastEvent.Type.PARTICIPANT_LEFT.action)
        LocalBroadcastManager.getInstance(this).registerReceiver(BroadcastReceiver(applicationContext), intentFilter)



    }


    override fun requestPermissions(
        strings: Array<String>,
        i: Int,
        permissionListener: PermissionListener
    ) {}

    // this run when user accept the call and set it busy
    @SuppressLint("LogNotTimber")
    override fun onConferenceJoined(map: Map<String, Any>) {
        SharedUserObject.inCall = true


    }

    @SuppressLint("LogNotTimber")
    // this run when user end the call and set it not busy
    override fun onConferenceTerminated(map: Map<String, Any>) {
        SharedUserObject.inCall = false
        //
        SharedUserObject.checkCallActivity = false

        jitsiMeetView?.leave()
        jitsiMeetView?.dispose()
        jitsiMeetView = null
        finish()

        val intent = Intent(this, MainActivity::class.java)
        startActivity(intent)
    }



    override fun onConferenceWillJoin(map: Map<String, Any>) {

        //LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(muteBroadcastIntent)
    }
    private val dataFromIntent: Unit
        get() {

            roomName = intent.getStringExtra("RoomName").toString()
            username = ""
        }

    // Set call subject here. Connection with jitsi call server and create Call.
    private val videoChatOptions: JitsiMeetConferenceOptions
        get() {
            var videoChatUrl: URL? = null
            try {
              
                videoChatUrl = URL("https://meet.jit.si")
            } catch (e: Exception) {
                e.printStackTrace()
            }
            val meetUserInfo = JitsiMeetUserInfo()
            meetUserInfo.displayName = SharedUserObject.userID

            return JitsiMeetConferenceOptions.Builder()
                .setServerURL(videoChatUrl)
                .setAudioOnly(true)
                .setAudioMuted(false)
                .setUserInfo(meetUserInfo)
                .setSubject(roomName) // Set call subject here. use to display phone number here.
                .setRoom(roomName)
                .build()
        }
    override fun onDestroy() {
        super.onDestroy()
        SharedUserObject.checkCallActivity = false

        jitsiMeetView?.leave()
        jitsiMeetView?.dispose()
        jitsiMeetView = null
        JitsiMeetActivityDelegate.onHostDestroy(this)
    }

}

I need that when user leaves the Conference then the Conference should end. I tried using BroadcastEvent.Type.PARTICIPANT_LEFT.action but no success was received. Please guide me if there is some other way to implement it.

0

There are 0 best solutions below