mirror of
https://github.com/oxen-io/session-android.git
synced 2025-08-24 22:17:25 +00:00
feat: adding call service functionality and permissions for calls
This commit is contained in:
@@ -52,8 +52,9 @@
|
||||
<uses-permission android:name="android.permission.RAISED_THREAD_PRIORITY" />
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" tools:node="remove"/>
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />
|
||||
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" tools:node="remove"/>
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
||||
<uses-permission android:name="android.permission.CALL_PHONE" />
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
|
@@ -42,9 +42,6 @@ class WebRtcTestsActivity: PassphraseRequiredActionBarActivity(), PeerConnection
|
||||
const val EXTRA_SDP = "WebRtcTestsActivity_EXTRA_SDP"
|
||||
const val EXTRA_ADDRESS = "WebRtcTestsActivity_EXTRA_ADDRESS"
|
||||
const val EXTRA_CALL_ID = "WebRtcTestsActivity_EXTRA_CALL_ID"
|
||||
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"
|
||||
|
||||
}
|
||||
|
||||
@@ -92,16 +89,12 @@ class WebRtcTestsActivity: PassphraseRequiredActionBarActivity(), PeerConnection
|
||||
|
||||
private lateinit var callAddress: Address
|
||||
private lateinit var callId: UUID
|
||||
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 turn = PeerConnection.IceServer.builder("turn:freyr.getsession.org:5349").setUsername("webrtc").setPassword("webrtc").createIceServer()
|
||||
// val stun = PeerConnection.IceServer.builder("stun:freyr.getsession.org").createIceServer()
|
||||
val iceServers = mutableListOf(turn)
|
||||
if (relayUsed) {
|
||||
// add relay server
|
||||
}
|
||||
val rtcConfig = PeerConnection.RTCConfiguration(iceServers).apply {
|
||||
this.tcpCandidatePolicy = PeerConnection.TcpCandidatePolicy.ENABLED
|
||||
this.candidateNetworkPolicy = PeerConnection.CandidateNetworkPolicy.ALL
|
||||
@@ -127,8 +120,6 @@ 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)
|
||||
|
@@ -190,14 +190,12 @@ object ConversationMenuHelper {
|
||||
val intent = Intent(context, WebRtcTestsActivity::class.java)
|
||||
intent.putExtra(WebRtcTestsActivity.EXTRA_CALL_ID, UUID.randomUUID().toString())
|
||||
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)
|
||||
}
|
||||
|
@@ -1,9 +1,14 @@
|
||||
package org.thoughtcrime.securesms.service
|
||||
|
||||
import android.app.Service
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.IBinder
|
||||
import androidx.core.content.ContextCompat
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import java.util.*
|
||||
|
||||
@AndroidEntryPoint
|
||||
class WebRtcCallService: Service() {
|
||||
|
||||
companion object {
|
||||
@@ -17,8 +22,38 @@ class WebRtcCallService: Service() {
|
||||
private const val EXTRA_UPDATE_TYPE = "UPDATE_TYPE"
|
||||
private const val EXTRA_RECIPIENT_ID = "RECIPIENT_ID"
|
||||
private const val EXTRA_ENABLED = "ENABLED"
|
||||
private const val EXTRA_AUDIO_COMMAND = "AUDIO_COMMAND"
|
||||
|
||||
private const val INVALID_NOTIFICATION_ID = -1
|
||||
|
||||
fun update(context: Context, type: Int, callId: UUID) {
|
||||
val intent = Intent(context, WebRtcCallService::class.java)
|
||||
intent.setAction(ACTION_UPDATE)
|
||||
.putExtra(EXTRA_RECIPIENT_ID, callId)
|
||||
.putExtra(EXTRA_UPDATE_TYPE, type)
|
||||
|
||||
ContextCompat.startForegroundService(context, intent)
|
||||
}
|
||||
|
||||
fun stop(context: Context) {
|
||||
val intent = Intent(context, WebRtcCallService::class.java)
|
||||
intent.action = ACTION_STOP
|
||||
|
||||
ContextCompat.startForegroundService(context, intent)
|
||||
}
|
||||
|
||||
fun denyCallIntent(context: Context): Intent {
|
||||
return Intent(context, WebRtcCallService::class.java).setAction(ACTION_DENY_CALL)
|
||||
}
|
||||
|
||||
fun hangupIntent(context: Context): Intent {
|
||||
return Intent(context, WebRtcCallService::class.java).setAction(ACTION_LOCAL_HANGUP)
|
||||
}
|
||||
|
||||
fun sendAudioManagerCommand(context: Context, command: AudioManagerCommand) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onBind(intent: Intent?): IBinder? = null
|
||||
|
@@ -0,0 +1,9 @@
|
||||
package org.thoughtcrime.securesms.webrtc
|
||||
|
||||
import android.os.Parcelable
|
||||
import kotlinx.android.parcel.Parcelize
|
||||
|
||||
@Parcelize
|
||||
enum class AudioManagerCommand: Parcelable {
|
||||
|
||||
}
|
@@ -57,7 +57,6 @@ 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,
|
||||
WebRtcTestsActivity.EXTRA_CALL_ID to callId
|
||||
)
|
||||
intent.action = WebRtcTestsActivity.ACTION_ANSWER
|
||||
|
@@ -40,17 +40,6 @@
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<TextView
|
||||
android:layout_marginTop="@dimen/large_spacing"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Use relay in ICE"/>
|
||||
|
||||
<com.google.android.material.switchmaterial.SwitchMaterial
|
||||
android:id="@+id/relaySwitch"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_marginTop="@dimen/medium_spacing"
|
||||
android:paddingVertical="@dimen/medium_spacing"
|
||||
|
Reference in New Issue
Block a user