summaryrefslogtreecommitdiff
path: root/src/com/android/calendar/alerts/AlertReceiver.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/calendar/alerts/AlertReceiver.kt')
-rw-r--r--src/com/android/calendar/alerts/AlertReceiver.kt118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/com/android/calendar/alerts/AlertReceiver.kt b/src/com/android/calendar/alerts/AlertReceiver.kt
new file mode 100644
index 00000000..21afa90c
--- /dev/null
+++ b/src/com/android/calendar/alerts/AlertReceiver.kt
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.calendar.alerts
+
+import android.app.Notification
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.res.Resources
+import android.util.Log
+import com.android.calendar.R
+import com.android.calendar.Utils
+import com.android.calendar.alerts.AlertService.NotificationWrapper
+
+/**
+ * Receives android.intent.action.EVENT_REMINDER intents and handles
+ * event reminders. The intent URI specifies an alert id in the
+ * CalendarAlerts database table. This class also receives the
+ * BOOT_COMPLETED intent so that it can add a status bar notification
+ * if there are Calendar event alarms that have not been dismissed.
+ * It also receives the TIME_CHANGED action so that it can fire off
+ * snoozed alarms that have become ready. The real work is done in
+ * the AlertService class.
+ *
+ * To trigger this code after pushing the apk to device:
+ * adb shell am broadcast -a "android.intent.action.EVENT_REMINDER"
+ * -n "com.android.calendar/.alerts.AlertReceiver"
+ */
+class AlertReceiver : BroadcastReceiver() {
+ @Override
+ override fun onReceive(context: Context, intent: Intent) {
+ if (AlertService.DEBUG) {
+ Log.d(TAG, "onReceive: a=" + intent.getAction().toString() + " " + intent.toString())
+ }
+ }
+
+ companion object {
+ private const val TAG = "AlertReceiver"
+
+ // The broadcast for notification refreshes scheduled by the app. This is to
+ // distinguish the EVENT_REMINDER broadcast sent by the provider.
+ const val EVENT_REMINDER_APP_ACTION = "com.android.calendar.EVENT_REMINDER_APP"
+ const val ACTION_DISMISS_OLD_REMINDERS = "removeOldReminders"
+ fun makeBasicNotification(
+ context: Context,
+ title: String,
+ summaryText: String,
+ startMillis: Long,
+ endMillis: Long,
+ eventId: Long,
+ notificationId: Int,
+ doPopup: Boolean,
+ priority: Int
+ ): NotificationWrapper {
+ val n: Notification = buildBasicNotification(
+ Notification.Builder(context),
+ context,
+ title,
+ summaryText,
+ startMillis,
+ endMillis,
+ eventId,
+ notificationId,
+ doPopup,
+ priority, false
+ )
+ return NotificationWrapper(n, notificationId, eventId, startMillis, endMillis, doPopup)
+ }
+
+ private fun buildBasicNotification(
+ notificationBuilder: Notification.Builder,
+ context: Context,
+ title: String,
+ summaryText: String,
+ startMillis: Long,
+ endMillis: Long,
+ eventId: Long,
+ notificationId: Int,
+ doPopup: Boolean,
+ priority: Int,
+ addActionButtons: Boolean
+ ): Notification {
+ var title: String? = title
+ val resources: Resources = context.getResources()
+ if (title == null || title.length == 0) {
+ title = resources.getString(R.string.no_title_label)
+ }
+
+ // Create the base notification.
+ notificationBuilder.setContentTitle(title)
+ notificationBuilder.setContentText(summaryText)
+ notificationBuilder.setSmallIcon(R.drawable.stat_notify_calendar)
+ if (Utils.isJellybeanOrLater()) {
+ // Turn off timestamp.
+ notificationBuilder.setWhen(0)
+
+ // Should be one of the values in Notification
+ // (ie. Notification.PRIORITY_HIGH, etc).
+ // A higher priority will encourage notification manager to expand it.
+ notificationBuilder.setPriority(priority)
+ }
+ return notificationBuilder.getNotification()
+ }
+ }
+} \ No newline at end of file