VideoConferenceActivity.kt
package chat.rocket.android.videoconference.ui
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import chat.rocket.android.videoconference.presenter.JitsiVideoConferenceView
import chat.rocket.android.videoconference.presenter.VideoConferencePresenter
import dagger.android.AndroidInjection
import org.jitsi.meet.sdk.JitsiMeet
import org.jitsi.meet.sdk.JitsiMeetActivity
import org.jitsi.meet.sdk.JitsiMeetConferenceOptions
import org.jitsi.meet.sdk.JitsiMeetViewListener
import timber.log.Timber
import java.net.URL
import javax.inject.Inject
fun Context.videoConferenceIntent(chatRoomId: String, chatRoomType: String): Intent =
Intent(this, VideoConferenceActivity::class.java)
.putExtra(INTENT_CHAT_ROOM_ID, chatRoomId)
.putExtra(INTENT_CHAT_ROOM_TYPE, chatRoomType)
private const val INTENT_CHAT_ROOM_ID = "chat_room_id"
private const val INTENT_CHAT_ROOM_TYPE = "chat_room_type"
class VideoConferenceActivity : AppCompatActivity(), JitsiVideoConferenceView,
JitsiMeetViewListener {
@Inject lateinit var presenter: VideoConferencePresenter
private lateinit var chatRoomId: String
private lateinit var chatRoomType: String
override fun onCreate(savedInstanceState: Bundle?) {
AndroidInjection.inject(this)
super.onCreate(savedInstanceState)
chatRoomId = intent.getStringExtra(INTENT_CHAT_ROOM_ID)
chatRoomType = intent.getStringExtra(INTENT_CHAT_ROOM_TYPE)
with(presenter) {
setup(chatRoomId, chatRoomType)
initVideoConference()
}
}
override fun onBackPressed() {
super.onBackPressed()
finishVideoConference()
}
override fun onConferenceWillJoin(map: MutableMap<String, Any>?) =
logJitsiMeetViewState("Joining video conferencing", map)
override fun onConferenceJoined(map: MutableMap<String, Any>?) =
logJitsiMeetViewState("Joined video conferencing", map)
override fun onConferenceTerminated(map: MutableMap<String, Any>?) {
map?.let {
if (it.containsKey("error")) {
logJitsiMeetViewState("Terminated video conferencing with error", map)
} else {
logJitsiMeetViewState("Terminated video conferencing", map)
}
}
finishVideoConference()
}
override fun setupVideoConference(serverURL: URL) =
JitsiMeet.setDefaultConferenceOptions(
JitsiMeetConferenceOptions.Builder()
.setServerURL(serverURL)
.setWelcomePageEnabled(false)
.build()
)
override fun startVideoConference(room: String) =
JitsiMeetActivity.launch(
this, JitsiMeetConferenceOptions.Builder()
.setRoom(room)
.build()
)
override fun finishVideoConference() {
presenter.invalidateTimer()
finish()
}
override fun logJitsiMeetViewState(message: String, map: MutableMap<String, Any>?) =
Timber.i("$message: $map")
}