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