mirror of
https://github.com/SimpleMobileTools/Simple-Contacts.git
synced 2025-02-18 12:30:38 +01:00
adding some handling to rejecting calls
This commit is contained in:
parent
c3d8292961
commit
0ac58a0a57
@ -7,6 +7,7 @@ import android.app.NotificationManager
|
|||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.telecom.Call
|
||||||
import android.widget.RemoteViews
|
import android.widget.RemoteViews
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import com.simplemobiletools.commons.extensions.notificationManager
|
import com.simplemobiletools.commons.extensions.notificationManager
|
||||||
@ -15,6 +16,7 @@ import com.simplemobiletools.commons.extensions.updateTextColors
|
|||||||
import com.simplemobiletools.commons.helpers.isOreoPlus
|
import com.simplemobiletools.commons.helpers.isOreoPlus
|
||||||
import com.simplemobiletools.contacts.pro.R
|
import com.simplemobiletools.contacts.pro.R
|
||||||
import com.simplemobiletools.contacts.pro.helpers.ACCEPT_CALL
|
import com.simplemobiletools.contacts.pro.helpers.ACCEPT_CALL
|
||||||
|
import com.simplemobiletools.contacts.pro.helpers.CallManager
|
||||||
import com.simplemobiletools.contacts.pro.helpers.DECLINE_CALL
|
import com.simplemobiletools.contacts.pro.helpers.DECLINE_CALL
|
||||||
import com.simplemobiletools.contacts.pro.receivers.CallActionReceiver
|
import com.simplemobiletools.contacts.pro.receivers.CallActionReceiver
|
||||||
import kotlinx.android.synthetic.main.activity_call.*
|
import kotlinx.android.synthetic.main.activity_call.*
|
||||||
@ -33,6 +35,8 @@ class CallActivity : SimpleActivity() {
|
|||||||
updateTextColors(call_holder)
|
updateTextColors(call_holder)
|
||||||
initButtons()
|
initButtons()
|
||||||
showNotification()
|
showNotification()
|
||||||
|
CallManager.registerCallback(getCallCallback())
|
||||||
|
updateCallState(CallManager.getState())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
@ -41,7 +45,10 @@ class CallActivity : SimpleActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun initButtons() {
|
private fun initButtons() {
|
||||||
call_decline.setOnClickListener { }
|
call_decline.setOnClickListener {
|
||||||
|
endCall()
|
||||||
|
}
|
||||||
|
|
||||||
call_accept.setOnClickListener { }
|
call_accept.setOnClickListener { }
|
||||||
|
|
||||||
call_toggle_microphone.setOnClickListener {
|
call_toggle_microphone.setOnClickListener {
|
||||||
@ -68,6 +75,25 @@ class CallActivity : SimpleActivity() {
|
|||||||
call_toggle_microphone.setImageDrawable(getDrawable(drawable))
|
call_toggle_microphone.setImageDrawable(getDrawable(drawable))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun updateCallState(state: Int) {
|
||||||
|
when (state) {
|
||||||
|
Call.STATE_DISCONNECTED -> endCall()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun endCall() {
|
||||||
|
CallManager.reject()
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("NewApi")
|
||||||
|
fun getCallCallback() = object : Call.Callback() {
|
||||||
|
override fun onStateChanged(call: Call, state: Int) {
|
||||||
|
super.onStateChanged(call, state)
|
||||||
|
updateCallState(state)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
private fun showNotification() {
|
private fun showNotification() {
|
||||||
val channelId = "simple_contacts_call"
|
val channelId = "simple_contacts_call"
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
package com.simplemobiletools.contacts.pro.helpers
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.telecom.Call
|
||||||
|
|
||||||
|
// inspired by https://github.com/Chooloo/call_manage
|
||||||
|
@SuppressLint("NewApi")
|
||||||
|
class CallManager {
|
||||||
|
companion object {
|
||||||
|
var call: Call? = null
|
||||||
|
|
||||||
|
fun reject() {
|
||||||
|
if (call != null) {
|
||||||
|
if (call!!.state == Call.STATE_RINGING) {
|
||||||
|
call!!.reject(false, null)
|
||||||
|
} else {
|
||||||
|
call!!.disconnect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun registerCallback(callback: Call.Callback) {
|
||||||
|
if (call != null) {
|
||||||
|
call!!.registerCallback(callback)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getState() = if (call == null) {
|
||||||
|
Call.STATE_DISCONNECTED
|
||||||
|
} else {
|
||||||
|
call!!.state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -3,9 +3,13 @@ package com.simplemobiletools.contacts.pro.receivers
|
|||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import com.simplemobiletools.contacts.pro.helpers.CallManager
|
||||||
|
import com.simplemobiletools.contacts.pro.helpers.DECLINE_CALL
|
||||||
|
|
||||||
class CallActionReceiver : BroadcastReceiver() {
|
class CallActionReceiver : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
|
when (intent.action) {
|
||||||
|
DECLINE_CALL -> CallManager.reject()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,25 @@
|
|||||||
package com.simplemobiletools.contacts.pro.services
|
package com.simplemobiletools.contacts.pro.services
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.telecom.Call
|
import android.telecom.Call
|
||||||
import android.telecom.InCallService
|
import android.telecom.InCallService
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
|
import com.simplemobiletools.contacts.pro.activities.CallActivity
|
||||||
|
import com.simplemobiletools.contacts.pro.helpers.CallManager
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.M)
|
@RequiresApi(Build.VERSION_CODES.M)
|
||||||
class CallService : InCallService() {
|
class CallService : InCallService() {
|
||||||
override fun onCallAdded(call: Call) {
|
override fun onCallAdded(call: Call) {
|
||||||
super.onCallAdded(call)
|
super.onCallAdded(call)
|
||||||
|
val intent = Intent(this, CallActivity::class.java)
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
startActivity(intent)
|
||||||
|
CallManager.call = call
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCallRemoved(call: Call) {
|
||||||
|
super.onCallRemoved(call)
|
||||||
|
CallManager.call = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,8 @@
|
|||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/ongoing_call_holder"
|
android:id="@+id/ongoing_call_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
android:visibility="gone">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/call_toggle_microphone"
|
android:id="@+id/call_toggle_microphone"
|
||||||
@ -104,8 +105,7 @@
|
|||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/incoming_call_holder"
|
android:id="@+id/incoming_call_holder"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent">
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/call_decline"
|
android:id="@+id/call_decline"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user