blob: 21afa90c66588a0970ca4478cceefd3bd86df296 [file] [log] [blame]
/*
* 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()
}
}
}