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