diff --git a/data/src/main/java/com/moez/QKSMS/manager/PermissionManagerImpl.kt b/data/src/main/java/com/moez/QKSMS/manager/PermissionManagerImpl.kt
index 1a82dc32..55c5001e 100644
--- a/data/src/main/java/com/moez/QKSMS/manager/PermissionManagerImpl.kt
+++ b/data/src/main/java/com/moez/QKSMS/manager/PermissionManagerImpl.kt
@@ -41,6 +41,8 @@ class PermissionManagerImpl @Inject constructor(private val context: Context) :
override fun hasPhone(): Boolean = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PERMISSION_GRANTED
+ override fun hasCalling(): Boolean = ContextCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) == PERMISSION_GRANTED
+
override fun hasStorage(): Boolean = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PERMISSION_GRANTED
}
\ No newline at end of file
diff --git a/domain/src/main/java/com/moez/QKSMS/manager/PermissionManager.kt b/domain/src/main/java/com/moez/QKSMS/manager/PermissionManager.kt
index 5d1af585..90ea418f 100644
--- a/domain/src/main/java/com/moez/QKSMS/manager/PermissionManager.kt
+++ b/domain/src/main/java/com/moez/QKSMS/manager/PermissionManager.kt
@@ -30,6 +30,8 @@ interface PermissionManager {
fun hasPhone(): Boolean
+ fun hasCalling(): Boolean
+
fun hasStorage(): Boolean
}
\ No newline at end of file
diff --git a/presentation/src/main/AndroidManifest.xml b/presentation/src/main/AndroidManifest.xml
index 1551068f..3c120100 100644
--- a/presentation/src/main/AndroidManifest.xml
+++ b/presentation/src/main/AndroidManifest.xml
@@ -21,6 +21,7 @@
xmlns:android="http://schemas.android.com/apk/res/android">
+
diff --git a/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt b/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt
index 8f92f397..49ec0cae 100644
--- a/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt
+++ b/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt
@@ -42,6 +42,7 @@ import com.moez.QKSMS.feature.settings.about.AboutActivity
import com.moez.QKSMS.feature.themepicker.ThemePickerActivity
import com.moez.QKSMS.manager.AnalyticsManager
import com.moez.QKSMS.manager.NotificationManager
+import com.moez.QKSMS.manager.PermissionManager
import javax.inject.Inject
import javax.inject.Singleton
@@ -50,7 +51,8 @@ import javax.inject.Singleton
class Navigator @Inject constructor(
private val context: Context,
private val analyticsManager: AnalyticsManager,
- private val notificationManager: NotificationManager
+ private val notificationManager: NotificationManager,
+ private val permissions: PermissionManager
) {
private fun startActivity(intent: Intent) {
@@ -174,7 +176,8 @@ class Navigator @Inject constructor(
}
fun makePhoneCall(address: String) {
- val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:$address"))
+ val action = if (permissions.hasCalling()) Intent.ACTION_CALL else Intent.ACTION_DIAL
+ val intent = Intent(action, Uri.parse("tel:$address"))
startActivityExternal(intent)
}
diff --git a/presentation/src/main/java/com/moez/QKSMS/common/util/NotificationManagerImpl.kt b/presentation/src/main/java/com/moez/QKSMS/common/util/NotificationManagerImpl.kt
index 10d6ff4c..18192f27 100644
--- a/presentation/src/main/java/com/moez/QKSMS/common/util/NotificationManagerImpl.kt
+++ b/presentation/src/main/java/com/moez/QKSMS/common/util/NotificationManagerImpl.kt
@@ -38,6 +38,7 @@ import com.moez.QKSMS.common.util.extensions.dpToPx
import com.moez.QKSMS.extensions.isImage
import com.moez.QKSMS.feature.compose.ComposeActivity
import com.moez.QKSMS.feature.qkreply.QkReplyActivity
+import com.moez.QKSMS.manager.PermissionManager
import com.moez.QKSMS.mapper.CursorToPartImpl
import com.moez.QKSMS.receiver.MarkReadReceiver
import com.moez.QKSMS.receiver.MarkSeenReceiver
@@ -56,7 +57,8 @@ class NotificationManagerImpl @Inject constructor(
private val colors: Colors,
private val conversationRepo: ConversationRepository,
private val prefs: Preferences,
- private val messageRepo: MessageRepository
+ private val messageRepo: MessageRepository,
+ private val permissions: PermissionManager
) : com.moez.QKSMS.manager.NotificationManager {
companion object {
@@ -219,7 +221,8 @@ class NotificationManagerImpl @Inject constructor(
Preferences.NOTIFICATION_ACTION_CALL -> {
val address = conversation.recipients[0]?.address
- val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:$address"))
+ val intentAction = if (permissions.hasCalling()) Intent.ACTION_CALL else Intent.ACTION_DIAL
+ val intent = Intent(intentAction, Uri.parse("tel:$address"))
val pi = PendingIntent.getActivity(context, threadId.toInt() + 50000, intent, PendingIntent.FLAG_UPDATE_CURRENT)
NotificationCompat.Action(R.drawable.ic_call_white_24dp, actionLabels[action], pi)
}