AlertUtils.java revision 9881907c47b2658fa85954bfb339c4b1eab9fc8e
19881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson/* 29881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * Copyright (C) 2012 The Android Open Source Project 39881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * 49881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * Licensed under the Apache License, Version 2.0 (the "License"); 59881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * you may not use this file except in compliance with the License. 69881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * You may obtain a copy of the License at 79881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * 89881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * http://www.apache.org/licenses/LICENSE-2.0 99881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * 109881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * Unless required by applicable law or agreed to in writing, software 119881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * distributed under the License is distributed on an "AS IS" BASIS, 129881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * See the License for the specific language governing permissions and 149881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * limitations under the License 159881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson */ 169881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 179881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonpackage com.android.calendar.alerts; 189881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 199881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonimport android.app.AlarmManager; 209881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonimport android.app.PendingIntent; 219881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonimport android.content.ContentValues; 229881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonimport android.content.Context; 239881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonimport android.content.Intent; 249881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonimport android.net.Uri; 259881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonimport android.provider.CalendarContract; 269881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonimport android.provider.CalendarContract.CalendarAlerts; 279881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 289881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonimport com.android.calendar.AllInOneActivity; 299881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 309881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelsonpublic class AlertUtils { 319881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 329881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson public static final long SNOOZE_DELAY = 5 * 60 * 1000L; 339881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 349881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson // We use one notification id for all events so that we don't clutter 359881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson // the notification screen. It doesn't matter what the id is, as long 369881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson // as it is used consistently everywhere. 379881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson public static final int NOTIFICATION_ID = 0; 389881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 399881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson public static final String EVENT_ID_KEY = "eventid"; 409881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson public static final String SHOW_EVENT_KEY = "showevent"; 419881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson public static final String EVENT_START_KEY = "eventstart"; 429881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson public static final String EVENT_END_KEY = "eventend"; 439881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 449881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson /** 459881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * Schedules an alarm intent with the system AlarmManager that will notify 469881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * listeners when a reminder should be fired. The provider will keep 479881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * scheduled reminders up to date but apps may use this to implement snooze 489881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * functionality without modifying the reminders table. Scheduled alarms 499881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * will generate an intent using {@link #ACTION_EVENT_REMINDER}. 509881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * 519881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * @param context A context for referencing system resources 529881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * @param manager The AlarmManager to use or null 539881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson * @param alarmTime The time to fire the intent in UTC millis since epoch 549881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson */ 559881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson public static void scheduleAlarm(Context context, AlarmManager manager, long alarmTime) { 569881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 579881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson // The default snooze delay: 5 minutes 589881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 599881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson if (manager == null) { 609881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 619881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson } 629881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 639881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson Intent intent = new Intent(CalendarContract.ACTION_EVENT_REMINDER); 649881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson intent.setData(CalendarAlerts.CONTENT_URI); 659881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson intent.putExtra(CalendarContract.CalendarAlerts.ALARM_TIME, alarmTime); 669881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 679881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson PendingIntent.FLAG_UPDATE_CURRENT); 689881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson manager.set(AlarmManager.RTC_WAKEUP, alarmTime, pi); 699881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson } 709881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 719881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson public static ContentValues makeContentValues(long eventId, long begin, long end, 729881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson long alarmTime, int minutes) { 739881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson ContentValues values = new ContentValues(); 749881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson values.put(CalendarAlerts.EVENT_ID, eventId); 759881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson values.put(CalendarAlerts.BEGIN, begin); 769881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson values.put(CalendarAlerts.END, end); 779881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson values.put(CalendarAlerts.ALARM_TIME, alarmTime); 789881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson long currentTime = System.currentTimeMillis(); 799881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson values.put(CalendarAlerts.CREATION_TIME, currentTime); 809881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson values.put(CalendarAlerts.RECEIVED_TIME, 0); 819881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson values.put(CalendarAlerts.NOTIFY_TIME, 0); 829881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson values.put(CalendarAlerts.STATE, CalendarAlerts.STATE_SCHEDULED); 839881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson values.put(CalendarAlerts.MINUTES, minutes); 849881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson return values; 859881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson } 869881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 879881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson public static Intent buildEventViewIntent(Context c, long eventId, long begin, long end){ 889881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson Intent i = new Intent(Intent.ACTION_VIEW); 899881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); 909881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 919881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson builder.appendEncodedPath("events/" + eventId); 929881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson i.setData(builder.build()); 939881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson i.setClass(c, AllInOneActivity.class); 949881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson i.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin); 959881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson i.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end); 969881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson return i; 979881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson } 989881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson 999881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson} 100