Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db0db9b2 authored by Sarah Chin's avatar Sarah Chin Committed by Automerger Merge Worker
Browse files

Merge "[MEP] Integrate IccSlotStatus and SimSlotMapping AIDL changes." am: b9c279cb

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/2033304

Change-Id: I591f64071c5e79cc3e0b049c6146266cfd8f49e0
parents 2c548461 b9c279cb
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -4675,8 +4675,11 @@ public class GsmCdmaPhone extends Phone {
            return;
        }

        String iccId = slot.getIccId();
        if (iccId == null) return;
        UiccPort port = mUiccController.getUiccPort(mPhoneId);
        String iccId = (port == null) ? null : port.getIccId();
        if (iccId == null) {
            return;
        }

        SubscriptionInfo info = SubscriptionController.getInstance().getSubInfoForIccId(
                IccUtils.stripTrailingFs(iccId));
+44 −16
Original line number Diff line number Diff line
@@ -309,6 +309,7 @@ import android.telephony.SignalStrength;
import android.telephony.SignalThresholdInfo;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.telephony.UiccSlotMapping;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataCallResponse;
import android.telephony.data.DataProfile;
@@ -338,6 +339,7 @@ import com.android.internal.telephony.data.KeepaliveStatus.KeepaliveStatusCode;
import com.android.internal.telephony.uicc.AdnCapacity;
import com.android.internal.telephony.uicc.IccCardApplicationStatus;
import com.android.internal.telephony.uicc.IccCardStatus;
import com.android.internal.telephony.uicc.IccSimPortInfo;
import com.android.internal.telephony.uicc.IccSlotPortMapping;
import com.android.internal.telephony.uicc.IccSlotStatus;
import com.android.internal.telephony.uicc.IccUtils;
@@ -4406,10 +4408,16 @@ public class RILUtils {
            for (android.hardware.radio.config.SimSlotStatus slotStatus : halSlotStatusArray) {
                IccSlotStatus iccSlotStatus = new IccSlotStatus();
                iccSlotStatus.setCardState(slotStatus.cardState);
                iccSlotStatus.setSlotState(slotStatus.portInfo[0].portActive ? 1 : 0);
                iccSlotStatus.logicalSlotIndex = slotStatus.portInfo[0].logicalSlotId;
                int portCount = slotStatus.portInfo.length;
                iccSlotStatus.mSimPortInfos = new IccSimPortInfo[portCount];
                for (int i = 0; i < portCount; i++) {
                    IccSimPortInfo simPortInfo = new IccSimPortInfo();
                    simPortInfo.mIccId = slotStatus.portInfo[i].iccId;
                    simPortInfo.mLogicalSlotIndex = slotStatus.portInfo[i].logicalSlotId;
                    simPortInfo.mPortActive = slotStatus.portInfo[i].portActive;
                    iccSlotStatus.mSimPortInfos[i] = simPortInfo;
                }
                iccSlotStatus.atr = slotStatus.atr;
                iccSlotStatus.iccid = slotStatus.portInfo[0].iccId;
                iccSlotStatus.eid = slotStatus.eid;
                response.add(iccSlotStatus);
            }
@@ -4423,10 +4431,14 @@ public class RILUtils {
                    halSlotStatusArray) {
                IccSlotStatus iccSlotStatus = new IccSlotStatus();
                iccSlotStatus.setCardState(slotStatus.base.cardState);
                iccSlotStatus.setSlotState(slotStatus.base.slotState);
                iccSlotStatus.logicalSlotIndex = slotStatus.base.logicalSlotId;
                // Old HAL versions does not support MEP, so only one port is available.
                iccSlotStatus.mSimPortInfos = new IccSimPortInfo[1];
                IccSimPortInfo simPortInfo = new IccSimPortInfo();
                simPortInfo.mIccId = slotStatus.base.iccid;
                simPortInfo.mLogicalSlotIndex = slotStatus.base.logicalSlotId;
                simPortInfo.mPortActive = (slotStatus.base.slotState == IccSlotStatus.STATE_ACTIVE);
                iccSlotStatus.mSimPortInfos[TelephonyManager.DEFAULT_PORT_INDEX] = simPortInfo;
                iccSlotStatus.atr = slotStatus.base.atr;
                iccSlotStatus.iccid = slotStatus.base.iccid;
                iccSlotStatus.eid = slotStatus.eid;
                response.add(iccSlotStatus);
            }
@@ -4440,10 +4452,14 @@ public class RILUtils {
                    halSlotStatusArray) {
                IccSlotStatus iccSlotStatus = new IccSlotStatus();
                iccSlotStatus.setCardState(slotStatus.cardState);
                iccSlotStatus.setSlotState(slotStatus.slotState);
                iccSlotStatus.logicalSlotIndex = slotStatus.logicalSlotId;
                // Old HAL versions does not support MEP, so only one port is available.
                iccSlotStatus.mSimPortInfos = new IccSimPortInfo[1];
                IccSimPortInfo simPortInfo = new IccSimPortInfo();
                simPortInfo.mIccId = slotStatus.iccid;
                simPortInfo.mLogicalSlotIndex = slotStatus.logicalSlotId;
                simPortInfo.mPortActive = (slotStatus.slotState == IccSlotStatus.STATE_ACTIVE);
                iccSlotStatus.mSimPortInfos[TelephonyManager.DEFAULT_PORT_INDEX] = simPortInfo;
                iccSlotStatus.atr = slotStatus.atr;
                iccSlotStatus.iccid = slotStatus.iccid;
                response.add(iccSlotStatus);
            }
            return response;
@@ -4452,21 +4468,33 @@ public class RILUtils {
    }

    /**
     * Convert int[] list to SlotPortMapping[]
     * @param list int[] of slots mapping
     * Convert List<UiccSlotMapping> list to SlotPortMapping[]
     * @param list List<UiccSlotMapping> of slots mapping
     * @return SlotPortMapping[] of slots mapping
     */
    public static android.hardware.radio.config.SlotPortMapping[] convertSimSlotsMapping(
            int[] list) {
            List<UiccSlotMapping> slotMapping) {
        android.hardware.radio.config.SlotPortMapping[] res =
                new android.hardware.radio.config.SlotPortMapping[list.length];
        for (int i : list) {
            res[i] = new android.hardware.radio.config.SlotPortMapping();
            res[i].portId = i;
                new android.hardware.radio.config.SlotPortMapping[slotMapping.size()];
        for (UiccSlotMapping mapping : slotMapping) {
            int logicalSlotIdx = mapping.getLogicalSlotIndex();
            res[logicalSlotIdx] = new android.hardware.radio.config.SlotPortMapping();
            res[logicalSlotIdx].physicalSlotId = mapping.getPhysicalSlotIndex();
            res[logicalSlotIdx].portId = mapping.getPortIndex();
        }
        return res;
    }

    /** Convert a list of UiccSlotMapping to an ArrayList<Integer>.*/
    public static ArrayList<Integer> convertSlotMappingToList(
            List<UiccSlotMapping> slotMapping) {
        int[] physicalSlots = new int[slotMapping.size()];
        for (UiccSlotMapping mapping : slotMapping) {
            physicalSlots[mapping.getLogicalSlotIndex()] = mapping.getPhysicalSlotIndex();
        }
        return primitiveArrayToArrayList(physicalSlots);
    }


    /**
     * Convert PhoneCapability to telephony PhoneCapability.
+4 −3
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.WorkSource;
import android.telephony.TelephonyManager;
import android.telephony.UiccSlotMapping;
import android.util.SparseArray;

import com.android.telephony.Rlog;
@@ -514,7 +515,7 @@ public class RadioConfig extends Handler {
    /**
     * Wrapper function for IRadioConfig.setSimSlotsMapping(int32_t serial, vec<uint32_t> slotMap).
     */
    public void setSimSlotsMapping(int[] physicalSlots, Message result) {
    public void setSimSlotsMapping(List<UiccSlotMapping> slotMapping, Message result) {
        RadioConfigProxy proxy = getRadioConfigProxy(result);
        if (proxy.isEmpty()) return;

@@ -522,10 +523,10 @@ public class RadioConfig extends Handler {
                mDefaultWorkSource);
        if (DBG) {
            logd(rr.serialString() + "> " + RILUtils.requestToString(rr.mRequest) + " "
                    + Arrays.toString(physicalSlots));
                    + slotMapping);
        }
        try {
            proxy.setSimSlotsMapping(rr.mSerial, physicalSlots);
            proxy.setSimSlotsMapping(rr.mSerial, slotMapping);
        } catch (RemoteException | RuntimeException e) {
            resetProxyAndRequestList("setSimSlotsMapping", e);
        }
+9 −6
Original line number Diff line number Diff line
@@ -19,9 +19,11 @@ package com.android.internal.telephony;
import android.os.HwBinder;
import android.os.IBinder;
import android.os.RemoteException;
import android.telephony.UiccSlotMapping;

import com.android.telephony.Rlog;

import java.util.List;
import java.util.Set;

/**
@@ -217,15 +219,16 @@ public class RadioConfigProxy {
    }

    /**
     * Wrapper function for IRadioConfig.setSimSlotsMapping(int32_t serial, vec<uint32_t> slotMap).
     * TODO(ag/15898089): Interface for setSimSlotsMapping was changes but underlying implementation
     *                    was not provided. Need to update this with proper implementation.
     * Wrapper function for IRadioConfig.setSimSlotsMapping(int32_t serial,
     * vec<SlotPortMapping> portMap).
     */
    public void setSimSlotsMapping(int serial, int[] slots) throws RemoteException {
    public void setSimSlotsMapping(int serial, List<UiccSlotMapping> slotMapping)
            throws RemoteException {
        if (isAidl()) {
            getAidl().setSimSlotsMapping(serial, RILUtils.convertSimSlotsMapping(slots));
            getAidl().setSimSlotsMapping(serial, RILUtils.convertSimSlotsMapping(slotMapping));
        } else {
            getHidl10().setSimSlotsMapping(serial, RILUtils.primitiveArrayToArrayList(slots));
            getHidl10().setSimSlotsMapping(serial,
                    RILUtils.convertSlotMappingToList(slotMapping));
        }
    }

+12 −4
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import android.telephony.TelephonyRegistryManager;
import android.telephony.UiccAccessRule;
import android.telephony.UiccPortInfo;
import android.telephony.UiccSlotInfo;
import android.telephony.UiccSlotMapping;
import android.telephony.euicc.EuiccManager;
import android.text.TextUtils;
import android.util.EventLog;
@@ -1163,9 +1164,12 @@ public class SubscriptionController extends ISub.Stub {
        for (UiccSlot uiccSlot : uiccSlots) {
            if (uiccSlot != null && uiccSlot.getCardState() != null
                    && uiccSlot.getCardState().isCardPresent()
                    && !uiccSlot.isEuicc()
                    && !TextUtils.isEmpty(uiccSlot.getIccId())) {
                ret.add(IccUtils.stripTrailingFs(uiccSlot.getIccId()));
                    && !uiccSlot.isEuicc()) {
                // Non euicc slots will have single port, so use default port index.
                String iccId = uiccSlot.getIccId(TelephonyManager.DEFAULT_PORT_INDEX);
                if (!TextUtils.isEmpty(iccId)) {
                    ret.add(IccUtils.stripTrailingFs(iccId));
                }
            }
        }

@@ -4093,7 +4097,11 @@ public class SubscriptionController extends ISub.Stub {
                    PhoneConfigurationManager.getInstance().switchMultiSimConfig(
                            mTelephonyManager.getSupportedModemCount());
                } else {
                    UiccController.getInstance().switchSlots(new int[]{physicalSlotIndex}, null);
                    List<UiccSlotMapping> slotMapping = new ArrayList<>();
                    // As this is single sim mode, set port index to 0 and logical slot index is 0
                    slotMapping.add(new UiccSlotMapping(TelephonyManager.DEFAULT_PORT_INDEX,
                            physicalSlotIndex, 0));
                    UiccController.getInstance().switchSlots(slotMapping, null);
                }
            }
            return true;
Loading