Home | History | Annotate | Download | only in deskclock
      1 // Copyright 2013 Google Inc. All Rights Reserved.
      2 
      3 package com.android.cts.verifier.deskclock;
      4 
      5 import android.content.Intent;
      6 import android.database.DataSetObserver;
      7 import android.os.Bundle;
      8 import android.provider.AlarmClock;
      9 
     10 import com.android.cts.verifier.ArrayTestListAdapter;
     11 import com.android.cts.verifier.IntentDrivenTestActivity;
     12 import com.android.cts.verifier.PassFailButtons;
     13 import com.android.cts.verifier.R;
     14 import com.android.cts.verifier.TestListAdapter.TestListItem;
     15 import com.android.cts.verifier.IntentDrivenTestActivity.ButtonInfo;
     16 import com.android.cts.verifier.IntentDrivenTestActivity.IntentFactory;
     17 import com.android.cts.verifier.IntentDrivenTestActivity.TestInfo;
     18 
     19 import java.util.ArrayList;
     20 import java.util.Calendar;
     21 
     22 /**
     23  * Activity that lists all the DeskClock tests.
     24  */
     25 public class DeskClockTestsActivity extends PassFailButtons.TestListActivity {
     26 
     27     private static final String SHOW_ALARMS_TEST = "SHOW_ALARMS";
     28     public static final String SET_ALARM_WITH_UI_TEST = "SET_ALARM_WITH_UI";
     29     public static final String START_ALARM_TEST = "START_ALARM";
     30     public static final String CREATE_ALARM_TEST = "CREATE_ALARM";
     31     public static final String SET_TIMER_WITH_UI_TEST = "SET_TIMER_WITH_UI";
     32     public static final String START_TIMER = "START_TIMER";
     33     public static final String START_TIMER_WITH_UI = "START_TIMER_WITH_UI";
     34 
     35     private static final ArrayList<Integer> DAYS = new ArrayList<Integer>();
     36 
     37     private static final Intent CREATE_ALARM_INTENT = new Intent(AlarmClock.ACTION_SET_ALARM)
     38             .putExtra(AlarmClock.EXTRA_MESSAGE, "Create Alarm Test")
     39             .putExtra(AlarmClock.EXTRA_SKIP_UI, false)
     40             .putExtra(AlarmClock.EXTRA_VIBRATE, true)
     41             .putExtra(AlarmClock.EXTRA_RINGTONE, AlarmClock.VALUE_RINGTONE_SILENT)
     42             .putExtra(AlarmClock.EXTRA_HOUR, 1)
     43             .putExtra(AlarmClock.EXTRA_MINUTES, 23)
     44             .putExtra(AlarmClock.EXTRA_DAYS, DAYS);
     45 
     46     static {
     47         DAYS.add(Calendar.MONDAY);
     48         DAYS.add(Calendar.WEDNESDAY);
     49     }
     50 
     51     private static final Intent SHOW__ALARMS_INTENT = new Intent(AlarmClock.ACTION_SHOW_ALARMS);
     52 
     53     private static final Intent SET_ALARM_WITH_UI_INTENT = new Intent(AlarmClock.ACTION_SET_ALARM)
     54             .putExtra(AlarmClock.EXTRA_SKIP_UI, false);
     55 
     56     private static final Intent SET_TIMER_WITH_UI_INTENT = new Intent(AlarmClock.ACTION_SET_TIMER)
     57              .putExtra(AlarmClock.EXTRA_SKIP_UI, false);
     58 
     59     private static final Intent START_TIMER_INTENT = new Intent(AlarmClock.ACTION_SET_TIMER)
     60     .putExtra(AlarmClock.EXTRA_SKIP_UI, true)
     61     .putExtra(AlarmClock.EXTRA_MESSAGE, "Start Timer Test")
     62     .putExtra(AlarmClock.EXTRA_LENGTH, 30);
     63 
     64     private static final Intent START_TIMER_WITH_UI_INTENT = new Intent(AlarmClock.ACTION_SET_TIMER)
     65     .putExtra(AlarmClock.EXTRA_SKIP_UI, false)
     66     .putExtra(AlarmClock.EXTRA_MESSAGE, "Start Timer Test")
     67     .putExtra(AlarmClock.EXTRA_LENGTH, 30);
     68 
     69     private static final TestInfo[] ALARM_TESTS = new TestInfo[] {
     70             new TestInfo(
     71                     SHOW_ALARMS_TEST,
     72                     R.string.dc_show_alarms_test,
     73                     R.string.dc_show_alarms_test_info,
     74                     new ButtonInfo(
     75                             R.string.dc_show_alarms_button,
     76                             SHOW__ALARMS_INTENT)),
     77             new TestInfo(
     78                     SET_ALARM_WITH_UI_TEST,
     79                     R.string.dc_set_alarm_with_ui_test,
     80                     R.string.dc_set_alarm_with_ui_test_info,
     81                     new ButtonInfo(
     82                             R.string.dc_set_alarm_button,
     83                             SET_ALARM_WITH_UI_INTENT)),
     84             new TestInfo(
     85                     START_ALARM_TEST,
     86                     R.string.dc_start_alarm_test,
     87                     R.string.dc_start_alarm_test_info,
     88                     new ButtonInfo(
     89                             R.string.dc_set_alarm_button,
     90                             DeskClockIntentFactory.class.getName()),
     91                     new ButtonInfo(
     92                             R.string.dc_set_alarm_verify_button,
     93                             SHOW__ALARMS_INTENT)),
     94             new TestInfo(
     95                     CREATE_ALARM_TEST,
     96                     R.string.dc_full_alarm_test,
     97                     R.string.dc_full_alarm_test_info,
     98                     new ButtonInfo(
     99                             R.string.dc_full_alarm_button,
    100                             CREATE_ALARM_INTENT)),
    101     };
    102 
    103     private static final TestInfo[] TIMER_TESTS = new TestInfo[] {
    104             new TestInfo(
    105                     SET_TIMER_WITH_UI_TEST,
    106                     R.string.dc_set_timer_with_ui_test,
    107                     R.string.dc_set_timer_with_ui_test_info,
    108                     new ButtonInfo(
    109                             R.string.dc_set_timer_with_ui_button,
    110                             SET_TIMER_WITH_UI_INTENT)),
    111             new TestInfo(
    112                     START_TIMER,
    113                     R.string.dc_start_timer_test,
    114                     R.string.dc_start_timer_test_info,
    115                     new ButtonInfo(
    116                             R.string.dc_start_timer_button,
    117                             START_TIMER_INTENT)),
    118             new TestInfo(
    119                     START_TIMER_WITH_UI,
    120                     R.string.dc_start_timer_with_ui_test,
    121                     R.string.dc_start_timer_with_ui_test_info,
    122                     new ButtonInfo(
    123                             R.string.dc_start_timer_button,
    124                             START_TIMER_WITH_UI_INTENT)),
    125   };
    126 
    127     @Override
    128     protected void onCreate(Bundle savedInstanceState) {
    129         super.onCreate(savedInstanceState);
    130         setContentView(R.layout.pass_fail_list);
    131         setInfoResources(R.string.deskclock_tests, R.string.deskclock_tests_info, 0);
    132         setPassFailButtonClickListeners();
    133 
    134         getPassButton().setEnabled(false);
    135 
    136         final ArrayTestListAdapter adapter = new ArrayTestListAdapter(this);
    137 
    138         adapter.add(TestListItem.newCategory(this, R.string.deskclock_group_alarms));
    139         addTests(adapter, ALARM_TESTS);
    140 
    141         adapter.add(TestListItem.newCategory(this, R.string.deskclock_group_timers));
    142         addTests(adapter, TIMER_TESTS);
    143 
    144         adapter.registerDataSetObserver(new DataSetObserver() {
    145             @Override
    146             public void onChanged() {
    147                 updatePassButton();
    148             }
    149         });
    150 
    151         setTestListAdapter(adapter);
    152     }
    153 
    154     private void addTests(ArrayTestListAdapter adapter, TestInfo[] tests) {
    155         for (TestInfo info : tests) {
    156 
    157             final int title = info.getTitle();
    158             adapter.add(TestListItem.newTest(this, title, info.getTestId(),
    159             new Intent(this, IntentDrivenTestActivity.class)
    160                     .putExtra(IntentDrivenTestActivity.EXTRA_ID, info.getTestId())
    161                     .putExtra(IntentDrivenTestActivity.EXTRA_TITLE, title)
    162                     .putExtra(IntentDrivenTestActivity.EXTRA_INFO, info.getInfoText())
    163                     .putExtra(IntentDrivenTestActivity.EXTRA_BUTTONS, info.getButtons()),
    164                     null));
    165         }
    166     }
    167 
    168     /**
    169      * Enable Pass Button when the all tests passed.
    170      */
    171     private void updatePassButton() {
    172         getPassButton().setEnabled(mAdapter.allTestsPassed());
    173     }
    174 
    175     public static class DeskClockIntentFactory implements IntentFactory {
    176         @Override
    177         public Intent[] createIntents(String testId, int buttonText) {
    178             if (testId.equals(START_ALARM_TEST)) {
    179                 // Alarm should go off 2 minutes from now
    180                 final Calendar cal = Calendar.getInstance();
    181                 cal.setTimeInMillis(cal.getTimeInMillis() + 120000);
    182                 return new Intent[] {
    183                         new Intent(AlarmClock.ACTION_SET_ALARM)
    184                                 .putExtra(AlarmClock.EXTRA_MESSAGE, "Start Alarm Test")
    185                         .putExtra(AlarmClock.EXTRA_SKIP_UI, true)
    186                         .putExtra(AlarmClock.EXTRA_VIBRATE, true)
    187                         .putExtra(AlarmClock.EXTRA_RINGTONE, AlarmClock.VALUE_RINGTONE_SILENT)
    188                         .putExtra(AlarmClock.EXTRA_HOUR, cal.get(Calendar.HOUR_OF_DAY))
    189                         .putExtra(AlarmClock.EXTRA_MINUTES, cal.get(Calendar.MINUTE)),
    190                 };
    191             } else {
    192                 throw new IllegalArgumentException("Unknown test: " + testId);
    193             }
    194         }
    195     }
    196 }
    197