AlertActivity.java revision 693ca60d79650af15ab226f7ce6958f61fb7de39
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 1723e7da3eacee7bceb105cdfc7b5329c7a43846d5Mason Tangpackage com.android.calendar.alerts; 18146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 19146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.app.Activity; 20146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.app.NotificationManager; 210ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelsonimport android.app.TaskStackBuilder; 225c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chanimport android.content.ContentValues; 23146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.content.Context; 24db4ce4a81063b7f5f6068f4144f8a3e3bca1e064Erikimport android.content.Intent; 25146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.database.Cursor; 26146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.net.Uri; 27693ca60d79650af15ab226f7ce6958f61fb7de39Michael Chanimport android.os.Build; 28146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.os.Bundle; 298f7f1abe54f206c490d2683f80646f514d98939bMichael Chanimport android.provider.CalendarContract; 30a7c0390d9c5dd4ff730de505682687fae5f5ced0RoboErikimport android.provider.CalendarContract.CalendarAlerts; 311a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawaimport android.util.Log; 32146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.view.View; 331a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawaimport android.view.View.OnClickListener; 34146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.AdapterView; 351a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawaimport android.widget.AdapterView.OnItemClickListener; 36146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.Button; 37146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.ListView; 38146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 398f7f1abe54f206c490d2683f80646f514d98939bMichael Chanimport com.android.calendar.AsyncQueryService; 408f7f1abe54f206c490d2683f80646f514d98939bMichael Chanimport com.android.calendar.EventInfoActivity; 418f7f1abe54f206c490d2683f80646f514d98939bMichael Chanimport com.android.calendar.R; 428f7f1abe54f206c490d2683f80646f514d98939bMichael Chanimport com.android.calendar.Utils; 438f7f1abe54f206c490d2683f80646f514d98939bMichael Chan 44146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project/** 45146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * The alert panel that pops up when there is a calendar event alarm. 46146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * This activity is started by an intent that specifies an event id. 47146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project */ 481a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawapublic class AlertActivity extends Activity implements OnClickListener { 491a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa private static final String TAG = "AlertActivity"; 505c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 515c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan private static final String[] PROJECTION = new String[] { 52146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts._ID, // 0 53146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.TITLE, // 1 54146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.EVENT_LOCATION, // 2 55146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.ALL_DAY, // 3 56146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.BEGIN, // 4 57146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.END, // 5 58146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.EVENT_ID, // 6 599881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson CalendarAlerts.CALENDAR_COLOR, // 7 60146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.RRULE, // 8 61146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.HAS_ALARM, // 9 62146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.STATE, // 10 63146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.ALARM_TIME, // 11 64146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project }; 655c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 665c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan public static final int INDEX_ROW_ID = 0; 67146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_TITLE = 1; 68146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_EVENT_LOCATION = 2; 69146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_ALL_DAY = 3; 70146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_BEGIN = 4; 71146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_END = 5; 72146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_EVENT_ID = 6; 73146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_COLOR = 7; 74146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_RRULE = 8; 75146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_HAS_ALARM = 9; 76146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_STATE = 10; 77146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_ALARM_TIME = 11; 785c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 79bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting private static final String SELECTION = CalendarAlerts.STATE + "=?"; 80bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting private static final String[] SELECTIONARG = new String[] { 81bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting Integer.toString(CalendarAlerts.STATE_FIRED) 82bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting }; 83e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan 84146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private AlertAdapter mAdapter; 85146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private QueryHandler mQueryHandler; 86146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private Cursor mCursor; 87146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private ListView mListView; 88146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private Button mDismissAllButton; 895c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 905c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 91bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting private void dismissFiredAlarms() { 925c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan ContentValues values = new ContentValues(1 /* size */); 93fa292a0db2a6f04255c75a57908b17ba48a96183RoboErik values.put(PROJECTION[INDEX_STATE], CalendarAlerts.STATE_DISMISSED); 94bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting String selection = CalendarAlerts.STATE + "=" + CalendarAlerts.STATE_FIRED; 955c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan mQueryHandler.startUpdate(0, null, CalendarAlerts.CONTENT_URI, values, 96bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan selection, null /* selectionArgs */, Utils.UNDO_DELAY); 975c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 985c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 995c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan private void dismissAlarm(long id) { 1005c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan ContentValues values = new ContentValues(1 /* size */); 101fa292a0db2a6f04255c75a57908b17ba48a96183RoboErik values.put(PROJECTION[INDEX_STATE], CalendarAlerts.STATE_DISMISSED); 1025c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan String selection = CalendarAlerts._ID + "=" + id; 1035c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan mQueryHandler.startUpdate(0, null, CalendarAlerts.CONTENT_URI, values, 104bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan selection, null /* selectionArgs */, Utils.UNDO_DELAY); 1055c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 1065c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 107bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan private class QueryHandler extends AsyncQueryService { 108bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan public QueryHandler(Context context) { 109bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan super(context); 110146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 111146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 112146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 113146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onQueryComplete(int token, Object cookie, Cursor cursor) { 114146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Only set mCursor if the Activity is not finishing. Otherwise close the cursor. 115146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (!isFinishing()) { 116146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor = cursor; 117146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mAdapter.changeCursor(cursor); 11810d9f11fec9cb578185e4455eeaef289c0dff8b9Michael Chan mListView.setSelection(cursor.getCount() - 1); 1195c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 120146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // The results are in, enable the buttons 121146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mDismissAllButton.setEnabled(true); 122146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } else { 123146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project cursor.close(); 124146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 125146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 1265c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 1275c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan @Override 1285c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan protected void onInsertComplete(int token, Object cookie, Uri uri) { 1295c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan if (uri != null) { 130e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan Long alarmTime = (Long) cookie; 131e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan 132e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan if (alarmTime != 0) { 133e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan // Set a new alarm to go off after the snooze delay. 134fa292a0db2a6f04255c75a57908b17ba48a96183RoboErik // TODO make provider schedule this automatically when 135fa292a0db2a6f04255c75a57908b17ba48a96183RoboErik // inserting an alarm 1369881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson AlertUtils.scheduleAlarm(AlertActivity.this, null, alarmTime); 137e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan } 1385c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 1395c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 1405c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 1415c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan @Override 1425c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan protected void onUpdateComplete(int token, Object cookie, int result) { 1435c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan // Ignore 1445c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 1455c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 1465c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 147fa292a0db2a6f04255c75a57908b17ba48a96183RoboErik 1485c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 1490ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson private final OnItemClickListener mViewListener = new OnItemClickListener() { 150146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 1519881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson @Override 1524ce500bd7d08eac3f05dfd50bce51e620fa9f08eChristian Mehlmauer public void onItemClick(AdapterView<?> parent, View view, int position, 153146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long i) { 154146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project AlertActivity alertActivity = AlertActivity.this; 155146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Cursor cursor = alertActivity.getItemForView(view); 1565c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 1579e89dca0902d13fe27fd2680cc15cbb470e40288Michael Chan // Mark this alarm as DISMISSED 1589e89dca0902d13fe27fd2680cc15cbb470e40288Michael Chan dismissAlarm(cursor.getLong(INDEX_ROW_ID)); 1599e89dca0902d13fe27fd2680cc15cbb470e40288Michael Chan 1600ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson // build an intent and task stack to start EventInfoActivity with AllInOneActivity 1610ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson // as the parent activity rooted to home. 162146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long id = cursor.getInt(AlertActivity.INDEX_EVENT_ID); 163146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long startMillis = cursor.getLong(AlertActivity.INDEX_BEGIN); 164146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long endMillis = cursor.getLong(AlertActivity.INDEX_END); 1659881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson Intent eventIntent = AlertUtils.buildEventViewIntent(AlertActivity.this, id, 1669881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson startMillis, endMillis); 1670ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson 168693ca60d79650af15ab226f7ce6958f61fb7de39Michael Chan if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) { 169693ca60d79650af15ab226f7ce6958f61fb7de39Michael Chan alertActivity.startActivity(eventIntent); 170693ca60d79650af15ab226f7ce6958f61fb7de39Michael Chan } else { 171693ca60d79650af15ab226f7ce6958f61fb7de39Michael Chan TaskStackBuilder.create(AlertActivity.this).addParentStack(EventInfoActivity.class) 172693ca60d79650af15ab226f7ce6958f61fb7de39Michael Chan .addNextIntent(eventIntent).startActivities(); 173693ca60d79650af15ab226f7ce6958f61fb7de39Michael Chan } 1745c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 175146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project alertActivity.finish(); 176146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 177146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project }; 1785c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 179146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 180146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onCreate(Bundle icicle) { 181146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onCreate(icicle); 1825c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 183146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project setContentView(R.layout.alert_activity); 184bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting setTitle(R.string.alert_title); 1855c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 186bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan mQueryHandler = new QueryHandler(this); 187146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mAdapter = new AlertAdapter(this, R.layout.alert_item); 1885c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 189146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView = (ListView) findViewById(R.id.alert_container); 190146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView.setItemsCanFocus(true); 191146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView.setAdapter(mAdapter); 192146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView.setOnItemClickListener(mViewListener); 1935c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 194146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mDismissAllButton = (Button) findViewById(R.id.dismiss_all); 1951a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa mDismissAllButton.setOnClickListener(this); 196146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 197146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Disable the buttons, since they need mCursor, which is created asynchronously 198146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mDismissAllButton.setEnabled(false); 199146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2005c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 201146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 202146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onResume() { 203146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onResume(); 2045c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 205146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // If the cursor is null, start the async handler. If it is not null just requery. 206146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (mCursor == null) { 207146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Uri uri = CalendarAlerts.CONTENT_URI_BY_INSTANCE; 208bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting mQueryHandler.startQuery(0, null, uri, PROJECTION, SELECTION, SELECTIONARG, 2098f7f1abe54f206c490d2683f80646f514d98939bMichael Chan CalendarContract.CalendarAlerts.DEFAULT_SORT_ORDER); 210146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } else { 2111a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa if (!mCursor.requery()) { 2121a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa Log.w(TAG, "Cursor#requery() failed."); 2131a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa mCursor.close(); 2141a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa mCursor = null; 2151a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa } 216146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 217146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2185c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 219146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 220146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onStop() { 221146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onStop(); 222bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting AlertService.updateAlertNotification(this); 2235c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 224146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (mCursor != null) { 225146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.deactivate(); 226146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 227146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2285c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 229146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 230146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onDestroy() { 231146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onDestroy(); 232146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (mCursor != null) { 233146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.close(); 234146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 235146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2365c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 2371a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa @Override 2381a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa public void onClick(View v) { 23942ba5efed5945b0e96735ec9ca4b388ae35b56f7Sara Ting if (v == mDismissAllButton) { 240146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project NotificationManager nm = 241146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 242ff23072c5ab5433db376db88f23554c45297db05Sara Ting nm.cancelAll(); 2435c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 244bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting dismissFiredAlarms(); 2455c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 246146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project finish(); 247146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2481a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa } 2495c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 250146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public boolean isEmpty() { 2511a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa return mCursor != null ? (mCursor.getCount() == 0) : true; 252146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2535c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 254146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public Cursor getItemForView(View view) { 2551a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa final int index = mListView.getPositionForView(view); 256146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (index < 0) { 257146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project return null; 258146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 259146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project return (Cursor) mListView.getAdapter().getItem(index); 260146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 261146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project} 262