From 27eb3313fccf3f578ee8f4b1b03b27bfe9bb661d Mon Sep 17 00:00:00 2001
From: Docile-Alligator <25734209+Docile-Alligator@users.noreply.github.com>
Date: Sat, 27 Jun 2026 22:27:37 -0400
Subject: [PATCH] Continue implementing reminders.
---
app/src/main/AndroidManifest.xml | 1 +
.../infinityforreddit/AppComponent.java | 3 +
.../ReminderAlarmReceiver.kt | 81 +++++++++++++++++++
.../reminder/ReminderAlarmReceiver.kt | 18 -----
.../infinityforreddit/reminder/ReminderDao.kt | 4 +
.../reminder/ReminderManager.kt | 14 +++-
.../utils/NotificationUtils.java | 2 +
app/src/main/res/values/strings.xml | 1 +
8 files changed, 102 insertions(+), 22 deletions(-)
create mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/broadcastreceivers/ReminderAlarmReceiver.kt
delete mode 100644 app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderAlarmReceiver.kt
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 15b53e96..bccca04e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -482,6 +482,7 @@
android:permission="android.permission.BIND_JOB_SERVICE" />
+
\ No newline at end of file
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java b/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java
index 975173ef..c44fa846 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/AppComponent.java
@@ -90,6 +90,7 @@ import ml.docilealligator.infinityforreddit.fragments.ViewPostDetailFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewPostDetailFragmentNew;
import ml.docilealligator.infinityforreddit.fragments.ViewRedditGalleryImageOrGifFragment;
import ml.docilealligator.infinityforreddit.fragments.ViewRedditGalleryVideoFragment;
+import ml.docilealligator.infinityforreddit.broadcastreceivers.ReminderAlarmReceiver;
import ml.docilealligator.infinityforreddit.services.DownloadMediaService;
import ml.docilealligator.infinityforreddit.services.DownloadRedditVideoService;
import ml.docilealligator.infinityforreddit.services.EditProfileService;
@@ -339,6 +340,8 @@ public interface AppComponent {
void inject(SetReminderActivity setReminderActivity);
+ void inject(ReminderAlarmReceiver reminderAlarmReceiver);
+
@Component.Factory
interface Factory {
AppComponent create(@BindsInstance Application application);
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/broadcastreceivers/ReminderAlarmReceiver.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/broadcastreceivers/ReminderAlarmReceiver.kt
new file mode 100644
index 00000000..a25421bc
--- /dev/null
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/broadcastreceivers/ReminderAlarmReceiver.kt
@@ -0,0 +1,81 @@
+package ml.docilealligator.infinityforreddit.broadcastreceivers
+
+import android.app.PendingIntent
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.util.Log
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.DelicateCoroutinesApi
+import kotlinx.coroutines.GlobalScope
+import kotlinx.coroutines.launch
+import ml.docilealligator.infinityforreddit.Infinity
+import ml.docilealligator.infinityforreddit.R
+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.utils.NotificationUtils
+import java.util.Random
+import javax.inject.Inject
+import kotlin.coroutines.CoroutineContext
+import kotlin.coroutines.EmptyCoroutineContext
+
+class ReminderAlarmReceiver: BroadcastReceiver() {
+ @Inject
+ lateinit var mRedditRoomDatabase: RedditDataRoomDatabase
+ @Inject
+ lateinit var mCustomThemeWrapper: CustomThemeWrapper
+
+ @OptIn(DelicateCoroutinesApi::class)
+ override fun onReceive(context: Context, intent: Intent) {
+ val reminder: Reminder? = intent.getParcelableExtra(EXTRA_REMINDER)
+ reminder?.let {
+ (context.applicationContext as Infinity).appComponent.inject(this)
+ 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),
+ NotificationUtils.CHANNEL_ID_NEW_MESSAGES,
+ NotificationUtils.CHANNEL_NEW_MESSAGES,
+ NotificationUtils.GROUP_REMINDER, mCustomThemeWrapper.colorPrimaryLightTheme
+ )
+
+ val intent = Intent(context, ViewPostDetailActivity::class.java)
+ intent.putExtra(ViewPostDetailActivity.EXTRA_POST_ID, it.postId)
+ intent.putExtra(ViewPostDetailActivity.EXTRA_SINGLE_COMMENT_ID, it.commentId)
+ val pendingIntent =
+ PendingIntent.getActivity(context, 100, 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()
+ }
+
+ doAsync(GlobalScope) {
+ try {
+ mRedditRoomDatabase.reminderDao().deleteReminder(it)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }
+ }
+
+ companion object {
+ const val EXTRA_REMINDER = "ER"
+ }
+}
+
+fun BroadcastReceiver.doAsync(
+ appScope: CoroutineScope,
+ coroutineContext: CoroutineContext = EmptyCoroutineContext,
+ block: suspend CoroutineScope.() -> Unit
+) {
+ val pendingResult = goAsync()
+ appScope.launch(coroutineContext) { block() }.invokeOnCompletion { pendingResult.finish() }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderAlarmReceiver.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderAlarmReceiver.kt
deleted file mode 100644
index aa400d18..00000000
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderAlarmReceiver.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package ml.docilealligator.infinityforreddit.reminder
-
-import android.content.BroadcastReceiver
-import android.content.Context
-import android.content.Intent
-
-class ReminderAlarmReceiver: BroadcastReceiver() {
- override fun onReceive(context: Context, intent: Intent) {
- val reminder: Reminder? = intent.getParcelableExtra(EXTRA_REMINDER)
- reminder?.let {
-
- }
- }
-
- companion object {
- val EXTRA_REMINDER = "ER"
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderDao.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderDao.kt
index 6c3e18f8..c4a243e7 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderDao.kt
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderDao.kt
@@ -1,6 +1,7 @@
package ml.docilealligator.infinityforreddit.reminder
import androidx.room.Dao
+import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
@@ -16,4 +17,7 @@ interface ReminderDao {
@Query("SELECT * FROM reminders")
fun getAllRemindersFlow(): Flow>
+
+ @Delete
+ suspend fun deleteReminder(reminder: Reminder)
}
\ No newline at end of file
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderManager.kt b/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderManager.kt
index 20639c07..fbe33fc5 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderManager.kt
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/reminder/ReminderManager.kt
@@ -6,6 +6,7 @@ import android.app.PendingIntent
import android.content.Intent
import kotlinx.coroutines.flow.Flow
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase
+import ml.docilealligator.infinityforreddit.broadcastreceivers.ReminderAlarmReceiver
class ReminderManager(
private val applicationContext: Application,
@@ -15,10 +16,15 @@ class ReminderManager(
suspend fun setReminder(reminder: Reminder) {
redditRoomDatabase.reminderDao().insert(reminder)
- val alarmIntent = Intent(applicationContext,
- ReminderAlarmReceiver::class.java).let { intent ->
- PendingIntent.getBroadcast(applicationContext, 0, intent,
- PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
+ val alarmIntent = Intent(
+ applicationContext,
+ ReminderAlarmReceiver::class.java
+ ).let { intent ->
+ intent.putExtra(ReminderAlarmReceiver.EXTRA_REMINDER, reminder)
+ PendingIntent.getBroadcast(
+ applicationContext, 0, intent,
+ PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
+ )
}
alarmManager.set(
diff --git a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/NotificationUtils.java b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/NotificationUtils.java
index f4875e3d..2e997499 100644
--- a/app/src/main/java/ml/docilealligator/infinityforreddit/utils/NotificationUtils.java
+++ b/app/src/main/java/ml/docilealligator/infinityforreddit/utils/NotificationUtils.java
@@ -29,11 +29,13 @@ public class NotificationUtils {
public static final int DOWNLOAD_GIF_NOTIFICATION_ID = 50000;
public static final int MATERIAL_YOU_NOTIFICATION_ID = 60000;
public static final int EDIT_PROFILE_SERVICE_NOTIFICATION_ID = 70000;
+ public static final int REMINDER_NOTIFICATION_ID = 80000;
private static final int SUMMARY_BASE_ID_UNREAD_MESSAGE = 0;
private static final int NOTIFICATION_BASE_ID_UNREAD_MESSAGE = 1;
private static final String GROUP_USER_BASE = "ml.docilealligator.infinityforreddit.";
+ public static final String GROUP_REMINDER = "ml.docilealligator.infinityforreddit.reminder@group";
public static NotificationCompat.Builder buildNotification(NotificationManagerCompat notificationManager,
Context context, String title, String content,
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f3cf3657..f15bd8d5 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1659,4 +1659,5 @@
The reminder time must be in the future.
Invalid post id
Reminder set
+ Reminder