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()
}
}
}
|