Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 
     17 package android.app.cts;
     18 
     19 
     20 import android.app.Activity;
     21 import android.app.ActivityGroup;
     22 import android.app.LocalActivityManager;
     23 import android.content.Intent;
     24 import android.os.Bundle;
     25 import android.view.Window;
     26 import android.app.cts.CTSResult;
     27 
     28 public class LocalActivityManagerTestHelper extends ActivityGroup {
     29 
     30     public static final String ACTION_DISPATCH_RESUME = "dispatchResume";
     31     public static final String ACTION_START_ACTIIVTY = "startActivity";
     32     public static final String ACTION_DISPATCH_CREATE = "dispatchCreate";
     33     public static final String ACTION_DISPATCH_STOP = "dispatchStop";
     34     public static final String ACTION_DISPATCH_PAUSE_TRUE = "dispatchPauseTrue";
     35     public static final String ACTION_DISPATCH_PAUSE_FALSE = "dispatchPauseFalse";
     36     public static final String ACTION_SAVE_INSTANCE_STATE = "saveInstanceState";
     37     public static final String ACTION_DISPATCH_DESTROY = "dispatchDestroy";
     38     public static final String ACTION_REMOVE_ALL_ACTIVITY = "removeAllActivities";
     39 
     40     private String mCurrentAction;
     41     private LocalActivityManager mLocalActivityManager;
     42 
     43     private static CTSResult sResult;
     44 
     45     public static void setResult(CTSResult cr) {
     46         sResult = cr;
     47     }
     48 
     49     public LocalActivityManagerTestHelper() {
     50         super();
     51     }
     52 
     53     @Override
     54     protected void onCreate(Bundle savedInstanceState) {
     55         super.onCreate(savedInstanceState);
     56         mCurrentAction = getIntent().getAction();
     57         mLocalActivityManager = getLocalActivityManager();
     58     }
     59 
     60     @Override
     61     protected void onStart() {
     62         super.onStart();
     63     }
     64 
     65     protected void onResume() {
     66         super.onResume();
     67         if (mCurrentAction.equals(ACTION_DISPATCH_RESUME)) {
     68             testDispatchResume();
     69         } else if (mCurrentAction.equals(ACTION_START_ACTIIVTY)) {
     70             testStartActivity();
     71         } else if (mCurrentAction.equals(ACTION_DISPATCH_CREATE)) {
     72             testDispatchCreate();
     73         } else if (mCurrentAction.equals(ACTION_DISPATCH_STOP)) {
     74             testDispatchStop();
     75         } else if (mCurrentAction.equals(ACTION_DISPATCH_PAUSE_TRUE)) {
     76             testDispatchPauseTrue();
     77         } else if (mCurrentAction.equals(ACTION_DISPATCH_PAUSE_FALSE)) {
     78             testDispatchPauseFalse();
     79         } else if (mCurrentAction.equals(ACTION_SAVE_INSTANCE_STATE)) {
     80             testSaveInstanceState();
     81         } else if (mCurrentAction.equals(ACTION_DISPATCH_DESTROY)) {
     82             testDispatchDestroy();
     83         } else if (mCurrentAction.equals(ACTION_REMOVE_ALL_ACTIVITY)) {
     84             testRemoveAllActivity();
     85         }
     86     }
     87 
     88     private void testRemoveAllActivity() {
     89         final String id = "id_remove_activity";
     90         final Intent intent = new Intent(this, LocalActivityManagerStubActivity.class);
     91         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     92         mLocalActivityManager.startActivity(id, intent);
     93 
     94         Activity activity = mLocalActivityManager.getActivity(id);
     95         if (activity == null) {
     96             fail();
     97             return;
     98         }
     99 
    100         if (!activity.getClass().getName().equals("android.app.cts."
    101                     + "LocalActivityManagerStubActivity")) {
    102             fail();
    103             return;
    104         }
    105 
    106         mLocalActivityManager.removeAllActivities();
    107         activity = mLocalActivityManager.getActivity(id);
    108         if (activity != null) {
    109             fail();
    110             return;
    111         }
    112 
    113         sResult.setResult(CTSResult.RESULT_OK);
    114         finish();
    115     }
    116 
    117     private void testDispatchDestroy() {
    118         final String id1 = "id_dispatch_destroy1";
    119         final String id2 = "id_dispatch_destroy2";
    120         final Intent intent = new Intent(this, LocalActivityManagerStubActivity.class);
    121         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    122         mLocalActivityManager.startActivity(id1, intent);
    123 
    124         LocalActivityManagerStubActivity.sIsOnDestroyCalled = false;
    125         mLocalActivityManager.dispatchDestroy(false);
    126         if (mLocalActivityManager.getCurrentActivity().isFinishing()){
    127             fail();
    128             return;
    129         }
    130 
    131         if (!LocalActivityManagerStubActivity.sIsOnDestroyCalled) {
    132             fail();
    133             return;
    134         }
    135 
    136         mLocalActivityManager.startActivity(id2, intent);
    137         LocalActivityManagerStubActivity.sIsOnDestroyCalled = false;
    138         mLocalActivityManager.dispatchDestroy(true);
    139 
    140         if (!LocalActivityManagerStubActivity.sIsOnDestroyCalled) {
    141             fail();
    142             return;
    143         }
    144 
    145         if (!mLocalActivityManager.getCurrentActivity().isFinishing()){
    146             fail();
    147             return;
    148         }
    149 
    150         sResult.setResult(CTSResult.RESULT_OK);
    151         finish();
    152     }
    153 
    154     private void testSaveInstanceState() {
    155         final String key = "_id1";
    156         mLocalActivityManager.dispatchCreate(null);
    157         final Bundle bundle = mLocalActivityManager.saveInstanceState();
    158         if (bundle != null) {
    159             fail();
    160             return;
    161         }
    162 
    163         final String id = "id_dispatch_pause";
    164         final Intent intent = new Intent(this, LocalActivityManagerStubActivity.class);
    165         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    166         mLocalActivityManager.startActivity(id, intent);
    167 
    168         final Bundle savedBundle = new Bundle();
    169         final Bundle bb = new Bundle();
    170         savedBundle.putBundle(key, bb);
    171 
    172         mLocalActivityManager.dispatchCreate(savedBundle);
    173         final Bundle returnedBundle = mLocalActivityManager.saveInstanceState();
    174         if (returnedBundle.getBundle(key) == null ) {
    175             fail();
    176             return;
    177         }
    178 
    179         sResult.setResult(CTSResult.RESULT_OK);
    180         finish();
    181     }
    182 
    183     private void testDispatchPauseFalse() {
    184         final String id = "id_dispatch_pause";
    185         final Intent intent = new Intent(this, LocalActivityManagerStubActivity.class);
    186         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    187         mLocalActivityManager.startActivity(id, intent);
    188         LocalActivityManagerStubActivity.sIsOnPauseCalled = false;
    189         mLocalActivityManager.dispatchPause(false);
    190         if (!LocalActivityManagerStubActivity.sIsOnPauseCalled) {
    191             fail();
    192             return;
    193         }
    194 
    195         sResult.setResult(CTSResult.RESULT_OK);
    196         finish();
    197     }
    198 
    199     private void testDispatchPauseTrue() {
    200         final String id = "id_dispatch_pause";
    201         final Intent intent = new Intent(this, LocalActivityManagerStubActivity.class);
    202         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    203         mLocalActivityManager.startActivity(id, intent);
    204         LocalActivityManagerStubActivity.sIsOnPauseCalled = false;
    205         mLocalActivityManager.dispatchPause(true);
    206         if (!LocalActivityManagerStubActivity.sIsOnPauseCalled) {
    207             fail();
    208             return;
    209         }
    210 
    211         sResult.setResult(CTSResult.RESULT_OK);
    212         finish();
    213     }
    214 
    215     private void testDispatchStop() {
    216         final String id = "id_dispatch_stop";
    217         final Intent intent = new Intent(this, LocalActivityManagerStubActivity.class);
    218         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    219         mLocalActivityManager.startActivity(id, intent);
    220         if (mLocalActivityManager.getCurrentActivity() == null) {
    221             fail();
    222             return;
    223         }
    224 
    225         LocalActivityManagerStubActivity.sIsOnStopCalled = false;
    226         mLocalActivityManager.dispatchStop();
    227 
    228         if (!LocalActivityManagerStubActivity.sIsOnStopCalled) {
    229             fail();
    230             return;
    231         }
    232 
    233         sResult.setResult(CTSResult.RESULT_OK);
    234         finish();
    235     }
    236 
    237     private void testDispatchCreate() {
    238         final Bundle EXPECTED = new Bundle();
    239         final String id = "id";
    240 
    241         final Intent intent = new Intent(this, LocalActivityManagerStubActivity.class);
    242         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    243         mLocalActivityManager.startActivity("_id" + System.currentTimeMillis(), intent);
    244         final Bundle bundle = mLocalActivityManager.saveInstanceState();
    245         if (bundle == null) {
    246             fail();
    247             return;
    248         }
    249 
    250         if (bundle.keySet().size() != 1) {
    251             fail();
    252             return;
    253         }
    254 
    255         bundle.putBundle(id, EXPECTED);
    256         // test null parameter
    257         mLocalActivityManager.dispatchCreate(null);
    258 
    259         if (mLocalActivityManager.saveInstanceState().keySet().size() != 1) {
    260             fail();
    261             return;
    262         }
    263 
    264         mLocalActivityManager.dispatchCreate(bundle);
    265 
    266         final Bundle b = mLocalActivityManager.saveInstanceState();
    267         final Bundle bb = b.getBundle(id);
    268         if (bb != EXPECTED) {
    269             fail();
    270             return;
    271         }
    272         sResult.setResult(CTSResult.RESULT_OK);
    273         finish();
    274     }
    275 
    276     private void testStartActivity() {
    277         final Intent intent = new Intent(this, LocalActivityManagerStubActivity.class);
    278         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    279         final String id = "_id_resume_test";
    280         final Window w = mLocalActivityManager.startActivity(id, intent);
    281         if (w == null) {
    282             fail();
    283             return;
    284         }
    285 
    286         Activity activity = mLocalActivityManager.getActivity(id);
    287         if (activity == null) {
    288             fail();
    289             return;
    290         }
    291 
    292         // testing null id
    293         activity = mLocalActivityManager.getActivity("null id");
    294         if (activity != null) {
    295             fail();
    296             return;
    297         }
    298 
    299         if (!mLocalActivityManager.getCurrentId().equals(id)) {
    300             fail();
    301             return;
    302         }
    303 
    304         if (mLocalActivityManager.getActivity(id) != mLocalActivityManager
    305                 .getCurrentActivity()) {
    306             fail();
    307             return;
    308         }
    309 
    310         if (mLocalActivityManager.destroyActivity(id, true) == null) {
    311             fail();
    312             return;
    313         }
    314 
    315         if (mLocalActivityManager.startActivity(null, intent) == null) {
    316             fail();
    317             return;
    318         }
    319 
    320         try {
    321             // test when calling startActivity with both null parameter.
    322             mLocalActivityManager.startActivity(null, null);
    323             fail();
    324             return;
    325         } catch (NullPointerException e) {
    326         }
    327         sResult.setResult(CTSResult.RESULT_OK);
    328         finish();
    329     }
    330 
    331     private void fail() {
    332         sResult.setResult(CTSResult.RESULT_FAIL);
    333         finish();
    334     }
    335 
    336     private void testDispatchResume() {
    337         final Intent intent = new Intent(this, LocalActivityManagerStubActivity.class);
    338         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    339         mLocalActivityManager.startActivity("_id_resume_test", intent);
    340         mLocalActivityManager.dispatchStop();
    341         LocalActivityManagerStubActivity.sIsOnResumeCalled = false;
    342         mLocalActivityManager.dispatchResume();
    343         if (LocalActivityManagerStubActivity.sIsOnResumeCalled) {
    344             sResult.setResult(CTSResult.RESULT_OK);
    345         } else {
    346             sResult.setResult(CTSResult.RESULT_FAIL);
    347         }
    348         finish();
    349     }
    350 
    351 }
    352