1 /*
2  * Copyright (C) 2016 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 
17 package com.android.internal.telephony;
18 
19 import android.content.Context;
20 import android.hardware.radio.V1_0.ActivityStatsInfo;
21 import android.hardware.radio.V1_0.AppStatus;
22 import android.hardware.radio.V1_0.CardStatus;
23 import android.hardware.radio.V1_0.CarrierRestrictions;
24 import android.hardware.radio.V1_0.CdmaBroadcastSmsConfigInfo;
25 import android.hardware.radio.V1_0.DataRegStateResult;
26 import android.hardware.radio.V1_0.GsmBroadcastSmsConfigInfo;
27 import android.hardware.radio.V1_0.LastCallFailCauseInfo;
28 import android.hardware.radio.V1_0.LceDataInfo;
29 import android.hardware.radio.V1_0.LceStatusInfo;
30 import android.hardware.radio.V1_0.NeighboringCell;
31 import android.hardware.radio.V1_0.RadioError;
32 import android.hardware.radio.V1_0.RadioResponseInfo;
33 import android.hardware.radio.V1_0.SendSmsResult;
34 import android.hardware.radio.V1_0.SetupDataCallResult;
35 import android.hardware.radio.V1_0.VoiceRegStateResult;
36 import android.hardware.radio.V1_2.IRadioResponse;
37 import android.os.AsyncResult;
38 import android.os.Message;
39 import android.os.SystemClock;
40 import android.service.carrier.CarrierIdentifier;
41 import android.telephony.CellInfo;
42 import android.telephony.ModemActivityInfo;
43 import android.telephony.NeighboringCellInfo;
44 import android.telephony.PhoneNumberUtils;
45 import android.telephony.SignalStrength;
46 import android.telephony.SubscriptionManager;
47 import android.telephony.TelephonyManager;
48 import android.text.TextUtils;
49 
50 import com.android.internal.telephony.dataconnection.KeepaliveStatus;
51 import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
52 import com.android.internal.telephony.uicc.IccCardApplicationStatus;
53 import com.android.internal.telephony.uicc.IccCardStatus;
54 import com.android.internal.telephony.uicc.IccIoResult;
55 import com.android.internal.telephony.uicc.IccUtils;
56 
57 import java.util.ArrayList;
58 import java.util.Collections;
59 import java.util.List;
60 
61 public class RadioResponse extends IRadioResponse.Stub {
62     // The number of the required config values for broadcast SMS stored in the C struct
63     // RIL_CDMA_BroadcastServiceInfo
64     private static final int CDMA_BSI_NO_OF_INTS_STRUCT = 3;
65 
66     private static final int CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES = 31;
67 
68     RIL mRil;
69 
RadioResponse(RIL ril)70     public RadioResponse(RIL ril) {
71         mRil = ril;
72     }
73 
74     /**
75      * Helper function to send response msg
76      * @param msg Response message to be sent
77      * @param ret Return object to be included in the response message
78      */
sendMessageResponse(Message msg, Object ret)79     static void sendMessageResponse(Message msg, Object ret) {
80         if (msg != null) {
81             AsyncResult.forMessage(msg, ret, null);
82             msg.sendToTarget();
83         }
84     }
85 
86     /**
87      * Acknowledge the receipt of radio request sent to the vendor. This must be sent only for
88      * radio request which take long time to respond.
89      * For more details, refer https://source.android.com/devices/tech/connect/ril.html
90      *
91      * @param serial Serial no. of the request whose acknowledgement is sent.
92      */
acknowledgeRequest(int serial)93     public void acknowledgeRequest(int serial) {
94         mRil.processRequestAck(serial);
95     }
96 
97     /**
98      * @param responseInfo Response info struct containing response type, serial no. and error
99      * @param cardStatus ICC card status as defined by CardStatus in types.hal
100      */
getIccCardStatusResponse(RadioResponseInfo responseInfo, CardStatus cardStatus)101     public void getIccCardStatusResponse(RadioResponseInfo responseInfo, CardStatus cardStatus) {
102         responseIccCardStatus(responseInfo, cardStatus);
103     }
104 
105     /**
106      * @param responseInfo Response info struct containing response type, serial no. and error
107      * @param cardStatus ICC card status as defined by CardStatus in 1.2/types.hal
108      */
getIccCardStatusResponse_1_2(RadioResponseInfo responseInfo, android.hardware.radio.V1_2.CardStatus cardStatus)109     public void getIccCardStatusResponse_1_2(RadioResponseInfo responseInfo,
110                                              android.hardware.radio.V1_2.CardStatus cardStatus) {
111         responseIccCardStatus_1_2(responseInfo, cardStatus);
112     }
113 
114     /**
115      * @param responseInfo Response info struct containing response type, serial no. and error
116      * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
117      */
supplyIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)118     public void supplyIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
119         responseInts(responseInfo, remainingAttempts);
120     }
121 
122     /**
123      * @param responseInfo Response info struct containing response type, serial no. and error
124      * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
125      */
supplyIccPukForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)126     public void supplyIccPukForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
127         responseInts(responseInfo, remainingAttempts);
128     }
129 
130     /**
131      * @param responseInfo Response info struct containing response type, serial no. and error
132      * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
133      */
supplyIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)134     public void supplyIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
135         responseInts(responseInfo, remainingAttempts);
136     }
137 
138     /**
139      * @param responseInfo Response info struct containing response type, serial no. and error
140      * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
141      */
supplyIccPuk2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)142     public void supplyIccPuk2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
143         responseInts(responseInfo, remainingAttempts);
144     }
145 
146     /**
147      * @param responseInfo Response info struct containing response type, serial no. and error
148      * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
149      */
changeIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)150     public void changeIccPinForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
151         responseInts(responseInfo, remainingAttempts);
152     }
153 
154     /**
155      * @param responseInfo Response info struct containing response type, serial no. and error
156      * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
157      */
changeIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts)158     public void changeIccPin2ForAppResponse(RadioResponseInfo responseInfo, int remainingAttempts) {
159         responseInts(responseInfo, remainingAttempts);
160     }
161 
162     /**
163      * @param responseInfo Response info struct containing response type, serial no. and error
164      * @param retriesRemaining Number of retries remaining, must be equal to -1 if unknown.
165      */
supplyNetworkDepersonalizationResponse(RadioResponseInfo responseInfo, int retriesRemaining)166     public void supplyNetworkDepersonalizationResponse(RadioResponseInfo responseInfo,
167                                                        int retriesRemaining) {
168         responseInts(responseInfo, retriesRemaining);
169     }
170 
171     /**
172      * @param responseInfo Response info struct containing response type, serial no. and error
173      * @param calls Current call list
174      */
getCurrentCallsResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.Call> calls)175     public void getCurrentCallsResponse(RadioResponseInfo responseInfo,
176                                         ArrayList<android.hardware.radio.V1_0.Call> calls) {
177         responseCurrentCalls(responseInfo, calls);
178     }
179 
180     /**
181      * @param responseInfo Response info struct containing response type, serial no. and error
182      * @param calls Current call list
183      */
getCurrentCallsResponse_1_2(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_2.Call> calls)184     public void getCurrentCallsResponse_1_2(RadioResponseInfo responseInfo,
185                                         ArrayList<android.hardware.radio.V1_2.Call> calls) {
186         responseCurrentCalls_1_2(responseInfo, calls);
187     }
188 
189     /**
190      * @param responseInfo Response info struct containing response type, serial no. and error
191      */
dialResponse(RadioResponseInfo responseInfo)192     public void dialResponse(RadioResponseInfo responseInfo) {
193         responseVoid(responseInfo);
194     }
195 
196     /**
197      * @param responseInfo Response info struct containing response type, serial no. and error
198      * @param imsi String containing the IMSI
199      */
getIMSIForAppResponse(RadioResponseInfo responseInfo, String imsi)200     public void getIMSIForAppResponse(RadioResponseInfo responseInfo, String imsi) {
201         responseString(responseInfo, imsi);
202     }
203 
204     /**
205      * @param responseInfo Response info struct containing response type, serial no. and error
206      */
hangupConnectionResponse(RadioResponseInfo responseInfo)207     public void hangupConnectionResponse(RadioResponseInfo responseInfo) {
208         responseVoid(responseInfo);
209     }
210 
211     /**
212      * @param responseInfo Response info struct containing response type, serial no. and error
213      */
hangupWaitingOrBackgroundResponse(RadioResponseInfo responseInfo)214     public void hangupWaitingOrBackgroundResponse(RadioResponseInfo responseInfo) {
215         responseVoid(responseInfo);
216     }
217 
218     /**
219      * @param responseInfo Response info struct containing response type, serial no. and error
220      */
hangupForegroundResumeBackgroundResponse(RadioResponseInfo responseInfo)221     public void hangupForegroundResumeBackgroundResponse(RadioResponseInfo responseInfo) {
222         responseVoid(responseInfo);
223     }
224 
225     /**
226      * @param responseInfo Response info struct containing response type, serial no. and error
227      */
switchWaitingOrHoldingAndActiveResponse(RadioResponseInfo responseInfo)228     public void switchWaitingOrHoldingAndActiveResponse(RadioResponseInfo responseInfo) {
229         responseVoid(responseInfo);
230     }
231 
232     /**
233      * @param responseInfo Response info struct containing response type, serial no. and error
234      */
conferenceResponse(RadioResponseInfo responseInfo)235     public void conferenceResponse(RadioResponseInfo responseInfo) {
236         responseVoid(responseInfo);
237     }
238 
239     /**
240      * @param responseInfo Response info struct containing response type, serial no. and error
241      */
rejectCallResponse(RadioResponseInfo responseInfo)242     public void rejectCallResponse(RadioResponseInfo responseInfo) {
243         responseVoid(responseInfo);
244     }
245 
246     /**
247      * @param responseInfo Response info struct containing response type, serial no. and error
248      * @param fcInfo Contains LastCallFailCause and vendor cause code. GSM failure reasons
249      *        are mapped to cause codes defined in TS 24.008 Annex H where possible. CDMA
250      *        failure reasons are derived from the possible call failure scenarios
251      *        described in the "CDMA IS-2000 Release A (C.S0005-A v6.0)" standard.
252      */
getLastCallFailCauseResponse(RadioResponseInfo responseInfo, LastCallFailCauseInfo fcInfo)253     public void getLastCallFailCauseResponse(RadioResponseInfo responseInfo,
254                                              LastCallFailCauseInfo fcInfo) {
255         responseLastCallFailCauseInfo(responseInfo, fcInfo);
256     }
257 
getSignalStrengthResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.SignalStrength sigStrength)258     public void getSignalStrengthResponse(RadioResponseInfo responseInfo,
259                                           android.hardware.radio.V1_0.SignalStrength sigStrength) {
260         responseSignalStrength(responseInfo, sigStrength);
261     }
262 
263     /**
264      * @param responseInfo Response info struct containing response type, serial no. and error
265      * @param signalStrength Current signal strength of camped/connected cells
266      */
getSignalStrengthResponse_1_2( RadioResponseInfo responseInfo, android.hardware.radio.V1_2.SignalStrength signalStrength)267     public void getSignalStrengthResponse_1_2(
268             RadioResponseInfo responseInfo,
269             android.hardware.radio.V1_2.SignalStrength signalStrength) {
270         responseSignalStrength_1_2(responseInfo, signalStrength);
271     }
272 
273     /**
274      * @param responseInfo Response info struct containing response type, serial no. and error
275      * @param voiceRegResponse Current Voice registration response as defined by VoiceRegStateResult
276      *        in types.hal
277      */
getVoiceRegistrationStateResponse(RadioResponseInfo responseInfo, VoiceRegStateResult voiceRegResponse)278     public void getVoiceRegistrationStateResponse(RadioResponseInfo responseInfo,
279                                                   VoiceRegStateResult voiceRegResponse) {
280         RILRequest rr = mRil.processResponse(responseInfo);
281 
282         if (rr != null) {
283             if (responseInfo.error == RadioError.NONE) {
284                 sendMessageResponse(rr.mResult, voiceRegResponse);
285             }
286             mRil.processResponseDone(rr, responseInfo, voiceRegResponse);
287         }
288     }
289 
290     /**
291      * @param responseInfo Response info struct containing response type, serial no. and error
292      * @param voiceRegResponse Current Voice registration response as defined by VoiceRegStateResult
293      *        in 1.2/types.hal
294      */
getVoiceRegistrationStateResponse_1_2(RadioResponseInfo responseInfo, android.hardware.radio.V1_2.VoiceRegStateResult voiceRegResponse)295     public void getVoiceRegistrationStateResponse_1_2(RadioResponseInfo responseInfo,
296             android.hardware.radio.V1_2.VoiceRegStateResult voiceRegResponse) {
297         RILRequest rr = mRil.processResponse(responseInfo);
298 
299         if (rr != null) {
300             if (responseInfo.error == RadioError.NONE) {
301                 sendMessageResponse(rr.mResult, voiceRegResponse);
302             }
303             mRil.processResponseDone(rr, responseInfo, voiceRegResponse);
304         }
305     }
306 
307     /**
308      * @param responseInfo Response info struct containing response type, serial no. and error
309      * @param dataRegResponse Current Data registration response as defined by DataRegStateResult in
310      *        types.hal
311      */
getDataRegistrationStateResponse(RadioResponseInfo responseInfo, DataRegStateResult dataRegResponse)312     public void getDataRegistrationStateResponse(RadioResponseInfo responseInfo,
313                                                  DataRegStateResult dataRegResponse) {
314         RILRequest rr = mRil.processResponse(responseInfo);
315 
316         if (rr != null) {
317             if (responseInfo.error == RadioError.NONE) {
318                 sendMessageResponse(rr.mResult, dataRegResponse);
319             }
320             mRil.processResponseDone(rr, responseInfo, dataRegResponse);
321         }
322     }
323 
324     /**
325      * @param responseInfo Response info struct containing response type, serial no. and error
326      * @param dataRegResponse Current Data registration response as defined by DataRegStateResult in
327      *        1.2/types.hal
328      */
getDataRegistrationStateResponse_1_2(RadioResponseInfo responseInfo, android.hardware.radio.V1_2.DataRegStateResult dataRegResponse)329     public void getDataRegistrationStateResponse_1_2(RadioResponseInfo responseInfo,
330             android.hardware.radio.V1_2.DataRegStateResult dataRegResponse) {
331         RILRequest rr = mRil.processResponse(responseInfo);
332 
333         if (rr != null) {
334             if (responseInfo.error == RadioError.NONE) {
335                 sendMessageResponse(rr.mResult, dataRegResponse);
336             }
337             mRil.processResponseDone(rr, responseInfo, dataRegResponse);
338         }
339     }
340 
341     /**
342      * @param responseInfo Response info struct containing response type, serial no. and error
343      * @param longName is long alpha ONS or EONS or empty string if unregistered
344      * @param shortName is short alpha ONS or EONS or empty string if unregistered
345      * @param numeric is 5 or 6 digit numeric code (MCC + MNC) or empty string if unregistered
346      */
getOperatorResponse(RadioResponseInfo responseInfo, String longName, String shortName, String numeric)347     public void getOperatorResponse(RadioResponseInfo responseInfo,
348                                     String longName,
349                                     String shortName,
350                                     String numeric) {
351         responseStrings(responseInfo, longName, shortName, numeric);
352     }
353 
354     /**
355      * @param responseInfo Response info struct containing response type, serial no. and error
356      */
setRadioPowerResponse(RadioResponseInfo responseInfo)357     public void setRadioPowerResponse(RadioResponseInfo responseInfo) {
358         responseVoid(responseInfo);
359     }
360 
361     /**
362      * @param responseInfo Response info struct containing response type, serial no. and error
363      */
sendDtmfResponse(RadioResponseInfo responseInfo)364     public void sendDtmfResponse(RadioResponseInfo responseInfo) {
365         responseVoid(responseInfo);
366     }
367 
368     /**
369      * @param responseInfo Response info struct containing response type, serial no. and error
370      * @param sms Response to sms sent as defined by SendSmsResult in types.hal
371      */
sendSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms)372     public void sendSmsResponse(RadioResponseInfo responseInfo,
373                                 SendSmsResult sms) {
374         responseSms(responseInfo, sms);
375     }
376 
377     /**
378      * @param responseInfo Response info struct containing response type, serial no. and error
379      * @param sms Response to sms sent as defined by SendSmsResult in types.hal
380      */
sendSMSExpectMoreResponse(RadioResponseInfo responseInfo, SendSmsResult sms)381     public void sendSMSExpectMoreResponse(RadioResponseInfo responseInfo,
382                                           SendSmsResult sms) {
383         responseSms(responseInfo, sms);
384     }
385 
386     /**
387      * @param responseInfo Response info struct containing response type, serial no. and error
388      * @param setupDataCallResult Response to data call setup as defined by setupDataCallResult in
389      *                            types.hal
390      */
setupDataCallResponse(RadioResponseInfo responseInfo, SetupDataCallResult setupDataCallResult)391     public void setupDataCallResponse(RadioResponseInfo responseInfo,
392                                       SetupDataCallResult setupDataCallResult) {
393         responseSetupDataCall(responseInfo, setupDataCallResult);
394     }
395 
396     /**
397      * @param responseInfo Response info struct containing response type, serial no. and error
398      * @param iccIo ICC io operation response as defined by IccIoResult in types.hal
399      */
iccIOForAppResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult iccIo)400     public void iccIOForAppResponse(RadioResponseInfo responseInfo,
401                             android.hardware.radio.V1_0.IccIoResult iccIo) {
402         responseIccIo(responseInfo, iccIo);
403     }
404 
405     /**
406      * @param responseInfo Response info struct containing response type, serial no. and error
407      */
sendUssdResponse(RadioResponseInfo responseInfo)408     public void sendUssdResponse(RadioResponseInfo responseInfo) {
409         responseVoid(responseInfo);
410     }
411 
412     /**
413      * @param responseInfo Response info struct containing response type, serial no. and error
414      */
cancelPendingUssdResponse(RadioResponseInfo responseInfo)415     public void cancelPendingUssdResponse(RadioResponseInfo responseInfo) {
416         responseVoid(responseInfo);
417     }
418 
419     /**
420      * @param responseInfo Response info struct containing response type, serial no. and error
421      * @param n is "n" parameter from TS 27.007 7.7
422      * @param m is "m" parameter from TS 27.007 7.7
423      */
getClirResponse(RadioResponseInfo responseInfo, int n, int m)424     public void getClirResponse(RadioResponseInfo responseInfo, int n, int m) {
425         responseInts(responseInfo, n, m);
426     }
427 
428     /**
429      * @param responseInfo Response info struct containing response type, serial no. and error
430      */
setClirResponse(RadioResponseInfo responseInfo)431     public void setClirResponse(RadioResponseInfo responseInfo) {
432         responseVoid(responseInfo);
433     }
434 
435     /**
436      * @param responseInfo Response info struct containing response type, serial no. and error
437      * @param callForwardInfos points to a vector of CallForwardInfo, one for
438      *        each distinct registered phone number.
439      */
getCallForwardStatusResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CallForwardInfo> callForwardInfos)440     public void getCallForwardStatusResponse(RadioResponseInfo responseInfo,
441                                              ArrayList<android.hardware.radio.V1_0.CallForwardInfo>
442                                                      callForwardInfos) {
443         responseCallForwardInfo(responseInfo, callForwardInfos);
444     }
445 
446     /**
447      * @param responseInfo Response info struct containing response type, serial no. and error
448      */
setCallForwardResponse(RadioResponseInfo responseInfo)449     public void setCallForwardResponse(RadioResponseInfo responseInfo) {
450         responseVoid(responseInfo);
451     }
452 
453     /**
454      * @param responseInfo Response info struct containing response type, serial no. and error
455      * @param enable If current call waiting state is disabled, enable = false else true
456      * @param serviceClass If enable, then callWaitingResp[1]
457      *        must follow, with the TS 27.007 service class bit vector of services
458      *        for which call waiting is enabled.
459      *        For example, if callWaitingResp[0] is 1 and
460      *        callWaitingResp[1] is 3, then call waiting is enabled for data
461      *        and voice and disabled for everything else.
462      */
getCallWaitingResponse(RadioResponseInfo responseInfo, boolean enable, int serviceClass)463     public void getCallWaitingResponse(RadioResponseInfo responseInfo,
464                                    boolean enable,
465                                    int serviceClass) {
466         responseInts(responseInfo, enable ? 1 : 0, serviceClass);
467     }
468 
469     /**
470      * @param responseInfo Response info struct containing response type, serial no. and error
471      */
setCallWaitingResponse(RadioResponseInfo responseInfo)472     public void setCallWaitingResponse(RadioResponseInfo responseInfo) {
473         responseVoid(responseInfo);
474     }
475 
476     /**
477      * @param responseInfo Response info struct containing response type, serial no. and error
478      */
acknowledgeLastIncomingGsmSmsResponse(RadioResponseInfo responseInfo)479     public void acknowledgeLastIncomingGsmSmsResponse(RadioResponseInfo responseInfo) {
480         responseVoid(responseInfo);
481     }
482 
483     /**
484      * @param responseInfo Response info struct containing response type, serial no. and error
485      */
acceptCallResponse(RadioResponseInfo responseInfo)486     public void acceptCallResponse(RadioResponseInfo responseInfo) {
487         responseVoid(responseInfo);
488     }
489 
490     /**
491      * @param responseInfo Response info struct containing response type, serial no. and error
492      */
deactivateDataCallResponse(RadioResponseInfo responseInfo)493     public void deactivateDataCallResponse(RadioResponseInfo responseInfo) {
494         responseVoid(responseInfo);
495     }
496 
497     /**
498      *
499      * @param responseInfo Response info struct containing response type, serial no. and error
500      * @param response 0 is the TS 27.007 service class bit vector of
501      *        services for which the specified barring facility
502      *        is active. "0" means "disabled for all"
503      */
getFacilityLockForAppResponse(RadioResponseInfo responseInfo, int response)504     public void getFacilityLockForAppResponse(RadioResponseInfo responseInfo, int response) {
505         responseInts(responseInfo, response);
506     }
507 
508     /**
509      *
510      * @param responseInfo Response info struct containing response type, serial no. and error
511      * @param retry 0 is the number of retries remaining, or -1 if unknown
512      */
setFacilityLockForAppResponse(RadioResponseInfo responseInfo, int retry)513     public void setFacilityLockForAppResponse(RadioResponseInfo responseInfo, int retry) {
514         responseInts(responseInfo, retry);
515     }
516 
517     /**
518      * @param responseInfo Response info struct containing response type, serial no. and error
519      */
setBarringPasswordResponse(RadioResponseInfo responseInfo)520     public void setBarringPasswordResponse(RadioResponseInfo responseInfo) {
521         responseVoid(responseInfo);
522     }
523 
524     /**
525      *
526      * @param responseInfo Response info struct containing response type, serial no. and error
527      * @param selection false for automatic selection, true for manual selection
528      */
getNetworkSelectionModeResponse(RadioResponseInfo responseInfo, boolean selection)529     public void getNetworkSelectionModeResponse(RadioResponseInfo responseInfo, boolean selection) {
530         responseInts(responseInfo, selection ? 1 : 0);
531     }
532 
533     /**
534      * @param responseInfo Response info struct containing response type, serial no. and error
535      */
setNetworkSelectionModeAutomaticResponse(RadioResponseInfo responseInfo)536     public void setNetworkSelectionModeAutomaticResponse(RadioResponseInfo responseInfo) {
537         responseVoid(responseInfo);
538     }
539 
540     /**
541      * @param responseInfo Response info struct containing response type, serial no. and error
542      */
setNetworkSelectionModeManualResponse(RadioResponseInfo responseInfo)543     public void setNetworkSelectionModeManualResponse(RadioResponseInfo responseInfo) {
544         responseVoid(responseInfo);
545     }
546 
547     /**
548      *
549      * @param responseInfo Response info struct containing response type, serial no. and error
550      * @param networkInfos List of network operator information as OperatorInfos defined in
551      *                     types.hal
552      */
getAvailableNetworksResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.OperatorInfo> networkInfos)553     public void getAvailableNetworksResponse(RadioResponseInfo responseInfo,
554                                              ArrayList<android.hardware.radio.V1_0.OperatorInfo>
555                                                      networkInfos) {
556         responseOperatorInfos(responseInfo, networkInfos);
557     }
558 
559     /**
560      *
561      * @param responseInfo Response info struct containing response type, serial no. and error
562      */
startNetworkScanResponse(RadioResponseInfo responseInfo)563     public void startNetworkScanResponse(RadioResponseInfo responseInfo) {
564         responseScanStatus(responseInfo);
565     }
566 
567     /**
568      *
569      * @param responseInfo Response info struct containing response type, serial no. and error
570      */
stopNetworkScanResponse(RadioResponseInfo responseInfo)571     public void stopNetworkScanResponse(RadioResponseInfo responseInfo) {
572         responseScanStatus(responseInfo);
573     }
574 
575     /**
576      * @param responseInfo Response info struct containing response type, serial no. and error
577      */
startDtmfResponse(RadioResponseInfo responseInfo)578     public void startDtmfResponse(RadioResponseInfo responseInfo) {
579         responseVoid(responseInfo);
580     }
581 
582     /**
583      * @param responseInfo Response info struct containing response type, serial no. and error
584      */
stopDtmfResponse(RadioResponseInfo responseInfo)585     public void stopDtmfResponse(RadioResponseInfo responseInfo) {
586         responseVoid(responseInfo);
587     }
588 
589     /**
590      *
591      * @param responseInfo Response info struct containing response type, serial no. and error
592      * @param version string containing version string for log reporting
593      */
getBasebandVersionResponse(RadioResponseInfo responseInfo, String version)594     public void getBasebandVersionResponse(RadioResponseInfo responseInfo, String version) {
595         responseString(responseInfo, version);
596     }
597 
598     /**
599      * @param responseInfo Response info struct containing response type, serial no. and error
600      */
separateConnectionResponse(RadioResponseInfo responseInfo)601     public void separateConnectionResponse(RadioResponseInfo responseInfo) {
602         responseVoid(responseInfo);
603     }
604 
605     /**
606      * @param responseInfo Response info struct containing response type, serial no. and error
607      */
setMuteResponse(RadioResponseInfo responseInfo)608     public void setMuteResponse(RadioResponseInfo responseInfo) {
609         responseVoid(responseInfo);
610     }
611 
612     /**
613      *
614      * @param responseInfo Response info struct containing response type, serial no. and error
615      * @param enable true for "mute enabled" and false for "mute disabled"
616      */
getMuteResponse(RadioResponseInfo responseInfo, boolean enable)617     public void getMuteResponse(RadioResponseInfo responseInfo, boolean enable) {
618         responseInts(responseInfo, enable ? 1 : 0);
619     }
620 
621     /**
622      *
623      * @param responseInfo Response info struct containing response type, serial no. and error
624      * @param status indicates CLIP status
625      */
getClipResponse(RadioResponseInfo responseInfo, int status)626     public void getClipResponse(RadioResponseInfo responseInfo, int status) {
627         responseInts(responseInfo, status);
628     }
629 
630     /**
631      * @param responseInfo Response info struct containing response type, serial no. and error
632      * @param dataCallResultList Response to get data call list as defined by setupDataCallResult in
633      *                           types.hal
634      */
getDataCallListResponse(RadioResponseInfo responseInfo, ArrayList<SetupDataCallResult> dataCallResultList)635     public void getDataCallListResponse(RadioResponseInfo responseInfo,
636                                         ArrayList<SetupDataCallResult> dataCallResultList) {
637         responseDataCallList(responseInfo, dataCallResultList);
638     }
639 
sendOemRilRequestRawResponse(RadioResponseInfo responseInfo, ArrayList<Byte> var2)640     public void sendOemRilRequestRawResponse(RadioResponseInfo responseInfo,
641                                              ArrayList<Byte> var2) {}
642 
643     /**
644      * @param responseInfo Response info struct containing response type, serial no. and error
645      */
setSuppServiceNotificationsResponse(RadioResponseInfo responseInfo)646     public void setSuppServiceNotificationsResponse(RadioResponseInfo responseInfo) {
647         responseVoid(responseInfo);
648     }
649 
650     /**
651      * @param responseInfo Response info struct containing response type, serial no. and error
652      * @param index record index where the message is stored
653      */
writeSmsToSimResponse(RadioResponseInfo responseInfo, int index)654     public void writeSmsToSimResponse(RadioResponseInfo responseInfo, int index) {
655         responseInts(responseInfo, index);
656     }
657 
658     /**
659      * @param responseInfo Response info struct containing response type, serial no. and error
660      */
deleteSmsOnSimResponse(RadioResponseInfo responseInfo)661     public void deleteSmsOnSimResponse(RadioResponseInfo responseInfo) {
662         responseVoid(responseInfo);
663     }
664 
665     /**
666      * @param responseInfo Response info struct containing response type, serial no. and error
667      */
setBandModeResponse(RadioResponseInfo responseInfo)668     public void setBandModeResponse(RadioResponseInfo responseInfo) {
669         responseVoid(responseInfo);
670     }
671 
672     /**
673      *
674      * @param responseInfo Response info struct containing response type, serial no. and error
675      * @param bandModes List of RadioBandMode listing supported modes
676      */
getAvailableBandModesResponse(RadioResponseInfo responseInfo, ArrayList<Integer> bandModes)677     public void getAvailableBandModesResponse(RadioResponseInfo responseInfo,
678                                               ArrayList<Integer> bandModes) {
679         responseIntArrayList(responseInfo, bandModes);
680     }
681 
682     /**
683      *
684      * @param responseInfo Response info struct containing response type, serial no. and error
685      * @param commandResponse SAT/USAT response in hexadecimal format
686      *        string starting with first byte of response
687      */
sendEnvelopeResponse(RadioResponseInfo responseInfo, String commandResponse)688     public void sendEnvelopeResponse(RadioResponseInfo responseInfo, String commandResponse) {
689         responseString(responseInfo, commandResponse);
690     }
691 
692     /**
693      * @param responseInfo Response info struct containing response type, serial no. and error
694      */
sendTerminalResponseToSimResponse(RadioResponseInfo responseInfo)695     public void sendTerminalResponseToSimResponse(RadioResponseInfo responseInfo) {
696         responseVoid(responseInfo);
697     }
698 
699     /**
700      * @param responseInfo Response info struct containing response type, serial no. and error
701      */
handleStkCallSetupRequestFromSimResponse(RadioResponseInfo responseInfo)702     public void handleStkCallSetupRequestFromSimResponse(RadioResponseInfo responseInfo) {
703         responseVoid(responseInfo);
704     }
705 
706     /**
707      * @param responseInfo Response info struct containing response type, serial no. and error
708      */
explicitCallTransferResponse(RadioResponseInfo responseInfo)709     public void explicitCallTransferResponse(RadioResponseInfo responseInfo) {
710         responseVoid(responseInfo);
711     }
712 
713     /**
714      * @param responseInfo Response info struct containing response type, serial no. and error
715      */
setPreferredNetworkTypeResponse(RadioResponseInfo responseInfo)716     public void setPreferredNetworkTypeResponse(RadioResponseInfo responseInfo) {
717         responseVoid(responseInfo);
718     }
719 
720     /**
721      *
722      * @param responseInfo Response info struct containing response type, serial no. and error
723      * @param nwType RadioPreferredNetworkType defined in types.hal
724      */
getPreferredNetworkTypeResponse(RadioResponseInfo responseInfo, int nwType)725     public void getPreferredNetworkTypeResponse(RadioResponseInfo responseInfo, int nwType) {
726         mRil.mPreferredNetworkType = nwType;
727         responseInts(responseInfo, nwType);
728     }
729 
730     /**
731      *
732      * @param responseInfo Response info struct containing response type, serial no. and error
733      * @param cells Vector of neighboring radio cell information
734      */
getNeighboringCidsResponse(RadioResponseInfo responseInfo, ArrayList<NeighboringCell> cells)735     public void getNeighboringCidsResponse(RadioResponseInfo responseInfo,
736                                            ArrayList<NeighboringCell> cells) {
737         responseCellList(responseInfo, cells);
738     }
739 
740     /**
741      * @param responseInfo Response info struct containing response type, serial no. and error
742      */
setLocationUpdatesResponse(RadioResponseInfo responseInfo)743     public void setLocationUpdatesResponse(RadioResponseInfo responseInfo) {
744         responseVoid(responseInfo);
745     }
746 
747     /**
748      * @param responseInfo Response info struct containing response type, serial no. and error
749      */
setCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo)750     public void setCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo) {
751         responseVoid(responseInfo);
752     }
753 
754     /**
755      * @param responseInfo Response info struct containing response type, serial no. and error
756      */
setCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo)757     public void setCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo) {
758         responseVoid(responseInfo);
759     }
760 
761     /**
762      *
763      * @param responseInfo Response info struct containing response type, serial no. and error
764      * @param type CdmaRoamingType defined in types.hal
765      */
getCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo, int type)766     public void getCdmaRoamingPreferenceResponse(RadioResponseInfo responseInfo, int type) {
767         responseInts(responseInfo, type);
768     }
769 
770     /**
771      * @param responseInfo Response info struct containing response type, serial no. and error
772      */
setTTYModeResponse(RadioResponseInfo responseInfo)773     public void setTTYModeResponse(RadioResponseInfo responseInfo) {
774         responseVoid(responseInfo);
775     }
776 
777     /**
778      *
779      * @param responseInfo Response info struct containing response type, serial no. and error
780      * @param mode TTY mode
781      */
getTTYModeResponse(RadioResponseInfo responseInfo, int mode)782     public void getTTYModeResponse(RadioResponseInfo responseInfo, int mode) {
783         responseInts(responseInfo, mode);
784     }
785 
786     /**
787      * @param responseInfo Response info struct containing response type, serial no. and error
788      */
setPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo)789     public void setPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo) {
790         responseVoid(responseInfo);
791     }
792 
793     /**
794      *
795      * @param responseInfo Response info struct containing response type, serial no. and error
796      * @param enable false for Standard Privacy Mode (Public Long Code Mask)
797      *        true for Enhanced Privacy Mode (Private Long Code Mask)
798      */
getPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo, boolean enable)799     public void getPreferredVoicePrivacyResponse(RadioResponseInfo responseInfo,
800                                                  boolean enable) {
801         responseInts(responseInfo, enable ? 1 : 0);
802     }
803 
804     /**
805      * @param responseInfo Response info struct containing response type, serial no. and error
806      */
sendCDMAFeatureCodeResponse(RadioResponseInfo responseInfo)807     public void sendCDMAFeatureCodeResponse(RadioResponseInfo responseInfo) {
808         responseVoid(responseInfo);
809     }
810 
811     /**
812      * @param responseInfo Response info struct containing response type, serial no. and error
813      */
sendBurstDtmfResponse(RadioResponseInfo responseInfo)814     public void sendBurstDtmfResponse(RadioResponseInfo responseInfo) {
815         responseVoid(responseInfo);
816     }
817 
818     /**
819      *
820      * @param responseInfo Response info struct containing response type, serial no. and error
821      * @param sms Sms result struct as defined by SendSmsResult in types.hal
822      */
sendCdmaSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms)823     public void sendCdmaSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms) {
824         responseSms(responseInfo, sms);
825     }
826 
827     /**
828      * @param responseInfo Response info struct containing response type, serial no. and error
829      */
acknowledgeLastIncomingCdmaSmsResponse(RadioResponseInfo responseInfo)830     public void acknowledgeLastIncomingCdmaSmsResponse(RadioResponseInfo responseInfo) {
831         responseVoid(responseInfo);
832     }
833 
834     /**
835      *
836      * @param responseInfo Response info struct containing response type, serial no. and error
837      * @param configs Vector of GSM/WCDMA Cell broadcast configs
838      */
getGsmBroadcastConfigResponse(RadioResponseInfo responseInfo, ArrayList<GsmBroadcastSmsConfigInfo> configs)839     public void getGsmBroadcastConfigResponse(RadioResponseInfo responseInfo,
840                                               ArrayList<GsmBroadcastSmsConfigInfo> configs) {
841         responseGmsBroadcastConfig(responseInfo, configs);
842     }
843 
844     /**
845      * @param responseInfo Response info struct containing response type, serial no. and error
846      */
setGsmBroadcastConfigResponse(RadioResponseInfo responseInfo)847     public void setGsmBroadcastConfigResponse(RadioResponseInfo responseInfo) {
848         responseVoid(responseInfo);
849     }
850 
851     /**
852      * @param responseInfo Response info struct containing response type, serial no. and error
853      */
setGsmBroadcastActivationResponse(RadioResponseInfo responseInfo)854     public void setGsmBroadcastActivationResponse(RadioResponseInfo responseInfo) {
855         responseVoid(responseInfo);
856     }
857 
858     /**
859      *
860      * @param responseInfo Response info struct containing response type, serial no. and error
861      * @param configs Vector of CDMA Broadcast SMS configs.
862      */
getCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo, ArrayList<CdmaBroadcastSmsConfigInfo> configs)863     public void getCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo,
864                                                ArrayList<CdmaBroadcastSmsConfigInfo> configs) {
865         responseCdmaBroadcastConfig(responseInfo, configs);
866     }
867 
868     /**
869      * @param responseInfo Response info struct containing response type, serial no. and error
870      */
setCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo)871     public void setCdmaBroadcastConfigResponse(RadioResponseInfo responseInfo) {
872         responseVoid(responseInfo);
873     }
874 
875     /**
876      * @param responseInfo Response info struct containing response type, serial no. and error
877      */
setCdmaBroadcastActivationResponse(RadioResponseInfo responseInfo)878     public void setCdmaBroadcastActivationResponse(RadioResponseInfo responseInfo) {
879         responseVoid(responseInfo);
880     }
881 
882     /**
883      *
884      * @param responseInfo Response info struct containing response type, serial no. and error
885      * @param mdn MDN if CDMA subscription is available
886      * @param hSid is a comma separated list of H_SID (Home SID) if
887      *        CDMA subscription is available, in decimal format
888      * @param hNid is a comma separated list of H_NID (Home NID) if
889      *        CDMA subscription is available, in decimal format
890      * @param min MIN (10 digits, MIN2+MIN1) if CDMA subscription is available
891      * @param prl PRL version if CDMA subscription is available
892      */
getCDMASubscriptionResponse(RadioResponseInfo responseInfo, String mdn, String hSid, String hNid, String min, String prl)893     public void getCDMASubscriptionResponse(RadioResponseInfo responseInfo, String mdn,
894                                             String hSid, String hNid, String min, String prl) {
895         responseStrings(responseInfo, mdn, hSid, hNid, min, prl);
896     }
897 
898     /**
899      *
900      * @param responseInfo Response info struct containing response type, serial no. and error
901      * @param index record index where the cmda sms message is stored
902      */
writeSmsToRuimResponse(RadioResponseInfo responseInfo, int index)903     public void writeSmsToRuimResponse(RadioResponseInfo responseInfo, int index) {
904         responseInts(responseInfo, index);
905     }
906 
907     /**
908      * @param responseInfo Response info struct containing response type, serial no. and error
909      */
deleteSmsOnRuimResponse(RadioResponseInfo responseInfo)910     public void deleteSmsOnRuimResponse(RadioResponseInfo responseInfo) {
911         responseVoid(responseInfo);
912     }
913 
914     /**
915      * @param responseInfo Response info struct containing response type, serial no. and error
916      * @param imei IMEI if GSM subscription is available
917      * @param imeisv IMEISV if GSM subscription is available
918      * @param esn ESN if CDMA subscription is available
919      * @param meid MEID if CDMA subscription is available
920      */
getDeviceIdentityResponse(RadioResponseInfo responseInfo, String imei, String imeisv, String esn, String meid)921     public void getDeviceIdentityResponse(RadioResponseInfo responseInfo, String imei,
922                                           String imeisv, String esn, String meid) {
923         responseStrings(responseInfo, imei, imeisv, esn, meid);
924     }
925 
926     /**
927      * @param responseInfo Response info struct containing response type, serial no. and error
928      */
exitEmergencyCallbackModeResponse(RadioResponseInfo responseInfo)929     public void exitEmergencyCallbackModeResponse(RadioResponseInfo responseInfo) {
930         responseVoid(responseInfo);
931     }
932 
933     /**
934      * @param responseInfo Response info struct containing response type, serial no. and error
935      * @param smsc Short Message Service Center address on the device
936      */
getSmscAddressResponse(RadioResponseInfo responseInfo, String smsc)937     public void getSmscAddressResponse(RadioResponseInfo responseInfo, String smsc) {
938         responseString(responseInfo, smsc);
939     }
940 
941     /**
942      * @param responseInfo Response info struct containing response type, serial no. and error
943      */
setSmscAddressResponse(RadioResponseInfo responseInfo)944     public void setSmscAddressResponse(RadioResponseInfo responseInfo) {
945         responseVoid(responseInfo);
946     }
947 
948     /**
949      * @param responseInfo Response info struct containing response type, serial no. and error
950      */
reportSmsMemoryStatusResponse(RadioResponseInfo responseInfo)951     public void reportSmsMemoryStatusResponse(RadioResponseInfo responseInfo) {
952         responseVoid(responseInfo);
953     }
954 
955     /**
956      * @param responseInfo Response info struct containing response type, serial no. and error
957      */
reportStkServiceIsRunningResponse(RadioResponseInfo responseInfo)958     public void reportStkServiceIsRunningResponse(RadioResponseInfo responseInfo) {
959         responseVoid(responseInfo);
960     }
961 
962     /**
963      *
964      * @param responseInfo Response info struct containing response type, serial no. and error
965      * @param source CDMA subscription source
966      */
getCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo, int source)967     public void getCdmaSubscriptionSourceResponse(RadioResponseInfo responseInfo, int source) {
968         responseInts(responseInfo, source);
969     }
970 
971     /**
972      * This method is deprecated and should not be used.
973      *
974      * @param responseInfo Response info struct containing response type, serial no. and error
975      * @param response response string of the challenge/response algo for ISIM auth in base64 format
976      */
requestIsimAuthenticationResponse(RadioResponseInfo responseInfo, String response)977     public void requestIsimAuthenticationResponse(RadioResponseInfo responseInfo, String response) {
978         throw new RuntimeException("Inexplicable response received for requestIsimAuthentication");
979     }
980 
981     /**
982      * @param responseInfo Response info struct containing response type, serial no. and error
983      */
acknowledgeIncomingGsmSmsWithPduResponse(RadioResponseInfo responseInfo)984     public void acknowledgeIncomingGsmSmsWithPduResponse(RadioResponseInfo responseInfo) {
985         responseVoid(responseInfo);
986     }
987 
988     /**
989      *
990      * @param responseInfo Response info struct containing response type, serial no. and error
991      * @param iccIo IccIoResult as defined in types.hal corresponding to ICC IO response
992      */
sendEnvelopeWithStatusResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult iccIo)993     public void sendEnvelopeWithStatusResponse(RadioResponseInfo responseInfo,
994                                                android.hardware.radio.V1_0.IccIoResult iccIo) {
995         responseIccIo(responseInfo, iccIo);
996     }
997 
998     /**
999      *
1000      * @param responseInfo Response info struct containing response type, serial no. and error
1001      * @param rat Current voice RAT
1002      */
getVoiceRadioTechnologyResponse(RadioResponseInfo responseInfo, int rat)1003     public void getVoiceRadioTechnologyResponse(RadioResponseInfo responseInfo, int rat) {
1004         responseInts(responseInfo, rat);
1005     }
1006 
getCellInfoListResponse(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo)1007     public void getCellInfoListResponse(RadioResponseInfo responseInfo,
1008                                         ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo) {
1009         responseCellInfoList(responseInfo, cellInfo);
1010     }
1011 
1012     /**
1013      * @param responseInfo Response info struct containing response type, serial no. and error
1014      * @param cellInfo List of current cell information known to radio
1015      */
getCellInfoListResponse_1_2( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_2.CellInfo> cellInfo)1016     public void getCellInfoListResponse_1_2(
1017             RadioResponseInfo responseInfo,
1018             ArrayList<android.hardware.radio.V1_2.CellInfo> cellInfo) {
1019         responseCellInfoList_1_2(responseInfo, cellInfo);
1020     }
1021 
1022     /**
1023      * @param responseInfo Response info struct containing response type, serial no. and error
1024      */
setCellInfoListRateResponse(RadioResponseInfo responseInfo)1025     public void setCellInfoListRateResponse(RadioResponseInfo responseInfo) {
1026         responseVoid(responseInfo);
1027     }
1028 
1029     /**
1030      * @param responseInfo Response info struct containing response type, serial no. and error
1031      */
setInitialAttachApnResponse(RadioResponseInfo responseInfo)1032     public void setInitialAttachApnResponse(RadioResponseInfo responseInfo) {
1033         responseVoid(responseInfo);
1034     }
1035 
1036     /**
1037      *
1038      * @param responseInfo Response info struct containing response type, serial no. and error
1039      * @param isRegistered false = not registered, true = registered
1040      * @param ratFamily RadioTechnologyFamily as defined in types.hal. This value is valid only if
1041      *        isRegistered is true.
1042      */
getImsRegistrationStateResponse(RadioResponseInfo responseInfo, boolean isRegistered, int ratFamily)1043     public void getImsRegistrationStateResponse(RadioResponseInfo responseInfo,
1044                                                 boolean isRegistered, int ratFamily) {
1045         responseInts(responseInfo, isRegistered ? 1 : 0, ratFamily);
1046     }
1047 
1048     /**
1049      *
1050      * @param responseInfo Response info struct containing response type, serial no. and error
1051      * @param sms Response to sms sent as defined by SendSmsResult in types.hal
1052      */
sendImsSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms)1053     public void sendImsSmsResponse(RadioResponseInfo responseInfo, SendSmsResult sms) {
1054         responseSms(responseInfo, sms);
1055     }
1056 
1057     /**
1058      *
1059      * @param responseInfo Response info struct containing response type, serial no. and error
1060      * @param result IccIoResult as defined in types.hal
1061      */
iccTransmitApduBasicChannelResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1062     public void iccTransmitApduBasicChannelResponse(RadioResponseInfo responseInfo,
1063                                                     android.hardware.radio.V1_0.IccIoResult
1064                                                             result) {
1065         responseIccIo(responseInfo, result);
1066     }
1067 
1068     /**
1069      *
1070      * @param responseInfo Response info struct containing response type, serial no. and error
1071      * @param channelId session id of the logical channel.
1072      * @param selectResponse Contains the select response for the open channel command with one
1073      *        byte per integer
1074      */
iccOpenLogicalChannelResponse(RadioResponseInfo responseInfo, int channelId, ArrayList<Byte> selectResponse)1075     public void iccOpenLogicalChannelResponse(RadioResponseInfo responseInfo, int channelId,
1076                                               ArrayList<Byte> selectResponse) {
1077         ArrayList<Integer> arr = new ArrayList<>();
1078         arr.add(channelId);
1079         for (int i = 0; i < selectResponse.size(); i++) {
1080             arr.add((int) selectResponse.get(i));
1081         }
1082         responseIntArrayList(responseInfo, arr);
1083     }
1084 
1085     /**
1086      * @param responseInfo Response info struct containing response type, serial no. and error
1087      */
iccCloseLogicalChannelResponse(RadioResponseInfo responseInfo)1088     public void iccCloseLogicalChannelResponse(RadioResponseInfo responseInfo) {
1089         responseVoid(responseInfo);
1090     }
1091 
1092     /**
1093      *
1094      * @param responseInfo Response info struct containing response type, serial no. and error
1095      * @param result IccIoResult as defined in types.hal
1096      */
iccTransmitApduLogicalChannelResponse( RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1097     public void iccTransmitApduLogicalChannelResponse(
1098             RadioResponseInfo responseInfo,
1099             android.hardware.radio.V1_0.IccIoResult result) {
1100         responseIccIo(responseInfo, result);
1101     }
1102 
1103     /**
1104      *
1105      * @param responseInfo Response info struct containing response type, serial no. and error
1106      * @param result string containing the contents of the NV item
1107      */
nvReadItemResponse(RadioResponseInfo responseInfo, String result)1108     public void nvReadItemResponse(RadioResponseInfo responseInfo, String result) {
1109         responseString(responseInfo, result);
1110     }
1111 
1112     /**
1113      * @param responseInfo Response info struct containing response type, serial no. and error
1114      */
nvWriteItemResponse(RadioResponseInfo responseInfo)1115     public void nvWriteItemResponse(RadioResponseInfo responseInfo) {
1116         responseVoid(responseInfo);
1117     }
1118 
1119     /**
1120      * @param responseInfo Response info struct containing response type, serial no. and error
1121      */
nvWriteCdmaPrlResponse(RadioResponseInfo responseInfo)1122     public void nvWriteCdmaPrlResponse(RadioResponseInfo responseInfo) {
1123         responseVoid(responseInfo);
1124     }
1125 
1126     /**
1127      * @param responseInfo Response info struct containing response type, serial no. and error
1128      */
nvResetConfigResponse(RadioResponseInfo responseInfo)1129     public void nvResetConfigResponse(RadioResponseInfo responseInfo) {
1130         responseVoid(responseInfo);
1131     }
1132 
1133     /**
1134      * @param responseInfo Response info struct containing response type, serial no. and error
1135      */
setUiccSubscriptionResponse(RadioResponseInfo responseInfo)1136     public void setUiccSubscriptionResponse(RadioResponseInfo responseInfo) {
1137         responseVoid(responseInfo);
1138     }
1139 
1140     /**
1141      * @param responseInfo Response info struct containing response type, serial no. and error
1142      */
setDataAllowedResponse(RadioResponseInfo responseInfo)1143     public void setDataAllowedResponse(RadioResponseInfo responseInfo) {
1144         responseVoid(responseInfo);
1145     }
1146 
getHardwareConfigResponse( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.HardwareConfig> config)1147     public void getHardwareConfigResponse(
1148             RadioResponseInfo responseInfo,
1149             ArrayList<android.hardware.radio.V1_0.HardwareConfig> config) {
1150         responseHardwareConfig(responseInfo, config);
1151     }
1152 
1153     /**
1154      *
1155      * @param responseInfo Response info struct containing response type, serial no. and error
1156      * @param result IccIoResult as defined in types.hal
1157      */
requestIccSimAuthenticationResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1158     public void requestIccSimAuthenticationResponse(RadioResponseInfo responseInfo,
1159                                                     android.hardware.radio.V1_0.IccIoResult
1160                                                             result) {
1161         responseICC_IOBase64(responseInfo, result);
1162     }
1163 
1164     /**
1165      * @param responseInfo Response info struct containing response type, serial no. and error
1166      */
setDataProfileResponse(RadioResponseInfo responseInfo)1167     public void setDataProfileResponse(RadioResponseInfo responseInfo) {
1168         responseVoid(responseInfo);
1169     }
1170 
1171     /**
1172      * @param responseInfo Response info struct containing response type, serial no. and error
1173      */
requestShutdownResponse(RadioResponseInfo responseInfo)1174     public void requestShutdownResponse(RadioResponseInfo responseInfo) {
1175         responseVoid(responseInfo);
1176     }
1177 
getRadioCapabilityResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.RadioCapability rc)1178     public void getRadioCapabilityResponse(RadioResponseInfo responseInfo,
1179                                            android.hardware.radio.V1_0.RadioCapability rc) {
1180         RILRequest rr = mRil.processResponse(responseInfo);
1181 
1182         if (rr != null) {
1183             RadioCapability ret = RIL.convertHalRadioCapability(rc, mRil);
1184             if (responseInfo.error == RadioError.REQUEST_NOT_SUPPORTED
1185                     || responseInfo.error == RadioError.GENERIC_FAILURE) {
1186                 // we should construct the RAF bitmask the radio
1187                 // supports based on preferred network bitmasks
1188                 ret = mRil.makeStaticRadioCapability();
1189                 responseInfo.error = RadioError.NONE;
1190             }
1191             if (responseInfo.error == RadioError.NONE) {
1192                 sendMessageResponse(rr.mResult, ret);
1193             }
1194             mRil.processResponseDone(rr, responseInfo, ret);
1195         }
1196     }
1197 
setRadioCapabilityResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.RadioCapability rc)1198     public void setRadioCapabilityResponse(RadioResponseInfo responseInfo,
1199                                            android.hardware.radio.V1_0.RadioCapability rc) {
1200         responseRadioCapability(responseInfo, rc);
1201     }
1202 
1203     /**
1204      *
1205      * @param responseInfo Response info struct containing response type, serial no. and error
1206      * @param statusInfo LceStatusInfo indicating LCE status
1207      */
startLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo)1208     public void startLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo) {
1209         responseLceStatus(responseInfo, statusInfo);
1210     }
1211 
1212     /**
1213      *
1214      * @param responseInfo Response info struct containing response type, serial no. and error
1215      * @param statusInfo LceStatusInfo indicating LCE status
1216      */
stopLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo)1217     public void stopLceServiceResponse(RadioResponseInfo responseInfo, LceStatusInfo statusInfo) {
1218         responseLceStatus(responseInfo, statusInfo);
1219     }
1220 
pullLceDataResponse(RadioResponseInfo responseInfo, LceDataInfo lceInfo)1221     public void pullLceDataResponse(RadioResponseInfo responseInfo, LceDataInfo lceInfo) {
1222         responseLceData(responseInfo, lceInfo);
1223     }
1224 
1225     /**
1226      *
1227      * @param responseInfo Response info struct containing response type, serial no. and error
1228      * @param activityInfo modem activity information
1229      */
getModemActivityInfoResponse(RadioResponseInfo responseInfo, ActivityStatsInfo activityInfo)1230     public void getModemActivityInfoResponse(RadioResponseInfo responseInfo,
1231                                              ActivityStatsInfo activityInfo) {
1232         responseActivityData(responseInfo, activityInfo);
1233     }
1234 
1235     /**
1236      *
1237      * @param responseInfo Response info struct containing response type, serial no. and error
1238      * @param numAllowed number of allowed carriers which have been set correctly.
1239      *        On success, it must match the length of list Carriers->allowedCarriers.
1240      *        if Length of allowed carriers list is 0, numAllowed = 0.
1241      */
setAllowedCarriersResponse(RadioResponseInfo responseInfo, int numAllowed)1242     public void setAllowedCarriersResponse(RadioResponseInfo responseInfo, int numAllowed) {
1243         responseInts(responseInfo, numAllowed);
1244     }
1245 
1246     /**
1247      *
1248      * @param responseInfo Response info struct containing response type, serial no. and error
1249      * @param allAllowed true only when all carriers are allowed. Ignore "carriers" struct.
1250      *                   If false, consider "carriers" struct
1251      * @param carriers Carrier restriction information.
1252      */
getAllowedCarriersResponse(RadioResponseInfo responseInfo, boolean allAllowed, CarrierRestrictions carriers)1253     public void getAllowedCarriersResponse(RadioResponseInfo responseInfo, boolean allAllowed,
1254                                            CarrierRestrictions carriers) {
1255         responseCarrierIdentifiers(responseInfo, allAllowed, carriers);
1256     }
1257 
1258     /**
1259      * @param responseInfo Response info struct containing response type, serial no. and error
1260      */
sendDeviceStateResponse(RadioResponseInfo responseInfo)1261     public void sendDeviceStateResponse(RadioResponseInfo responseInfo) {
1262         responseVoid(responseInfo);
1263     }
1264 
1265     /**
1266      * @param responseInfo Response info struct containing response type, serial no. and error
1267      */
setCarrierInfoForImsiEncryptionResponse(RadioResponseInfo responseInfo)1268     public void setCarrierInfoForImsiEncryptionResponse(RadioResponseInfo responseInfo) {
1269         responseVoid(responseInfo);
1270     }
1271 
1272     /**
1273      * @param responseInfo Response info struct containing response type, serial no. and error
1274      */
setIndicationFilterResponse(RadioResponseInfo responseInfo)1275     public void setIndicationFilterResponse(RadioResponseInfo responseInfo) {
1276         responseVoid(responseInfo);
1277     }
1278 
1279     /**
1280      * @param responseInfo Response info struct containing response type, serial no. and error
1281      */
setSimCardPowerResponse(RadioResponseInfo responseInfo)1282     public void setSimCardPowerResponse(RadioResponseInfo responseInfo) {
1283         responseVoid(responseInfo);
1284     }
1285 
1286     /**
1287      * @param responseInfo Response info struct containing response type, serial no. and error
1288      */
setSignalStrengthReportingCriteriaResponse(RadioResponseInfo responseInfo)1289     public void setSignalStrengthReportingCriteriaResponse(RadioResponseInfo responseInfo) {
1290         responseVoid(responseInfo);
1291     }
1292 
1293     /**
1294      * @param responseInfo Response info struct containing response type, serial no. and error
1295      */
setLinkCapacityReportingCriteriaResponse(RadioResponseInfo responseInfo)1296     public void setLinkCapacityReportingCriteriaResponse(RadioResponseInfo responseInfo) {
1297         responseVoid(responseInfo);
1298     }
1299 
1300     /**
1301      * @param responseInfo Response info struct containing response type, serial no. and error
1302      */
setSimCardPowerResponse_1_1(RadioResponseInfo responseInfo)1303     public void setSimCardPowerResponse_1_1(RadioResponseInfo responseInfo) {
1304         responseVoid(responseInfo);
1305     }
1306 
1307 
1308     /**
1309      * @param responseInfo Response info struct containing response type, serial no. and error
1310      * @param keepaliveStatus status of the keepalive with a handle for the session
1311      */
startKeepaliveResponse(RadioResponseInfo responseInfo, android.hardware.radio.V1_1.KeepaliveStatus keepaliveStatus)1312     public void startKeepaliveResponse(RadioResponseInfo responseInfo,
1313             android.hardware.radio.V1_1.KeepaliveStatus keepaliveStatus) {
1314 
1315         RILRequest rr = mRil.processResponse(responseInfo);
1316 
1317         if (rr == null) {
1318             return;
1319         }
1320 
1321         KeepaliveStatus ret = null;
1322 
1323         switch(responseInfo.error) {
1324             case RadioError.NONE:
1325                 int convertedStatus = convertHalKeepaliveStatusCode(keepaliveStatus.code);
1326                 if (convertedStatus < 0) {
1327                     ret = new KeepaliveStatus(KeepaliveStatus.ERROR_UNSUPPORTED);
1328                 } else {
1329                     ret = new KeepaliveStatus(keepaliveStatus.sessionHandle, convertedStatus);
1330                 }
1331                 break;
1332             case RadioError.REQUEST_NOT_SUPPORTED:
1333                 ret = new KeepaliveStatus(KeepaliveStatus.ERROR_UNSUPPORTED);
1334                 // The request is unsupported, which is ok. We'll report it to the higher
1335                 // layer and treat it as acceptable in the RIL.
1336                 responseInfo.error = RadioError.NONE;
1337                 break;
1338             case RadioError.NO_RESOURCES:
1339                 ret = new KeepaliveStatus(KeepaliveStatus.ERROR_NO_RESOURCES);
1340                 break;
1341             default:
1342                 ret = new KeepaliveStatus(KeepaliveStatus.ERROR_UNKNOWN);
1343                 break;
1344         }
1345         sendMessageResponse(rr.mResult, ret);
1346         mRil.processResponseDone(rr, responseInfo, ret);
1347     }
1348 
1349     /**
1350      * @param responseInfo Response info struct containing response type, serial no. and error
1351      */
stopKeepaliveResponse(RadioResponseInfo responseInfo)1352     public void stopKeepaliveResponse(RadioResponseInfo responseInfo) {
1353         RILRequest rr = mRil.processResponse(responseInfo);
1354 
1355         if (rr == null) {
1356             return;
1357         }
1358 
1359         if (responseInfo.error == RadioError.NONE) {
1360             sendMessageResponse(rr.mResult, null);
1361             mRil.processResponseDone(rr, responseInfo, null);
1362         } else {
1363             //TODO: Error code translation
1364         }
1365     }
1366 
convertHalKeepaliveStatusCode(int halCode)1367     private int convertHalKeepaliveStatusCode(int halCode) {
1368         switch (halCode) {
1369             case android.hardware.radio.V1_1.KeepaliveStatusCode.ACTIVE:
1370                 return KeepaliveStatus.STATUS_ACTIVE;
1371             case android.hardware.radio.V1_1.KeepaliveStatusCode.INACTIVE:
1372                 return KeepaliveStatus.STATUS_INACTIVE;
1373             case android.hardware.radio.V1_1.KeepaliveStatusCode.PENDING:
1374                 return KeepaliveStatus.STATUS_PENDING;
1375             default:
1376                 mRil.riljLog("Invalid Keepalive Status" + halCode);
1377                 return -1;
1378         }
1379     }
1380 
convertHalCardStatus(CardStatus cardStatus)1381     private IccCardStatus convertHalCardStatus(CardStatus cardStatus) {
1382         IccCardStatus iccCardStatus = new IccCardStatus();
1383         iccCardStatus.setCardState(cardStatus.cardState);
1384         iccCardStatus.setUniversalPinState(cardStatus.universalPinState);
1385         iccCardStatus.mGsmUmtsSubscriptionAppIndex = cardStatus.gsmUmtsSubscriptionAppIndex;
1386         iccCardStatus.mCdmaSubscriptionAppIndex = cardStatus.cdmaSubscriptionAppIndex;
1387         iccCardStatus.mImsSubscriptionAppIndex = cardStatus.imsSubscriptionAppIndex;
1388         int numApplications = cardStatus.applications.size();
1389 
1390         // limit to maximum allowed applications
1391         if (numApplications
1392                 > com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS) {
1393             numApplications =
1394                 com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS;
1395         }
1396         iccCardStatus.mApplications = new IccCardApplicationStatus[numApplications];
1397         for (int i = 0; i < numApplications; i++) {
1398             AppStatus rilAppStatus = cardStatus.applications.get(i);
1399             IccCardApplicationStatus appStatus = new IccCardApplicationStatus();
1400             appStatus.app_type       = appStatus.AppTypeFromRILInt(rilAppStatus.appType);
1401             appStatus.app_state      = appStatus.AppStateFromRILInt(rilAppStatus.appState);
1402             appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(
1403                 rilAppStatus.persoSubstate);
1404             appStatus.aid            = rilAppStatus.aidPtr;
1405             appStatus.app_label      = rilAppStatus.appLabelPtr;
1406             appStatus.pin1_replaced  = rilAppStatus.pin1Replaced;
1407             appStatus.pin1           = appStatus.PinStateFromRILInt(rilAppStatus.pin1);
1408             appStatus.pin2           = appStatus.PinStateFromRILInt(rilAppStatus.pin2);
1409             iccCardStatus.mApplications[i] = appStatus;
1410             mRil.riljLog("IccCardApplicationStatus " + i + ":" + appStatus.toString());
1411         }
1412         return iccCardStatus;
1413     }
1414 
responseIccCardStatus(RadioResponseInfo responseInfo, CardStatus cardStatus)1415     private void responseIccCardStatus(RadioResponseInfo responseInfo, CardStatus cardStatus) {
1416         RILRequest rr = mRil.processResponse(responseInfo);
1417 
1418         if (rr != null) {
1419             IccCardStatus iccCardStatus = convertHalCardStatus(cardStatus);
1420             mRil.riljLog("responseIccCardStatus: from HIDL: " + iccCardStatus);
1421             if (responseInfo.error == RadioError.NONE) {
1422                 sendMessageResponse(rr.mResult, iccCardStatus);
1423             }
1424             mRil.processResponseDone(rr, responseInfo, iccCardStatus);
1425         }
1426     }
1427 
responseIccCardStatus_1_2(RadioResponseInfo responseInfo, android.hardware.radio.V1_2.CardStatus cardStatus)1428     private void responseIccCardStatus_1_2(RadioResponseInfo responseInfo,
1429                                            android.hardware.radio.V1_2.CardStatus cardStatus) {
1430         RILRequest rr = mRil.processResponse(responseInfo);
1431 
1432         if (rr != null) {
1433             IccCardStatus iccCardStatus = convertHalCardStatus(cardStatus.base);
1434             iccCardStatus.physicalSlotIndex = cardStatus.physicalSlotId;
1435             iccCardStatus.atr = cardStatus.atr;
1436             iccCardStatus.iccid = cardStatus.iccid;
1437             mRil.riljLog("responseIccCardStatus: from HIDL: " + iccCardStatus);
1438             if (responseInfo.error == RadioError.NONE) {
1439                 sendMessageResponse(rr.mResult, iccCardStatus);
1440             }
1441             mRil.processResponseDone(rr, responseInfo, iccCardStatus);
1442         }
1443     }
1444 
responseInts(RadioResponseInfo responseInfo, int ...var)1445     private void responseInts(RadioResponseInfo responseInfo, int ...var) {
1446         final ArrayList<Integer> ints = new ArrayList<>();
1447         for (int i = 0; i < var.length; i++) {
1448             ints.add(var[i]);
1449         }
1450         responseIntArrayList(responseInfo, ints);
1451     }
1452 
responseIntArrayList(RadioResponseInfo responseInfo, ArrayList<Integer> var)1453     private void responseIntArrayList(RadioResponseInfo responseInfo, ArrayList<Integer> var) {
1454         RILRequest rr = mRil.processResponse(responseInfo);
1455 
1456         if (rr != null) {
1457             int[] ret = new int[var.size()];
1458             for (int i = 0; i < var.size(); i++) {
1459                 ret[i] = var.get(i);
1460             }
1461             if (responseInfo.error == RadioError.NONE) {
1462                 sendMessageResponse(rr.mResult, ret);
1463             }
1464             mRil.processResponseDone(rr, responseInfo, ret);
1465         }
1466     }
1467 
responseCurrentCalls(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.Call> calls)1468     private void responseCurrentCalls(RadioResponseInfo responseInfo,
1469                                       ArrayList<android.hardware.radio.V1_0.Call> calls) {
1470         RILRequest rr = mRil.processResponse(responseInfo);
1471 
1472         if (rr != null) {
1473             int num = calls.size();
1474             ArrayList<DriverCall> dcCalls = new ArrayList<DriverCall>(num);
1475             DriverCall dc;
1476 
1477             for (int i = 0; i < num; i++) {
1478                 dc = new DriverCall();
1479                 // TODO: change name of function stateFromCLCC() in DriverCall.java to name
1480                 // clarifying what is CLCC
1481                 dc.state = DriverCall.stateFromCLCC((int) (calls.get(i).state));
1482                 dc.index = calls.get(i).index;
1483                 dc.TOA = calls.get(i).toa;
1484                 dc.isMpty = calls.get(i).isMpty;
1485                 dc.isMT = calls.get(i).isMT;
1486                 dc.als = calls.get(i).als;
1487                 dc.isVoice = calls.get(i).isVoice;
1488                 dc.isVoicePrivacy = calls.get(i).isVoicePrivacy;
1489                 dc.number = calls.get(i).number;
1490                 dc.numberPresentation =
1491                         DriverCall.presentationFromCLIP(
1492                                 (int) (calls.get(i).numberPresentation));
1493                 dc.name = calls.get(i).name;
1494                 dc.namePresentation =
1495                         DriverCall.presentationFromCLIP((int) (calls.get(i).namePresentation));
1496                 if (calls.get(i).uusInfo.size() == 1) {
1497                     dc.uusInfo = new UUSInfo();
1498                     dc.uusInfo.setType(calls.get(i).uusInfo.get(0).uusType);
1499                     dc.uusInfo.setDcs(calls.get(i).uusInfo.get(0).uusDcs);
1500                     if (!TextUtils.isEmpty(calls.get(i).uusInfo.get(0).uusData)) {
1501                         byte[] userData = calls.get(i).uusInfo.get(0).uusData.getBytes();
1502                         dc.uusInfo.setUserData(userData);
1503                     } else {
1504                         mRil.riljLog("responseCurrentCalls: uusInfo data is null or empty");
1505                     }
1506 
1507                     mRil.riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
1508                             dc.uusInfo.getType(), dc.uusInfo.getDcs(),
1509                             dc.uusInfo.getUserData().length));
1510                     mRil.riljLogv("Incoming UUS : data (hex): "
1511                             + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
1512                 } else {
1513                     mRil.riljLogv("Incoming UUS : NOT present!");
1514                 }
1515 
1516                 // Make sure there's a leading + on addresses with a TOA of 145
1517                 dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
1518 
1519                 dcCalls.add(dc);
1520 
1521                 if (dc.isVoicePrivacy) {
1522                     mRil.mVoicePrivacyOnRegistrants.notifyRegistrants();
1523                     mRil.riljLog("InCall VoicePrivacy is enabled");
1524                 } else {
1525                     mRil.mVoicePrivacyOffRegistrants.notifyRegistrants();
1526                     mRil.riljLog("InCall VoicePrivacy is disabled");
1527                 }
1528             }
1529 
1530             Collections.sort(dcCalls);
1531 
1532             if ((num == 0) && mRil.mTestingEmergencyCall.getAndSet(false)) {
1533                 if (mRil.mEmergencyCallbackModeRegistrant != null) {
1534                     mRil.riljLog("responseCurrentCalls: call ended, testing emergency call,"
1535                             + " notify ECM Registrants");
1536                     mRil.mEmergencyCallbackModeRegistrant.notifyRegistrant();
1537                 }
1538             }
1539 
1540             if (responseInfo.error == RadioError.NONE) {
1541                 sendMessageResponse(rr.mResult, dcCalls);
1542             }
1543             mRil.processResponseDone(rr, responseInfo, dcCalls);
1544         }
1545     }
1546 
responseCurrentCalls_1_2(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_2.Call> calls)1547     private void responseCurrentCalls_1_2(RadioResponseInfo responseInfo,
1548                                       ArrayList<android.hardware.radio.V1_2.Call> calls) {
1549         RILRequest rr = mRil.processResponse(responseInfo);
1550 
1551         if (rr != null) {
1552             int num = calls.size();
1553             ArrayList<DriverCall> dcCalls = new ArrayList<DriverCall>(num);
1554             DriverCall dc;
1555 
1556             for (int i = 0; i < num; i++) {
1557                 dc = new DriverCall();
1558                 // TODO: change name of function stateFromCLCC() in DriverCall.java to name
1559                 // clarifying what is CLCC
1560                 dc.state = DriverCall.stateFromCLCC((int) (calls.get(i).base.state));
1561                 dc.index = calls.get(i).base.index;
1562                 dc.TOA = calls.get(i).base.toa;
1563                 dc.isMpty = calls.get(i).base.isMpty;
1564                 dc.isMT = calls.get(i).base.isMT;
1565                 dc.als = calls.get(i).base.als;
1566                 dc.isVoice = calls.get(i).base.isVoice;
1567                 dc.isVoicePrivacy = calls.get(i).base.isVoicePrivacy;
1568                 dc.number = calls.get(i).base.number;
1569                 dc.numberPresentation =
1570                         DriverCall.presentationFromCLIP(
1571                                 (int) (calls.get(i).base.numberPresentation));
1572                 dc.name = calls.get(i).base.name;
1573                 dc.namePresentation =
1574                         DriverCall.presentationFromCLIP((int) (calls.get(i).base.namePresentation));
1575                 if (calls.get(i).base.uusInfo.size() == 1) {
1576                     dc.uusInfo = new UUSInfo();
1577                     dc.uusInfo.setType(calls.get(i).base.uusInfo.get(0).uusType);
1578                     dc.uusInfo.setDcs(calls.get(i).base.uusInfo.get(0).uusDcs);
1579                     if (!TextUtils.isEmpty(calls.get(i).base.uusInfo.get(0).uusData)) {
1580                         byte[] userData = calls.get(i).base.uusInfo.get(0).uusData.getBytes();
1581                         dc.uusInfo.setUserData(userData);
1582                     } else {
1583                         mRil.riljLog("responseCurrentCalls: uusInfo data is null or empty");
1584                     }
1585 
1586                     mRil.riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
1587                             dc.uusInfo.getType(), dc.uusInfo.getDcs(),
1588                             dc.uusInfo.getUserData().length));
1589                     mRil.riljLogv("Incoming UUS : data (hex): "
1590                             + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
1591                 } else {
1592                     mRil.riljLogv("Incoming UUS : NOT present!");
1593                 }
1594 
1595                 // Make sure there's a leading + on addresses with a TOA of 145
1596                 dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
1597 
1598                 dc.audioQuality = (int) (calls.get(i).audioQuality);
1599 
1600                 dcCalls.add(dc);
1601 
1602                 if (dc.isVoicePrivacy) {
1603                     mRil.mVoicePrivacyOnRegistrants.notifyRegistrants();
1604                     mRil.riljLog("InCall VoicePrivacy is enabled");
1605                 } else {
1606                     mRil.mVoicePrivacyOffRegistrants.notifyRegistrants();
1607                     mRil.riljLog("InCall VoicePrivacy is disabled");
1608                 }
1609             }
1610 
1611             Collections.sort(dcCalls);
1612 
1613             if ((num == 0) && mRil.mTestingEmergencyCall.getAndSet(false)) {
1614                 if (mRil.mEmergencyCallbackModeRegistrant != null) {
1615                     mRil.riljLog("responseCurrentCalls: call ended, testing emergency call,"
1616                             + " notify ECM Registrants");
1617                     mRil.mEmergencyCallbackModeRegistrant.notifyRegistrant();
1618                 }
1619             }
1620 
1621             if (responseInfo.error == RadioError.NONE) {
1622                 sendMessageResponse(rr.mResult, dcCalls);
1623             }
1624             mRil.processResponseDone(rr, responseInfo, dcCalls);
1625         }
1626     }
1627 
1628 
responseVoid(RadioResponseInfo responseInfo)1629     private void responseVoid(RadioResponseInfo responseInfo) {
1630         RILRequest rr = mRil.processResponse(responseInfo);
1631 
1632         if (rr != null) {
1633             Object ret = null;
1634             if (responseInfo.error == RadioError.NONE) {
1635                 sendMessageResponse(rr.mResult, ret);
1636             }
1637             mRil.processResponseDone(rr, responseInfo, ret);
1638         }
1639     }
1640 
responseString(RadioResponseInfo responseInfo, String str)1641     private void responseString(RadioResponseInfo responseInfo, String str) {
1642         RILRequest rr = mRil.processResponse(responseInfo);
1643 
1644         if (rr != null) {
1645             if (responseInfo.error == RadioError.NONE) {
1646                 sendMessageResponse(rr.mResult, str);
1647             }
1648             mRil.processResponseDone(rr, responseInfo, str);
1649         }
1650     }
1651 
responseStrings(RadioResponseInfo responseInfo, String ...str)1652     private void responseStrings(RadioResponseInfo responseInfo, String ...str) {
1653         ArrayList<String> strings = new ArrayList<>();
1654         for (int i = 0; i < str.length; i++) {
1655             strings.add(str[i]);
1656         }
1657         responseStringArrayList(mRil, responseInfo, strings);
1658     }
1659 
responseStringArrayList(RIL ril, RadioResponseInfo responseInfo, ArrayList<String> strings)1660     static void responseStringArrayList(RIL ril, RadioResponseInfo responseInfo,
1661                                         ArrayList<String> strings) {
1662         RILRequest rr = ril.processResponse(responseInfo);
1663 
1664         if (rr != null) {
1665             String[] ret = new String[strings.size()];
1666             for (int i = 0; i < strings.size(); i++) {
1667                 ret[i] = strings.get(i);
1668             }
1669             if (responseInfo.error == RadioError.NONE) {
1670                 sendMessageResponse(rr.mResult, ret);
1671             }
1672             ril.processResponseDone(rr, responseInfo, ret);
1673         }
1674     }
1675 
responseLastCallFailCauseInfo(RadioResponseInfo responseInfo, LastCallFailCauseInfo fcInfo)1676     private void responseLastCallFailCauseInfo(RadioResponseInfo responseInfo,
1677                                                LastCallFailCauseInfo fcInfo) {
1678         RILRequest rr = mRil.processResponse(responseInfo);
1679 
1680         if (rr != null) {
1681             LastCallFailCause ret = new LastCallFailCause();
1682             ret.causeCode = fcInfo.causeCode;
1683             ret.vendorCause = fcInfo.vendorCause;
1684             if (responseInfo.error == RadioError.NONE) {
1685                 sendMessageResponse(rr.mResult, ret);
1686             }
1687             mRil.processResponseDone(rr, responseInfo, ret);
1688         }
1689     }
1690 
responseSignalStrength( RadioResponseInfo responseInfo, android.hardware.radio.V1_0.SignalStrength signalStrength)1691     private void responseSignalStrength(
1692             RadioResponseInfo responseInfo,
1693             android.hardware.radio.V1_0.SignalStrength signalStrength) {
1694         RILRequest rr = mRil.processResponse(responseInfo);
1695 
1696         if (rr != null) {
1697             SignalStrength ret = RIL.convertHalSignalStrength(signalStrength);
1698             if (responseInfo.error == RadioError.NONE) {
1699                 sendMessageResponse(rr.mResult, ret);
1700             }
1701             mRil.processResponseDone(rr, responseInfo, ret);
1702         }
1703     }
1704 
responseSignalStrength_1_2( RadioResponseInfo responseInfo, android.hardware.radio.V1_2.SignalStrength signalStrength)1705     private void responseSignalStrength_1_2(
1706             RadioResponseInfo responseInfo,
1707             android.hardware.radio.V1_2.SignalStrength signalStrength) {
1708         RILRequest rr = mRil.processResponse(responseInfo);
1709 
1710         if (rr != null) {
1711             SignalStrength ret = RIL.convertHalSignalStrength_1_2(signalStrength);
1712             if (responseInfo.error == RadioError.NONE) {
1713                 sendMessageResponse(rr.mResult, ret);
1714             }
1715             mRil.processResponseDone(rr, responseInfo, ret);
1716         }
1717     }
1718 
responseSms(RadioResponseInfo responseInfo, SendSmsResult sms)1719     private void responseSms(RadioResponseInfo responseInfo, SendSmsResult sms) {
1720         RILRequest rr = mRil.processResponse(responseInfo);
1721 
1722         if (rr != null) {
1723             SmsResponse ret = new SmsResponse(sms.messageRef, sms.ackPDU, sms.errorCode);
1724             if (responseInfo.error == RadioError.NONE) {
1725                 sendMessageResponse(rr.mResult, ret);
1726             }
1727             mRil.processResponseDone(rr, responseInfo, ret);
1728         }
1729     }
1730 
responseSetupDataCall(RadioResponseInfo responseInfo, SetupDataCallResult setupDataCallResult)1731     private void responseSetupDataCall(RadioResponseInfo responseInfo,
1732                                        SetupDataCallResult setupDataCallResult) {
1733         RILRequest rr = mRil.processResponse(responseInfo);
1734 
1735         if (rr != null) {
1736             if (responseInfo.error == RadioError.NONE) {
1737                 sendMessageResponse(rr.mResult, setupDataCallResult);
1738             }
1739             mRil.processResponseDone(rr, responseInfo, setupDataCallResult);
1740         }
1741     }
1742 
responseIccIo(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)1743     private void responseIccIo(RadioResponseInfo responseInfo,
1744                                android.hardware.radio.V1_0.IccIoResult result) {
1745         RILRequest rr = mRil.processResponse(responseInfo);
1746 
1747         if (rr != null) {
1748             IccIoResult ret = new IccIoResult(result.sw1, result.sw2, result.simResponse);
1749             if (responseInfo.error == RadioError.NONE) {
1750                 sendMessageResponse(rr.mResult, ret);
1751             }
1752             mRil.processResponseDone(rr, responseInfo, ret);
1753         }
1754     }
1755 
responseCallForwardInfo(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CallForwardInfo> callForwardInfos)1756     private void responseCallForwardInfo(RadioResponseInfo responseInfo,
1757                                          ArrayList<android.hardware.radio.V1_0.CallForwardInfo>
1758                                                  callForwardInfos) {
1759         RILRequest rr = mRil.processResponse(responseInfo);
1760         if (rr != null) {
1761             CallForwardInfo[] ret = new CallForwardInfo[callForwardInfos.size()];
1762             for (int i = 0; i < callForwardInfos.size(); i++) {
1763                 ret[i] = new CallForwardInfo();
1764                 ret[i].status = callForwardInfos.get(i).status;
1765                 ret[i].reason = callForwardInfos.get(i).reason;
1766                 ret[i].serviceClass = callForwardInfos.get(i).serviceClass;
1767                 ret[i].toa = callForwardInfos.get(i).toa;
1768                 ret[i].number = callForwardInfos.get(i).number;
1769                 ret[i].timeSeconds = callForwardInfos.get(i).timeSeconds;
1770             }
1771             if (responseInfo.error == RadioError.NONE) {
1772                 sendMessageResponse(rr.mResult, ret);
1773             }
1774             mRil.processResponseDone(rr, responseInfo, ret);
1775         }
1776     }
1777 
convertOpertatorInfoToString(int status)1778     private static String convertOpertatorInfoToString(int status) {
1779         if (status == android.hardware.radio.V1_0.OperatorStatus.UNKNOWN) {
1780             return "unknown";
1781         } else if (status == android.hardware.radio.V1_0.OperatorStatus.AVAILABLE) {
1782             return "available";
1783         } else if (status == android.hardware.radio.V1_0.OperatorStatus.CURRENT) {
1784             return "current";
1785         } else if (status == android.hardware.radio.V1_0.OperatorStatus.FORBIDDEN) {
1786             return "forbidden";
1787         } else {
1788             return "";
1789         }
1790     }
1791 
responseOperatorInfos(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.OperatorInfo> networkInfos)1792     private void responseOperatorInfos(RadioResponseInfo responseInfo,
1793                                        ArrayList<android.hardware.radio.V1_0.OperatorInfo>
1794                                                networkInfos) {
1795         RILRequest rr = mRil.processResponse(responseInfo);
1796 
1797         if (rr != null) {
1798             ArrayList<OperatorInfo> ret = new ArrayList<OperatorInfo>();
1799             for (int i = 0; i < networkInfos.size(); i++) {
1800                 ret.add(new OperatorInfo(networkInfos.get(i).alphaLong,
1801                         networkInfos.get(i).alphaShort, networkInfos.get(i).operatorNumeric,
1802                         convertOpertatorInfoToString(networkInfos.get(i).status)));
1803             }
1804             if (responseInfo.error == RadioError.NONE) {
1805                 sendMessageResponse(rr.mResult, ret);
1806             }
1807             mRil.processResponseDone(rr, responseInfo, ret);
1808         }
1809     }
1810 
responseScanStatus(RadioResponseInfo responseInfo)1811     private void responseScanStatus(RadioResponseInfo responseInfo) {
1812         RILRequest rr = mRil.processResponse(responseInfo);
1813 
1814         if (rr != null) {
1815             NetworkScanResult nsr = null;
1816             if (responseInfo.error == RadioError.NONE) {
1817                 nsr = new NetworkScanResult(
1818                         NetworkScanResult.SCAN_STATUS_PARTIAL, RadioError.NONE, null);
1819                 sendMessageResponse(rr.mResult, nsr);
1820             }
1821             mRil.processResponseDone(rr, responseInfo, nsr);
1822         }
1823     }
1824 
responseDataCallList(RadioResponseInfo responseInfo, ArrayList<SetupDataCallResult> dataCallResultList)1825     private void responseDataCallList(RadioResponseInfo responseInfo,
1826                                       ArrayList<SetupDataCallResult> dataCallResultList) {
1827         RILRequest rr = mRil.processResponse(responseInfo);
1828 
1829         if (rr != null) {
1830             if (responseInfo.error == RadioError.NONE) {
1831                 sendMessageResponse(rr.mResult, dataCallResultList);
1832             }
1833             mRil.processResponseDone(rr, responseInfo, dataCallResultList);
1834         }
1835     }
1836 
responseCellList(RadioResponseInfo responseInfo, ArrayList<NeighboringCell> cells)1837     private void responseCellList(RadioResponseInfo responseInfo,
1838                                   ArrayList<NeighboringCell> cells) {
1839         RILRequest rr = mRil.processResponse(responseInfo);
1840 
1841         if (rr != null) {
1842             int rssi;
1843             String location;
1844             ArrayList<NeighboringCellInfo> ret = new ArrayList<NeighboringCellInfo>();
1845             NeighboringCellInfo cell;
1846 
1847             int[] subId = SubscriptionManager.getSubId(mRil.mPhoneId);
1848             int radioType =
1849                     ((TelephonyManager) mRil.mContext.getSystemService(
1850                             Context.TELEPHONY_SERVICE)).getDataNetworkType(subId[0]);
1851 
1852             if (radioType != TelephonyManager.NETWORK_TYPE_UNKNOWN) {
1853                 for (int i = 0; i < cells.size(); i++) {
1854                     rssi = cells.get(i).rssi;
1855                     location = cells.get(i).cid;
1856                     cell = new NeighboringCellInfo(rssi, location, radioType);
1857                     ret.add(cell);
1858                 }
1859             }
1860             if (responseInfo.error == RadioError.NONE) {
1861                 sendMessageResponse(rr.mResult, ret);
1862             }
1863             mRil.processResponseDone(rr, responseInfo, ret);
1864         }
1865     }
1866 
responseGmsBroadcastConfig(RadioResponseInfo responseInfo, ArrayList<GsmBroadcastSmsConfigInfo> configs)1867     private void responseGmsBroadcastConfig(RadioResponseInfo responseInfo,
1868                                             ArrayList<GsmBroadcastSmsConfigInfo> configs) {
1869         RILRequest rr = mRil.processResponse(responseInfo);
1870 
1871         if (rr != null) {
1872             ArrayList<SmsBroadcastConfigInfo> ret = new ArrayList<SmsBroadcastConfigInfo>();
1873             for (int i = 0; i < configs.size(); i++) {
1874                 ret.add(new SmsBroadcastConfigInfo(configs.get(i).fromServiceId,
1875                         configs.get(i).toServiceId, configs.get(i).fromCodeScheme,
1876                         configs.get(i).toCodeScheme, configs.get(i).selected));
1877             }
1878             if (responseInfo.error == RadioError.NONE) {
1879                 sendMessageResponse(rr.mResult, ret);
1880             }
1881             mRil.processResponseDone(rr, responseInfo, ret);
1882         }
1883     }
1884 
responseCdmaBroadcastConfig(RadioResponseInfo responseInfo, ArrayList<CdmaBroadcastSmsConfigInfo> configs)1885     private void responseCdmaBroadcastConfig(RadioResponseInfo responseInfo,
1886                                             ArrayList<CdmaBroadcastSmsConfigInfo> configs) {
1887         RILRequest rr = mRil.processResponse(responseInfo);
1888 
1889         if (rr != null) {
1890             int[] ret = null;
1891 
1892             int numServiceCategories = configs.size();
1893 
1894             if (numServiceCategories == 0) {
1895                 // TODO: The logic of providing default values should
1896                 // not be done by this transport layer. And needs to
1897                 // be done by the vendor ril or application logic.
1898                 int numInts;
1899                 numInts = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES
1900                         * CDMA_BSI_NO_OF_INTS_STRUCT + 1;
1901                 ret = new int[numInts];
1902 
1903                 // Faking a default record for all possible records.
1904                 ret[0] = CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES;
1905 
1906                 // Loop over CDMA_BROADCAST_SMS_NO_OF_SERVICE_CATEGORIES set 'english' as
1907                 // default language and selection status to false for all.
1908                 for (int i = 1; i < numInts; i += CDMA_BSI_NO_OF_INTS_STRUCT) {
1909                     ret[i + 0] = i / CDMA_BSI_NO_OF_INTS_STRUCT;
1910                     ret[i + 1] = 1;
1911                     ret[i + 2] = 0;
1912                 }
1913             } else {
1914                 int numInts;
1915                 numInts = (numServiceCategories * CDMA_BSI_NO_OF_INTS_STRUCT) + 1;
1916                 ret = new int[numInts];
1917 
1918                 ret[0] = numServiceCategories;
1919                 for (int i = 1, j = 0; j < configs.size();
1920                         j++, i = i + CDMA_BSI_NO_OF_INTS_STRUCT) {
1921                     ret[i] = configs.get(j).serviceCategory;
1922                     ret[i + 1] = configs.get(j).language;
1923                     ret[i + 2] = configs.get(j).selected ? 1 : 0;
1924                 }
1925             }
1926             if (responseInfo.error == RadioError.NONE) {
1927                 sendMessageResponse(rr.mResult, ret);
1928             }
1929             mRil.processResponseDone(rr, responseInfo, ret);
1930         }
1931     }
1932 
responseCellInfoList(RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo)1933     private void responseCellInfoList(RadioResponseInfo responseInfo,
1934                                       ArrayList<android.hardware.radio.V1_0.CellInfo> cellInfo) {
1935         RILRequest rr = mRil.processResponse(responseInfo);
1936 
1937         if (rr != null) {
1938             ArrayList<CellInfo> ret = RIL.convertHalCellInfoList(cellInfo);
1939             if (responseInfo.error == RadioError.NONE) {
1940                 sendMessageResponse(rr.mResult, ret);
1941             }
1942             mRil.processResponseDone(rr, responseInfo, ret);
1943         }
1944     }
1945 
responseCellInfoList_1_2( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_2.CellInfo> cellInfo)1946     private void responseCellInfoList_1_2(
1947             RadioResponseInfo responseInfo,
1948             ArrayList<android.hardware.radio.V1_2.CellInfo> cellInfo) {
1949         RILRequest rr = mRil.processResponse(responseInfo);
1950 
1951         if (rr != null) {
1952             ArrayList<CellInfo> ret = RIL.convertHalCellInfoList_1_2(cellInfo);
1953             if (responseInfo.error == RadioError.NONE) {
1954                 sendMessageResponse(rr.mResult, ret);
1955             }
1956             mRil.processResponseDone(rr, responseInfo, ret);
1957         }
1958     }
1959 
responseActivityData(RadioResponseInfo responseInfo, ActivityStatsInfo activityInfo)1960     private void responseActivityData(RadioResponseInfo responseInfo,
1961                                       ActivityStatsInfo activityInfo) {
1962         RILRequest rr = mRil.processResponse(responseInfo);
1963 
1964         if (rr != null) {
1965             ModemActivityInfo ret = null;
1966             if (responseInfo.error == RadioError.NONE) {
1967                 final int sleepModeTimeMs = activityInfo.sleepModeTimeMs;
1968                 final int idleModeTimeMs = activityInfo.idleModeTimeMs;
1969                 int [] txModeTimeMs = new int[ModemActivityInfo.TX_POWER_LEVELS];
1970                 for (int i = 0; i < ModemActivityInfo.TX_POWER_LEVELS; i++) {
1971                     txModeTimeMs[i] = activityInfo.txmModetimeMs[i];
1972                 }
1973                 final int rxModeTimeMs = activityInfo.rxModeTimeMs;
1974                 ret = new ModemActivityInfo(SystemClock.elapsedRealtime(), sleepModeTimeMs,
1975                         idleModeTimeMs, txModeTimeMs, rxModeTimeMs, 0);
1976             } else {
1977                 ret = new ModemActivityInfo(0, 0, 0, new int [ModemActivityInfo.TX_POWER_LEVELS],
1978                         0, 0);
1979                 responseInfo.error = RadioError.NONE;
1980             }
1981             sendMessageResponse(rr.mResult, ret);
1982             mRil.processResponseDone(rr, responseInfo, ret);
1983         }
1984     }
1985 
responseHardwareConfig( RadioResponseInfo responseInfo, ArrayList<android.hardware.radio.V1_0.HardwareConfig> config)1986     private void responseHardwareConfig(
1987             RadioResponseInfo responseInfo,
1988             ArrayList<android.hardware.radio.V1_0.HardwareConfig> config) {
1989         RILRequest rr = mRil.processResponse(responseInfo);
1990 
1991         if (rr != null) {
1992             ArrayList<HardwareConfig> ret = RIL.convertHalHwConfigList(config, mRil);
1993             if (responseInfo.error == RadioError.NONE) {
1994                 sendMessageResponse(rr.mResult, ret);
1995             }
1996             mRil.processResponseDone(rr, responseInfo, ret);
1997         }
1998     }
1999 
responseICC_IOBase64(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.IccIoResult result)2000     private void responseICC_IOBase64(RadioResponseInfo responseInfo,
2001                                       android.hardware.radio.V1_0.IccIoResult result) {
2002         RILRequest rr = mRil.processResponse(responseInfo);
2003 
2004         if (rr != null) {
2005             IccIoResult ret = new IccIoResult(
2006                     result.sw1,
2007                     result.sw2,
2008                     (!(result.simResponse).equals(""))
2009                             ? android.util.Base64.decode(result.simResponse,
2010                             android.util.Base64.DEFAULT) : (byte[]) null);
2011             if (responseInfo.error == RadioError.NONE) {
2012                 sendMessageResponse(rr.mResult, ret);
2013             }
2014             mRil.processResponseDone(rr, responseInfo, ret);
2015         }
2016     }
2017 
responseRadioCapability(RadioResponseInfo responseInfo, android.hardware.radio.V1_0.RadioCapability rc)2018     private void responseRadioCapability(RadioResponseInfo responseInfo,
2019                                          android.hardware.radio.V1_0.RadioCapability rc) {
2020         RILRequest rr = mRil.processResponse(responseInfo);
2021 
2022         if (rr != null) {
2023             RadioCapability ret = RIL.convertHalRadioCapability(rc, mRil);
2024             if (responseInfo.error == RadioError.NONE) {
2025                 sendMessageResponse(rr.mResult, ret);
2026             }
2027             mRil.processResponseDone(rr, responseInfo, ret);
2028         }
2029     }
2030 
responseLceStatus(RadioResponseInfo responseInfo, LceStatusInfo statusInfo)2031     private void responseLceStatus(RadioResponseInfo responseInfo, LceStatusInfo statusInfo) {
2032         RILRequest rr = mRil.processResponse(responseInfo);
2033 
2034         if (rr != null) {
2035             ArrayList<Integer> ret = new ArrayList<Integer>();
2036             ret.add(statusInfo.lceStatus);
2037             ret.add(Byte.toUnsignedInt(statusInfo.actualIntervalMs));
2038             if (responseInfo.error == RadioError.NONE) {
2039                 sendMessageResponse(rr.mResult, ret);
2040             }
2041             mRil.processResponseDone(rr, responseInfo, ret);
2042         }
2043     }
2044 
responseLceData(RadioResponseInfo responseInfo, LceDataInfo lceInfo)2045     private void responseLceData(RadioResponseInfo responseInfo, LceDataInfo lceInfo) {
2046         RILRequest rr = mRil.processResponse(responseInfo);
2047 
2048         if (rr != null) {
2049             LinkCapacityEstimate ret = RIL.convertHalLceData(lceInfo, mRil);
2050             if (responseInfo.error == RadioError.NONE) {
2051                 sendMessageResponse(rr.mResult, ret);
2052             }
2053             mRil.processResponseDone(rr, responseInfo, ret);
2054         }
2055     }
2056 
responseCarrierIdentifiers(RadioResponseInfo responseInfo, boolean allAllowed, CarrierRestrictions carriers)2057     private void responseCarrierIdentifiers(RadioResponseInfo responseInfo, boolean allAllowed,
2058                                             CarrierRestrictions carriers) {
2059         RILRequest rr = mRil.processResponse(responseInfo);
2060 
2061         if (rr != null) {
2062             List<CarrierIdentifier> ret = new ArrayList<CarrierIdentifier>();
2063             for (int i = 0; i < carriers.allowedCarriers.size(); i++) {
2064                 String mcc = carriers.allowedCarriers.get(i).mcc;
2065                 String mnc = carriers.allowedCarriers.get(i).mnc;
2066                 String spn = null, imsi = null, gid1 = null, gid2 = null;
2067                 int matchType = carriers.allowedCarriers.get(i).matchType;
2068                 String matchData = carriers.allowedCarriers.get(i).matchData;
2069                 if (matchType == CarrierIdentifier.MatchType.SPN) {
2070                     spn = matchData;
2071                 } else if (matchType == CarrierIdentifier.MatchType.IMSI_PREFIX) {
2072                     imsi = matchData;
2073                 } else if (matchType == CarrierIdentifier.MatchType.GID1) {
2074                     gid1 = matchData;
2075                 } else if (matchType == CarrierIdentifier.MatchType.GID2) {
2076                     gid2 = matchData;
2077                 }
2078                 ret.add(new CarrierIdentifier(mcc, mnc, spn, imsi, gid1, gid2));
2079             }
2080             if (responseInfo.error == RadioError.NONE) {
2081                 /* TODO: Handle excluded carriers */
2082                 sendMessageResponse(rr.mResult, ret);
2083             }
2084             mRil.processResponseDone(rr, responseInfo, ret);
2085         }
2086     }
2087 }
2088