| /* |
| * Copyright (C) 2012 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.AlarmManager; |
| import android.app.PendingIntent; |
| import android.content.ContentUris; |
| import android.content.ContentValues; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.content.SharedPreferences; |
| import android.net.Uri; |
| import android.provider.CalendarContract; |
| import android.provider.CalendarContract.CalendarAlerts; |
| import android.text.TextUtils; |
| import android.text.format.DateFormat; |
| import android.text.format.DateUtils; |
| import android.text.format.Time; |
| import android.util.Log; |
| |
| import com.android.calendar.EventInfoActivity; |
| import com.android.calendar.R; |
| import com.android.calendar.Utils; |
| |
| import java.util.Locale; |
| import java.util.Map; |
| import java.util.TimeZone; |
| |
| public class AlertUtils { |
| private static final String TAG = "AlertUtils"; |
| static final boolean DEBUG = true; |
| |
| public static final long SNOOZE_DELAY = 5 * 60 * 1000L; |
| |
| // We use one notification id for the expired events notification. All |
| // other notifications (the 'active' future/concurrent ones) use a unique ID. |
| public static final int EXPIRED_GROUP_NOTIFICATION_ID = 0; |
| |
| public static final String EVENT_ID_KEY = "eventid"; |
| public static final String EVENT_START_KEY = "eventstart"; |
| public static final String EVENT_END_KEY = "eventend"; |
| public static final String NOTIFICATION_ID_KEY = "notificationid"; |
| public static final String EVENT_IDS_KEY = "eventids"; |
| public static final String EVENT_STARTS_KEY = "starts"; |
| |
| // A flag for using local storage to save alert state instead of the alerts DB table. |
| // This allows the unbundled app to run alongside other calendar apps without eating |
| // alerts from other apps. |
| static boolean BYPASS_DB = true; |
| |
| /** |
| * Creates an AlarmManagerInterface that wraps a real AlarmManager. The alarm code |
| * was abstracted to an interface to make it testable. |
| */ |
| public static AlarmManagerInterface createAlarmManager(Context context) { |
| final AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); |
| return new AlarmManagerInterface() { |
| @Override |
| public void set(int type, long triggerAtMillis, PendingIntent operation) { |
| if (Utils.isKeyLimePieOrLater()) { |
| mgr.setExact(type, triggerAtMillis, operation); |
| } else { |
| mgr.set(type, triggerAtMillis, operation); |
| } |
| } |
| }; |
| } |
| |
| /** |
| * Schedules an alarm intent with the system AlarmManager that will notify |
| * listeners when a reminder should be fired. The provider will keep |
| * scheduled reminders up to date but apps may use this to implement snooze |
| * functionality without modifying the reminders table. Scheduled alarms |
| * will generate an intent using AlertReceiver.EVENT_REMINDER_APP_ACTION. |
| * |
| * @param context A context for referencing system resources |
| * @param manager The AlarmManager to use or null |
| * @param alarmTime The time to fire the intent in UTC millis since epoch |
| */ |
| public static void scheduleAlarm(Context context, AlarmManagerInterface manager, |
| long alarmTime) { |
| } |
| |
| public static Intent buildEventViewIntent(Context c, long eventId, long begin, long end) { |
| Intent i = new Intent(Intent.ACTION_VIEW); |
| Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); |
| builder.appendEncodedPath("events/" + eventId); |
| i.setData(builder.build()); |
| i.setClass(c, EventInfoActivity.class); |
| i.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin); |
| i.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end); |
| return i; |
| } |
| } |