diff options
Diffstat (limited to 'src/com/android/deskclock/SetAlarm.java')
-rw-r--r-- | src/com/android/deskclock/SetAlarm.java | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/com/android/deskclock/SetAlarm.java b/src/com/android/deskclock/SetAlarm.java index ebe6e5054..db0ced7e7 100644 --- a/src/com/android/deskclock/SetAlarm.java +++ b/src/com/android/deskclock/SetAlarm.java @@ -16,11 +16,14 @@ package com.android.deskclock; +import java.util.ArrayList; + import android.app.AlertDialog; import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.Intent.ShortcutIconResource; import android.os.Bundle; import android.os.Handler; import android.preference.CheckBoxPreference; @@ -48,6 +51,8 @@ public class SetAlarm extends PreferenceActivity implements TimePickerDialog.OnTimeSetListener, Preference.OnPreferenceChangeListener { + private static final int CODE_PICK_APP = 1; + private EditTextPreference mLabel; private CheckBoxPreference mEnabledPref; private Preference mTimePref; @@ -55,6 +60,8 @@ public class SetAlarm extends PreferenceActivity private CheckBoxPreference mVibratePref; private RepeatPreference mRepeatPref; private MenuItem mTestAlarmItem; + private Preference mIntentPref; + private CheckBoxPreference mNoDialogPref; private int mId; private int mHour; @@ -112,6 +119,9 @@ public class SetAlarm extends PreferenceActivity mVibratePref.setOnPreferenceChangeListener(this); mRepeatPref = (RepeatPreference) findPreference("setRepeat"); mRepeatPref.setOnPreferenceChangeListener(this); + mNoDialogPref = (CheckBoxPreference) findPreference("no_dialog"); + mNoDialogPref.setOnPreferenceChangeListener(this); + mIntentPref = findPreference("intent"); Intent i = getIntent(); mId = i.getIntExtra(Alarms.ALARM_ID, -1); @@ -211,7 +221,9 @@ public class SetAlarm extends PreferenceActivity mVibratePref.setChecked(alarm.vibrate); // Give the alert uri to the preference. mAlarmPref.setAlert(alarm.alert); + mIntentPref.setSummary(alarm.intent); updateTime(); + updateNoDialog(alarm); } @Override @@ -219,6 +231,8 @@ public class SetAlarm extends PreferenceActivity Preference preference) { if (preference == mTimePref) { showTimePicker(); + } else if (preference == mIntentPref) { + showAppPicker(); } return super.onPreferenceTreeClick(preferenceScreen, preference); @@ -240,6 +254,48 @@ public class SetAlarm extends PreferenceActivity DateFormat.is24HourFormat(this)).show(); } + private void showAppPicker() { + Bundle bundle = new Bundle(); + + ArrayList<String> shortcutNames = new ArrayList<String>(); + shortcutNames.add(getString(R.string.application_none)); + bundle.putStringArrayList(Intent.EXTRA_SHORTCUT_NAME, shortcutNames); + + ArrayList<ShortcutIconResource> shortcutIcons = new ArrayList<ShortcutIconResource>(); + shortcutIcons + .add(ShortcutIconResource.fromContext(this, android.R.drawable.ic_menu_delete)); + bundle.putParcelableArrayList(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, shortcutIcons); + + Intent appIntent = new Intent(Intent.ACTION_PICK_ACTIVITY); + Intent filterIntent = new Intent(Intent.ACTION_MAIN); + filterIntent.addCategory(Intent.CATEGORY_LAUNCHER); + appIntent.putExtra(Intent.EXTRA_INTENT, filterIntent); + appIntent.putExtra(Intent.EXTRA_TITLE, getText(R.string.application_title)); + appIntent.putExtras(bundle); + startActivityForResult(appIntent, CODE_PICK_APP); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case CODE_PICK_APP: + setAlarmIntent(resultCode, data); + default: + super.onActivityResult(requestCode, resultCode, data); + } + } + + private void setAlarmIntent(int resultCode, Intent data) { + if (resultCode == RESULT_CANCELED || data == null) return; + + String none = getString(R.string.application_none); + if (none.equals(data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME))) { + mIntentPref.setSummary(""); + } else { + mIntentPref.setSummary(data.toUri(Intent.URI_INTENT_SCHEME)); + } + } + public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // onTimeSet is called when the user clicks "Set" mTimePickerCancelled = false; @@ -259,6 +315,20 @@ public class SetAlarm extends PreferenceActivity mTimePref.setSummary(Alarms.formatTime(this, mHour, mMinutes, mRepeatPref.getDaysOfWeek())); } + + private void updateNoDialog(Alarm alarm) { + // If the alarm has vibration or sound, the dialog must be shown. + boolean silent = alarm.silent + || (alarm.alert == null || Alarms.ALARM_ALERT_SILENT.equals(alarm.alert)); + if (!silent || alarm.vibrate) { + mNoDialogPref.setEnabled(false); + alarm.noDialog = false; + } else { + mNoDialogPref.setEnabled(true); + } + + mNoDialogPref.setChecked(alarm.noDialog); + } private long saveAlarmAndEnableRevert() { // Enable "Revert" to go back to the original Alarm. @@ -277,6 +347,10 @@ public class SetAlarm extends PreferenceActivity alarm.vibrate = mVibratePref.isChecked(); alarm.label = mLabel.getText(); alarm.alert = mAlarmPref.getAlert(); + CharSequence intent = mIntentPref.getSummary(); + alarm.intent = intent == null ? "" : intent.toString(); + alarm.noDialog = mNoDialogPref.isChecked(); + updateNoDialog(alarm); long time; if (alarm.id == -1) { |