diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/WebRtcTestsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/WebRtcTestsActivity.kt index f9e3a2dbde..cb1b847396 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/WebRtcTestsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/WebRtcTestsActivity.kt @@ -39,6 +39,7 @@ class WebRtcTestsActivity: PassphraseRequiredActionBarActivity(), PeerConnection const val EXTRA_SDP = "WebRtcTestsActivity_EXTRA_SDP" const val EXTRA_ADDRESS = "WebRtcTestsActivity_EXTRA_ADDRESS" + const val EXTRA_RELAY_USED = "WebRtcTestsActivity_EXTRA_RELAY_USED" const val EXTRA_SDP_MLINE_INDEXES = "WebRtcTestsActivity_EXTRA_SDP_MLINE_INDEXES" const val EXTRA_SDP_MIDS = "WebRtcTestsActivity_EXTRA_SDP_MIDS" @@ -87,6 +88,8 @@ class WebRtcTestsActivity: PassphraseRequiredActionBarActivity(), PeerConnection } private lateinit var callAddress: Address + private var relayUsed: Boolean = true + private val peerConnection by lazy { // TODO: in a lokinet world, ice servers shouldn't be needed as .loki addresses should suffice to p2p val server = PeerConnection.IceServer.builder("stun:stun.l.google.com:19302").createIceServer() @@ -94,7 +97,11 @@ class WebRtcTestsActivity: PassphraseRequiredActionBarActivity(), PeerConnection val server2 = PeerConnection.IceServer.builder("stun:stun2.l.google.com:19302").createIceServer() val server3 = PeerConnection.IceServer.builder("stun:stun3.l.google.com:19302").createIceServer() val server4 = PeerConnection.IceServer.builder("stun:stun4.l.google.com:19302").createIceServer() - val rtcConfig = PeerConnection.RTCConfiguration(listOf(server, server1, server2, server3, server4)) + val iceServers = mutableListOf(server,server1,server2,server3,server4) + if (relayUsed) { + // add relay server + } + val rtcConfig = PeerConnection.RTCConfiguration(iceServers) rtcConfig.keyType = PeerConnection.KeyType.ECDSA connectionFactory.createPeerConnection(rtcConfig, this)!! } @@ -103,6 +110,8 @@ class WebRtcTestsActivity: PassphraseRequiredActionBarActivity(), PeerConnection super.onCreate(savedInstanceState, ready) setContentView(R.layout.activity_webrtc_tests) + relayUsed = intent.getBooleanExtra(EXTRA_RELAY_USED, true) + //TODO: better handling of permissions Permissions.with(this) .request(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt index 10d909cd8f..ad1a16ad1f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/menus/ConversationMenuHelper.kt @@ -99,7 +99,7 @@ object ConversationMenuHelper { inflater.inflate(R.menu.menu_conversation_notification_settings, menu) } - // Call Tests + // TODO: Call Tests if (!isOpenGroup) { inflater.inflate(R.menu.menu_conversation_call, menu) } @@ -182,10 +182,24 @@ object ConversationMenuHelper { } private fun call(context: Context, thread: Recipient) { - val intent = Intent(context, WebRtcTestsActivity::class.java) - intent.putExtra(WebRtcTestsActivity.EXTRA_ADDRESS, thread.address) - val activity = context as AppCompatActivity - activity.startActivity(intent) + AlertDialog.Builder(context) + .setTitle("Call") + .setMessage("Use relay?") + .setPositiveButton("Use Relay") { d, w -> + val intent = Intent(context, WebRtcTestsActivity::class.java) + intent.putExtra(WebRtcTestsActivity.EXTRA_ADDRESS, thread.address) + intent.putExtra(WebRtcTestsActivity.EXTRA_RELAY_USED, false) + val activity = context as AppCompatActivity + activity.startActivity(intent) + } + .setNeutralButton("P2P only") { d, w -> + val intent = Intent(context, WebRtcTestsActivity::class.java) + intent.putExtra(WebRtcTestsActivity.EXTRA_ADDRESS, thread.address) + intent.putExtra(WebRtcTestsActivity.EXTRA_RELAY_USED, false) + val activity = context as AppCompatActivity + activity.startActivity(intent) + } + .show() } @SuppressLint("StaticFieldLeak") diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallBottomSheet.kt index 1374cbaabc..3bff96f107 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallBottomSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallBottomSheet.kt @@ -53,6 +53,7 @@ class CallBottomSheet: BottomSheetDialogFragment() { val intent = Intent(requireContext(), WebRtcTestsActivity::class.java) val bundle = bundleOf( WebRtcTestsActivity.EXTRA_ADDRESS to address, + WebRtcTestsActivity.EXTRA_RELAY_USED to relaySwitch.isChecked ) intent.action = WebRtcTestsActivity.ACTION_ANSWER bundle.putStringArray(WebRtcTestsActivity.EXTRA_SDP, sdp) diff --git a/app/src/main/res/layout/fragment_call_bottom_sheet.xml b/app/src/main/res/layout/fragment_call_bottom_sheet.xml index ec555bc847..7620a166a1 100644 --- a/app/src/main/res/layout/fragment_call_bottom_sheet.xml +++ b/app/src/main/res/layout/fragment_call_bottom_sheet.xml @@ -40,6 +40,17 @@ + + + +