16c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott/* 26c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * Copyright (C) 2010 The Android Open Source Project 36c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * 46c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * Licensed under the Apache License, Version 2.0 (the "License"); 56c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * you may not use this file except in compliance with the License. 66c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * You may obtain a copy of the License at 76c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * 86c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * http://www.apache.org/licenses/LICENSE-2.0 96c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * 106c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * Unless required by applicable law or agreed to in writing, software 116c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * distributed under the License is distributed on an "AS IS" BASIS, 126c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * See the License for the specific language governing permissions and 146c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott * limitations under the License. 156c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott */ 166c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott 176c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scottpackage com.android.deskclock; 186c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott 195c3795c271bc6160f0ae2056627e9e96ffdc335cChiao Chengimport static android.provider.AlarmClock.ACTION_SET_ALARM; 205c3795c271bc6160f0ae2056627e9e96ffdc335cChiao Chengimport static android.provider.AlarmClock.EXTRA_HOUR; 215c3795c271bc6160f0ae2056627e9e96ffdc335cChiao Chengimport static android.provider.AlarmClock.EXTRA_MESSAGE; 225c3795c271bc6160f0ae2056627e9e96ffdc335cChiao Chengimport static android.provider.AlarmClock.EXTRA_MINUTES; 235c3795c271bc6160f0ae2056627e9e96ffdc335cChiao Chengimport static android.provider.AlarmClock.EXTRA_SKIP_UI; 245c3795c271bc6160f0ae2056627e9e96ffdc335cChiao Cheng 256c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scottimport android.app.Activity; 2677f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scottimport android.content.ContentResolver; 276c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scottimport android.content.ContentValues; 286c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scottimport android.content.Intent; 296c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scottimport android.database.Cursor; 3077f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scottimport android.net.Uri; 316c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scottimport android.os.Bundle; 326c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott 336c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scottimport java.util.Calendar; 346c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott 356c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scottpublic class HandleSetAlarm extends Activity { 366c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott 376c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott @Override 386c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott protected void onCreate(Bundle icicle) { 396c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott super.onCreate(icicle); 406c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott Intent intent = getIntent(); 416c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott if (intent == null || !ACTION_SET_ALARM.equals(intent.getAction())) { 426c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott finish(); 436c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott return; 445ad9026a54e8d025154ac644c6d938b1ff118ef1Patrick Scott } else if (!intent.hasExtra(EXTRA_HOUR)) { 455ad9026a54e8d025154ac644c6d938b1ff118ef1Patrick Scott startActivity(new Intent(this, AlarmClock.class)); 465ad9026a54e8d025154ac644c6d938b1ff118ef1Patrick Scott finish(); 475ad9026a54e8d025154ac644c6d938b1ff118ef1Patrick Scott return; 486c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott } 496c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott 506c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott final Calendar calendar = Calendar.getInstance(); 516c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott calendar.setTimeInMillis(System.currentTimeMillis()); 526c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott final int hour = intent.getIntExtra(EXTRA_HOUR, 536c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott calendar.get(Calendar.HOUR_OF_DAY)); 546c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott final int minutes = intent.getIntExtra(EXTRA_MINUTES, 556c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott calendar.get(Calendar.MINUTE)); 5677f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott final boolean skipUi = intent.getBooleanExtra(EXTRA_SKIP_UI, false); 576c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott String message = intent.getStringExtra(EXTRA_MESSAGE); 586c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott if (message == null) { 596c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott message = ""; 606c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott } 616c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott 626c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott Cursor c = null; 635ad9026a54e8d025154ac644c6d938b1ff118ef1Patrick Scott long timeInMillis = Alarms.calculateAlarm(hour, minutes, 645ad9026a54e8d025154ac644c6d938b1ff118ef1Patrick Scott new Alarm.DaysOfWeek(0)).getTimeInMillis(); 656c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott try { 666c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott c = getContentResolver().query( 676c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott Alarm.Columns.CONTENT_URI, 6877f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott Alarm.Columns.ALARM_QUERY_COLUMNS, 696c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott Alarm.Columns.HOUR + "=" + hour + " AND " + 706c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott Alarm.Columns.MINUTES + "=" + minutes + " AND " + 715ad9026a54e8d025154ac644c6d938b1ff118ef1Patrick Scott Alarm.Columns.DAYS_OF_WEEK + "=0 AND " + 726c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott Alarm.Columns.MESSAGE + "=?", 736c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott new String[] { message }, null); 7477f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott if (handleCursorResult(c, timeInMillis, true, skipUi)) { 756c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott finish(); 766c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott return; 776c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott } 786c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott } finally { 796c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott if (c != null) c.close(); 8077f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott // Reset for use below. 8177f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott c = null; 826c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott } 836c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott 846c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott ContentValues values = new ContentValues(); 856c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott values.put(Alarm.Columns.HOUR, hour); 866c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott values.put(Alarm.Columns.MINUTES, minutes); 876c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott values.put(Alarm.Columns.MESSAGE, message); 886c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott values.put(Alarm.Columns.ENABLED, 1); 896c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott values.put(Alarm.Columns.VIBRATE, 1); 905ad9026a54e8d025154ac644c6d938b1ff118ef1Patrick Scott values.put(Alarm.Columns.DAYS_OF_WEEK, 0); 915ad9026a54e8d025154ac644c6d938b1ff118ef1Patrick Scott values.put(Alarm.Columns.ALARM_TIME, timeInMillis); 926c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott 9377f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott ContentResolver cr = getContentResolver(); 9477f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott Uri result = cr.insert(Alarm.Columns.CONTENT_URI, values); 9577f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott if (result != null) { 9677f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott try { 9777f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott c = cr.query(result, Alarm.Columns.ALARM_QUERY_COLUMNS, null, 9877f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott null, null); 9977f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott handleCursorResult(c, timeInMillis, false, skipUi); 10077f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott } finally { 10177f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott if (c != null) c.close(); 10277f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott } 1036c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott } 1046c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott 1056c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott finish(); 1066c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott } 10777f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott 10877f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott private boolean handleCursorResult(Cursor c, long timeInMillis, 10977f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott boolean enable, boolean skipUi) { 11077f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott if (c != null && c.moveToFirst()) { 11177f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott Alarm alarm = new Alarm(c); 11277f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott if (enable) { 11377f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott Alarms.enableAlarm(this, alarm.id, true); 1142db6ebed67b2a97d76131077ceee954c1791aca0Steve Levis alarm.enabled = true; 11577f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott } 1165c3795c271bc6160f0ae2056627e9e96ffdc335cChiao Cheng AlarmUtils.popAlarmSetToast(this, timeInMillis); 117988154b1fda3d53c0d791d30be677c0a77edb170Steve Levis if (skipUi) { 118988154b1fda3d53c0d791d30be677c0a77edb170Steve Levis Alarms.setAlarm(this, alarm); 119988154b1fda3d53c0d791d30be677c0a77edb170Steve Levis } else { 120dcc0d52bd1ca7529af407b767187d0126f96af65Isaac Katzenelson Intent i = new Intent(this, AlarmClock.class); 12177f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott i.putExtra(Alarms.ALARM_INTENT_EXTRA, alarm); 12277f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott startActivity(i); 12377f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott } 12477f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott return true; 12577f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott } 12677f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott return false; 12777f14bd0ce48db935911da5d0a92b6348e6197fbPatrick Scott } 1286c528aa07db1642c8aa9720c2d509a78e832adc4Patrick Scott} 129