script-astra/Android/Sdk/sources/android-35/com/android/internal/telephony/RadioImsProxy.java
localadmin 4380f00a78 init
2025-01-20 18:15:20 +03:00

195 lines
6.4 KiB
Java

/*
* Copyright (C) 2022 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.internal.telephony;
import android.os.RemoteException;
import android.telephony.Rlog;
/**
* A holder for IRadioIms.
* Use getAidl to get IRadioIms and call the AIDL implementations of the HAL APIs.
*/
public class RadioImsProxy extends RadioServiceProxy {
private static final String TAG = "RadioImsProxy";
private volatile android.hardware.radio.ims.IRadioIms mImsProxy = null;
/**
* Sets IRadioIms as the AIDL implementation for RadioServiceProxy.
* @param halVersion Radio HAL version.
* @param ims IRadioIms implementation.
*
* @return updated HAL version.
*/
public HalVersion setAidl(HalVersion halVersion, android.hardware.radio.ims.IRadioIms ims) {
HalVersion version = halVersion;
try {
version = RIL.getServiceHalVersion(ims.getInterfaceVersion());
} catch (RemoteException e) {
Rlog.e(TAG, "setAidl: " + e);
}
mHalVersion = version;
mImsProxy = ims;
mIsAidl = true;
Rlog.d(TAG, "AIDL initialized mHalVersion=" + mHalVersion);
return mHalVersion;
}
/**
* Gets the AIDL implementation of RadioImsProxy.
* @return IRadioIms implementation.
*/
public android.hardware.radio.ims.IRadioIms getAidl() {
return mImsProxy;
}
/**
* Resets RadioImsProxy.
*/
@Override
public void clear() {
super.clear();
mImsProxy = null;
}
/**
* Checks whether a RadioIms implementation exists.
* @return true if there is neither a HIDL nor AIDL implementation.
*/
@Override
public boolean isEmpty() {
return mRadioProxy == null && mImsProxy == null;
}
/**
* No implementation in IRadioIms.
* @throws RemoteException.
*/
@Override
public void responseAcknowledgement() throws RemoteException {
/* Currently, IRadioIms doesn't support the following response types:
* - RadioIndicationType.UNSOLICITED_ACK_EXP
* - RadioResponseType.SOLICITED_ACK_EXP */
// no-op
}
/**
* Calls IRadioIms#setSrvccCallInfo.
* @param serial Serial number of request.
* @param srvccCalls The list of call information.
* @throws RemoteException.
*/
public void setSrvccCallInfo(int serial,
android.hardware.radio.ims.SrvccCall[] srvccCalls) throws RemoteException {
if (isEmpty()) return;
if (isAidl()) {
mImsProxy.setSrvccCallInfo(serial, srvccCalls);
}
}
/**
* Calls IRadioIms#updateImsRegistrationInfo.
* @param serial Serial number of request.
* @param registrationInfo The registration state information.
* @throws RemoteException.
*/
public void updateImsRegistrationInfo(int serial,
android.hardware.radio.ims.ImsRegistration registrationInfo) throws RemoteException {
if (isEmpty()) return;
if (isAidl()) {
mImsProxy.updateImsRegistrationInfo(serial, registrationInfo);
}
}
/**
* Calls IRadioIms#startImsTraffic.
* @param serial Serial number of request.
* @param token A nonce to identify the request.
* @param trafficType IMS traffic type like registration, voice, video, SMS, emergency, and etc.
* @param accessNetworkType The type of underlying radio access network used.
* @param trafficDirection Indicates whether traffic is originated by mobile originated or
* mobile terminated use case eg. MO/MT call/SMS etc.
* @throws RemoteException.
*/
public void startImsTraffic(int serial, int token, int trafficType, int accessNetworkType,
int trafficDirection) throws RemoteException {
if (isEmpty()) return;
if (isAidl()) {
mImsProxy.startImsTraffic(serial,
token, trafficType, accessNetworkType, trafficDirection);
}
}
/**
* Calls IRadioIms#stopImsTraffic.
* @param serial Serial number of request.
* @param token The token assigned by startImsTraffic.
* @throws RemoteException.
*/
public void stopImsTraffic(int serial, int token)
throws RemoteException {
if (isEmpty()) return;
if (isAidl()) {
mImsProxy.stopImsTraffic(serial, token);
}
}
/**
* Calls IRadioIms#triggerEpsFallback.
* @param serial Serial number of request.
* @param reason Specifies the reason for EPS fallback.
* @throws RemoteException.
*/
public void triggerEpsFallback(int serial, int reason)
throws RemoteException {
if (isEmpty()) return;
if (isAidl()) {
mImsProxy.triggerEpsFallback(serial, reason);
}
}
/**
* Calls IRadioIms#sendAnbrQuery.
* @param serial Serial number of request.
* @param mediaType Media type is used to identify media stream such as audio or video.
* @param direction Direction of this packet stream (e.g. uplink or downlink).
* @param bitsPerSecond The bit rate requested by the opponent UE.
* @throws RemoteException.
*/
public void sendAnbrQuery(int serial, int mediaType, int direction, int bitsPerSecond)
throws RemoteException {
if (isEmpty()) return;
if (isAidl()) {
mImsProxy.sendAnbrQuery(serial, mediaType, direction, bitsPerSecond);
}
}
/**
* Call IRadioIms#updateImsCallStatus
* @param serial Serial number of request.
* @param imsCalls The list of call status information.
* @throws RemoteException.
*/
public void updateImsCallStatus(int serial,
android.hardware.radio.ims.ImsCall[] imsCalls) throws RemoteException {
if (isEmpty()) return;
if (isAidl()) {
mImsProxy.updateImsCallStatus(serial, imsCalls);
}
}
}