Coverage Summary for Class: MindboxNotificationManagerImpl (cloud.mindbox.mobile_sdk.inapp.presentation)
| Class |
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| MindboxNotificationManagerImpl |
80%
(4/5)
|
100%
(2/2)
|
91.7%
(11/12)
|
91.8%
(78/85)
|
| MindboxNotificationManagerImpl$openApplicationSettings$1 |
0%
(0/1)
|
|
0%
(0/4)
|
0%
(0/24)
|
| MindboxNotificationManagerImpl$openNotificationSettings$1 |
100%
(1/1)
|
50%
(1/2)
|
66.7%
(8/12)
|
60.9%
(42/69)
|
| MindboxNotificationManagerImpl$requestPermission$1 |
100%
(1/1)
|
66.7%
(4/6)
|
77.8%
(7/9)
|
72.9%
(35/48)
|
| Total |
75%
(6/8)
|
70%
(7/10)
|
70.3%
(26/37)
|
68.6%
(155/226)
|
package cloud.mindbox.mobile_sdk.inapp.presentation
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.provider.Settings
import androidx.core.app.NotificationManagerCompat
import cloud.mindbox.mobile_sdk.inapp.presentation.actions.PushActivationActivity
import cloud.mindbox.mobile_sdk.logger.mindboxLogE
import cloud.mindbox.mobile_sdk.logger.mindboxLogI
import cloud.mindbox.mobile_sdk.managers.RequestPermissionManager
import cloud.mindbox.mobile_sdk.utils.Constants
import cloud.mindbox.mobile_sdk.utils.loggingRunCatching
internal class MindboxNotificationManagerImpl(
private val context: Context,
private val requestPermissionManager: RequestPermissionManager
) : MindboxNotificationManager {
override var shouldOpenSettings: Boolean = true
override fun isNotificationEnabled(): Boolean {
return runCatching {
NotificationManagerCompat.from(context).areNotificationsEnabled()
}.getOrElse { _ ->
mindboxLogE("Unknown error checking notification permission status")
true
}
}
override fun openNotificationSettings(activity: Activity, channelId: String?) {
loggingRunCatching {
val intent = when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -> {
Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply {
putExtra(Settings.EXTRA_APP_PACKAGE, activity.packageName)
putExtra(Settings.EXTRA_CHANNEL_ID, channelId)
}
}
else -> {
Intent(Constants.NOTIFICATION_SETTINGS).apply {
putExtra(Constants.APP_PACKAGE_NAME, activity.packageName)
putExtra(Constants.APP_UID_NAME, activity.applicationInfo.uid)
}
}
}
mindboxLogI("Opening notification settings")
activity.startActivity(intent)
}
}
override fun openApplicationSettings(activity: Activity) {
loggingRunCatching {
val packageUri: Uri = Uri.fromParts("package", activity.packageName, null)
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageUri)
mindboxLogI("Opening application settings")
activity.startActivity(intent)
}
}
override fun requestPermission(activity: Activity) {
loggingRunCatching {
if (NotificationManagerCompat.from(context).areNotificationsEnabled()) {
mindboxLogI("Notification is enabled now, don't try request permission")
return@loggingRunCatching
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
requestPermissionManager.increaseRequestCounter()
if (activity.shouldShowRequestPermissionRationale(Constants.POST_NOTIFICATION)) {
shouldOpenSettings = false
}
val intent = Intent(activity, PushActivationActivity::class.java)
activity.startActivity(intent)
} else {
openNotificationSettings(activity)
}
}
}
}