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