summaryrefslogtreecommitdiff
path: root/src/com/android/calendar/alerts/AlertReceiver.kt
blob: 21afa90c66588a0970ca4478cceefd3bd86df296 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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()
        }
    }
}