CalendarAppWidgetProvider.java revision 0c715c837a7ecc2cfda3a62d952f8dc7e79a39f3
1bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang/*
2bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang * Copyright (C) 2009 The Android Open Source Project
3bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang *
4bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang * Licensed under the Apache License, Version 2.0 (the "License");
5bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang * you may not use this file except in compliance with the License.
6bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang * You may obtain a copy of the License at
7bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang *
8bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang *      http://www.apache.org/licenses/LICENSE-2.0
9bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang *
10bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang * Unless required by applicable law or agreed to in writing, software
11bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang * distributed under the License is distributed on an "AS IS" BASIS,
12bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang * See the License for the specific language governing permissions and
14bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang * limitations under the License.
15bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang */
16bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
179a3cb14e28536e4133dddbe952f47189fe344ec1Mason Tangpackage com.android.calendar.widget;
18bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
1947d40324272ae39af0872bf5cbf27e1800478021Mason Tangimport com.android.calendar.R;
2047d40324272ae39af0872bf5cbf27e1800478021Mason Tangimport com.android.calendar.Utils;
2147d40324272ae39af0872bf5cbf27e1800478021Mason Tang
22bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tangimport android.app.AlarmManager;
23bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tangimport android.app.PendingIntent;
24bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tangimport android.appwidget.AppWidgetManager;
25bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tangimport android.appwidget.AppWidgetProvider;
26bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tangimport android.content.ComponentName;
27bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tangimport android.content.Context;
28bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tangimport android.content.Intent;
29bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tangimport android.content.pm.PackageManager;
3047d40324272ae39af0872bf5cbf27e1800478021Mason Tangimport android.net.Uri;
31bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tangimport android.text.format.DateUtils;
3247d40324272ae39af0872bf5cbf27e1800478021Mason Tangimport android.text.format.Time;
3347d40324272ae39af0872bf5cbf27e1800478021Mason Tangimport android.util.Log;
3447d40324272ae39af0872bf5cbf27e1800478021Mason Tangimport android.widget.RemoteViews;
35bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
36bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang/**
37bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang * Simple widget to show next upcoming calendar event.
38bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang */
39bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tangpublic class CalendarAppWidgetProvider extends AppWidgetProvider {
40bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    static final String TAG = "CalendarAppWidgetProvider";
41bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    static final boolean LOGD = false;
42bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
43bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    static final String ACTION_CALENDAR_APPWIDGET_UPDATE =
44bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang            "com.android.calendar.APPWIDGET_UPDATE";
45bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
46bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    // TODO Move these to Calendar.java
47bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    static final String EXTRA_EVENT_IDS = "com.android.calendar.EXTRA_EVENT_IDS";
48bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
49bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    /**
50bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * {@inheritDoc}
51bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     */
52bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    @Override
53bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    public void onReceive(Context context, Intent intent) {
54bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        // Handle calendar-specific updates ourselves because they might be
55bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        // coming in without extras, which AppWidgetProvider then blocks.
56bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        final String action = intent.getAction();
57bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        if (ACTION_CALENDAR_APPWIDGET_UPDATE.equals(action)) {
5847d40324272ae39af0872bf5cbf27e1800478021Mason Tang            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
5947d40324272ae39af0872bf5cbf27e1800478021Mason Tang            performUpdate(context, appWidgetManager,
6047d40324272ae39af0872bf5cbf27e1800478021Mason Tang                    appWidgetManager.getAppWidgetIds(getComponentName(context)),
61bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang                    null /* no eventIds */);
62bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        } else {
63bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang            super.onReceive(context, intent);
64bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        }
65bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    }
66bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
67bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    /**
68bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * {@inheritDoc}
69bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     */
70bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    @Override
71bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    public void onEnabled(Context context) {
72bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        // Enable updates for timezone, date, and provider changes
73bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        PackageManager pm = context.getPackageManager();
74bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        pm.setComponentEnabledSetting(
75bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang                new ComponentName(context, CalendarAppWidgetReceiver.class),
76bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
77bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang                PackageManager.DONT_KILL_APP);
78bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    }
79bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
80bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    /**
81bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * {@inheritDoc}
82bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     */
83bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    @Override
84bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    public void onDisabled(Context context) {
85bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        // Unsubscribe from all AlarmManager updates
86bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
87bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        PendingIntent pendingUpdate = getUpdateIntent(context);
88bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        am.cancel(pendingUpdate);
89bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
90bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        // Disable updates for timezone, date, and provider changes
91bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        PackageManager pm = context.getPackageManager();
92bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        pm.setComponentEnabledSetting(
93bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang                new ComponentName(context, CalendarAppWidgetReceiver.class),
94bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
95bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang                PackageManager.DONT_KILL_APP);
96bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    }
97bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
98bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    /**
99bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * {@inheritDoc}
100bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     */
101bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    @Override
102bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
10347d40324272ae39af0872bf5cbf27e1800478021Mason Tang        performUpdate(context, appWidgetManager, appWidgetIds, null /* no eventIds */);
104bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    }
105bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
106bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
107bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    /**
108bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * Build {@link ComponentName} describing this specific
109bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * {@link AppWidgetProvider}
110bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     */
111bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    static ComponentName getComponentName(Context context) {
112bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        return new ComponentName(context, CalendarAppWidgetProvider.class);
113bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    }
114bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
115bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    /**
116bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * Process and push out an update for the given appWidgetIds. This call
117bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * actually fires an intent to start {@link CalendarAppWidgetService} as a
118bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * background service which handles the actual update, to prevent ANR'ing
119bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * during database queries.
120bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     *
121bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * @param context Context to use when starting {@link CalendarAppWidgetService}.
122bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * @param appWidgetIds List of specific appWidgetIds to update, or null for
123bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     *            all.
124bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * @param changedEventIds Specific events known to be changed. If present,
125bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     *            we use it to decide if an update is necessary.
126bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     */
1274143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa    private void performUpdate(Context context,
1284143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa            AppWidgetManager appWidgetManager, int[] appWidgetIds,
129bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang            long[] changedEventIds) {
13047d40324272ae39af0872bf5cbf27e1800478021Mason Tang        // Launch over to service so it can perform update
13147d40324272ae39af0872bf5cbf27e1800478021Mason Tang        for (int appWidgetId : appWidgetIds) {
13247d40324272ae39af0872bf5cbf27e1800478021Mason Tang            if (LOGD) Log.d(TAG, "Building widget update...");
13347d40324272ae39af0872bf5cbf27e1800478021Mason Tang            Intent updateIntent = new Intent(context, CalendarAppWidgetService.class);
13447d40324272ae39af0872bf5cbf27e1800478021Mason Tang            updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
135bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang            if (changedEventIds != null) {
136bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang                updateIntent.putExtra(EXTRA_EVENT_IDS, changedEventIds);
137bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang            }
13847d40324272ae39af0872bf5cbf27e1800478021Mason Tang            updateIntent.setData(Uri.parse(updateIntent.toUri(Intent.URI_INTENT_SCHEME)));
13947d40324272ae39af0872bf5cbf27e1800478021Mason Tang
14047d40324272ae39af0872bf5cbf27e1800478021Mason Tang            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget);
14147d40324272ae39af0872bf5cbf27e1800478021Mason Tang            // Calendar header
14247d40324272ae39af0872bf5cbf27e1800478021Mason Tang            Time time = new Time();
14347d40324272ae39af0872bf5cbf27e1800478021Mason Tang            time.setToNow();
144a71e0a520493532dbb7e9bfa164ab78e59e797a3Daisuke Miyakawa            final String dayOfWeek = DateUtils.getDayOfWeekString(
14550088e364aaa3074476e1300a270aafb0653df47Daisuke Miyakawa                    time.weekDay + 1, DateUtils.LENGTH_MEDIUM);
14650088e364aaa3074476e1300a270aafb0653df47Daisuke Miyakawa            final String month =
14750088e364aaa3074476e1300a270aafb0653df47Daisuke Miyakawa                    DateUtils.getMonthString(time.month, DateUtils.LENGTH_MEDIUM).toUpperCase();
14847d40324272ae39af0872bf5cbf27e1800478021Mason Tang            views.setTextViewText(R.id.day_of_week, dayOfWeek);
14947d40324272ae39af0872bf5cbf27e1800478021Mason Tang            views.setTextViewText(R.id.day_of_month, Integer.toString(time.monthDay));
150a71e0a520493532dbb7e9bfa164ab78e59e797a3Daisuke Miyakawa            views.setTextViewText(R.id.month, month);
15147d40324272ae39af0872bf5cbf27e1800478021Mason Tang            // Attach to list of events
15247d40324272ae39af0872bf5cbf27e1800478021Mason Tang            views.setRemoteAdapter(R.id.events_list, updateIntent);
1530054262c76ccc4b20dc6596e161df8a99d0c81c7Mason Tang            appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.events_list);
15447d40324272ae39af0872bf5cbf27e1800478021Mason Tang
15547d40324272ae39af0872bf5cbf27e1800478021Mason Tang            // Clicking on the widget launches Calendar
15647d40324272ae39af0872bf5cbf27e1800478021Mason Tang            // TODO fix this exact behavior?
1574143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa            // long startTime = Math.max(currentTime, events.firstTime);
15847d40324272ae39af0872bf5cbf27e1800478021Mason Tang            long startTime = System.currentTimeMillis();
15947d40324272ae39af0872bf5cbf27e1800478021Mason Tang
1604143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa            // Each list item will call setOnClickExtra() to let the list know which item
1614143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa            // is selected by a user.
1624143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa            final PendingIntent updateEventIntent = getLaunchPendingIntentTemplate(context);
1634143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa            views.setPendingIntentTemplate(R.id.events_list, updateEventIntent);
16447d40324272ae39af0872bf5cbf27e1800478021Mason Tang
1654143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa            // ImageButton is not a collection so we cannot/shouldn't call
1664143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa            // setPendingIntentTemplate().
1674143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa            final PendingIntent newEventIntent = getNewEventPendingIntent(context);
16847d40324272ae39af0872bf5cbf27e1800478021Mason Tang            views.setOnClickPendingIntent(R.id.new_event_button, newEventIntent);
16947d40324272ae39af0872bf5cbf27e1800478021Mason Tang
17047d40324272ae39af0872bf5cbf27e1800478021Mason Tang            appWidgetManager.updateAppWidget(appWidgetId, views);
17147d40324272ae39af0872bf5cbf27e1800478021Mason Tang        }
172bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    }
173bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang
174bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    /**
175bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * Build the {@link PendingIntent} used to trigger an update of all calendar
176bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * widgets. Uses {@link #ACTION_CALENDAR_APPWIDGET_UPDATE} to directly target
177bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * all widgets instead of using {@link AppWidgetManager#EXTRA_APPWIDGET_IDS}.
178bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     *
179bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     * @param context Context to use when building broadcast.
180bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang     */
181bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    static PendingIntent getUpdateIntent(Context context) {
182bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        Intent updateIntent = new Intent(ACTION_CALENDAR_APPWIDGET_UPDATE);
1830054262c76ccc4b20dc6596e161df8a99d0c81c7Mason Tang        updateIntent.setComponent(new ComponentName(context, CalendarAppWidgetProvider.class));
184bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang        return PendingIntent.getBroadcast(context, 0 /* no requestCode */,
185bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang                updateIntent, 0 /* no flags */);
186bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang    }
18747d40324272ae39af0872bf5cbf27e1800478021Mason Tang
18847d40324272ae39af0872bf5cbf27e1800478021Mason Tang    /**
1894143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa     * Build a {@link PendingIntent} to launch the Calendar app. This should be used
1904143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa     * in combination with {@link RemoteViews#setPendingIntentTemplate(int, PendingIntent)}.
19147d40324272ae39af0872bf5cbf27e1800478021Mason Tang     */
1924143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa    static PendingIntent getLaunchPendingIntentTemplate(Context context) {
19347d40324272ae39af0872bf5cbf27e1800478021Mason Tang        Intent launchIntent = new Intent();
19447d40324272ae39af0872bf5cbf27e1800478021Mason Tang        launchIntent.setAction(Intent.ACTION_VIEW);
19547d40324272ae39af0872bf5cbf27e1800478021Mason Tang        launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
19647d40324272ae39af0872bf5cbf27e1800478021Mason Tang                Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED |
19747d40324272ae39af0872bf5cbf27e1800478021Mason Tang                Intent.FLAG_ACTIVITY_CLEAR_TOP);
1984143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa        return PendingIntent.getActivity(context, 0 /* no requestCode */,
1994143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa                launchIntent,  PendingIntent.FLAG_UPDATE_CURRENT);
2004143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa    }
2010c715c837a7ecc2cfda3a62d952f8dc7e79a39f3Daisuke Miyakawa
2024143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa    /**
2034143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa     * Build an {@link Intent} available as FillInIntent to launch the Calendar app.
2044143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa     * This should be used in combination with
2054143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa     * {@link RemoteViews#setOnClickFillInIntent(int, Intent)}.
2064143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa     * If the go to time is 0, then calendar will be launched without a starting time.
2074143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa     *
2084143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa     * @param goToTime time that calendar should take the user to, or 0 to
2094143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa     *            indicate no specific start time.
2104143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa     */
2114143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa    static Intent getLaunchFillInIntent(long goToTime) {
2124143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa        final Intent fillInIntent = new Intent();
2134143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa        String dataString = "content://com.android.calendar/time";
21447d40324272ae39af0872bf5cbf27e1800478021Mason Tang        if (goToTime != 0) {
2154143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa            fillInIntent.putExtra(Utils.INTENT_KEY_DETAIL_VIEW, true);
21647d40324272ae39af0872bf5cbf27e1800478021Mason Tang            dataString += "/" + goToTime;
21747d40324272ae39af0872bf5cbf27e1800478021Mason Tang        }
21847d40324272ae39af0872bf5cbf27e1800478021Mason Tang        Uri data = Uri.parse(dataString);
219b79279d9311c798138ab745d1836ca52f235f99dDaisuke Miyakawa        fillInIntent.setData(data);
2204143cfabb36f0c3adcad410a6eed29bc2b89d6e3Daisuke Miyakawa        return fillInIntent;
22147d40324272ae39af0872bf5cbf27e1800478021Mason Tang    }
22247d40324272ae39af0872bf5cbf27e1800478021Mason Tang
22347d40324272ae39af0872bf5cbf27e1800478021Mason Tang    private static PendingIntent getNewEventPendingIntent(Context context) {
22447d40324272ae39af0872bf5cbf27e1800478021Mason Tang        Intent newEventIntent = new Intent(Intent.ACTION_EDIT);
22547d40324272ae39af0872bf5cbf27e1800478021Mason Tang        newEventIntent.setType("vnd.android.cursor.item/event");
22647d40324272ae39af0872bf5cbf27e1800478021Mason Tang        return PendingIntent.getActivity(context, 0, newEventIntent,
22747d40324272ae39af0872bf5cbf27e1800478021Mason Tang                PendingIntent.FLAG_UPDATE_CURRENT);
22847d40324272ae39af0872bf5cbf27e1800478021Mason Tang    }
229bb3f08abac01e3083d837e5e823b311e3c039e90Mason Tang}
230