From 5d3159ab348f3f9c47a15b77174b2a3256abd5bf Mon Sep 17 00:00:00 2001 From: Mysochenko Yuriy Date: Thu, 5 May 2022 10:25:35 +0300 Subject: [PATCH] show a high priority notification when a device is in an interactive state --- .../simplemobiletools/dialer/extensions/Context.kt | 3 +++ .../dialer/helpers/CallNotificationManager.kt | 14 ++++++++++---- .../dialer/services/CallService.kt | 6 +++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Context.kt index defa1f24..ac7a3e65 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/Context.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.content.Context import android.media.AudioManager import android.net.Uri +import android.os.PowerManager import com.simplemobiletools.commons.extensions.telecomManager import com.simplemobiletools.dialer.helpers.Config 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.powerManager: PowerManager get() = getSystemService(Context.POWER_SERVICE) as PowerManager + @SuppressLint("MissingPermission") fun Context.getAvailableSIMCardLabels(): ArrayList { val SIMAccounts = ArrayList() diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallNotificationManager.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallNotificationManager.kt index 6b30ef6f..324123b4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallNotificationManager.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/helpers/CallNotificationManager.kt @@ -16,6 +16,7 @@ import com.simplemobiletools.commons.extensions.setVisibleIf import com.simplemobiletools.commons.helpers.isOreoPlus import com.simplemobiletools.dialer.R import com.simplemobiletools.dialer.activities.CallActivity +import com.simplemobiletools.dialer.extensions.powerManager import com.simplemobiletools.dialer.receivers.CallActionReceiver class CallNotificationManager(private val context: Context) { @@ -30,10 +31,11 @@ class CallNotificationManager(private val context: Context) { CallManager.getCallContact(context.applicationContext) { callContact -> val callContactAvatar = callContactAvatarHelper.getCallContactAvatar(callContact) 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()) { - val importance = NotificationManager.IMPORTANCE_DEFAULT - val name = "call_notification_channel" + val importance = if (isHighPriority) NotificationManager.IMPORTANCE_HIGH else NotificationManager.IMPORTANCE_DEFAULT + val name = if (isHighPriority) "call_notification_channel_high_priority" else "call_notification_channel" NotificationChannel(channelId, name, importance).apply { setSound(null, null) @@ -83,7 +85,7 @@ class CallNotificationManager(private val context: Context) { val builder = NotificationCompat.Builder(context, channelId) .setSmallIcon(R.drawable.ic_phone_vector) .setContentIntent(openAppPendingIntent) - .setPriority(NotificationCompat.PRIORITY_DEFAULT) + .setPriority(if(isHighPriority) NotificationCompat.PRIORITY_MAX else NotificationCompat.PRIORITY_DEFAULT) .setCategory(Notification.CATEGORY_CALL) .setCustomContentView(collapsedView) .setOngoing(true) @@ -92,6 +94,10 @@ class CallNotificationManager(private val context: Context) { .setChannelId(channelId) .setStyle(NotificationCompat.DecoratedCustomViewStyle()) + if (isHighPriority) { + builder.setFullScreenIntent(openAppPendingIntent, true) + } + val notification = builder.build() notificationManager.notify(CALL_NOTIFICATION_ID, notification) } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt index 922b62b3..842199a2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/services/CallService.kt @@ -4,6 +4,7 @@ import android.telecom.Call import android.telecom.InCallService import com.simplemobiletools.dialer.App import com.simplemobiletools.dialer.activities.CallActivity +import com.simplemobiletools.dialer.extensions.powerManager import com.simplemobiletools.dialer.helpers.CallManager import com.simplemobiletools.dialer.helpers.CallNotificationManager @@ -28,7 +29,10 @@ class CallService : InCallService() { override fun onCallAdded(call: Call) { super.onCallAdded(call) - startActivity(CallActivity.getStartIntent(this)) + val isInteractive = powerManager.isInteractive + if (!isInteractive) { + startActivity(CallActivity.getStartIntent(this)) + } CallManager.call = call CallManager.inCallService = this CallManager.registerCallback(callListener)