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