forked from upstream-mirrors/quik
Scheduled messages will automatically be sent
This commit is contained in:
@@ -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) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user