blob: 5ce74d1b5944a955dfc25af122902cdbbdcb08f4 [file] [log] [blame]
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.internal.telephony.gsm;
import android.content.Context;
import android.os.AsyncResult;
import android.os.Message;
import android.os.SystemClock;
import android.telephony.Rlog;
import com.android.internal.telephony.BaseCommands;
import com.android.internal.telephony.UUSInfo;
import com.android.internal.telephony.uicc.IccIoResult;
import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
import junit.framework.Assert;
/**
* Dummy BaseCommands for UsimDataDownloadTest. Only implements UICC envelope and
* SMS acknowledgement commands.
*/
class UsimDataDownloadCommands extends BaseCommands {
private static final String TAG = "UsimDataDownloadCommands";
private boolean mExpectingAcknowledgeGsmSms; // true if expecting ack GSM SMS
private boolean mExpectingAcknowledgeGsmSmsSuccess; // true if expecting ack SMS success
private int mExpectingAcknowledgeGsmSmsFailureCause; // expecting ack SMS failure cause
private String mExpectingAcknowledgeGsmSmsPdu; // expecting ack SMS PDU
private boolean mExpectingSendEnvelope; // true to expect a send envelope command
private String mExpectingSendEnvelopeContents; // expected string for send envelope
private int mExpectingSendEnvelopeResponseSw1; // SW1/SW2 response status
private int mExpectingSendEnvelopeResponseSw2; // SW1/SW2 response status
private String mExpectingSendEnvelopeResponse; // Response string for Send Envelope
UsimDataDownloadCommands(Context context) {
super(context);
}
/**
* Expect a call to acknowledgeLastIncomingGsmSms with success flag and failure cause.
* @param success true if expecting success; false if expecting failure
* @param cause the failure cause, if success is false
*/
synchronized void expectAcknowledgeGsmSms(boolean success, int cause) {
Assert.assertFalse("expectAcknowledgeGsmSms called twice", mExpectingAcknowledgeGsmSms);
mExpectingAcknowledgeGsmSms = true;
mExpectingAcknowledgeGsmSmsSuccess = success;
mExpectingAcknowledgeGsmSmsFailureCause = cause;
}
/**
* Expect a call to acknowledgeLastIncomingGsmSmsWithPdu with success flag and PDU.
* @param success true if expecting success; false if expecting failure
* @param ackPdu the acknowledgement PDU to expect
*/
synchronized void expectAcknowledgeGsmSmsWithPdu(boolean success, String ackPdu) {
Assert.assertFalse("expectAcknowledgeGsmSms called twice", mExpectingAcknowledgeGsmSms);
mExpectingAcknowledgeGsmSms = true;
mExpectingAcknowledgeGsmSmsSuccess = success;
mExpectingAcknowledgeGsmSmsPdu = ackPdu;
}
/**
* Expect a call to sendEnvelopeWithStatus().
* @param contents expected envelope contents to send
* @param sw1 simulated SW1 status to return
* @param sw2 simulated SW2 status to return
* @param response simulated envelope response to return
*/
synchronized void expectSendEnvelope(String contents, int sw1, int sw2, String response) {
Assert.assertFalse("expectSendEnvelope called twice", mExpectingSendEnvelope);
mExpectingSendEnvelope = true;
mExpectingSendEnvelopeContents = contents;
mExpectingSendEnvelopeResponseSw1 = sw1;
mExpectingSendEnvelopeResponseSw2 = sw2;
mExpectingSendEnvelopeResponse = response;
}
synchronized void assertExpectedMethodsCalled() {
long stopTime = SystemClock.elapsedRealtime() + 5000;
while ((mExpectingAcknowledgeGsmSms || mExpectingSendEnvelope)
&& SystemClock.elapsedRealtime() < stopTime) {
try {
wait();
} catch (InterruptedException ignored) {}
}
Assert.assertFalse("expecting SMS acknowledge call", mExpectingAcknowledgeGsmSms);
Assert.assertFalse("expecting send envelope call", mExpectingSendEnvelope);
}
@Override
public synchronized void acknowledgeLastIncomingGsmSms(boolean success, int cause,
Message response) {
Rlog.d(TAG, "acknowledgeLastIncomingGsmSms: success=" + success + ", cause=" + cause);
Assert.assertTrue("unexpected call to acknowledge SMS", mExpectingAcknowledgeGsmSms);
Assert.assertEquals(mExpectingAcknowledgeGsmSmsSuccess, success);
Assert.assertEquals(mExpectingAcknowledgeGsmSmsFailureCause, cause);
mExpectingAcknowledgeGsmSms = false;
if (response != null) {
AsyncResult.forMessage(response);
response.sendToTarget();
}
notifyAll(); // wake up assertExpectedMethodsCalled()
}
@Override
public synchronized void acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu,
Message response) {
Rlog.d(TAG, "acknowledgeLastIncomingGsmSmsWithPdu: success=" + success
+ ", ackPDU= " + ackPdu);
Assert.assertTrue("unexpected call to acknowledge SMS", mExpectingAcknowledgeGsmSms);
Assert.assertEquals(mExpectingAcknowledgeGsmSmsSuccess, success);
Assert.assertEquals(mExpectingAcknowledgeGsmSmsPdu, ackPdu);
mExpectingAcknowledgeGsmSms = false;
if (response != null) {
AsyncResult.forMessage(response);
response.sendToTarget();
}
notifyAll(); // wake up assertExpectedMethodsCalled()
}
@Override
public synchronized void sendEnvelopeWithStatus(String contents, Message response) {
// Add spaces between hex bytes for readability
StringBuilder builder = new StringBuilder();
for (int i = 0; i < contents.length(); i += 2) {
builder.append(contents.charAt(i)).append(contents.charAt(i+1)).append(' ');
}
Rlog.d(TAG, "sendEnvelopeWithStatus: " + builder.toString());
Assert.assertTrue("unexpected call to send envelope", mExpectingSendEnvelope);
Assert.assertEquals(mExpectingSendEnvelopeContents, contents);
mExpectingSendEnvelope = false;
IccIoResult result = new IccIoResult(mExpectingSendEnvelopeResponseSw1,
mExpectingSendEnvelopeResponseSw2, mExpectingSendEnvelopeResponse);
if (response != null) {
AsyncResult.forMessage(response, result, null);
response.sendToTarget();
}
notifyAll(); // wake up assertExpectedMethodsCalled()
}
@Override
public void setSuppServiceNotifications(boolean enable, Message result) {
}
@Override
public void supplyIccPin(String pin, Message result) {
}
@Override
public void supplyIccPinForApp(String pin, String aid, Message result) {
}
@Override
public void supplyIccPuk(String puk, String newPin, Message result) {
}
@Override
public void supplyIccPukForApp(String puk, String newPin, String aid, Message result) {
}
@Override
public void supplyIccPin2(String pin2, Message result) {
}
@Override
public void supplyIccPin2ForApp(String pin2, String aid, Message result) {
}
@Override
public void supplyIccPuk2(String puk2, String newPin2, Message result) {
}
@Override
public void supplyIccPuk2ForApp(String puk2, String newPin2, String aid, Message result) {
}
@Override
public void changeIccPin(String oldPin, String newPin, Message result) {
}
@Override
public void changeIccPinForApp(String oldPin, String newPin, String aidPtr, Message result) {
}
@Override
public void changeIccPin2(String oldPin2, String newPin2, Message result) {
}
@Override
public void changeIccPin2ForApp(String oldPin2, String newPin2, String aidPtr, Message result) {
}
@Override
public void changeBarringPassword(String facility, String oldPwd, String newPwd,
Message result) {
}
@Override
public void supplyNetworkDepersonalization(String netpin, Message result) {
}
@Override
public void getCurrentCalls(Message result) {
}
@Override
public void getPDPContextList(Message result) {
}
@Override
public void getDataCallList(Message result) {
}
@Override
public void dial(String address, int clirMode, Message result) {
}
@Override
public void dial(String address, int clirMode, UUSInfo uusInfo, Message result) {
}
@Override
public void getIMSI(Message result) {
}
@Override
public void getIMEI(Message result) {
}
@Override
public void getIMEISV(Message result) {
}
@Override
public void hangupConnection(int gsmIndex, Message result) {
}
@Override
public void hangupWaitingOrBackground(Message result) {
}
@Override
public void hangupForegroundResumeBackground(Message result) {
}
@Override
public void switchWaitingOrHoldingAndActive(Message result) {
}
@Override
public void conference(Message result) {
}
@Override
public void setPreferredVoicePrivacy(boolean enable, Message result) {
}
@Override
public void getPreferredVoicePrivacy(Message result) {
}
@Override
public void separateConnection(int gsmIndex, Message result) {
}
@Override
public void acceptCall(Message result) {
}
@Override
public void rejectCall(Message result) {
}
@Override
public void explicitCallTransfer(Message result) {
}
@Override
public void getLastCallFailCause(Message result) {
}
@Override
public void getLastPdpFailCause(Message result) {
}
@Override
public void getLastDataCallFailCause(Message result) {
}
@Override
public void setMute(boolean enableMute, Message response) {
}
@Override
public void getMute(Message response) {
}
@Override
public void getSignalStrength(Message response) {
}
@Override
public void getVoiceRegistrationState(Message response) {
}
@Override
public void getDataRegistrationState(Message response) {
}
@Override
public void getOperator(Message response) {
}
@Override
public void sendDtmf(char c, Message result) {
}
@Override
public void startDtmf(char c, Message result) {
}
@Override
public void stopDtmf(Message result) {
}
@Override
public void sendBurstDtmf(String dtmfString, int on, int off, Message result) {
}
@Override
public void sendSMS(String smscPDU, String pdu, Message response) {
}
@Override
public void sendCdmaSms(byte[] pdu, Message response) {
}
@Override
public void sendImsGsmSms (String smscPDU, String pdu,
int retry, int messageRef, Message response) {
}
@Override
public void sendImsCdmaSms(byte[] pdu, int retry, int messageRef,
Message response) {
}
@Override
public void deleteSmsOnSim(int index, Message response) {
}
@Override
public void deleteSmsOnRuim(int index, Message response) {
}
@Override
public void writeSmsToSim(int status, String smsc, String pdu, Message response) {
}
@Override
public void writeSmsToRuim(int status, String pdu, Message response) {
}
@Override
public void setRadioPower(boolean on, Message response) {
}
@Override
public void acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message response) {
}
@Override
public void iccIO(int command, int fileid, String path, int p1, int p2, int p3, String data,
String pin2, Message response) {
}
@Override
public void queryCLIP(Message response) {
}
@Override
public void getCLIR(Message response) {
}
@Override
public void setCLIR(int clirMode, Message response) {
}
@Override
public void queryCallWaiting(int serviceClass, Message response) {
}
@Override
public void setCallWaiting(boolean enable, int serviceClass, Message response) {
}
@Override
public void setCallForward(int action, int cfReason, int serviceClass, String number,
int timeSeconds, Message response) {
}
@Override
public void queryCallForwardStatus(int cfReason, int serviceClass, String number,
Message response) {
}
@Override
public void setNetworkSelectionModeAutomatic(Message response) {
}
@Override
public void setNetworkSelectionModeManual(String operatorNumeric, Message response) {
}
@Override
public void getNetworkSelectionMode(Message response) {
}
@Override
public void getAvailableNetworks(Message response) {
}
@Override
public void getBasebandVersion(Message response) {
}
@Override
public void queryFacilityLock(String facility, String password, int serviceClass,
Message response) {
}
@Override
public void queryFacilityLockForApp(String facility, String password, int serviceClass,
String appId, Message response) {
}
@Override
public void setFacilityLock(String facility, boolean lockState, String password,
int serviceClass, Message response) {
}
@Override
public void setFacilityLockForApp(String facility, boolean lockState, String password,
int serviceClass, String appId, Message response) {
}
@Override
public void sendUSSD(String ussdString, Message response) {
}
@Override
public void cancelPendingUssd(Message response) {
}
@Override
public void resetRadio(Message result) {
}
@Override
public void setBandMode(int bandMode, Message response) {
}
@Override
public void queryAvailableBandMode(Message response) {
}
@Override
public void setPreferredNetworkType(int networkType, Message response) {
}
@Override
public void getPreferredNetworkType(Message response) {
}
@Override
public void getNeighboringCids(Message response) {
}
@Override
public void setLocationUpdates(boolean enable, Message response) {
}
@Override
public void getSmscAddress(Message result) {
}
@Override
public void setSmscAddress(String address, Message result) {
}
@Override
public void reportSmsMemoryStatus(boolean available, Message result) {
}
@Override
public void reportStkServiceIsRunning(Message result) {
}
@Override
public void invokeOemRilRequestRaw(byte[] data, Message response) {
}
@Override
public void invokeOemRilRequestStrings(String[] strings, Message response) {
}
@Override
public void sendTerminalResponse(String contents, Message response) {
}
@Override
public void sendEnvelope(String contents, Message response) {
}
@Override
public void handleCallSetupRequestFromSim(boolean accept, Message response) {
}
@Override
public void setGsmBroadcastActivation(boolean activate, Message result) {
}
@Override
public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) {
}
@Override
public void getGsmBroadcastConfig(Message response) {
}
@Override
public void getDeviceIdentity(Message response) {
}
@Override
public void getCDMASubscription(Message response) {
}
@Override
public void getImsRegistrationState (Message result) {
}
@Override
public void sendCDMAFeatureCode(String FeatureCode, Message response) {
}
@Override
public void setPhoneType(int phoneType) {
}
@Override
public void queryCdmaRoamingPreference(Message response) {
}
@Override
public void setCdmaRoamingPreference(int cdmaRoamingType, Message response) {
}
@Override
public void setCdmaSubscriptionSource(int cdmaSubscriptionType, Message response) {
}
@Override
public void getCdmaSubscriptionSource(Message response) {
}
@Override
public void setTTYMode(int ttyMode, Message response) {
}
@Override
public void queryTTYMode(Message response) {
}
@Override
public void setupDataCall(String radioTechnology, String profile, String apn, String user,
String password, String authType, String protocol, Message result) {
}
@Override
public void deactivateDataCall(int cid, int reason, Message result) {
}
@Override
public void setCdmaBroadcastActivation(boolean activate, Message result) {
}
@Override
public void setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message response) {
}
@Override
public void getCdmaBroadcastConfig(Message result) {
}
@Override
public void exitEmergencyCallbackMode(Message response) {
}
@Override
public void getIccCardStatus(Message result) {
}
@Override
public void requestIsimAuthentication(String nonce, Message response) {
}
@Override
public void requestIccSimAuthentication(String data, Message response) {
}
@Override
public void getVoiceRadioTechnology(Message response) {
}
@Override
public void getCellInfoList(Message result) {
}
@Override
public void setCellInfoListRate(int rateInMillis, Message response) {
}
@Override
public void setInitialAttachApn(String apn, String protocol, int authType, String username,
String password, Message result) {
}
@Override
public void setDataProfile(DataProfile[] dps, Message result) {
}
@Override
public void getIMSIForApp(String aid, Message result) {
}
@Override
public void iccIOForApp(int command, int fileid, String path, int p1, int p2, int p3,
String data, String pin2, String aid, Message response) {
}
@Override
public void iccOpenLogicalChannel(String AID, Message response) {
}
@Override
public void iccCloseLogicalChannel(int channel, Message response) {
}
@Override
public void iccTransmitApduLogicalChannel(int channel, int cla, int instruction,
int p1, int p2, int p3, String data, Message response) {
}
@Override
public void iccTransmitApduBasicChannel(int cla, int instruction, int p1, int p2,
int p3, String data, Message response) {
}
@Override
public void nvReadItem(int itemID, Message response) {
}
@Override
public void nvWriteItem(int itemID, String itemValue, Message response) {
}
@Override
public void nvWriteCdmaPrl(byte[] preferredRoamingList, Message response) {
}
@Override
public void nvResetConfig(int resetType, Message response) {
}
}