Skip to content

Commit 6b34bb2

Browse files
committed
Fix issue with Back button not working when conference is not joined yet.
1 parent 1b5852f commit 6b34bb2

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

vector/src/main/java/im/vector/app/features/call/conference/ConferenceEvent.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import androidx.lifecycle.DefaultLifecycleObserver
2424
import androidx.lifecycle.LifecycleOwner
2525
import androidx.localbroadcastmanager.content.LocalBroadcastManager
2626
import com.facebook.react.bridge.JavaOnlyMap
27+
import im.vector.app.config.Config
2728
import org.jitsi.meet.sdk.BroadcastEmitter
2829
import org.jitsi.meet.sdk.BroadcastEvent
2930
import org.jitsi.meet.sdk.JitsiMeet
@@ -35,6 +36,7 @@ sealed class ConferenceEvent(open val data: Map<String, Any>) {
3536
data class Terminated(override val data: Map<String, Any>) : ConferenceEvent(data)
3637
data class WillJoin(override val data: Map<String, Any>) : ConferenceEvent(data)
3738
data class Joined(override val data: Map<String, Any>) : ConferenceEvent(data)
39+
object ReadyToClose : ConferenceEvent(emptyMap())
3840

3941
fun extractConferenceUrl(): String? {
4042
return data[CONFERENCE_URL_DATA_KEY] as? String
@@ -84,14 +86,24 @@ class ConferenceEventObserver(
8486

8587
private fun onBroadcastReceived(intent: Intent) {
8688
val event = BroadcastEvent(intent)
89+
safeLog("onBroadcastReceived: Event received (type ${event.type})", event.data)
8790
val conferenceEvent = when (event.type) {
8891
BroadcastEvent.Type.CONFERENCE_JOINED -> ConferenceEvent.Joined(event.data)
8992
BroadcastEvent.Type.CONFERENCE_TERMINATED -> ConferenceEvent.Terminated(event.data)
9093
BroadcastEvent.Type.CONFERENCE_WILL_JOIN -> ConferenceEvent.WillJoin(event.data)
94+
BroadcastEvent.Type.READY_TO_CLOSE -> ConferenceEvent.ReadyToClose
9195
else -> null
9296
}
9397
if (conferenceEvent != null) {
9498
onBroadcastEvent(conferenceEvent)
9599
}
96100
}
101+
102+
private fun safeLog(message: String, sensitiveData: Any?) {
103+
if (Config.LOW_PRIVACY_LOG_ENABLE) {
104+
Timber.v("$message: $sensitiveData")
105+
} else {
106+
Timber.v(message)
107+
}
108+
}
97109
}

vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package im.vector.app.features.call.conference
1919
import android.content.Context
2020
import android.content.Intent
2121
import android.content.pm.PackageManager
22+
import android.content.res.Configuration
2223
import android.os.Build
2324
import android.os.Bundle
2425
import android.os.Parcelable
@@ -46,6 +47,7 @@ import org.jitsi.meet.sdk.JitsiMeet
4647
import org.jitsi.meet.sdk.JitsiMeetActivityDelegate
4748
import org.jitsi.meet.sdk.JitsiMeetActivityInterface
4849
import org.jitsi.meet.sdk.JitsiMeetConferenceOptions
50+
import org.jitsi.meet.sdk.JitsiMeetOngoingConferenceService
4951
import org.jitsi.meet.sdk.JitsiMeetView
5052
import org.matrix.android.sdk.api.extensions.tryOrNull
5153
import org.matrix.android.sdk.api.util.JsonDict
@@ -68,6 +70,13 @@ class VectorJitsiActivity : VectorBaseActivity<ActivityJitsiBinding>(), JitsiMee
6870

6971
private val jitsiViewModel: JitsiCallViewModel by viewModel()
7072

73+
override fun onConfigurationChanged(newConfig: Configuration) {
74+
super.onConfigurationChanged(newConfig)
75+
val intent = Intent("onConfigurationChanged")
76+
intent.putExtra("newConfig", newConfig)
77+
this.sendBroadcast(intent)
78+
}
79+
7180
override fun onCreate(savedInstanceState: Bundle?) {
7281
super.onCreate(savedInstanceState)
7382
addOnPictureInPictureModeChangedListener(pictureInPictureModeChangedInfoConsumer)
@@ -107,16 +116,26 @@ class VectorJitsiActivity : VectorBaseActivity<ActivityJitsiBinding>(), JitsiMee
107116

108117
override fun onDestroy() {
109118
val currentConf = JitsiMeet.getCurrentConference()
119+
handleLeaveConference()
110120
jitsiMeetView?.dispose()
111121
// Fake emitting CONFERENCE_TERMINATED event when currentConf is not null (probably when closing the PiP screen).
112122
if (currentConf != null) {
113123
ConferenceEventEmitter(this).emitConferenceEnded()
114124
}
125+
JitsiMeetOngoingConferenceService.abort(this)
115126
JitsiMeetActivityDelegate.onHostDestroy(this)
116127
removeOnPictureInPictureModeChangedListener(pictureInPictureModeChangedInfoConsumer)
117128
super.onDestroy()
118129
}
119130

131+
// Activity lifecycle methods
132+
//
133+
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
134+
@Suppress("DEPRECATION")
135+
super.onActivityResult(requestCode, resultCode, data)
136+
JitsiMeetActivityDelegate.onActivityResult(this, requestCode, resultCode, data)
137+
}
138+
120139
override fun onBackPressed() {
121140
JitsiMeetActivityDelegate.onBackPressed()
122141
}
@@ -224,10 +243,17 @@ class VectorJitsiActivity : VectorBaseActivity<ActivityJitsiBinding>(), JitsiMee
224243
Timber.v("Broadcast received: $event")
225244
when (event) {
226245
is ConferenceEvent.Terminated -> onConferenceTerminated(event.data)
227-
else -> Unit
246+
is ConferenceEvent.Joined -> onConferenceJoined(event.data)
247+
is ConferenceEvent.ReadyToClose -> onReadyToClose()
248+
is ConferenceEvent.WillJoin -> Unit
228249
}
229250
}
230251

252+
private fun onConferenceJoined(extraData: Map<String, Any>) {
253+
// Launch the service for the ongoing notification.
254+
JitsiMeetOngoingConferenceService.launch(this, HashMap(extraData))
255+
}
256+
231257
private fun onConferenceTerminated(data: JsonDict) {
232258
Timber.v("JitsiMeetViewListener.onConferenceTerminated()")
233259
// Do not finish if there is an error
@@ -236,6 +262,11 @@ class VectorJitsiActivity : VectorBaseActivity<ActivityJitsiBinding>(), JitsiMee
236262
}
237263
}
238264

265+
private fun onReadyToClose() {
266+
Timber.v("SDK is ready to close")
267+
finish()
268+
}
269+
239270
companion object {
240271
fun newIntent(context: Context, roomId: String, widgetId: String, enableVideo: Boolean): Intent {
241272
return Intent(context, VectorJitsiActivity::class.java).apply {

0 commit comments

Comments
 (0)