OSDN Git Service

auto import from //branches/cupcake/...@132276
authorThe Android Open Source Project <initial-contribution@android.com>
Thu, 19 Feb 2009 18:57:35 +0000 (10:57 -0800)
committerThe Android Open Source Project <initial-contribution@android.com>
Thu, 19 Feb 2009 18:57:35 +0000 (10:57 -0800)
14 files changed:
res/values-cs/strings.xml
res/values-de/strings.xml
res/values-es/strings.xml
res/values-fr/strings.xml
res/values-it/strings.xml
res/values-ja/strings.xml
res/values-ko/strings.xml
res/values-nl/strings.xml
res/values-pl/strings.xml
res/values-ru/strings.xml
res/values-zh-rCN/strings.xml
res/values-zh-rTW/strings.xml
src/com/android/alarmclock/AlarmAlert.java
src/com/android/alarmclock/AlarmKlaxon.java

index 0c601d5..3a26d52 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"Budík"</string>
     <string name="add_alarm">"Přidat upozornění"</string>
     <string name="delete_alarm">"Smazat upozornění"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"Toto upozornění bude odstraněno."</string>
     <string name="show_clock">"Zobrazit hodiny"</string>
     <string name="hide_clock">"Skrýt hodiny"</string>
     <string name="set_alarm">"Nastavit upozornění"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"Vyberte hodiny, které mají být zobrazeny."</string>
     <string name="error">"Upozornění není nastaveno"</string>
     <string name="dberror">"Upozornění bohužel nelze nastavit."</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"Analogové hodiny"</string>
   <string-array name="days_of_week">
     <item>"Pondělí"</item>
     <item>"Úterý"</item>
index dc69aeb..6ab682b 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"Wecker"</string>
     <string name="add_alarm">"Wecker hinzufügen"</string>
     <string name="delete_alarm">"Wecker löschen"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"Dieser Alarm wird gelöscht."</string>
     <string name="show_clock">"Uhr anzeigen"</string>
     <string name="hide_clock">"Uhr ausblenden"</string>
     <string name="set_alarm">"Wecker einstellen"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"Wählen Sie die anzuzeigende Uhr aus."</string>
     <string name="error">"Wecker nicht eingestellt"</string>
     <string name="dberror">"Der Wecker konnte nicht eingestellt werden."</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"Analoguhr"</string>
   <string-array name="days_of_week">
     <item>"Montag"</item>
     <item>"Dienstag"</item>
index 62d85ab..9027850 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"Reloj de alarma"</string>
     <string name="add_alarm">"Añadir alarma"</string>
     <string name="delete_alarm">"Eliminar alarma"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"Esta alarma se eliminará."</string>
     <string name="show_clock">"Mostrar reloj"</string>
     <string name="hide_clock">"Ocultar reloj"</string>
     <string name="set_alarm">"Establecer alarma"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"Selecciona el reloj que quieras ver."</string>
     <string name="error">"Alarma no establecida"</string>
     <string name="dberror">"No se ha podido establecer la alarma."</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"Reloj analógico"</string>
   <string-array name="days_of_week">
     <item>"Lunes"</item>
     <item>"Martes"</item>
index b820904..97125cc 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"Réveil"</string>
     <string name="add_alarm">"Ajouter alarme"</string>
     <string name="delete_alarm">"Désactiver alarme"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"Cette alarme va être supprimée."</string>
     <string name="show_clock">"Afficher horloge"</string>
     <string name="hide_clock">"Masquer horloge"</string>
     <string name="set_alarm">"Régler alarme"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"Sélectionner une horloge à afficher."</string>
     <string name="error">"Alarme non activée"</string>
     <string name="dberror">"Désolé, impossible de régler l\'alarme."</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"Horloge analogique"</string>
   <string-array name="days_of_week">
     <item>"Lundi"</item>
     <item>"Mardi"</item>
