1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of 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, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.internal.telephony.gsm; 18 19import android.content.Context; 20import android.os.AsyncResult; 21import android.os.Message; 22import android.os.SystemClock; 23import android.util.Log; 24 25import com.android.internal.telephony.BaseCommands; 26import com.android.internal.telephony.IccIoResult; 27import com.android.internal.telephony.UUSInfo; 28 29import junit.framework.Assert; 30 31/** 32 * Dummy BaseCommands for UsimDataDownloadTest. Only implements UICC envelope and 33 * SMS acknowledgement commands. 34 */ 35class UsimDataDownloadCommands extends BaseCommands { 36 private static final String TAG = "UsimDataDownloadCommands"; 37 38 private boolean mExpectingAcknowledgeGsmSms; // true if expecting ack GSM SMS 39 private boolean mExpectingAcknowledgeGsmSmsSuccess; // true if expecting ack SMS success 40 private int mExpectingAcknowledgeGsmSmsFailureCause; // expecting ack SMS failure cause 41 private String mExpectingAcknowledgeGsmSmsPdu; // expecting ack SMS PDU 42 43 private boolean mExpectingSendEnvelope; // true to expect a send envelope command 44 private String mExpectingSendEnvelopeContents; // expected string for send envelope 45 private int mExpectingSendEnvelopeResponseSw1; // SW1/SW2 response status 46 private int mExpectingSendEnvelopeResponseSw2; // SW1/SW2 response status 47 private String mExpectingSendEnvelopeResponse; // Response string for Send Envelope 48 49 UsimDataDownloadCommands(Context context) { 50 super(context); 51 } 52 53 /** 54 * Expect a call to acknowledgeLastIncomingGsmSms with success flag and failure cause. 55 * @param success true if expecting success; false if expecting failure 56 * @param cause the failure cause, if success is false 57 */ 58 synchronized void expectAcknowledgeGsmSms(boolean success, int cause) { 59 Assert.assertFalse("expectAcknowledgeGsmSms called twice", mExpectingAcknowledgeGsmSms); 60 mExpectingAcknowledgeGsmSms = true; 61 mExpectingAcknowledgeGsmSmsSuccess = success; 62 mExpectingAcknowledgeGsmSmsFailureCause = cause; 63 } 64 65 /** 66 * Expect a call to acknowledgeLastIncomingGsmSmsWithPdu with success flag and PDU. 67 * @param success true if expecting success; false if expecting failure 68 * @param ackPdu the acknowledgement PDU to expect 69 */ 70 synchronized void expectAcknowledgeGsmSmsWithPdu(boolean success, String ackPdu) { 71 Assert.assertFalse("expectAcknowledgeGsmSms called twice", mExpectingAcknowledgeGsmSms); 72 mExpectingAcknowledgeGsmSms = true; 73 mExpectingAcknowledgeGsmSmsSuccess = success; 74 mExpectingAcknowledgeGsmSmsPdu = ackPdu; 75 } 76 77 /** 78 * Expect a call to sendEnvelopeWithStatus(). 79 * @param contents expected envelope contents to send 80 * @param sw1 simulated SW1 status to return 81 * @param sw2 simulated SW2 status to return 82 * @param response simulated envelope response to return 83 */ 84 synchronized void expectSendEnvelope(String contents, int sw1, int sw2, String response) { 85 Assert.assertFalse("expectSendEnvelope called twice", mExpectingSendEnvelope); 86 mExpectingSendEnvelope = true; 87 mExpectingSendEnvelopeContents = contents; 88 mExpectingSendEnvelopeResponseSw1 = sw1; 89 mExpectingSendEnvelopeResponseSw2 = sw2; 90 mExpectingSendEnvelopeResponse = response; 91 } 92 93 synchronized void assertExpectedMethodsCalled() { 94 long stopTime = SystemClock.elapsedRealtime() + 5000; 95 while ((mExpectingAcknowledgeGsmSms || mExpectingSendEnvelope) 96 && SystemClock.elapsedRealtime() < stopTime) { 97 try { 98 wait(); 99 } catch (InterruptedException ignored) {} 100 } 101 Assert.assertFalse("expecting SMS acknowledge call", mExpectingAcknowledgeGsmSms); 102 Assert.assertFalse("expecting send envelope call", mExpectingSendEnvelope); 103 } 104 105 @Override 106 public synchronized void acknowledgeLastIncomingGsmSms(boolean success, int cause, 107 Message response) { 108 Log.d(TAG, "acknowledgeLastIncomingGsmSms: success=" + success + ", cause=" + cause); 109 Assert.assertTrue("unexpected call to acknowledge SMS", mExpectingAcknowledgeGsmSms); 110 Assert.assertEquals(mExpectingAcknowledgeGsmSmsSuccess, success); 111 Assert.assertEquals(mExpectingAcknowledgeGsmSmsFailureCause, cause); 112 mExpectingAcknowledgeGsmSms = false; 113 if (response != null) { 114 AsyncResult.forMessage(response); 115 response.sendToTarget(); 116 } 117 notifyAll(); // wake up assertExpectedMethodsCalled() 118 } 119 120 @Override 121 public synchronized void acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, 122 Message response) { 123 Log.d(TAG, "acknowledgeLastIncomingGsmSmsWithPdu: success=" + success 124 + ", ackPDU= " + ackPdu); 125 Assert.assertTrue("unexpected call to acknowledge SMS", mExpectingAcknowledgeGsmSms); 126 Assert.assertEquals(mExpectingAcknowledgeGsmSmsSuccess, success); 127 Assert.assertEquals(mExpectingAcknowledgeGsmSmsPdu, ackPdu); 128 mExpectingAcknowledgeGsmSms = false; 129 if (response != null) { 130 AsyncResult.forMessage(response); 131 response.sendToTarget(); 132 } 133 notifyAll(); // wake up assertExpectedMethodsCalled() 134 } 135 136 @Override 137 public synchronized void sendEnvelopeWithStatus(String contents, Message response) { 138 // Add spaces between hex bytes for readability 139 StringBuilder builder = new StringBuilder(); 140 for (int i = 0; i < contents.length(); i += 2) { 141 builder.append(contents.charAt(i)).append(contents.charAt(i+1)).append(' '); 142 } 143 Log.d(TAG, "sendEnvelopeWithStatus: " + builder.toString()); 144 145 Assert.assertTrue("unexpected call to send envelope", mExpectingSendEnvelope); 146 Assert.assertEquals(mExpectingSendEnvelopeContents, contents); 147 mExpectingSendEnvelope = false; 148 149 IccIoResult result = new IccIoResult(mExpectingSendEnvelopeResponseSw1, 150 mExpectingSendEnvelopeResponseSw2, mExpectingSendEnvelopeResponse); 151 152 if (response != null) { 153 AsyncResult.forMessage(response, result, null); 154 response.sendToTarget(); 155 } 156 notifyAll(); // wake up assertExpectedMethodsCalled() 157 } 158 159 @Override 160 public void setSuppServiceNotifications(boolean enable, Message result) { 161 } 162 163 @Override 164 public void supplyIccPin(String pin, Message result) { 165 } 166 167 @Override 168 public void supplyIccPinForApp(String pin, String aid, Message result) { 169 } 170 171 @Override 172 public void supplyIccPuk(String puk, String newPin, Message result) { 173 } 174 175 @Override 176 public void supplyIccPukForApp(String puk, String newPin, String aid, Message result) { 177 } 178 179 @Override 180 public void supplyIccPin2(String pin2, Message result) { 181 } 182 183 @Override 184 public void supplyIccPin2ForApp(String pin2, String aid, Message result) { 185 } 186 187 @Override 188 public void supplyIccPuk2(String puk2, String newPin2, Message result) { 189 } 190 191 @Override 192 public void supplyIccPuk2ForApp(String puk2, String newPin2, String aid, Message result) { 193 } 194 195 @Override 196 public void changeIccPin(String oldPin, String newPin, Message result) { 197 } 198 199 @Override 200 public void changeIccPinForApp(String oldPin, String newPin, String aidPtr, Message result) { 201 } 202 203 @Override 204 public void changeIccPin2(String oldPin2, String newPin2, Message result) { 205 } 206 207 @Override 208 public void changeIccPin2ForApp(String oldPin2, String newPin2, String aidPtr, Message result) { 209 } 210 211 @Override 212 public void changeBarringPassword(String facility, String oldPwd, String newPwd, 213 Message result) { 214 } 215 216 @Override 217 public void supplyNetworkDepersonalization(String netpin, Message result) { 218 } 219 220 @Override 221 public void getCurrentCalls(Message result) { 222 } 223 224 @Override 225 public void getPDPContextList(Message result) { 226 } 227 228 @Override 229 public void getDataCallList(Message result) { 230 } 231 232 @Override 233 public void dial(String address, int clirMode, Message result) { 234 } 235 236 @Override 237 public void dial(String address, int clirMode, UUSInfo uusInfo, Message result) { 238 } 239 240 @Override 241 public void getIMSI(Message result) { 242 } 243 244 @Override 245 public void getIMEI(Message result) { 246 } 247 248 @Override 249 public void getIMEISV(Message result) { 250 } 251 252 @Override 253 public void hangupConnection(int gsmIndex, Message result) { 254 } 255 256 @Override 257 public void hangupWaitingOrBackground(Message result) { 258 } 259 260 @Override 261 public void hangupForegroundResumeBackground(Message result) { 262 } 263 264 @Override 265 public void switchWaitingOrHoldingAndActive(Message result) { 266 } 267 268 @Override 269 public void conference(Message result) { 270 } 271 272 @Override 273 public void setPreferredVoicePrivacy(boolean enable, Message result) { 274 } 275 276 @Override 277 public void getPreferredVoicePrivacy(Message result) { 278 } 279 280 @Override 281 public void separateConnection(int gsmIndex, Message result) { 282 } 283 284 @Override 285 public void acceptCall(Message result) { 286 } 287 288 @Override 289 public void rejectCall(Message result) { 290 } 291 292 @Override 293 public void explicitCallTransfer(Message result) { 294 } 295 296 @Override 297 public void getLastCallFailCause(Message result) { 298 } 299 300 @Override 301 public void getLastPdpFailCause(Message result) { 302 } 303 304 @Override 305 public void getLastDataCallFailCause(Message result) { 306 } 307 308 @Override 309 public void setMute(boolean enableMute, Message response) { 310 } 311 312 @Override 313 public void getMute(Message response) { 314 } 315 316 @Override 317 public void getSignalStrength(Message response) { 318 } 319 320 @Override 321 public void getVoiceRegistrationState(Message response) { 322 } 323 324 @Override 325 public void getDataRegistrationState(Message response) { 326 } 327 328 @Override 329 public void getOperator(Message response) { 330 } 331 332 @Override 333 public void sendDtmf(char c, Message result) { 334 } 335 336 @Override 337 public void startDtmf(char c, Message result) { 338 } 339 340 @Override 341 public void stopDtmf(Message result) { 342 } 343 344 @Override 345 public void sendBurstDtmf(String dtmfString, int on, int off, Message result) { 346 } 347 348 @Override 349 public void sendSMS(String smscPDU, String pdu, Message response) { 350 } 351 352 @Override 353 public void sendCdmaSms(byte[] pdu, Message response) { 354 } 355 356 @Override 357 public void deleteSmsOnSim(int index, Message response) { 358 } 359 360 @Override 361 public void deleteSmsOnRuim(int index, Message response) { 362 } 363 364 @Override 365 public void writeSmsToSim(int status, String smsc, String pdu, Message response) { 366 } 367 368 @Override 369 public void writeSmsToRuim(int status, String pdu, Message response) { 370 } 371 372 @Override 373 public void setRadioPower(boolean on, Message response) { 374 } 375 376 @Override 377 public void acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message response) { 378 } 379 380 @Override 381 public void iccIO(int command, int fileid, String path, int p1, int p2, int p3, String data, 382 String pin2, Message response) { 383 } 384 385 @Override 386 public void queryCLIP(Message response) { 387 } 388 389 @Override 390 public void getCLIR(Message response) { 391 } 392 393 @Override 394 public void setCLIR(int clirMode, Message response) { 395 } 396 397 @Override 398 public void queryCallWaiting(int serviceClass, Message response) { 399 } 400 401 @Override 402 public void setCallWaiting(boolean enable, int serviceClass, Message response) { 403 } 404 405 @Override 406 public void setCallForward(int action, int cfReason, int serviceClass, String number, 407 int timeSeconds, Message response) { 408 } 409 410 @Override 411 public void queryCallForwardStatus(int cfReason, int serviceClass, String number, 412 Message response) { 413 } 414 415 @Override 416 public void setNetworkSelectionModeAutomatic(Message response) { 417 } 418 419 @Override 420 public void setNetworkSelectionModeManual(String operatorNumeric, Message response) { 421 } 422 423 @Override 424 public void getNetworkSelectionMode(Message response) { 425 } 426 427 @Override 428 public void getAvailableNetworks(Message response) { 429 } 430 431 @Override 432 public void getBasebandVersion(Message response) { 433 } 434 435 @Override 436 public void queryFacilityLock(String facility, String password, int serviceClass, 437 Message response) { 438 } 439 440 @Override 441 public void queryFacilityLockForApp(String facility, String password, int serviceClass, 442 String appId, Message response) { 443 } 444 445 @Override 446 public void setFacilityLock(String facility, boolean lockState, String password, 447 int serviceClass, Message response) { 448 } 449 450 @Override 451 public void setFacilityLockForApp(String facility, boolean lockState, String password, 452 int serviceClass, String appId, Message response) { 453 } 454 455 @Override 456 public void sendUSSD(String ussdString, Message response) { 457 } 458 459 @Override 460 public void cancelPendingUssd(Message response) { 461 } 462 463 @Override 464 public void resetRadio(Message result) { 465 } 466 467 @Override 468 public void setBandMode(int bandMode, Message response) { 469 } 470 471 @Override 472 public void queryAvailableBandMode(Message response) { 473 } 474 475 @Override 476 public void setPreferredNetworkType(int networkType, Message response) { 477 } 478 479 @Override 480 public void getPreferredNetworkType(Message response) { 481 } 482 483 @Override 484 public void getNeighboringCids(Message response) { 485 } 486 487 @Override 488 public void setLocationUpdates(boolean enable, Message response) { 489 } 490 491 @Override 492 public void getSmscAddress(Message result) { 493 } 494 495 @Override 496 public void setSmscAddress(String address, Message result) { 497 } 498 499 @Override 500 public void reportSmsMemoryStatus(boolean available, Message result) { 501 } 502 503 @Override 504 public void reportStkServiceIsRunning(Message result) { 505 } 506 507 @Override 508 public void invokeOemRilRequestRaw(byte[] data, Message response) { 509 } 510 511 @Override 512 public void invokeOemRilRequestStrings(String[] strings, Message response) { 513 } 514 515 @Override 516 public void sendTerminalResponse(String contents, Message response) { 517 } 518 519 @Override 520 public void sendEnvelope(String contents, Message response) { 521 } 522 523 @Override 524 public void handleCallSetupRequestFromSim(boolean accept, Message response) { 525 } 526 527 @Override 528 public void setGsmBroadcastActivation(boolean activate, Message result) { 529 } 530 531 @Override 532 public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) { 533 } 534 535 @Override 536 public void getGsmBroadcastConfig(Message response) { 537 } 538 539 @Override 540 public void getDeviceIdentity(Message response) { 541 } 542 543 @Override 544 public void getCDMASubscription(Message response) { 545 } 546 547 @Override 548 public void sendCDMAFeatureCode(String FeatureCode, Message response) { 549 } 550 551 @Override 552 public void setPhoneType(int phoneType) { 553 } 554 555 @Override 556 public void queryCdmaRoamingPreference(Message response) { 557 } 558 559 @Override 560 public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) { 561 } 562 563 @Override 564 public void setCdmaSubscriptionSource(int cdmaSubscriptionType, Message response) { 565 } 566 567 @Override 568 public void getCdmaSubscriptionSource(Message response) { 569 } 570 571 @Override 572 public void setTTYMode(int ttyMode, Message response) { 573 } 574 575 @Override 576 public void queryTTYMode(Message response) { 577 } 578 579 @Override 580 public void setupDataCall(String radioTechnology, String profile, String apn, String user, 581 String password, String authType, String protocol, Message result) { 582 } 583 584 @Override 585 public void deactivateDataCall(int cid, int reason, Message result) { 586 } 587 588 @Override 589 public void setCdmaBroadcastActivation(boolean activate, Message result) { 590 } 591 592 @Override 593 public void setCdmaBroadcastConfig(int[] configValuesArray, Message result) { 594 } 595 596 @Override 597 public void getCdmaBroadcastConfig(Message result) { 598 } 599 600 @Override 601 public void exitEmergencyCallbackMode(Message response) { 602 } 603 604 @Override 605 public void getIccCardStatus(Message result) { 606 } 607 608 @Override 609 public void requestIsimAuthentication(String nonce, Message response) { 610 } 611 612 @Override 613 public void getVoiceRadioTechnology(Message response) { 614 } 615 616 @Override 617 public void getIMSIForApp(String aid, Message result) { 618 } 619 620 @Override 621 public void iccIOForApp(int command, int fileid, String path, int p1, int p2, int p3, 622 String data, String pin2, String aid, Message response) { 623 } 624} 625