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

Commit 12f4f58d authored by Muralidhar Reddy's avatar Muralidhar Reddy Committed by Sarah Chin
Browse files

[MEP] Integrate IccSlotStatus and SimSlotMapping AIDL changes.

Apart from AIDL changes integration, below refactoring tasks are done.
1. Moved getIccId related APIs from UiccCard to UiccPort.
2. Refactored UiccSlot and UiccController to support multiple active ports.

Test: atest FrameworksTelephonyTests, Manual verification
Bug: 203741760
Change-Id: I59ad60847fcc2b9868ffc4f338cb17de5b64374d
Merged-In: I59ad60847fcc2b9868ffc4f338cb17de5b64374d
parent 02026532
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