index e8a5427..c3c1d16 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"Sveglia"</string>
     <string name="add_alarm">"Aggiungi allarme"</string>
     <string name="delete_alarm">"Elimina allarme"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"Questa sveglia verrà eliminata."</string>
     <string name="show_clock">"Mostra orologio"</string>
     <string name="hide_clock">"Nascondi orologio"</string>
     <string name="set_alarm">"Imposta allarme"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"Seleziona un orologio."</string>
     <string name="error">"Allarme non impostato"</string>
     <string name="dberror">"Spiacenti. Impossibile impostare l\'allarme."</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"Orologio analogico"</string>
   <string-array name="days_of_week">
     <item>"Lunedì"</item>
     <item>"Martedì"</item>
index df0189b..9bc53ff 100644 (file)
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label">"アラームクロック"</string>
-    <string name="add_alarm">"ã\82¢ã\83©ã\83¼ã\83 ã\82\92追å\8a "</string>
+    <string name="app_label">"アラーム"</string>
+    <string name="add_alarm">"ã\82¢ã\83©ã\83¼ã\83 ã\81®è¨­å®\9a"</string>
     <string name="delete_alarm">"アラームを削除"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"このアラームを削除します。"</string>
     <string name="show_clock">"時計を表示"</string>
     <string name="hide_clock">"時計を隠す"</string>
-    <string name="set_alarm">"ã\82¢ã\83©ã\83¼ã\83 ã\82\92ã\82»ã\83\83ã\83\88"</string>
-    <string name="enable">"アラームOn"</string>
-    <string name="alarm_vibrate">"バイブ"</string>
+    <string name="set_alarm">"ã\82¢ã\83©ã\83¼ã\83 ã\81®è¨­å®\9a"</string>
+    <string name="enable">"アラームをONにする"</string>
+    <string name="alarm_vibrate">"バイブレーション"</string>
     <string name="alarm_repeat">"繰り返し"</string>
     <string name="alert">"アラーム音"</string>
     <string name="time">"時刻"</string>
@@ -32,9 +31,9 @@
     <string name="alarm_alert_dismiss_text">"停止"</string>
     <string name="alarm_alert_alert_silenced">"アラームは<xliff:g id="MINUTES">%d</xliff:g>分間鳴って止まりました"</string>
     <string name="alarm_alert_snooze_text">"スヌーズ"</string>
-    <string name="alarm_alert_snooze_set">"スヌーズ中(<xliff:g id="MINUTES">%d</xliff:g>分)"</string>
-    <string name="alarm_alert_snooze_not_set">"スヌーズセットエラー:<xliff:g id="TIME">%s</xliff:g>に次のアラームがセットされています"</string>
-    <string name="alarm_set">"アラームを<xliff:g id="TIME_DELTA">%s</xliff:g>後にセットしました。"</string>
+    <string name="alarm_alert_snooze_set">"<xliff:g id="MINUTES">%d</xliff:g>分間スヌーズ"</string>
+    <string name="alarm_alert_snooze_not_set">"スヌーズ設定エラー: <xliff:g id="TIME">%s</xliff:g>に次のアラームがセットされています"</string>
+    <string name="alarm_set">"<xliff:g id="TIME_DELTA">%s</xliff:g>後にセットしました"</string>
     <!-- no translation found for combiner (2146732837172099134) -->
     <skip />
     <string name="day">"1日"</string>
     <string name="never">"繰り返しなし"</string>
     <string name="day_concat">"、"</string>
     <string name="clock_instructions">"表示する時計を選択してください。"</string>
-    <string name="error">"アラームをセットできませんでした"</string>
-    <string name="dberror">"アラームをセットできませんでした。"</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="error">"アラームを設定できません"</string>
+    <string name="dberror">"アラームを設定できません"</string>
+    <string name="analog_gadget">"アナログ時計"</string>
   <string-array name="days_of_week">
     <item>"月曜日"</item>
     <item>"火曜日"</item>
     <item>"日曜日"</item>
   </string-array>
   <string-array name="days_of_week_short">
