mirror of
https://github.com/SimpleMobileTools/Simple-Dialer.git
synced 2025-06-05 21:49:23 +02:00
show a high priority notification when a device is in an interactive state
This commit is contained in:
@ -4,6 +4,7 @@ import android.annotation.SuppressLint
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.media.AudioManager
|
import android.media.AudioManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.os.PowerManager
|
||||||
import com.simplemobiletools.commons.extensions.telecomManager
|
import com.simplemobiletools.commons.extensions.telecomManager
|
||||||
import com.simplemobiletools.dialer.helpers.Config
|
import com.simplemobiletools.dialer.helpers.Config
|
||||||
import com.simplemobiletools.dialer.models.SIMAccount
|
import com.simplemobiletools.dialer.models.SIMAccount
|
||||||
@ -12,6 +13,8 @@ val Context.config: Config get() = Config.newInstance(applicationContext)
|
|||||||
|
|
||||||
val Context.audioManager: AudioManager get() = getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
val Context.audioManager: AudioManager get() = getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||||
|
|
||||||
|
val Context.powerManager: PowerManager get() = getSystemService(Context.POWER_SERVICE) as PowerManager
|
||||||
|
|
||||||
@SuppressLint("MissingPermission")
|
@SuppressLint("MissingPermission")
|
||||||
fun Context.getAvailableSIMCardLabels(): ArrayList<SIMAccount> {
|
fun Context.getAvailableSIMCardLabels(): ArrayList<SIMAccount> {
|
||||||
val SIMAccounts = ArrayList<SIMAccount>()
|
val SIMAccounts = ArrayList<SIMAccount>()
|
||||||
|
@ -16,6 +16,7 @@ import com.simplemobiletools.commons.extensions.setVisibleIf
|
|||||||
import com.simplemobiletools.commons.helpers.isOreoPlus
|
import com.simplemobiletools.commons.helpers.isOreoPlus
|
||||||
import com.simplemobiletools.dialer.R
|
import com.simplemobiletools.dialer.R
|
||||||
import com.simplemobiletools.dialer.activities.CallActivity
|
import com.simplemobiletools.dialer.activities.CallActivity
|
||||||
|
import com.simplemobiletools.dialer.extensions.powerManager
|
||||||
import com.simplemobiletools.dialer.receivers.CallActionReceiver
|
import com.simplemobiletools.dialer.receivers.CallActionReceiver
|
||||||
|
|
||||||
class CallNotificationManager(private val context: Context) {
|
class CallNotificationManager(private val context: Context) {
|
||||||
@ -30,10 +31,11 @@ class CallNotificationManager(private val context: Context) {
|
|||||||
CallManager.getCallContact(context.applicationContext) { callContact ->
|
CallManager.getCallContact(context.applicationContext) { callContact ->
|
||||||
val callContactAvatar = callContactAvatarHelper.getCallContactAvatar(callContact)
|
val callContactAvatar = callContactAvatarHelper.getCallContactAvatar(callContact)
|
||||||
val callState = CallManager.getState()
|
val callState = CallManager.getState()
|
||||||
val channelId = "simple_dialer_call"
|
val isHighPriority = context.powerManager.isInteractive && callState == Call.STATE_RINGING
|
||||||
|
val channelId = if (isHighPriority) "simple_dialer_call_high_priority" else "simple_dialer_call"
|
||||||
if (isOreoPlus()) {
|
if (isOreoPlus()) {
|
||||||
val importance = NotificationManager.IMPORTANCE_DEFAULT
|
val importance = if (isHighPriority) NotificationManager.IMPORTANCE_HIGH else NotificationManager.IMPORTANCE_DEFAULT
|
||||||
val name = "call_notification_channel"
|
val name = if (isHighPriority) "call_notification_channel_high_priority" else "call_notification_channel"
|
||||||
|
|
||||||
NotificationChannel(channelId, name, importance).apply {
|
NotificationChannel(channelId, name, importance).apply {
|
||||||
setSound(null, null)
|
setSound(null, null)
|
||||||
@ -83,7 +85,7 @@ class CallNotificationManager(private val context: Context) {
|
|||||||
val builder = NotificationCompat.Builder(context, channelId)
|
val builder = NotificationCompat.Builder(context, channelId)
|
||||||
.setSmallIcon(R.drawable.ic_phone_vector)
|
.setSmallIcon(R.drawable.ic_phone_vector)
|
||||||
.setContentIntent(openAppPendingIntent)
|
.setContentIntent(openAppPendingIntent)
|
||||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
.setPriority(if(isHighPriority) NotificationCompat.PRIORITY_MAX else NotificationCompat.PRIORITY_DEFAULT)
|
||||||
.setCategory(Notification.CATEGORY_CALL)
|
.setCategory(Notification.CATEGORY_CALL)
|
||||||
.setCustomContentView(collapsedView)
|
.setCustomContentView(collapsedView)
|
||||||
.setOngoing(true)
|
.setOngoing(true)
|
||||||
@ -92,6 +94,10 @@ class CallNotificationManager(private val context: Context) {
|
|||||||
.setChannelId(channelId)
|
.setChannelId(channelId)
|
||||||
.setStyle(NotificationCompat.DecoratedCustomViewStyle())
|
.setStyle(NotificationCompat.DecoratedCustomViewStyle())
|
||||||
|
|
||||||
|
if (isHighPriority) {
|
||||||
|
builder.setFullScreenIntent(openAppPendingIntent, true)
|
||||||
|
}
|
||||||
|
|
||||||
val notification = builder.build()
|
val notification = builder.build()
|
||||||
notificationManager.notify(CALL_NOTIFICATION_ID, notification)
|
notificationManager.notify(CALL_NOTIFICATION_ID, notification)
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import android.telecom.Call
|
|||||||
import android.telecom.InCallService
|
import android.telecom.InCallService
|
||||||
import com.simplemobiletools.dialer.App
|
import com.simplemobiletools.dialer.App
|
||||||
import com.simplemobiletools.dialer.activities.CallActivity
|
import com.simplemobiletools.dialer.activities.CallActivity
|
||||||
|
import com.simplemobiletools.dialer.extensions.powerManager
|
||||||
import com.simplemobiletools.dialer.helpers.CallManager
|
import com.simplemobiletools.dialer.helpers.CallManager
|
||||||
import com.simplemobiletools.dialer.helpers.CallNotificationManager
|
import com.simplemobiletools.dialer.helpers.CallNotificationManager
|
||||||
|
|
||||||
@ -28,7 +29,10 @@ class CallService : InCallService() {
|
|||||||
|
|
||||||
override fun onCallAdded(call: Call) {
|
override fun onCallAdded(call: Call) {
|
||||||
super.onCallAdded(call)
|
super.onCallAdded(call)
|
||||||
startActivity(CallActivity.getStartIntent(this))
|
val isInteractive = powerManager.isInteractive
|
||||||
|
if (!isInteractive) {
|
||||||
|
startActivity(CallActivity.getStartIntent(this))
|
||||||
|
}
|
||||||
CallManager.call = call
|
CallManager.call = call
|
||||||
CallManager.inCallService = this
|
CallManager.inCallService = this
|
||||||
CallManager.registerCallback(callListener)
|
CallManager.registerCallback(callListener)
|
||||||
|
Reference in New Issue
Block a user