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