-    <item>"(月)"</item>
-    <item>"(火)"</item>
-    <item>"(水)"</item>
-    <item>"(木)"</item>
-    <item>"(金)"</item>
-    <item>"(土)"</item>
-    <item>"(日)"</item>
+    <item>"(月)"</item>
+    <item>"(火)"</item>
+    <item>"(水)"</item>
+    <item>"(木)"</item>
+    <item>"(金)"</item>
+    <item>"(土)"</item>
+    <item>"(日)"</item>
   </string-array>
 </resources>
index 4b24523..036e5a3 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"알람 시계"</string>
     <string name="add_alarm">"알람 추가"</string>
     <string name="delete_alarm">"알람 삭제"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"알람이 삭제됩니다."</string>
     <string name="show_clock">"시계 표시"</string>
     <string name="hide_clock">"시계 숨기기"</string>
     <string name="set_alarm">"알람 설정"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"표시할 시계를 선택하세요."</string>
     <string name="error">"알람이 설정되지 않음"</string>
     <string name="dberror">"죄송합니다. 알람을 설정할 수 없습니다."</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"아날로그 시계"</string>
   <string-array name="days_of_week">
     <item>"월요일"</item>
     <item>"화요일"</item>
index a20af41..a98c030 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"Wekker"</string>
     <string name="add_alarm">"Alarm toevoegen"</string>
     <string name="delete_alarm">"Alarm verwijderen"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"Dit alarm wordt verwijderd."</string>
     <string name="show_clock">"Klok weergeven"</string>
     <string name="hide_clock">"Klok verbergen"</string>
     <string name="set_alarm">"Alarm instellen"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"Selecteer een klok die u wilt weergeven."</string>
     <string name="error">"Alarm is niet ingesteld"</string>
     <string name="dberror">"Het alarm kan niet worden ingesteld."</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"Analoge klok"</string>
   <string-array name="days_of_week">
     <item>"Maandag"</item>
     <item>"Dinsdag"</item>
index 30b54cf..60254cb 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"Budzik"</string>
     <string name="add_alarm">"Dodaj alarm"</string>
     <string name="delete_alarm">"Usuń alarm"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"Ten zegar zostanie usunięty."</string>
     <string name="show_clock">"Pokaż zegar"</string>
     <string name="hide_clock">"Ukryj zegar"</string>
     <string name="set_alarm">"Ustaw alarm"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"Wybierz wyświetlany zegar."</string>
     <string name="error">"Alarm nieustawiony"</string>
     <string name="dberror">"Niestety, nie można ustawić alarmu."</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"Zegar analogowy"</string>
   <string-array name="days_of_week">
     <item>"Poniedziałek"</item>
     <item>"Wtorek"</item>
index 115a663..8bae5a1 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"Будильник"</string>
     <string name="add_alarm">"Добавить будильник"</string>
     <string name="delete_alarm">"Удалить будильник"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"Сигнал будет удален."</string>
     <string name="show_clock">"Показать часы"</string>
     <string name="hide_clock">"Скрыть часы"</string>
     <string name="set_alarm">"Установить будильник"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"Выберите часы для отображения"</string>
     <string name="error">"Будильник не установлен"</string>
     <string name="dberror">"К сожалению, установить будильник не удалось."</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"Часы со стрелками"</string>
   <string-array name="days_of_week">
     <item>"Понедельник"</item>
     <item>"Вторник"</item>
index f80c625..3c1ae8d 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"闹钟时钟"</string>
     <string name="add_alarm">"添加闹钟"</string>
     <string name="delete_alarm">"取消闹钟"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"将会删除此警报。"</string>
     <string name="show_clock">"显示时钟"</string>
     <string name="hide_clock">"隐藏时钟"</string>
     <string name="set_alarm">"设置闹钟"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"选择要显示的时钟。"</string>
     <string name="error">"未设置闹钟"</string>
     <string name="dberror">"抱歉,无法设置该闹钟。"</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"模拟时钟"</string>
   <string-array name="days_of_week">
     <item>"周一"</item>
     <item>"周二"</item>
