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