mirror of
https://github.com/Docile-Alligator/Infinity-For-Reddit.git
synced 2026-08-18 11:03:26 +00:00
Continue implementing reminders.
This commit is contained in:
@ -269,8 +269,13 @@ abstract class AppModule {
|
||||
@Provides
|
||||
@Singleton
|
||||
static ReminderManager provideReminderManager(
|
||||
Application application, RedditDataRoomDatabase redditDataRoomDatabase
|
||||
Application application, RedditDataRoomDatabase redditDataRoomDatabase, CustomThemeWrapper customThemeWrapper
|
||||
) {
|
||||
return new ReminderManager(application, redditDataRoomDatabase, (AlarmManager) application.getSystemService(Context.ALARM_SERVICE));
|
||||
return new ReminderManager(
|
||||
application,
|
||||
redditDataRoomDatabase,
|
||||
(AlarmManager) application.getSystemService(Context.ALARM_SERVICE),
|
||||
customThemeWrapper
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,6 +45,7 @@ import ml.docilealligator.infinityforreddit.events.ToggleSecureModeEvent;
|
||||
import ml.docilealligator.infinityforreddit.font.ContentFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.font.FontFamily;
|
||||
import ml.docilealligator.infinityforreddit.font.TitleFontFamily;
|
||||
import ml.docilealligator.infinityforreddit.reminder.ReminderManager;
|
||||
import ml.docilealligator.infinityforreddit.utils.MaterialYouUtils;
|
||||
import ml.docilealligator.infinityforreddit.utils.SharedPreferencesUtils;
|
||||
import ml.docilealligator.infinityforreddit.utils.Utils;
|
||||
@ -85,6 +86,8 @@ public class Infinity extends Application implements LifecycleObserver {
|
||||
CustomThemeWrapper customThemeWrapper;
|
||||
@Inject
|
||||
Executor executor;
|
||||
@Inject
|
||||
ReminderManager reminderManager;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
@ -220,6 +223,8 @@ public class Infinity extends Application implements LifecycleObserver {
|
||||
amoledThemeSharedPreferences, mInternalSharedPreferences, null);
|
||||
}
|
||||
}
|
||||
|
||||
reminderManager.checkAndSetAllAlarms();
|
||||
}
|
||||
|
||||
@OnLifecycleEvent(Lifecycle.Event.ON_START)
|
||||
|
||||
@ -15,6 +15,7 @@ import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase
|
||||
import ml.docilealligator.infinityforreddit.activities.ViewPostDetailActivity
|
||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper
|
||||
import ml.docilealligator.infinityforreddit.reminder.Reminder
|
||||
import ml.docilealligator.infinityforreddit.reminder.ReminderManager
|
||||
import ml.docilealligator.infinityforreddit.utils.NotificationUtils
|
||||
import java.util.Random
|
||||
import javax.inject.Inject
|
||||
@ -32,7 +33,7 @@ class ReminderAlarmReceiver: BroadcastReceiver() {
|
||||
val reminder: Reminder? = intent.getParcelableExtra(EXTRA_REMINDER)
|
||||
reminder?.let {
|
||||
(context.applicationContext as Infinity).appComponent.inject(this)
|
||||
val notificationManager = NotificationUtils.getNotificationManager(context)
|
||||
/*val notificationManager = NotificationUtils.getNotificationManager(context)
|
||||
val builder = NotificationUtils.buildNotification(
|
||||
notificationManager,
|
||||
context, context.getString(R.string.reminder), it.content, context.getString(if (it.commentId.isNotEmpty()) R.string.comment else R.string.post),
|
||||
@ -54,7 +55,9 @@ class ReminderAlarmReceiver: BroadcastReceiver() {
|
||||
)
|
||||
} catch (e: SecurityException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}*/
|
||||
|
||||
ReminderManager.sendNotification(context, mCustomThemeWrapper, it)
|
||||
|
||||
doAsync(GlobalScope) {
|
||||
try {
|
||||
|
||||
@ -3,19 +3,31 @@ package ml.docilealligator.infinityforreddit.reminder
|
||||
import android.app.AlarmManager
|
||||
import android.app.Application
|
||||
import android.app.PendingIntent
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.launch
|
||||
import ml.docilealligator.infinityforreddit.R
|
||||
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase
|
||||
import ml.docilealligator.infinityforreddit.activities.ViewPostDetailActivity
|
||||
import ml.docilealligator.infinityforreddit.broadcastreceivers.ReminderAlarmReceiver
|
||||
import ml.docilealligator.infinityforreddit.customtheme.CustomThemeWrapper
|
||||
import ml.docilealligator.infinityforreddit.utils.NotificationUtils
|
||||
import java.util.Random
|
||||
|
||||
class ReminderManager(
|
||||
private val applicationContext: Application,
|
||||
private val redditRoomDatabase: RedditDataRoomDatabase,
|
||||
private val alarmManager: AlarmManager
|
||||
private val alarmManager: AlarmManager,
|
||||
private val customThemeWrapper: CustomThemeWrapper
|
||||
) {
|
||||
suspend fun setReminder(reminder: Reminder) {
|
||||
redditRoomDatabase.reminderDao().insert(reminder)
|
||||
setAlarm(reminder)
|
||||
}
|
||||
|
||||
fun setAlarm(reminder: Reminder) {
|
||||
val alarmIntent = Intent(
|
||||
applicationContext,
|
||||
ReminderAlarmReceiver::class.java
|
||||
@ -34,7 +46,60 @@ class ReminderManager(
|
||||
)
|
||||
}
|
||||
|
||||
fun checkAndSetAllAlarms() {
|
||||
MainScope().launch {
|
||||
for (reminder in redditRoomDatabase.reminderDao().getAllReminders()) {
|
||||
if (PendingIntent.getBroadcast(applicationContext, reminder.createdAt.toInt(), Intent(
|
||||
applicationContext,
|
||||
ReminderAlarmReceiver::class.java
|
||||
), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_NO_CREATE) == null) {
|
||||
if (System.currentTimeMillis() >= reminder.reminderTime) {
|
||||
sendNotification(applicationContext, customThemeWrapper, reminder)
|
||||
redditRoomDatabase.reminderDao().deleteReminder(reminder)
|
||||
} else {
|
||||
setAlarm(reminder)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getAllRemindersFlow(): Flow<List<Reminder>> {
|
||||
return redditRoomDatabase.reminderDao().getAllRemindersFlow()
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun sendNotification(
|
||||
context: Context,
|
||||
customThemeWrapper: CustomThemeWrapper,
|
||||
reminder: Reminder
|
||||
) {
|
||||
val notificationManager = NotificationUtils.getNotificationManager(context)
|
||||
val builder = NotificationUtils.buildNotification(
|
||||
notificationManager,
|
||||
context,
|
||||
context.getString(R.string.reminder),
|
||||
reminder.content,
|
||||
context.getString(if (reminder.commentId.isNotEmpty()) R.string.comment else R.string.post),
|
||||
NotificationUtils.CHANNEL_ID_NEW_MESSAGES,
|
||||
NotificationUtils.CHANNEL_NEW_MESSAGES,
|
||||
NotificationUtils.GROUP_REMINDER, customThemeWrapper.colorPrimaryLightTheme
|
||||
)
|
||||
|
||||
val intent = Intent(context, ViewPostDetailActivity::class.java)
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, reminder.postId)
|
||||
intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, reminder.commentId)
|
||||
val pendingIntent =
|
||||
PendingIntent.getActivity(context, reminder.createdAt.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
|
||||
builder.setContentIntent(pendingIntent)
|
||||
|
||||
try {
|
||||
notificationManager.notify(
|
||||
NotificationUtils.REMINDER_NOTIFICATION_ID + Random().nextInt(10000), builder.build()
|
||||
)
|
||||
} catch (e: SecurityException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user