index 8ff2d7e..8757f61 100644 (file)
@@ -18,8 +18,7 @@
     <string name="app_label">"鬧鐘"</string>
     <string name="add_alarm">"新增鬧鐘"</string>
     <string name="delete_alarm">"刪除鬧鐘"</string>
-    <!-- no translation found for delete_alarm_confirm (4237696873219106907) -->
-    <skip />
+    <string name="delete_alarm_confirm">"將刪除此鬧鐘。"</string>
     <string name="show_clock">"顯示時鐘"</string>
     <string name="hide_clock">"隱藏時鐘"</string>
     <string name="set_alarm">"設定鬧鐘"</string>
@@ -55,8 +54,7 @@
     <string name="clock_instructions">"選取顯示的時鐘。"</string>
     <string name="error">"鬧鐘未設定"</string>
     <string name="dberror">"抱歉,無法設定鬧鐘。"</string>
-    <!-- no translation found for analog_gadget (1670505720837152766) -->
-    <skip />
+    <string name="analog_gadget">"類比時鐘"</string>
   <string-array name="days_of_week">
     <item>"星期一"</item>
     <item>"星期二"</item>
index a9b27bc..eefd5bb 100644 (file)
@@ -24,6 +24,7 @@ import android.content.SharedPreferences;
 import android.content.res.Configuration;
 import android.graphics.PixelFormat;
 import android.os.Bundle;
