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