blob: 69ef65eb5aea03d4b97a3afeeab3e9c342a6a7cc [file]
/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.phone;
import android.content.Context;
import android.net.KeepalivePacketData;
import android.net.LinkProperties;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
import android.os.Registrant;
import android.telephony.ImsiEncryptionInfo;
import android.telephony.NetworkScanRequest;
import android.telephony.SignalThresholdInfo;
import android.telephony.TelephonyManager;
import android.telephony.data.DataProfile;
import android.telephony.data.NetworkSliceInfo;
import android.telephony.data.TrafficDescriptor;
import android.telephony.emergency.EmergencyNumber;
import com.android.internal.telephony.BaseCommands;
import com.android.internal.telephony.RadioCapability;
import com.android.internal.telephony.UUSInfo;
import com.android.internal.telephony.cat.CatService;
import com.android.internal.telephony.cdma.CdmaSmsBroadcastConfigInfo;
import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.PersoSubState;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.uicc.UiccProfile;
import java.util.List;
/**
* This class is a fake implementation of RIL.java. This is used to send RIL events to CatService
* for testing purpose.
*/
class FakeRil extends BaseCommands {
private HandlerThread mHandlerThread;
private Handler mHandler;
private Registrant mProactiveCmdRegistrant;
FakeRil(Context context) {
super(context);
mHandlerThread = new HandlerThread("FakeRilThread");
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper());
}
/** Sends RIL_UNSOL_STK_PROACTIVE_COMMAND events to CatService. */
public void sendProactiveCmdToCatService(int slotId, String tlv) {
UiccProfile uiccProfile = UiccController.getInstance().getUiccProfileForPhone(slotId);
mHandler.post(
new Runnable() {
@Override
public void run() {
CatService catService = CatService.getInstance(null, null, null, slotId);
if (catService == null) {
return;
}
catService.dispose(); // dispose current object to attach FakeRil dependency
catService =
CatService.getInstance(FakeRil.this, mContext, uiccProfile, slotId);
mProactiveCmdRegistrant.notifyRegistrant(new AsyncResult(null, tlv, null));
}
});
}
@Override
public void setOnCatProactiveCmd(Handler h, int what, Object obj) {
mProactiveCmdRegistrant = new Registrant(h, what, obj);
}
@Override
public void setOnNITZTime(Handler h, int what, Object obj) {}
@Override
public void getIccCardStatus(Message result) {}
@Override
public void supplyIccPin(String pin, Message result) {}
@Override
public void changeIccPin(String oldPin, String newPin, Message result) {}
@Override
public void changeBarringPassword(
String facility, String oldPwd, String newPwd, Message result) {}
@Override
public void supplyNetworkDepersonalization(String netpin, Message result) {}
@Override
public void supplySimDepersonalization(
PersoSubState persoType, String controlKey, Message result) {}
@Override
public void getCurrentCalls(Message result) {}
@Override
public void getDataCallList(Message result) {}
@Override
public void dial(
String address,
boolean isEmergencyCall,
EmergencyNumber emergencyNumberInfo,
boolean hasKnownUserIntentEmergency,
int clirMode,
Message result) {}
@Override
public void dial(
String address,
boolean isEmergencyCall,
EmergencyNumber emergencyNumberInfo,
boolean hasKnownUserIntentEmergency,
int clirMode,
UUSInfo uusInfo,
Message result) {}
@Override
public void getIMSI(Message result) {}
@Override
public void getIMSIForApp(String aid, Message result) {}
@Override
public void hangupConnection(int gsmIndex, Message result) {}
@Override
public void hangupWaitingOrBackground(Message result) {}
@Override
public void hangupForegroundResumeBackground(Message result) {}
@Override
public void switchWaitingOrHoldingAndActive(Message result) {}
@Override
public void conference(Message result) {}
@Override
public void setPreferredVoicePrivacy(boolean enable, Message result) {}
@Override
public void getPreferredVoicePrivacy(Message result) {}
@Override
public void separateConnection(int gsmIndex, Message result) {}
@Override
public void acceptCall(Message result) {}
@Override
public void rejectCall(Message result) {}
@Override
public void explicitCallTransfer(Message result) {}
@Override
public void getLastCallFailCause(Message result) {}
@Override
public void setMute(boolean enableMute, Message response) {}
@Override
public void getMute(Message response) {}
@Override
public void getSignalStrength(Message result) {}
@Override
public void getVoiceRegistrationState(Message result) {}
@Override
public void getDataRegistrationState(Message result) {}
@Override
public void getOperator(Message result) {}
@Override
public void sendDtmf(char c, Message result) {}
@Override
public void startDtmf(char c, Message result) {}
@Override
public void stopDtmf(Message result) {}
@Override
public void sendBurstDtmf(String dtmfString, int on, int off, Message result) {}
@Override
public void sendSMS(String smscPDU, String pdu, Message result) {}
@Override
public void sendSMSExpectMore(String smscPDU, String pdu, Message result) {}
@Override
public void sendCdmaSms(byte[] pdu, Message result) {}
@Override
public void sendCdmaSMSExpectMore(byte[] pdu, Message result) {}
@Override
public void sendImsGsmSms(
String smscPDU, String pdu, int retry, int messageRef, Message response) {}
@Override
public void sendImsCdmaSms(byte[] pdu, int retry, int messageRef, Message response) {}
@Override
public void getImsRegistrationState(Message result) {}
@Override
public void deleteSmsOnSim(int index, Message response) {}
@Override
public void writeSmsToSim(int status, String smsc, String pdu, Message response) {}
@Override
public void writeSmsToRuim(int status, byte[] pdu, Message response) {}
@Override
public void setupDataCall(
int accessNetworkType,
DataProfile dataProfile,
boolean allowRoaming,
int reason,
LinkProperties linkProperties,
int pduSessionId,
NetworkSliceInfo sliceInfo,
TrafficDescriptor trafficDescriptor,
boolean matchAllRuleAllowed,
Message result) {}
@Override
public void deactivateDataCall(int cid, int reason, Message result) {}
@Override
public void setRadioPower(boolean on, Message result) {}
@Override
public void acknowledgeLastIncomingGsmSms(boolean success, int cause, Message result) {}
@Override
public void acknowledgeLastIncomingCdmaSms(boolean success, int cause, Message result) {}
@Override
public void acknowledgeIncomingGsmSmsWithPdu(boolean success, String ackPdu, Message result) {}
@Override
public void iccIO(
int command,
int fileid,
String path,
int p1,
int p2,
int p3,
String data,
String pin2,
Message result) {}
@Override
public void iccIOForApp(
int command,
int fileid,
String path,
int p1,
int p2,
int p3,
String data,
String pin2,
String aid,
Message result) {}
@Override
public void getCLIR(Message result) {}
@Override
public void setCLIR(int clirMode, Message result) {}
@Override
public void queryCallWaiting(int serviceClass, Message response) {}
@Override
public void setCallWaiting(boolean enable, int serviceClass, Message response) {}
@Override
public void setNetworkSelectionModeAutomatic(Message response) {}
@Override
public void setNetworkSelectionModeManual(String operatorNumeric, int ran, Message response) {}
@Override
public void getNetworkSelectionMode(Message response) {}
@Override
public void getAvailableNetworks(Message response) {}
@Override
public void startNetworkScan(NetworkScanRequest nsr, Message response) {}
@Override
public void stopNetworkScan(Message response) {}
@Override
public void setCallForward(
int action,
int cfReason,
int serviceClass,
String number,
int timeSeconds,
Message response) {}
@Override
public void queryCallForwardStatus(
int cfReason, int serviceClass, String number, Message response) {}
@Override
public void queryCLIP(Message response) {}
@Override
public void getBasebandVersion(Message response) {}
@Override
public void queryFacilityLock(
String facility, String password, int serviceClass, Message response) {}
@Override
public void queryFacilityLockForApp(
String facility, String password, int serviceClass, String appId, Message response) {}
@Override
public void setFacilityLock(
String facility,
boolean lockState,
String password,
int serviceClass,
Message response) {}
@Override
public void setFacilityLockForApp(
String facility,
boolean lockState,
String password,
int serviceClass,
String appId,
Message response) {}
@Override
public void sendUSSD(String ussdString, Message response) {}
@Override
public void cancelPendingUssd(Message response) {}
@Override
public void sendTerminalResponse(String contents, Message response) {}
@Override
public void sendEnvelope(String contents, Message response) {}
@Override
public void sendEnvelopeWithStatus(String contents, Message response) {}
@Override
public void handleCallSetupRequestFromSim(boolean accept, Message response) {}
@Override
public void setPreferredNetworkType(int networkType, Message response) {}
@Override
public void getPreferredNetworkType(Message response) {}
@Override
public void setAllowedNetworkTypesBitmap(
@TelephonyManager.NetworkTypeBitMask int networkTypeBitmask, Message response) {}
@Override
public void getAllowedNetworkTypesBitmap(Message response) {}
@Override
public void setLocationUpdates(boolean enable, Message response) {}
@Override
public void getSmscAddress(Message result) {}
@Override
public void setSmscAddress(String address, Message result) {}
@Override
public void reportSmsMemoryStatus(boolean available, Message result) {}
@Override
public void reportStkServiceIsRunning(Message result) {}
@Override
public void getGsmBroadcastConfig(Message response) {}
@Override
public void setGsmBroadcastConfig(SmsBroadcastConfigInfo[] config, Message response) {}
@Override
public void setGsmBroadcastActivation(boolean activate, Message response) {}
// ***** Methods for CDMA support
@Override
public void getDeviceIdentity(Message response) {}
@Override
public void getImei(Message response) {}
@Override
public void setPhoneType(int phoneType) {}
@Override
public void queryTTYMode(Message response) {}
@Override
public void setTTYMode(int ttyMode, Message response) {}
@Override
public void getCdmaBroadcastConfig(Message response) {}
@Override
public void setCdmaBroadcastConfig(CdmaSmsBroadcastConfigInfo[] configs, Message response) {}
@Override
public void setCdmaBroadcastActivation(boolean activate, Message response) {}
@Override
public void exitEmergencyCallbackMode(Message response) {}
@Override
public void supplyIccPinForApp(String pin, String aid, Message response) {}
@Override
public void supplyIccPukForApp(String puk, String newPin, String aid, Message response) {}
@Override
public void supplyIccPin2ForApp(String pin2, String aid, Message response) {}
@Override
public void supplyIccPuk2ForApp(String puk2, String newPin2, String aid, Message response) {}
@Override
public void changeIccPinForApp(String oldPin, String newPin, String aidPtr, Message response) {}
@Override
public void changeIccPin2ForApp(
String oldPin2, String newPin2, String aidPtr, Message response) {}
@Override
public void requestIccSimAuthentication(
int authContext, String data, String aid, Message response) {}
@Override
public void getVoiceRadioTechnology(Message result) {}
@Override
public void setInitialAttachApn(DataProfile dataProfile, Message result) {}
@Override
public void setDataProfile(DataProfile[] dps, Message result) {}
@Override
public void iccOpenLogicalChannel(String aid, int p2, Message response) {}
@Override
public void iccCloseLogicalChannel(int channel, boolean isEs10, Message response) {}
@Override
public void iccTransmitApduLogicalChannel(
int channel,
int cla,
int instruction,
int p1,
int p2,
int p3,
String data,
boolean isEs10Command,
Message response) {}
@Override
public void iccTransmitApduBasicChannel(
int cla, int instruction, int p1, int p2, int p3, String data, Message response) {}
@Override
public void nvResetConfig(int resetType, Message response) {}
@Override
public void getHardwareConfig(Message result) {}
@Override
public void requestShutdown(Message result) {}
@Override
public void setRadioCapability(RadioCapability rc, Message response) {}
@Override
public void getRadioCapability(Message response) {}
@Override
public void setCarrierInfoForImsiEncryption(
ImsiEncryptionInfo imsiEncryptionInfo, Message result) {}
@Override
public void sendDeviceState(int stateType, boolean state, Message result) {}
@Override
public void setUnsolResponseFilter(int filter, Message result) {}
@Override
public void setSignalStrengthReportingCriteria(
List<SignalThresholdInfo> signalThresholdInfo, Message result) {}
@Override
public void setLinkCapacityReportingCriteria(
int hysteresisMs,
int hysteresisDlKbps,
int hysteresisUlKbps,
int[] thresholdsDlKbps,
int[] thresholdsUlKbps,
int ran,
Message result) {}
@Override
public void startNattKeepalive(
int contextId, KeepalivePacketData packetData, int intervalMillis, Message result) {}
@Override
public void stopNattKeepalive(int sessionHandle, Message result) {}
@Override
public void allocatePduSessionId(Message result) {}
@Override
public void releasePduSessionId(Message result, int pduSessionId) {}
@Override
public void startHandover(Message result, int callId) {}
@Override
public void cancelHandover(Message result, int callId) {}
}