+import android.view.KeyEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.LayoutInflater;
@@ -40,12 +41,16 @@ import java.util.Calendar;
  */
 public class AlarmAlert extends Activity {
 
-    private final static int SNOOZE_MINUTES = 10;
+    private static final int SNOOZE_MINUTES = 10;
+    private static final int UNKNOWN = 0;
+    private static final int SNOOZE = 1;
+    private static final int DISMISS = 2;
+    private static final int KILLED = 3;
 
     private KeyguardManager mKeyguardManager;
     private KeyguardManager.KeyguardLock mKeyguardLock = null;
     private Button mSnoozeButton;
-    private boolean mSnoozed;
+    private int mState = UNKNOWN;
 
     private AlarmKlaxon mKlaxon;
     private int mAlarmId;
@@ -87,25 +92,29 @@ public class AlarmAlert extends Activity {
         mKlaxon.setKillerCallback(new AlarmKlaxon.KillerCallback() {
             public void onKilled() {
                 if (Log.LOGV) Log.v("onKilled()");
-                TextView silenced = (TextView)findViewById(R.id.silencedText);
-                silenced.setText(
-                        getString(R.string.alarm_alert_alert_silenced,
-                                  AlarmKlaxon.ALARM_TIMEOUT_SECONDS / 60));
-                silenced.setVisibility(View.VISIBLE);
+                updateSilencedText();
 
                 /* don't allow snooze */
                 mSnoozeButton.setEnabled(false);
 
-                mKlaxon.stop(AlarmAlert.this, mSnoozed);
-                releaseLocks();
+                // Dismiss the alarm but mark the state as killed so if the
+                // config changes, we show the silenced message and disable
+                // snooze.
+                dismiss();
+                mState = KILLED;
             }
         });
 
-        mKlaxon.restoreInstanceState(this, icicle);
-
         updateLayout();
     }
 
+    private void updateSilencedText() {
+        TextView silenced = (TextView) findViewById(R.id.silencedText);
+        silenced.setText(getString(R.string.alarm_alert_alert_silenced,
+                    AlarmKlaxon.ALARM_TIMEOUT_SECONDS / 60));
+        silenced.setVisibility(View.VISIBLE);
+    }
+
     private void updateLayout() {
         setContentView(R.layout.alarm_alert);
 
@@ -129,48 +138,73 @@ public class AlarmAlert extends Activity {
            manager. */
         mSnoozeButton = (Button) findViewById(R.id.snooze);
         mSnoozeButton.requestFocus();
-        mSnoozeButton.setOnClickListener(new Button.OnClickListener() {
-            public void onClick(View v) {
-                // If next alarm is set for sooner than the snooze interval,
-                // don't snooze: instead toast user that snooze will not be set
-                final long snoozeTarget = System.currentTimeMillis()
-                        + (1000 * 60 * SNOOZE_MINUTES);
-                final long nextAlarm =
-                        Alarms.calculateNextAlert(AlarmAlert.this).getAlert();
-                String displayTime = null;
-                if (nextAlarm < snoozeTarget) {
-                    Calendar c = Calendar.getInstance();
-                    c.setTimeInMillis(nextAlarm);
-                    displayTime = getString(R.string.alarm_alert_snooze_set,
-                            Alarms.formatTime(AlarmAlert.this, c));
-                } else {
-                    Alarms.saveSnoozeAlert(AlarmAlert.this, mAlarmId,
-                            snoozeTarget);
-                    Alarms.setNextAlert(AlarmAlert.this);
-                    mSnoozed = true;
-                    displayTime = getString(R.string.alarm_alert_snooze_set,
-                            SNOOZE_MINUTES);
+        // If this was a configuration change, keep the silenced text if the
+        // alarm was killed.
+        if (mState == KILLED) {
+            updateSilencedText();
+            mSnoozeButton.setEnabled(false);
+        } else {
+            mSnoozeButton.setOnClickListener(new Button.OnClickListener() {
+                public void onClick(View v) {
+                    snooze();
+                    finish();
                 }
-                // Display the snooze minutes in a toast.
-                Toast.makeText(AlarmAlert.this, displayTime,
-                        Toast.LENGTH_LONG).show();
-                mKlaxon.stop(AlarmAlert.this, mSnoozed);
-                releaseLocks();
-                finish();
-            }
-        });
+            });
+        }
 
         /* dismiss button: close notification */
         findViewById(R.id.dismiss).setOnClickListener(
                 new Button.OnClickListener() {
                     public void onClick(View v) {
-                        mKlaxon.stop(AlarmAlert.this, mSnoozed);
-                        releaseLocks();
+                        dismiss();
                         finish();
                     }
                 });
     }
 
+    // Attempt to snooze this alert.
+    private void snooze() {
+        if (mState != UNKNOWN) {
+            return;
+        }
+        // If the next alarm is set for sooner than the snooze interval, don't
+        // snooze. Instead, toast the user that the snooze will not be set.
+        final long snoozeTime = System.currentTimeMillis()
+                + (1000 * 60 * SNOOZE_MINUTES);
+        final long nextAlarm =
+                Alarms.calculateNextAlert(AlarmAlert.this).getAlert();
+        String displayTime = null;
+        if (nextAlarm < snoozeTime) {
+            final Calendar c = Calendar.getInstance();
+            c.setTimeInMillis(nextAlarm);
+            displayTime = getString(R.string.alarm_alert_snooze_not_set,
+                    Alarms.formatTime(AlarmAlert.this, c));
+            mState = DISMISS;
+        } else {
+            Alarms.saveSnoozeAlert(AlarmAlert.this, mAlarmId, snoozeTime);
+            Alarms.setNextAlert(AlarmAlert.this);
+            displayTime = getString(R.string.alarm_alert_snooze_set,
+                    SNOOZE_MINUTES);
+            mState = SNOOZE;
+        }
+        // Intentionally log the snooze time for debugging.
+        Log.v(displayTime);
+        // Display the snooze minutes in a toast.
+        Toast.makeText(AlarmAlert.this, displayTime, Toast.LENGTH_LONG).show();
+        mKlaxon.stop(this, mState == SNOOZE);
+        releaseLocks();
+    }
+
+    // Dismiss the alarm.
+    private void dismiss() {
+        if (mState != UNKNOWN) {
+            return;
+        }
+        mState = DISMISS;
+        mKlaxon.stop(this, false);
+        releaseLocks();
+    }
+
     /**
      * this is called when a second alarm is triggered while a
      * previous alert window is still active.
@@ -179,6 +213,7 @@ public class AlarmAlert extends Activity {
     protected void onNewIntent(Intent intent) {
         super.onNewIntent(intent);
         if (Log.LOGV) Log.v("AlarmAlert.OnNewIntent()");
+        mState = UNKNOWN;
         mSnoozeButton.setEnabled(true);
         disableKeyguard();
 
@@ -203,13 +238,8 @@ public class AlarmAlert extends Activity {
     protected void onStop() {
         super.onStop();
         if (Log.LOGV) Log.v("AlarmAlert.onStop()");
-        mKlaxon.stop(this, mSnoozed);
-        releaseLocks();
-    }
-
-    @Override
-    protected void onSaveInstanceState(Bundle icicle) {
-        mKlaxon.onSaveInstanceState(icicle);
+        // As a last resort, try to snooze if this activity is stopped.
+        snooze();
     }
 
     @Override
@@ -218,6 +248,45 @@ public class AlarmAlert extends Activity {
         updateLayout();
     }
 
+    @Override
+    public boolean dispatchKeyEvent(KeyEvent event) {
+        // Do this on key down to handle a few of the system keys. Only handle
+        // the snooze and dismiss this alert if the state is unknown.
+        boolean up = event.getAction() == KeyEvent.ACTION_UP;
+        boolean dismiss = false;
+        switch (event.getKeyCode()) {
+            case KeyEvent.KEYCODE_DPAD_UP:
+            case KeyEvent.KEYCODE_DPAD_DOWN:
+            case KeyEvent.KEYCODE_DPAD_LEFT:
+            case KeyEvent.KEYCODE_DPAD_RIGHT:
+            case KeyEvent.KEYCODE_DPAD_CENTER:
+            // Ignore ENDCALL because we do not receive the event if the screen
+            // is on. However, we do receive the key up for ENDCALL if the
+            // screen was off.
+            case KeyEvent.KEYCODE_ENDCALL:
+                break;
+            // Volume keys dismiss the alarm
+            case KeyEvent.KEYCODE_VOLUME_UP:
+            case KeyEvent.KEYCODE_VOLUME_DOWN:
+                dismiss = true;
+            // All other keys will snooze the alarm
+            default:
+                // Check for UNKNOWN here so that we intercept both key events
+                // and prevent the volume keys from triggering their default
+                // behavior.
+                if (mState == UNKNOWN && up) {
+                    if (dismiss) {
+                        dismiss();
+                    } else {
+                        snooze();
+                    }
+                    finish();
+                }
+                return true;
+        }
+        return super.dispatchKeyEvent(event);
+    }
+
     private synchronized void enableKeyguard() {
         if (mKeyguardLock != null) {
             mKeyguardLock.reenableKeyguard();
index c582da5..c862292 100644 (file)
@@ -39,8 +39,6 @@ class AlarmKlaxon implements Alarms.AlarmSettings {
 
     /** Play alarm up to 10 minutes before silencing */
     final static int ALARM_TIMEOUT_SECONDS = 10 * 60;
-    final static String ICICLE_PLAYING = "IciclePlaying";
-    final static String ICICLE_ALARMID = "IcicleAlarmId";
 
     private static long[] sVibratePattern = new long[] { 500, 500 };
 
@@ -186,27 +184,6 @@ class AlarmKlaxon implements Alarms.AlarmSettings {
         mKillerCallback = killerCallback;
     }
 
-
-    /**
-     * Called by the AlarmAlert activity on configuration change
-     */
-    protected void onSaveInstanceState(Bundle icicle) {
-        icicle.putBoolean(ICICLE_PLAYING, mPlaying);
-        icicle.putInt(ICICLE_ALARMID, mAlarmId);
-    }
-
-    /**
-     * Restores alarm playback state on configuration change
-     */
-    void restoreInstanceState(Context context, Bundle icicle) {
-        if (!mPlaying &&
-            icicle != null &&
-            icicle.containsKey(ICICLE_PLAYING) &&
-            icicle.getBoolean(ICICLE_PLAYING)) {
-            play(context, icicle.getInt(ICICLE_ALARMID));
-        }
-    }
-
     /**
      * Kills alarm audio after ALARM_TIMEOUT_SECONDS, so the alarm
      * won't run all day.