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