blob: 69ef89ecc413abf8e3a75b10f206d66dfc045cac [file] [log] [blame]
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.deskclock;
import static android.provider.AlarmClock.ACTION_SET_ALARM;
import static android.provider.AlarmClock.EXTRA_HOUR;
import static android.provider.AlarmClock.EXTRA_MESSAGE;
import static android.provider.AlarmClock.EXTRA_MINUTES;
import static android.provider.AlarmClock.EXTRA_SKIP_UI;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import java.util.Calendar;
public class HandleSetAlarm extends Activity {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
Intent intent = getIntent();
if (intent == null || !ACTION_SET_ALARM.equals(intent.getAction())) {
finish();
return;
} else if (!intent.hasExtra(EXTRA_HOUR)) {
startActivity(new Intent(this, AlarmClock.class));
finish();
return;
}
final Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
final int hour = intent.getIntExtra(EXTRA_HOUR,
calendar.get(Calendar.HOUR_OF_DAY));
final int minutes = intent.getIntExtra(EXTRA_MINUTES,
calendar.get(Calendar.MINUTE));
final boolean skipUi = intent.getBooleanExtra(EXTRA_SKIP_UI, false);
String message = intent.getStringExtra(EXTRA_MESSAGE);
if (message == null) {
message = "";
}
Cursor c = null;
long timeInMillis = Alarms.calculateAlarm(hour, minutes,
new Alarm.DaysOfWeek(0)).getTimeInMillis();
try {
c = getContentResolver().query(
Alarm.Columns.CONTENT_URI,
Alarm.Columns.ALARM_QUERY_COLUMNS,
Alarm.Columns.HOUR + "=" + hour + " AND " +
Alarm.Columns.MINUTES + "=" + minutes + " AND " +
Alarm.Columns.DAYS_OF_WEEK + "=0 AND " +
Alarm.Columns.MESSAGE + "=?",
new String[] { message }, null);
if (handleCursorResult(c, timeInMillis, true, skipUi)) {
finish();
return;
}
} finally {
if (c != null) c.close();
// Reset for use below.
c = null;
}
ContentValues values = new ContentValues();
values.put(Alarm.Columns.HOUR, hour);
values.put(Alarm.Columns.MINUTES, minutes);
values.put(Alarm.Columns.MESSAGE, message);
values.put(Alarm.Columns.ENABLED, 1);
values.put(Alarm.Columns.VIBRATE, 1);
values.put(Alarm.Columns.DAYS_OF_WEEK, 0);
values.put(Alarm.Columns.ALARM_TIME, timeInMillis);
ContentResolver cr = getContentResolver();
Uri result = cr.insert(Alarm.Columns.CONTENT_URI, values);
if (result != null) {
try {
c = cr.query(result, Alarm.Columns.ALARM_QUERY_COLUMNS, null,
null, null);
handleCursorResult(c, timeInMillis, false, skipUi);
} finally {
if (c != null) c.close();
}
}
finish();
}
private boolean handleCursorResult(Cursor c, long timeInMillis,
boolean enable, boolean skipUi) {
if (c != null && c.moveToFirst()) {
Alarm alarm = new Alarm(c);
if (enable) {
Alarms.enableAlarm(this, alarm.id, true);
alarm.enabled = true;
}
AlarmUtils.popAlarmSetToast(this, timeInMillis);
if (skipUi) {
Alarms.setAlarm(this, alarm);
} else {
Intent i = new Intent(this, AlarmClock.class);
i.putExtra(Alarms.ALARM_INTENT_EXTRA, alarm);
startActivity(i);
}
return true;
}
return false;
}
}