SetAlarm.java revision 7495b0046811971ecb0933888d7eafb4c9668ed2
15fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project/* 25fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 35fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * 45fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 55fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * you may not use this file except in compliance with the License. 65fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * You may obtain a copy of the License at 75fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * 85fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 95fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * 105fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 115fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 125fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * See the License for the specific language governing permissions and 145fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * limitations under the License. 155fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project */ 165fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 175fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectpackage com.android.alarmclock; 185fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 195fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.app.TimePickerDialog; 205fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.content.Context; 215fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.content.Intent; 225fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.media.RingtoneManager; 235fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.net.Uri; 245fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.os.Bundle; 25185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Projectimport android.preference.CheckBoxPreference; 26185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Projectimport android.preference.EditTextPreference; 275fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.preference.Preference; 285fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.preference.PreferenceActivity; 295fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.preference.PreferenceScreen; 305fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.text.format.DateFormat; 31b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scottimport android.view.LayoutInflater; 325fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.view.Menu; 335fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.view.MenuItem; 34b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scottimport android.view.View; 35b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scottimport android.view.ViewGroup.LayoutParams; 36b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scottimport android.widget.Button; 37b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scottimport android.widget.FrameLayout; 38b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scottimport android.widget.LinearLayout; 39b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scottimport android.widget.ListView; 405fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.widget.TimePicker; 415fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectimport android.widget.Toast; 425fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 435fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project/** 445fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * Manages each alarm 455fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project */ 465fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Projectpublic class SetAlarm extends PreferenceActivity 47d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott implements TimePickerDialog.OnTimeSetListener { 485fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 49185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project private EditTextPreference mLabel; 505fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private Preference mTimePref; 515fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private AlarmPreference mAlarmPref; 525fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private CheckBoxPreference mVibratePref; 535fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private RepeatPreference mRepeatPref; 545fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private MenuItem mDeleteAlarmItem; 555fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private MenuItem mTestAlarmItem; 565fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 577495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott private int mId; 587495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott private boolean mEnabled; 597495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott private int mHour; 607495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott private int mMinutes; 615fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 625fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project /** 63d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott * Set an alarm. Requires an Alarms.ALARM_ID to be passed in as an 64d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott * extra. FIXME: Pass an Alarm object like every other Activity. 655fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project */ 665fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project @Override 675fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project protected void onCreate(Bundle icicle) { 685fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project super.onCreate(icicle); 695fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 705fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project addPreferencesFromResource(R.xml.alarm_prefs); 71b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott 72b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // Get each preference so we can retrieve the value later. 73185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project mLabel = (EditTextPreference) findPreference("label"); 74185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project mLabel.setOnPreferenceChangeListener( 75185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project new Preference.OnPreferenceChangeListener() { 76185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project public boolean onPreferenceChange(Preference p, 77185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project Object newValue) { 78b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // Set the summary based on the new label. 79185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project p.setSummary((String) newValue); 80185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project return true; 81185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project } 82185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project }); 835fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project mTimePref = findPreference("time"); 845fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project mAlarmPref = (AlarmPreference) findPreference("alarm"); 855fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project mVibratePref = (CheckBoxPreference) findPreference("vibrate"); 865fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project mRepeatPref = (RepeatPreference) findPreference("setRepeat"); 875fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 885fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project Intent i = getIntent(); 89d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott mId = i.getIntExtra(Alarms.ALARM_ID, -1); 90b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott if (Log.LOGV) { 91b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott Log.v("In SetAlarm, alarm id = " + mId); 92b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott } 935fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 945fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project /* load alarm details from database */ 95d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott Alarm alarm = Alarms.getAlarm(getContentResolver(), mId); 967495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott mEnabled = alarm.enabled; 97d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott mLabel.setText(alarm.label); 98d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott mLabel.setSummary(alarm.label); 99d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott mHour = alarm.hour; 100d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott mMinutes = alarm.minutes; 101d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott mRepeatPref.setDaysOfWeek(alarm.daysOfWeek); 102d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott mVibratePref.setChecked(alarm.vibrate); 103d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott // Give the alert uri to the preference. 104d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott mAlarmPref.setAlert(alarm.alert); 105d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott updateTime(); 1065fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 107b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // We have to do this to get the save/cancel buttons to highlight on 108b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // their own. 109b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott getListView().setItemsCanFocus(true); 110b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott 111b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // Grab the content view so we can modify it. 112b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott FrameLayout content = (FrameLayout) getWindow().getDecorView() 113b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott .findViewById(com.android.internal.R.id.content); 114b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott 115b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // Get the main ListView and remove it from the content view. 116b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott ListView lv = getListView(); 117b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott content.removeView(lv); 118b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott 119b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // Create the new LinearLayout that will become the content view and 120b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // make it vertical. 121b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott LinearLayout ll = new LinearLayout(this); 122b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott ll.setOrientation(LinearLayout.VERTICAL); 123b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott 124b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // Have the ListView expand to fill the screen minus the save/cancel 125b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // buttons. 126b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( 127b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott LayoutParams.FILL_PARENT, 128b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott LayoutParams.WRAP_CONTENT); 129b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott lp.weight = 1; 130b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott ll.addView(lv, lp); 131b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott 132b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // Inflate the buttons onto the LinearLayout. 133b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott View v = LayoutInflater.from(this).inflate( 134b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott R.layout.save_cancel_alarm, ll); 135b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott 136b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // Attach actions to each button. 137b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott Button b = (Button) v.findViewById(R.id.alarm_save); 138b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott b.setOnClickListener(new View.OnClickListener() { 139b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott public void onClick(View v) { 140b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott saveAlarm(); 141b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott finish(); 142b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott } 143b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott }); 144b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott b = (Button) v.findViewById(R.id.alarm_cancel); 145b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott b.setOnClickListener(new View.OnClickListener() { 146b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott public void onClick(View v) { 147b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott finish(); 148b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott } 149b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott }); 150b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott 151b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott // Replace the old content view with our new one. 152b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott setContentView(ll); 1535fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1545fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 1555fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project @Override 156b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, 157b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott Preference preference) { 1585fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (preference == mTimePref) { 159b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott new TimePickerDialog(this, this, mHour, mMinutes, 160b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott DateFormat.is24HourFormat(this)).show(); 1615fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1625fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 1635fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return super.onPreferenceTreeClick(preferenceScreen, preference); 1645fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1655fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 1667495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott @Override 1677495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott public void onBackPressed() { 1687495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott saveAlarm(); 1697495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott finish(); 1707495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott } 1717495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott 1725fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 1735fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project mHour = hourOfDay; 1745fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project mMinutes = minute; 175b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott updateTime(); 1767495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott // If the time has been changed, enable the alarm. 1777495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott mEnabled = true; 1785fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1795fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 1805fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private void updateTime() { 181b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott if (Log.LOGV) { 182b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott Log.v("updateTime " + mId); 1835fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 184b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott mTimePref.setSummary(Alarms.formatTime(this, mHour, mMinutes, 185b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott mRepeatPref.getDaysOfWeek())); 1865fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1875fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 188b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott private void saveAlarm() { 189b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott final String alert = mAlarmPref.getAlertString(); 1907495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott Alarms.setAlarm(this, mId, mEnabled, mHour, mMinutes, 191b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott mRepeatPref.getDaysOfWeek(), mVibratePref.isChecked(), 192b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott mLabel.getText(), alert); 193185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project 1947495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott if (mEnabled) { 1957495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott popAlarmSetToast(this, mHour, mMinutes, 1967495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott mRepeatPref.getDaysOfWeek()); 1977495b0046811971ecb0933888d7eafb4c9668ed2Patrick Scott } 1985fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 1995fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2005fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project /** 2015fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * Write alarm out to persistent store and pops toast if alarm 2025fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * enabled 2035fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project */ 2045fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project private static void saveAlarm( 2055fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project Context context, int id, boolean enabled, int hour, int minute, 206d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott Alarm.DaysOfWeek daysOfWeek, boolean vibrate, String label, 207185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project String alert, boolean popToast) { 208185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project if (Log.LOGV) Log.v("** saveAlarm " + id + " " + label + " " + enabled 209185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project + " " + hour + " " + minute + " vibe " + vibrate); 2105fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2115fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project // Fix alert string first 2125fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project Alarms.setAlarm(context, id, enabled, hour, minute, daysOfWeek, vibrate, 213185d17974729a98cf48a71ab9f16adaab9d1e1e0The Android Open Source Project label, alert); 2145fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2155fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (enabled && popToast) { 2165fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project popAlarmSetToast(context, hour, minute, daysOfWeek); 2175fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 2185fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 2195fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2205fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project /** 2215fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * Display a toast that tells the user how long until the alarm 2225fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * goes off. This helps prevent "am/pm" mistakes. 2235fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project */ 2245fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project static void popAlarmSetToast(Context context, int hour, int minute, 225d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott Alarm.DaysOfWeek daysOfWeek) { 2265fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2275fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project String toastText = formatToast(context, hour, minute, daysOfWeek); 2285fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project Toast toast = Toast.makeText(context, toastText, Toast.LENGTH_LONG); 2295fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project ToastMaster.setToast(toast); 2305fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project toast.show(); 2315fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 2325fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2335fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project /** 2345fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * format "Alarm set for 2 days 7 hours and 53 minutes from 2355fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * now" 2365fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project */ 2375fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project static String formatToast(Context context, int hour, int minute, 238d776e51cec79901a0d656bba7b1f3780cceac57dPatrick Scott Alarm.DaysOfWeek daysOfWeek) { 2395fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project long alarm = Alarms.calculateAlarm(hour, minute, 2405fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project daysOfWeek).getTimeInMillis(); 2415fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project long delta = alarm - System.currentTimeMillis();; 2425fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project long hours = delta / (1000 * 60 * 60); 2435fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project long minutes = delta / (1000 * 60) % 60; 2445fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project long days = hours / 24; 2455fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project hours = hours % 24; 2465fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2475fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project String daySeq = (days == 0) ? "" : 2485fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project (days == 1) ? context.getString(R.string.day) : 2495fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project context.getString(R.string.days, Long.toString(days)); 2505fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2515fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project String minSeq = (minutes == 0) ? "" : 2525fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project (minutes == 1) ? context.getString(R.string.minute) : 2535fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project context.getString(R.string.minutes, Long.toString(minutes)); 2545fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2555fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project String hourSeq = (hours == 0) ? "" : 2565fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project (hours == 1) ? context.getString(R.string.hour) : 2575fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project context.getString(R.string.hours, Long.toString(hours)); 2585fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2595fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project boolean dispDays = days > 0; 2605fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project boolean dispHour = hours > 0; 2615fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project boolean dispMinute = minutes > 0; 2625fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2631bc128fd4266656ebc7e8abc6bf22652f6a6134aEric Fischer int index = (dispDays ? 1 : 0) | 2641bc128fd4266656ebc7e8abc6bf22652f6a6134aEric Fischer (dispHour ? 2 : 0) | 2651bc128fd4266656ebc7e8abc6bf22652f6a6134aEric Fischer (dispMinute ? 4 : 0); 2665fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2671bc128fd4266656ebc7e8abc6bf22652f6a6134aEric Fischer String[] formats = context.getResources().getStringArray(R.array.alarm_set); 2681bc128fd4266656ebc7e8abc6bf22652f6a6134aEric Fischer return String.format(formats[index], daySeq, hourSeq, minSeq); 2695fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 2705fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2715fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project public boolean onCreateOptionsMenu(Menu menu) { 2725fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project super.onCreateOptionsMenu(menu); 2735fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2745fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project mDeleteAlarmItem = menu.add(0, 0, 0, R.string.delete_alarm); 2755fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project mDeleteAlarmItem.setIcon(android.R.drawable.ic_menu_delete); 2765fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2775fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (AlarmClock.DEBUG) { 2785fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project mTestAlarmItem = menu.add(0, 0, 0, "test alarm"); 2795fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 2805fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2815fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return true; 2825fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 2835fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2845fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project public boolean onOptionsItemSelected(MenuItem item) { 2855fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (item == mDeleteAlarmItem) { 2865fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project Alarms.deleteAlarm(this, mId); 2875fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project finish(); 2885fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return true; 2895fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 2905fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (AlarmClock.DEBUG) { 2915fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project if (item == mTestAlarmItem) { 2925fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project setTestAlarm(); 2935fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return true; 2945fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 2955fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 2965fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 2975fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project return false; 2985fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 2995fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 3005fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 3015fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project /** 3025fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * Test code: this is disabled for production build. Sets 3035fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project * this alarm to go off on the next minute 3045fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project */ 3055fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project void setTestAlarm() { 3065fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 3075fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project // start with now 3085fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project java.util.Calendar c = java.util.Calendar.getInstance(); 3095fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project c.setTimeInMillis(System.currentTimeMillis()); 3105fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 3115fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project int nowHour = c.get(java.util.Calendar.HOUR_OF_DAY); 3125fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project int nowMinute = c.get(java.util.Calendar.MINUTE); 3135fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 3145fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project int minutes = (nowMinute + 1) % 60; 315b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott int hour = nowHour + (nowMinute == 0 ? 1 : 0); 3165fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 317b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott saveAlarm(this, mId, true, hour, minutes, mRepeatPref.getDaysOfWeek(), 318b83db52b375a9a28347cacff3a8e8b1ebabe3b46Patrick Scott true, mLabel.getText(), mAlarmPref.getAlertString(), true); 3195fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project } 3205fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project 3215fedae0fb8cc29db88719329d52bdd62aad14277The Android Open Source Project} 322