HandleApiCalls.java revision 8188813bc869d3df4885f9c2972f9cc85745b59b
1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.deskclock;
18
19import static android.provider.AlarmClock.ACTION_SET_ALARM;
20import static android.provider.AlarmClock.ACTION_SET_TIMER;
21import static android.provider.AlarmClock.EXTRA_HOUR;
22import static android.provider.AlarmClock.EXTRA_MESSAGE;
23import static android.provider.AlarmClock.EXTRA_MINUTES;
24import static android.provider.AlarmClock.EXTRA_SKIP_UI;
25
26import android.app.Activity;
27import android.content.ContentResolver;
28import android.content.ContentValues;
29import android.content.Intent;
30import android.net.Uri;
31import android.os.Bundle;
32
33import com.android.deskclock.provider.Alarm;
34import com.android.deskclock.provider.DaysOfWeek;
35
36import java.util.Calendar;
37import java.util.List;
38
39public class HandleApiCalls extends Activity {
40    @Override
41    protected void onCreate(Bundle icicle) {
42        try {
43            super.onCreate(icicle);
44            Intent intent = getIntent();
45            if (intent != null) {
46                if (ACTION_SET_ALARM.equals(intent.getAction())) {
47                    handleSetAlarm(intent);
48                } else if (ACTION_SET_TIMER.equals(intent.getAction())) {
49                    handleSetTimer(intent);
50                }
51            }
52        } finally {
53            finish();
54        }
55    }
56
57    /***
58     * Processes the SET_ALARM intent
59     * @param intent
60     */
61    private void handleSetAlarm(Intent intent) {
62
63        // Intent has no time , open the alarm creation UI
64        if (!intent.hasExtra(EXTRA_HOUR)) {
65            Intent createAlarm = new Intent(this, DeskClock.class);
66            createAlarm.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
67            createAlarm.putExtra(Alarms.ALARM_CREATE_NEW, true);
68            createAlarm.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX);
69
70            startActivity(createAlarm);
71            finish();
72            return;
73        }
74
75        final Calendar calendar = Calendar.getInstance();
76        calendar.setTimeInMillis(System.currentTimeMillis());
77        final int hour = intent.getIntExtra(EXTRA_HOUR, calendar.get(Calendar.HOUR_OF_DAY));
78        final int minutes = intent.getIntExtra(EXTRA_MINUTES, calendar.get(Calendar.MINUTE));
79        final boolean skipUi = intent.getBooleanExtra(EXTRA_SKIP_UI, false);
80        String message = intent.getStringExtra(EXTRA_MESSAGE);
81        if (message == null) {
82            message = "";
83        }
84
85        // Check if the alarm already exists and handle it
86        ContentResolver cr = getContentResolver();
87        List<Alarm> alarms = Alarm.getAlarms(cr,
88                Alarm.HOUR + "=" + hour + " AND " +
89                Alarm.MINUTES + "=" + minutes + " AND " +
90                Alarm.DAYS_OF_WEEK + "=" + DaysOfWeek.NO_DAYS_SET + " AND " +
91                Alarm.MESSAGE + "=?",
92                new String[] { message });
93        if (!alarms.isEmpty()) {
94            enableAlarm(alarms.get(0), true, skipUi);
95            finish();
96            return;
97        }
98
99        // Otherwise insert it and handle it
100        Alarm alarm = new Alarm(hour, minutes);
101        alarm.enabled = true;
102        alarm.label = message;
103
104        Uri result = cr.insert(Alarm.CONTENT_URI, Alarm.createContentValues(alarm));
105        enableAlarm(Alarm.getAlarm(cr, Alarm.getId(result)), false, skipUi);
106        finish();
107    }
108
109    private void handleSetTimer(Intent intent) {
110
111    }
112
113    private void enableAlarm(Alarm alarm, boolean enable, boolean skipUi) {
114        if (enable) {
115            Alarms.enableAlarm(this, alarm.id, true);
116            alarm.enabled = true;
117        }
118        AlarmUtils.popAlarmSetToast(this, alarm.calculateAlarmTime());
119        if (skipUi) {
120            Alarms.setAlarm(this, alarm);
121        } else {
122            Intent createAlarm = new Intent(this, DeskClock.class);
123            createAlarm.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
124            createAlarm.putExtra(Alarms.ALARM_INTENT_EXTRA, alarm);
125            createAlarm.putExtra(DeskClock.SELECT_TAB_INTENT_EXTRA, DeskClock.ALARM_TAB_INDEX);
126            createAlarm.putExtra(Alarms.ALARM_INTENT_EXTRA, alarm);
127            startActivity(createAlarm);
128        }
129    }
130}
131