| /* |
| * 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()); |
| } |
| closeNotificationShade(context); |
| } |
| |
| 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(); |
| } |
| |
| private void closeNotificationShade(Context context) { |
| Intent closeNotificationShadeIntent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); |
| context.sendBroadcast(closeNotificationShadeIntent); |
| } |
| } |