Scheduled messages will automatically be sent

This commit is contained in:
Moez Bhatti
2018-06-27 17:13:32 -04:00
parent cf371ddf85
commit 7ef15dd448
5 changed files with 76 additions and 7 deletions
@@ -0,0 +1,43 @@
/*
* Copyright (C) 2017 Moez Bhatti <moez.bhatti@gmail.com>
*
* This file is part of QKSMS.
*
* QKSMS is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* QKSMS is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with QKSMS. If not, see <http://www.gnu.org/licenses/>.
*/
package com.moez.QKSMS.receiver
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import com.moez.QKSMS.interactor.SendScheduledMessage
import com.moez.QKSMS.repository.MessageRepository
import dagger.android.AndroidInjection
import javax.inject.Inject
class SendScheduledMessageReceiver : BroadcastReceiver() {
@Inject lateinit var messageRepo: MessageRepository
@Inject lateinit var sendScheduledMessage: SendScheduledMessage
override fun onReceive(context: Context, intent: Intent) {
AndroidInjection.inject(this, context)
intent.getLongExtra("id", -1L).takeIf { it >= 0 }?.let { id ->
val result = goAsync()
sendScheduledMessage.execute(id) { result.finish() }
}
}
}
@@ -1,26 +1,44 @@
package com.moez.QKSMS.repository
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build
import com.klinker.android.send_message.BroadcastUtils
import com.moez.QKSMS.model.ScheduledMessage
import io.realm.Realm
import io.realm.RealmList
import io.realm.RealmResults
import javax.inject.Inject
class ScheduledMessageRepositoryImpl @Inject constructor() : ScheduledMessageRepository {
class ScheduledMessageRepositoryImpl @Inject constructor(
private val context: Context
) : ScheduledMessageRepository {
override fun saveScheduledMessage(date: Long, subId: Int, recipients: List<String>, sendAsGroup: Boolean,
body: String, attachments: List<String>): Long {
body: String, attachments: List<String>) {
return Realm.getDefaultInstance().use { realm ->
Realm.getDefaultInstance().use { realm ->
val id = (realm.where(ScheduledMessage::class.java).max("id")?.toLong() ?: -1) + 1
val recipientsRealmList = RealmList(*recipients.toTypedArray())
val attachmentsRealmList = RealmList(*attachments.toTypedArray())
val message = ScheduledMessage(id, date, subId, recipientsRealmList, sendAsGroup, body, attachmentsRealmList)
realm.executeTransaction { realm.insertOrUpdate(message) }
val action = "com.moez.QKSMS.SEND_SCHEDULED_MESSAGE"
val intent = Intent(action).putExtra("id", id)
BroadcastUtils.addClassName(context, intent, action)
val pendingIntent = PendingIntent.getBroadcast(context, id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT)
id
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, date, pendingIntent)
} else {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, date, pendingIntent)
}
realm.executeTransaction { realm.insertOrUpdate(message) }
}
}