Prevent crash when background mode is enabled & service notification channel is disabled
This commit is contained in:
parent
a5658bf5ea
commit
34ca235d7b
2 changed files with 24 additions and 6 deletions
|
@ -22,8 +22,11 @@ package org.linphone.core
|
||||||
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 androidx.core.app.NotificationManagerCompat
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import org.linphone.LinphoneApplication.Companion.corePreferences
|
import org.linphone.LinphoneApplication.Companion.corePreferences
|
||||||
|
import org.linphone.R
|
||||||
|
import org.linphone.compatibility.Compatibility
|
||||||
import org.linphone.core.tools.Log
|
import org.linphone.core.tools.Log
|
||||||
|
|
||||||
class BootReceiver : BroadcastReceiver() {
|
class BootReceiver : BroadcastReceiver() {
|
||||||
|
@ -32,18 +35,27 @@ class BootReceiver : BroadcastReceiver() {
|
||||||
val autoStart = corePreferences.autoStart
|
val autoStart = corePreferences.autoStart
|
||||||
Log.i("[Boot Receiver] Device is starting, autoStart is $autoStart")
|
Log.i("[Boot Receiver] Device is starting, autoStart is $autoStart")
|
||||||
if (autoStart) {
|
if (autoStart) {
|
||||||
val serviceIntent = Intent(Intent.ACTION_MAIN).setClass(context, CoreService::class.java)
|
startService(context)
|
||||||
serviceIntent.putExtra("StartForeground", true)
|
|
||||||
ContextCompat.startForegroundService(context, serviceIntent)
|
|
||||||
}
|
}
|
||||||
} else if (intent.action.equals(Intent.ACTION_MY_PACKAGE_REPLACED, ignoreCase = true)) {
|
} else if (intent.action.equals(Intent.ACTION_MY_PACKAGE_REPLACED, ignoreCase = true)) {
|
||||||
val autoStart = corePreferences.autoStart
|
val autoStart = corePreferences.autoStart
|
||||||
Log.i("[Boot Receiver] App has been updated, autoStart is $autoStart")
|
Log.i("[Boot Receiver] App has been updated, autoStart is $autoStart")
|
||||||
if (autoStart) {
|
if (autoStart) {
|
||||||
val serviceIntent = Intent(Intent.ACTION_MAIN).setClass(context, CoreService::class.java)
|
startService(context)
|
||||||
serviceIntent.putExtra("StartForeground", true)
|
|
||||||
ContextCompat.startForegroundService(context, serviceIntent)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun startService(context: Context) {
|
||||||
|
val serviceChannel = context.getString(R.string.notification_channel_service_id)
|
||||||
|
val notificationManager = NotificationManagerCompat.from(context)
|
||||||
|
if (Compatibility.getChannelImportance(notificationManager, serviceChannel) == NotificationManagerCompat.IMPORTANCE_NONE) {
|
||||||
|
Log.w("[Boot Receiver] Service channel is disabled!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val serviceIntent = Intent(Intent.ACTION_MAIN).setClass(context, CoreService::class.java)
|
||||||
|
serviceIntent.putExtra("StartForeground", true)
|
||||||
|
ContextCompat.startForegroundService(context, serviceIntent)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -279,6 +279,12 @@ class NotificationsManager(private val context: Context) {
|
||||||
/* Service related */
|
/* Service related */
|
||||||
|
|
||||||
fun startForeground() {
|
fun startForeground() {
|
||||||
|
val serviceChannel = context.getString(R.string.notification_channel_service_id)
|
||||||
|
if (Compatibility.getChannelImportance(notificationManager, serviceChannel) == NotificationManagerCompat.IMPORTANCE_NONE) {
|
||||||
|
Log.w("[Notifications Manager] Service channel is disabled!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
val coreService = service
|
val coreService = service
|
||||||
if (coreService != null) {
|
if (coreService != null) {
|
||||||
startForeground(coreService, useAutoStartDescription = false)
|
startForeground(coreService, useAutoStartDescription = false)
|
||||||
|
|
Loading…
Reference in a new issue