AlertActivity.java revision 5023750d3d28d2f1f93ca8b29107d64cdd433795
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; 27146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.os.Bundle; 288f7f1abe54f206c490d2683f80646f514d98939bMichael Chanimport android.provider.CalendarContract; 29a7c0390d9c5dd4ff730de505682687fae5f5ced0RoboErikimport android.provider.CalendarContract.CalendarAlerts; 301a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawaimport android.util.Log; 31146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.view.View; 321a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawaimport android.view.View.OnClickListener; 33146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.AdapterView; 341a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawaimport android.widget.AdapterView.OnItemClickListener; 35146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.Button; 36146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Projectimport android.widget.ListView; 37146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 388f7f1abe54f206c490d2683f80646f514d98939bMichael Chanimport com.android.calendar.AsyncQueryService; 398f7f1abe54f206c490d2683f80646f514d98939bMichael Chanimport com.android.calendar.EventInfoActivity; 408f7f1abe54f206c490d2683f80646f514d98939bMichael Chanimport com.android.calendar.R; 418f7f1abe54f206c490d2683f80646f514d98939bMichael Chanimport com.android.calendar.Utils; 428f7f1abe54f206c490d2683f80646f514d98939bMichael Chan 43146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project/** 44146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * The alert panel that pops up when there is a calendar event alarm. 45146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project * This activity is started by an intent that specifies an event id. 46146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project */ 471a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawapublic class AlertActivity extends Activity implements OnClickListener { 481a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa private static final String TAG = "AlertActivity"; 495c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 505c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan private static final String[] PROJECTION = new String[] { 51146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts._ID, // 0 52146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.TITLE, // 1 53146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.EVENT_LOCATION, // 2 54146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.ALL_DAY, // 3 55146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.BEGIN, // 4 56146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.END, // 5 57146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.EVENT_ID, // 6 589881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson CalendarAlerts.CALENDAR_COLOR, // 7 59146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.RRULE, // 8 60146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.HAS_ALARM, // 9 61146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.STATE, // 10 62146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project CalendarAlerts.ALARM_TIME, // 11 63146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project }; 645c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 655c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan public static final int INDEX_ROW_ID = 0; 66146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_TITLE = 1; 67146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_EVENT_LOCATION = 2; 68146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_ALL_DAY = 3; 69146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_BEGIN = 4; 70146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_END = 5; 71146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_EVENT_ID = 6; 72146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_COLOR = 7; 73146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_RRULE = 8; 74146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_HAS_ALARM = 9; 75146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_STATE = 10; 76146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public static final int INDEX_ALARM_TIME = 11; 775c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 78bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting private static final String SELECTION = CalendarAlerts.STATE + "=?"; 79bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting private static final String[] SELECTIONARG = new String[] { 80bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting Integer.toString(CalendarAlerts.STATE_FIRED) 81bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting }; 82e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan 83146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private AlertAdapter mAdapter; 84146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private QueryHandler mQueryHandler; 85146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private Cursor mCursor; 86146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private ListView mListView; 87146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project private Button mDismissAllButton; 885c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 895c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 90bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting private void dismissFiredAlarms() { 915c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan ContentValues values = new ContentValues(1 /* size */); 92fa292a0db2a6f04255c75a57908b17ba48a96183RoboErik values.put(PROJECTION[INDEX_STATE], CalendarAlerts.STATE_DISMISSED); 93bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting String selection = CalendarAlerts.STATE + "=" + CalendarAlerts.STATE_FIRED; 945c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan mQueryHandler.startUpdate(0, null, CalendarAlerts.CONTENT_URI, values, 95bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan selection, null /* selectionArgs */, Utils.UNDO_DELAY); 965c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 975c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 985c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan private void dismissAlarm(long id) { 995c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan ContentValues values = new ContentValues(1 /* size */); 100fa292a0db2a6f04255c75a57908b17ba48a96183RoboErik values.put(PROJECTION[INDEX_STATE], CalendarAlerts.STATE_DISMISSED); 1015c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan String selection = CalendarAlerts._ID + "=" + id; 1025c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan mQueryHandler.startUpdate(0, null, CalendarAlerts.CONTENT_URI, values, 103bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan selection, null /* selectionArgs */, Utils.UNDO_DELAY); 1045c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 1055c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 106bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan private class QueryHandler extends AsyncQueryService { 107bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan public QueryHandler(Context context) { 108bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan super(context); 109146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 110146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 111146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 112146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onQueryComplete(int token, Object cookie, Cursor cursor) { 113146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Only set mCursor if the Activity is not finishing. Otherwise close the cursor. 114146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (!isFinishing()) { 115146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor = cursor; 116146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mAdapter.changeCursor(cursor); 11710d9f11fec9cb578185e4455eeaef289c0dff8b9Michael Chan mListView.setSelection(cursor.getCount() - 1); 1185c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 119146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // The results are in, enable the buttons 120146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mDismissAllButton.setEnabled(true); 121146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } else { 122146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project cursor.close(); 123146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 124146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 1255c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 1265c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan @Override 1275c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan protected void onInsertComplete(int token, Object cookie, Uri uri) { 1285c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan if (uri != null) { 129e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan Long alarmTime = (Long) cookie; 130e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan 131e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan if (alarmTime != 0) { 132e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan // Set a new alarm to go off after the snooze delay. 133fa292a0db2a6f04255c75a57908b17ba48a96183RoboErik // TODO make provider schedule this automatically when 134fa292a0db2a6f04255c75a57908b17ba48a96183RoboErik // inserting an alarm 1359881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson AlertUtils.scheduleAlarm(AlertActivity.this, null, alarmTime); 136e2ae1ef8decfddcc4e5802483e92cab93c6fc67cMichael Chan } 1375c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 1385c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 1395c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 1405c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan @Override 1415c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan protected void onUpdateComplete(int token, Object cookie, int result) { 1425c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan // Ignore 1435c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 1445c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan } 1455c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 1460ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson private final OnItemClickListener mViewListener = new OnItemClickListener() { 147146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 1489881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson @Override 1494ce500bd7d08eac3f05dfd50bce51e620fa9f08eChristian Mehlmauer public void onItemClick(AdapterView<?> parent, View view, int position, 150146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long i) { 151146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project AlertActivity alertActivity = AlertActivity.this; 152146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Cursor cursor = alertActivity.getItemForView(view); 1535c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 1549e89dca0902d13fe27fd2680cc15cbb470e40288Michael Chan // Mark this alarm as DISMISSED 1559e89dca0902d13fe27fd2680cc15cbb470e40288Michael Chan dismissAlarm(cursor.getLong(INDEX_ROW_ID)); 1569e89dca0902d13fe27fd2680cc15cbb470e40288Michael Chan 1570ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson // build an intent and task stack to start EventInfoActivity with AllInOneActivity 1580ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson // as the parent activity rooted to home. 159146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long id = cursor.getInt(AlertActivity.INDEX_EVENT_ID); 160146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long startMillis = cursor.getLong(AlertActivity.INDEX_BEGIN); 161146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project long endMillis = cursor.getLong(AlertActivity.INDEX_END); 1629881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson Intent eventIntent = AlertUtils.buildEventViewIntent(AlertActivity.this, id, 1639881907c47b2658fa85954bfb339c4b1eab9fc8eIsaac Katzenelson startMillis, endMillis); 1640ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson 165fac2d1594f7ecae8e50dc7790ce67de0c9b70d22Sara Ting if (Utils.isJellybeanOrLater()) { 166693ca60d79650af15ab226f7ce6958f61fb7de39Michael Chan TaskStackBuilder.create(AlertActivity.this).addParentStack(EventInfoActivity.class) 167693ca60d79650af15ab226f7ce6958f61fb7de39Michael Chan .addNextIntent(eventIntent).startActivities(); 168fac2d1594f7ecae8e50dc7790ce67de0c9b70d22Sara Ting } else { 169fac2d1594f7ecae8e50dc7790ce67de0c9b70d22Sara Ting alertActivity.startActivity(eventIntent); 170693ca60d79650af15ab226f7ce6958f61fb7de39Michael Chan } 1715c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 172146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project alertActivity.finish(); 173146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 174146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project }; 1755c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 176146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 177146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onCreate(Bundle icicle) { 178146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onCreate(icicle); 1795c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 180146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project setContentView(R.layout.alert_activity); 181bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting setTitle(R.string.alert_title); 1825c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 183bed0275111ecc6c4a3a638f90a9bac13bee594f4Michael Chan mQueryHandler = new QueryHandler(this); 184146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mAdapter = new AlertAdapter(this, R.layout.alert_item); 1855c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 186146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView = (ListView) findViewById(R.id.alert_container); 187146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView.setItemsCanFocus(true); 188146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView.setAdapter(mAdapter); 189146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mListView.setOnItemClickListener(mViewListener); 1905c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 191146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mDismissAllButton = (Button) findViewById(R.id.dismiss_all); 1921a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa mDismissAllButton.setOnClickListener(this); 193146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project 194146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // Disable the buttons, since they need mCursor, which is created asynchronously 195146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mDismissAllButton.setEnabled(false); 196146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 1975c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 198146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 199146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onResume() { 200146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onResume(); 2015c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 202146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project // If the cursor is null, start the async handler. If it is not null just requery. 203146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (mCursor == null) { 204146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project Uri uri = CalendarAlerts.CONTENT_URI_BY_INSTANCE; 205bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting mQueryHandler.startQuery(0, null, uri, PROJECTION, SELECTION, SELECTIONARG, 2068f7f1abe54f206c490d2683f80646f514d98939bMichael Chan CalendarContract.CalendarAlerts.DEFAULT_SORT_ORDER); 207146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } else { 2081a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa if (!mCursor.requery()) { 2091a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa Log.w(TAG, "Cursor#requery() failed."); 2101a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa mCursor.close(); 2111a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa mCursor = null; 2121a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa } 213146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 214c9129804f2ee152559f08eac83d953e9c88d4036Sara Ting } 215c9129804f2ee152559f08eac83d953e9c88d4036Sara Ting 216c9129804f2ee152559f08eac83d953e9c88d4036Sara Ting void closeActivityIfEmpty() { 2175023750d3d28d2f1f93ca8b29107d64cdd433795Sara Ting if (mCursor != null && !mCursor.isClosed() && mCursor.getCount() == 0) { 218c9129804f2ee152559f08eac83d953e9c88d4036Sara Ting AlertActivity.this.finish(); 219c9129804f2ee152559f08eac83d953e9c88d4036Sara Ting } 220146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2215c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 222146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 223146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onStop() { 224146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onStop(); 225bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting AlertService.updateAlertNotification(this); 2265c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 227146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (mCursor != null) { 228146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.deactivate(); 229146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 230146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2315c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 232146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project @Override 233146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project protected void onDestroy() { 234146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project super.onDestroy(); 235146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (mCursor != null) { 236146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project mCursor.close(); 237146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 238146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2395c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 2401a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa @Override 2411a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa public void onClick(View v) { 24242ba5efed5945b0e96735ec9ca4b388ae35b56f7Sara Ting if (v == mDismissAllButton) { 243146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project NotificationManager nm = 244146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 245ff23072c5ab5433db376db88f23554c45297db05Sara Ting nm.cancelAll(); 2465c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 247bb57710243ba4ac813b1795d9dbbdb90d40d1f6fSara Ting dismissFiredAlarms(); 2485c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 249146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project finish(); 250146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2511a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa } 2525c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 253146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public boolean isEmpty() { 2541a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa return mCursor != null ? (mCursor.getCount() == 0) : true; 255146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 2565c7290c760979b1a43acfb6d90d6216d0e0a0934Michael Chan 257146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project public Cursor getItemForView(View view) { 2581a7fa28f2ac6bd293bb4009d22f3f1426e7658c3Daisuke Miyakawa final int index = mListView.getPositionForView(view); 259146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project if (index < 0) { 260146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project return null; 261146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 262146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project return (Cursor) mListView.getAdapter().getItem(index); 263146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project } 264146de36083f6ce8b7e8a1f974d3990594a36bfecThe Android Open Source Project} 265