2021-08-19 06:16:14 +02:00
|
|
|
package org.thoughtcrime.securesms.calls
|
|
|
|
|
2021-09-07 08:12:37 +02:00
|
|
|
import android.Manifest
|
2021-09-06 09:06:03 +02:00
|
|
|
import android.content.BroadcastReceiver
|
|
|
|
import android.content.Context
|
2021-08-30 08:39:47 +02:00
|
|
|
import android.content.Intent
|
2021-09-06 09:06:03 +02:00
|
|
|
import android.content.IntentFilter
|
2021-10-29 07:41:01 +02:00
|
|
|
import android.media.AudioManager
|
2021-08-19 06:16:14 +02:00
|
|
|
import android.os.Bundle
|
2021-09-22 02:39:45 +02:00
|
|
|
import android.view.MenuItem
|
2021-10-29 07:41:01 +02:00
|
|
|
import android.view.Window
|
|
|
|
import android.view.WindowManager
|
2021-10-28 08:06:14 +02:00
|
|
|
import androidx.activity.viewModels
|
2021-10-29 07:41:01 +02:00
|
|
|
import androidx.lifecycle.Lifecycle
|
2021-09-06 01:15:48 +02:00
|
|
|
import androidx.lifecycle.lifecycleScope
|
2021-10-29 07:41:01 +02:00
|
|
|
import androidx.lifecycle.repeatOnLifecycle
|
2021-10-28 08:06:14 +02:00
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
2021-08-20 01:14:54 +02:00
|
|
|
import kotlinx.android.synthetic.main.activity_webrtc_tests.*
|
2021-09-06 01:15:48 +02:00
|
|
|
import kotlinx.coroutines.delay
|
|
|
|
import kotlinx.coroutines.isActive
|
2021-10-29 07:41:01 +02:00
|
|
|
import kotlinx.coroutines.launch
|
2021-08-19 06:16:14 +02:00
|
|
|
import network.loki.messenger.R
|
2021-08-30 08:39:47 +02:00
|
|
|
import org.session.libsession.messaging.messages.control.CallMessage
|
|
|
|
import org.session.libsession.messaging.sending_receiving.MessageSender
|
2021-09-06 09:06:03 +02:00
|
|
|
import org.session.libsession.messaging.utilities.WebRtcUtils
|
2021-08-30 08:39:47 +02:00
|
|
|
import org.session.libsession.utilities.Address
|
|
|
|
import org.session.libsignal.protos.SignalServiceProtos
|
2021-08-19 06:16:14 +02:00
|
|
|
import org.session.libsignal.utilities.Log
|
|
|
|
import org.thoughtcrime.securesms.PassphraseRequiredActionBarActivity
|
2021-09-07 08:12:37 +02:00
|
|
|
import org.thoughtcrime.securesms.permissions.Permissions
|
2021-10-28 08:06:14 +02:00
|
|
|
import org.thoughtcrime.securesms.webrtc.CallViewModel
|
2021-08-19 06:16:14 +02:00
|
|
|
import org.webrtc.*
|
2021-10-21 23:52:57 +02:00
|
|
|
import java.util.*
|
2021-08-20 01:14:54 +02:00
|
|
|
|
2021-10-28 08:06:14 +02:00
|
|
|
@AndroidEntryPoint
|
2021-11-04 02:07:06 +01:00
|
|
|
class WebRtcCallActivity: PassphraseRequiredActionBarActivity() {
|
2021-08-20 01:14:54 +02:00
|
|
|
|
|
|
|
companion object {
|
2021-08-30 08:39:47 +02:00
|
|
|
const val CALL_ID = "call_id_session"
|
|
|
|
private const val LOCAL_TRACK_ID = "local_track"
|
|
|
|
private const val LOCAL_STREAM_ID = "local_track"
|
|
|
|
|
|
|
|
const val ACTION_ANSWER = "answer"
|
2021-09-06 09:06:03 +02:00
|
|
|
const val ACTION_END = "end-call"
|
2021-08-30 08:39:47 +02:00
|
|
|
|
2021-11-04 02:07:06 +01:00
|
|
|
const val BUSY_SIGNAL_DELAY_FINISH = 5500L
|
2021-08-20 01:14:54 +02:00
|
|
|
}
|
|
|
|
|
2021-10-28 08:06:14 +02:00
|
|
|
private val viewModel by viewModels<CallViewModel>()
|
|
|
|
|
2021-09-06 09:06:03 +02:00
|
|
|
private val acceptedCallMessageHashes = mutableSetOf<Int>()
|
|
|
|
|
2021-08-30 08:39:47 +02:00
|
|
|
private val candidates: MutableList<IceCandidate> = mutableListOf()
|
2021-09-07 08:12:37 +02:00
|
|
|
|
2021-08-30 08:39:47 +02:00
|
|
|
private lateinit var callAddress: Address
|
2021-10-21 23:52:57 +02:00
|
|
|
private lateinit var callId: UUID
|
2021-09-14 01:23:10 +02:00
|
|
|
|
2021-09-22 02:39:45 +02:00
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
|
|
if (item.itemId == android.R.id.home) {
|
2021-11-05 06:35:40 +01:00
|
|
|
finish()
|
2021-09-22 02:39:45 +02:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
return super.onOptionsItemSelected(item)
|
|
|
|
}
|
|
|
|
|
2021-08-19 06:16:14 +02:00
|
|
|
override fun onCreate(savedInstanceState: Bundle?, ready: Boolean) {
|
|
|
|
super.onCreate(savedInstanceState, ready)
|
2021-10-29 07:41:01 +02:00
|
|
|
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)
|
|
|
|
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
|
|
|
requestWindowFeature(Window.FEATURE_NO_TITLE)
|
2021-08-19 06:16:14 +02:00
|
|
|
setContentView(R.layout.activity_webrtc_tests)
|
2021-10-29 07:41:01 +02:00
|
|
|
volumeControlStream = AudioManager.STREAM_VOICE_CALL
|
|
|
|
|
|
|
|
initializeResources()
|
2021-08-19 06:16:14 +02:00
|
|
|
|
2021-09-07 08:12:37 +02:00
|
|
|
Permissions.with(this)
|
2021-10-29 07:41:01 +02:00
|
|
|
.request(Manifest.permission.RECORD_AUDIO)
|
2021-09-07 08:12:37 +02:00
|
|
|
.onAllGranted {
|
|
|
|
setupStreams()
|
|
|
|
}
|
|
|
|
.execute()
|
|
|
|
|
2021-10-29 07:41:01 +02:00
|
|
|
lifecycleScope.launch {
|
|
|
|
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
|
|
viewModel
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-06 09:06:03 +02:00
|
|
|
registerReceiver(object: BroadcastReceiver() {
|
|
|
|
override fun onReceive(context: Context?, intent: Intent?) {
|
2021-11-05 06:35:40 +01:00
|
|
|
finish()
|
2021-09-06 09:06:03 +02:00
|
|
|
}
|
|
|
|
}, IntentFilter(ACTION_END))
|
2021-09-06 01:15:48 +02:00
|
|
|
}
|
|
|
|
|
2021-10-29 07:41:01 +02:00
|
|
|
private fun initializeResources() {
|
2021-09-07 08:12:37 +02:00
|
|
|
|
2021-08-19 06:16:14 +02:00
|
|
|
}
|
|
|
|
|
2021-09-07 08:12:37 +02:00
|
|
|
private fun setupStreams() {
|
2021-08-19 06:16:14 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|