blob: ee0c508dc946d7b58e8d8b98b2cc4dfce50bd485 [file] [log] [blame]
/*
* Copyright (C) 2007 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.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ContentUris;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.PowerManager;
import android.provider.CalendarContract.Attendees;
import android.provider.CalendarContract.Calendars;
import android.provider.CalendarContract.Events;
import android.telephony.TelephonyManager;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.RelativeSizeSpan;
import android.text.style.TextAppearanceSpan;
import android.text.style.URLSpan;
import android.util.Log;
import android.view.View;
import android.widget.RemoteViews;
import com.android.calendar.R;
import com.android.calendar.Utils;
import com.android.calendar.alerts.AlertService.NotificationWrapper;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
/**
* 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"
*/
public class AlertReceiver extends BroadcastReceiver {
private static final String TAG = "AlertReceiver";
// The broadcast for notification refreshes scheduled by the app. This is to
// distinguish the EVENT_REMINDER broadcast sent by the provider.
public static final String EVENT_REMINDER_APP_ACTION =
"com.android.calendar.EVENT_REMINDER_APP";
public static final String ACTION_DISMISS_OLD_REMINDERS = "removeOldReminders";
@Override
public void onReceive(final Context context, final Intent intent) {
if (AlertService.DEBUG) {
Log.d(TAG, "onReceive: a=" + intent.getAction() + " " + intent.toString());
}
}
public static NotificationWrapper makeBasicNotification(Context context, String title,
String summaryText, long startMillis, long endMillis, long eventId,
int notificationId, boolean doPopup, int priority) {
Notification n = buildBasicNotification(new Notification.Builder(context),
context, title, summaryText, startMillis, endMillis, eventId, notificationId,
doPopup, priority, false);
return new NotificationWrapper(n, notificationId, eventId, startMillis, endMillis, doPopup);
}
private static Notification buildBasicNotification(Notification.Builder notificationBuilder,
Context context, String title, String summaryText, long startMillis, long endMillis,
long eventId, int notificationId, boolean doPopup, int priority,
boolean addActionButtons) {
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();
}
}