show a high priority notification when a device is in an interactive state

This commit is contained in:
Mysochenko Yuriy
2022-05-05 10:25:35 +03:00
parent c7c2d9108a
commit 5d3159ab34
3 changed files with 18 additions and 5 deletions

View File

@ -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>()

View File

@ -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)
} }

View File

@ -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)