diff --git a/app/build.gradle b/app/build.gradle index 08e4e769..c40a46f9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -63,7 +63,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:b4cc381943' + implementation 'com.github.SimpleMobileTools:Simple-Commons:57a5db1ef3' implementation 'org.greenrobot:eventbus:3.3.1' implementation 'com.github.tibbi:IndicatorFastScroll:4524cd0b61' implementation 'com.github.tibbi:android-smsmms:5657799572' diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt index 5c6a1b5b..d0708a55 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -251,7 +251,10 @@ class MainActivity : SimpleActivity() { handlePermission(PERMISSION_READ_CONTACTS) { handleNotificationPermission { granted -> if (!granted) { - PermissionRequiredDialog(this, R.string.allow_notifications_incoming_messages) + PermissionRequiredDialog( + activity = this, + textId = R.string.allow_notifications_incoming_messages, + positiveActionCallback = { openNotificationSettings() }) } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index 62e03a05..068ed917 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -2,6 +2,7 @@ package com.simplemobiletools.smsmessenger.activities import android.annotation.SuppressLint import android.app.Activity +import android.app.AlarmManager import android.content.ActivityNotFoundException import android.content.Intent import android.content.res.ColorStateList @@ -9,9 +10,11 @@ import android.graphics.BitmapFactory import android.graphics.drawable.LayerDrawable import android.media.MediaMetadataRetriever import android.net.Uri +import android.os.Build import android.os.Bundle import android.provider.ContactsContract import android.provider.MediaStore +import android.provider.Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM import android.provider.Telephony import android.provider.Telephony.Sms.MESSAGE_TYPE_QUEUED import android.provider.Telephony.Sms.STATUS_NONE @@ -44,6 +47,7 @@ import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.FeatureLockedDialog +import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* @@ -51,6 +55,7 @@ import com.simplemobiletools.commons.models.PhoneNumber import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.commons.views.MyRecyclerView +import com.simplemobiletools.smsmessenger.BuildConfig import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.adapters.AttachmentsAdapter import com.simplemobiletools.smsmessenger.adapters.AutoCompleteTextViewAdapter @@ -75,6 +80,7 @@ import org.joda.time.DateTime import java.io.File import java.io.InputStream import java.io.OutputStream +import java.security.acl.Permission class ThreadActivity : SimpleActivity() { private val MIN_DATE_TIME_DIFF_SECS = 300 @@ -710,6 +716,25 @@ class ThreadActivity : SimpleActivity() { setupScheduleSendUi() } + private fun askForExactAlarmPermissionIfNeeded(callback: () -> Unit = {}) { + if (isSPlus()) { + val alarmManager: AlarmManager = getSystemService(ALARM_SERVICE) as AlarmManager + if (alarmManager.canScheduleExactAlarms()) { + callback() + } else { + PermissionRequiredDialog( + activity = this, + textId = R.string.allow_alarm_scheduled_messages, + positiveActionCallback = { + openRequestExactAlarmSettings(BuildConfig.APPLICATION_ID) + }, + ) + } + } else { + callback() + } + } + private fun setupAttachmentSizes() { messages.filter { it.attachment != null }.forEach { message -> message.attachment!!.attachments.forEach { @@ -1529,10 +1554,12 @@ class ThreadActivity : SimpleActivity() { } private fun launchScheduleSendDialog(originalDateTime: DateTime? = null) { - ScheduleMessageDialog(this, originalDateTime) { newDateTime -> - if (newDateTime != null) { - scheduledDateTime = newDateTime - showScheduleMessageDialog() + askForExactAlarmPermissionIfNeeded { + ScheduleMessageDialog(this, originalDateTime) { newDateTime -> + if (newDateTime != null) { + scheduledDateTime = newDateTime + showScheduleMessageDialog() + } } } }