AlertActivity.java revision 146de36083f6ce8b7e8a1f974d3990594a36bfec
1146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project/* 2146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * 4146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * you may not use this file except in compliance with the License. 6146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * You may obtain a copy of the License at 7146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * 8146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * 10146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * See the License for the specific language governing permissions and 14146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * limitations under the License. 15146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project */ 16146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 17146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectpackage com.android.calendar; 18146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 19146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport static android.provider.Calendar.EVENT_BEGIN_TIME; 20146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport static android.provider.Calendar.EVENT_END_TIME; 21146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 22146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.app.Activity; 23146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.app.AlarmManager; 24146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.app.NotificationManager; 25146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.app.PendingIntent; 26146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.AsyncQueryHandler; 27146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.ContentResolver; 28146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.ContentUris; 29146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.Context; 30146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.Intent; 31146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.res.TypedArray; 32146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.database.Cursor; 33146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.graphics.PixelFormat; 34146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.net.Uri; 35146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.os.Bundle; 36146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.provider.Calendar; 37146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.provider.Calendar.CalendarAlerts; 38146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.provider.Calendar.Events; 39146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.view.View; 40146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.view.ViewGroup; 41146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.view.Window; 42146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.view.WindowManager; 43146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.view.View.OnClickListener; 44146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.AdapterView; 45146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.Button; 46146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.ListView; 47146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.AdapterView.OnItemClickListener; 48146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 49146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project/** 50146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * The alert panel that pops up when there is a calendar event alarm. 51146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * This activity is started by an intent that specifies an event id. 52146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project */ 53146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectpublic class AlertActivity extends Activity { 54146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 55146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // The default snooze delay: 5 minutes 56146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final long SNOOZE_DELAY = 5 * 60 * 1000L; 57146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 58146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private static final String[] PROJECTION = new String[] { 59146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts._ID, // 0 60146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.TITLE, // 1 61146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.EVENT_LOCATION, // 2 62146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.ALL_DAY, // 3 63146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.BEGIN, // 4 64146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.END, // 5 65146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.EVENT_ID, // 6 66146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.COLOR, // 7 67146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.RRULE, // 8 68146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.HAS_ALARM, // 9 69146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.STATE, // 10 70146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.ALARM_TIME, // 11 71146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project }; 72146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 73146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_TITLE = 1; 74146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_EVENT_LOCATION = 2; 75146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_ALL_DAY = 3; 76146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_BEGIN = 4; 77146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_END = 5; 78146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_EVENT_ID = 6; 79146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_COLOR = 7; 80146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_RRULE = 8; 81146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_HAS_ALARM = 9; 82146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_STATE = 10; 83146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_ALARM_TIME = 11; 84146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 85146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // We use one notification id for all events so that we don't clutter 86146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // the notification screen. It doesn't matter what the id is, as long 87146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // as it is used consistently everywhere. 88146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int NOTIFICATION_ID = 0; 89146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 90146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private ContentResolver mResolver; 91146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private AlertAdapter mAdapter; 92146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private QueryHandler mQueryHandler; 93146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private Cursor mCursor; 94146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private ListView mListView; 95146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private Button mSnoozeAllButton; 96146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private Button mDismissAllButton; 97146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 98146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private class QueryHandler extends AsyncQueryHandler { 99146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public QueryHandler(ContentResolver cr) { 100146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super(cr); 101146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 102146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 103146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 104146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onQueryComplete(int token, Object cookie, Cursor cursor) { 105146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Only set mCursor if the Activity is not finishing. Otherwise close the cursor. 106146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (!isFinishing()) { 107146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor = cursor; 108146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mAdapter.changeCursor(cursor); 109146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 110146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // The results are in, enable the buttons 111146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mSnoozeAllButton.setEnabled(true); 112146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mDismissAllButton.setEnabled(true); 113146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } else { 114146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project cursor.close(); 115146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 116146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 117146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 118146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 119146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 120146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private OnItemClickListener mViewListener = new OnItemClickListener() { 121146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 122146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public void onItemClick(AdapterView parent, View view, int position, 123146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long i) { 124146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project AlertActivity alertActivity = AlertActivity.this; 125146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Cursor cursor = alertActivity.getItemForView(view); 126146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 127146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long id = cursor.getInt(AlertActivity.INDEX_EVENT_ID); 128146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long startMillis = cursor.getLong(AlertActivity.INDEX_BEGIN); 129146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long endMillis = cursor.getLong(AlertActivity.INDEX_END); 130146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 131146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, id); 132146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Intent intent = new Intent(Intent.ACTION_VIEW, uri); 133146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project intent.setClass(alertActivity, EventInfoActivity.class); 134146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project intent.putExtra(EVENT_BEGIN_TIME, startMillis); 135146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project intent.putExtra(EVENT_END_TIME, endMillis); 136146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 137146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Mark this alarm as DISMISSED 138146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project cursor.updateInt(INDEX_STATE, CalendarAlerts.DISMISSED); 139146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project cursor.commitUpdates(); 140146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 141146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project startActivity(intent); 142146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project alertActivity.finish(); 143146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 144146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project }; 145146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 146146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 147146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onCreate(Bundle icicle) { 148146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onCreate(icicle); 149146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 150146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project requestWindowFeature(Window.FEATURE_NO_TITLE); 151146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project setContentView(R.layout.alert_activity); 152146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 153146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project WindowManager.LayoutParams lp = getWindow().getAttributes(); 154146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project lp.width = ViewGroup.LayoutParams.FILL_PARENT; 155146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project lp.height = ViewGroup.LayoutParams.FILL_PARENT; 156146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 157146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Get the dim amount from the theme 158146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project TypedArray a = obtainStyledAttributes(com.android.internal.R.styleable.Theme); 159146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project lp.dimAmount = a.getFloat(android.R.styleable.Theme_backgroundDimAmount, 0.5f); 160146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project a.recycle(); 161146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 162146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project getWindow().setAttributes(lp); 163146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND); 164146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 165146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mResolver = getContentResolver(); 166146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mQueryHandler = new QueryHandler(mResolver); 167146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mAdapter = new AlertAdapter(this, R.layout.alert_item); 168146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 169146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView = (ListView) findViewById(R.id.alert_container); 170146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView.setItemsCanFocus(true); 171146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView.setAdapter(mAdapter); 172146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView.setOnItemClickListener(mViewListener); 173146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 174146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mSnoozeAllButton = (Button) findViewById(R.id.snooze_all); 175146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mSnoozeAllButton.setOnClickListener(mSnoozeAllListener); 176146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mDismissAllButton = (Button) findViewById(R.id.dismiss_all); 177146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mDismissAllButton.setOnClickListener(mDismissAllListener); 178146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 179146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Disable the buttons, since they need mCursor, which is created asynchronously 180146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mSnoozeAllButton.setEnabled(false); 181146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mDismissAllButton.setEnabled(false); 182146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 183146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 184146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 185146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onResume() { 186146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onResume(); 187146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 188146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // If the cursor is null, start the async handler. If it is not null just requery. 189146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (mCursor == null) { 190146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Uri uri = CalendarAlerts.CONTENT_URI_BY_INSTANCE; 191146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project String selection = CalendarAlerts.STATE + "=" + CalendarAlerts.FIRED; 192146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mQueryHandler.startQuery(0, null, uri, PROJECTION, selection, 193146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project null /* selection args */, CalendarAlerts.DEFAULT_SORT_ORDER); 194146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } else { 195146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.requery(); 196146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 197146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 198146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 199146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 200146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onStop() { 201146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onStop(); 202146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project AlertReceiver.updateAlertNotification(this); 203146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 204146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (mCursor != null) { 205146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.deactivate(); 206146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 207146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 208146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 209146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 210146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onDestroy() { 211146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onDestroy(); 212146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (mCursor != null) { 213146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.close(); 214146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 215146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 216146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 217146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private OnClickListener mSnoozeAllListener = new OnClickListener() { 218146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public void onClick(View v) { 219146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project NotificationManager nm = 220146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 221146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project nm.cancel(NOTIFICATION_ID); 222146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.moveToPosition(-1); 223146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project while (mCursor.moveToNext()) { 224146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long eventId = mCursor.getLong(INDEX_EVENT_ID); 225146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long begin = mCursor.getLong(INDEX_BEGIN); 226146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long end = mCursor.getLong(INDEX_END); 227146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long alarmTime = mCursor.getLong(INDEX_ALARM_TIME); 228146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 229146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Mark this alarm as DISMISSED 230146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.updateInt(INDEX_STATE, CalendarAlerts.DISMISSED); 231146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 232146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Create a new alarm entry in the CalendarAlerts table 233146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long now = System.currentTimeMillis(); 234146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project alarmTime = now + SNOOZE_DELAY; 235146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 236146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Set the "minutes" to zero to indicate this is a snoozed 237146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // alarm. There is code in AlertService.java that checks 238146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // this field. 239146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Uri uri = CalendarAlerts.insert(mResolver, eventId, 240146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project begin, end, alarmTime, 0 /* minutes */); 241146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 242146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Set a new alarm to go off after the snooze delay. 243146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Intent intent = new Intent(Calendar.EVENT_REMINDER_ACTION); 244146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project intent.setData(uri); 245146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project intent.putExtra(Calendar.EVENT_BEGIN_TIME, begin); 246146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project intent.putExtra(Calendar.EVENT_END_TIME, end); 247146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 248146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project PendingIntent sender = PendingIntent.getBroadcast(AlertActivity.this, 249146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 250146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Object service = getSystemService(Context.ALARM_SERVICE); 251146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project AlarmManager alarmManager = (AlarmManager) service; 252146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, sender); 253146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 254146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.commitUpdates(); 255146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project finish(); 256146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 257146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project }; 258146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 259146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private OnClickListener mDismissAllListener = new OnClickListener() { 260146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public void onClick(View v) { 261146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project NotificationManager nm = 262146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 263146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project nm.cancel(NOTIFICATION_ID); 264146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.moveToPosition(-1); 265146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project while (mCursor.moveToNext()) { 266146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.updateInt(INDEX_STATE, CalendarAlerts.DISMISSED); 267146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 268146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.commitUpdates(); 269146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project finish(); 270146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 271146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project }; 272146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 273146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public boolean isEmpty() { 274146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project return (mCursor.getCount() == 0); 275146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 276146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 277146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public Cursor getItemForView(View view) { 278146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project int index = mListView.getPositionForView(view); 279146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (index < 0) { 280146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project return null; 281146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 282146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project return (Cursor) mListView.getAdapter().getItem(index); 283146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 284146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project} 285