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