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

Commit a6b7d406 authored by Thomas Nguyen's avatar Thomas Nguyen Committed by Sungcheol Ahn
Browse files

Fix some bugs in provisioning code.

Change-Id: Ib928abfa9841df286a64bb024a6b392e313d3f6e
Flag: EXEMPT bugfix
Bug: 368435815
Test: SatelliteManagerTestOnMockService
parent 8b834e63
Loading
Loading
Loading
Loading
+257 −94
Original line number Diff line number Diff line
@@ -414,11 +414,11 @@ public class SatelliteController extends Handler {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected boolean mRadioOffRequested = false;
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected final Object mSatelliteViaOemProvisionLock = new Object();
    protected final Object mDeviceProvisionLock = new Object();
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    @GuardedBy("mSatelliteViaOemProvisionLock")
    protected Boolean mIsSatelliteViaOemProvisioned = null;
    @GuardedBy("mSatelliteViaOemProvisionLock")
    @GuardedBy("mDeviceProvisionLock")
    protected Boolean mIsDeviceProvisioned = null;
    @GuardedBy("mDeviceProvisionLock")
    private Boolean mOverriddenIsSatelliteViaOemProvisioned = null;
    private final Object mSatelliteCapabilitiesLock = new Object();
    @GuardedBy("mSatelliteCapabilitiesLock")
@@ -2200,10 +2200,14 @@ public class SatelliteController extends Handler {
            return false;
        }

        if (mSatelliteSessionController != null) {
            return mSatelliteSessionController.isInEnablingState();
        if (mSatelliteSessionController != null
                && mSatelliteSessionController.isInEnablingState()) {
            return true;
        }

        synchronized (mSatelliteEnabledRequestLock) {
            return (mSatelliteEnabledRequest != null);
        }
        return false;
    }

    /**
@@ -2223,10 +2227,14 @@ public class SatelliteController extends Handler {
     * @return {@code true} if the satellite modem is being disabled and {@code false} otherwise.
     */
    public boolean isSatelliteBeingDisabled() {
        if (mSatelliteSessionController != null) {
            return mSatelliteSessionController.isInDisablingState();
        if (mSatelliteSessionController != null
                && mSatelliteSessionController.isInDisablingState()) {
            return true;
        }

        synchronized (mSatelliteEnabledRequestLock) {
            return (mSatelliteDisabledRequest != null);
        }
        return false;
    }

    /**
@@ -2393,6 +2401,29 @@ public class SatelliteController extends Handler {
            @NonNull String token, @NonNull byte[] provisionData,
            @NonNull IIntegerConsumer callback) {
        Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(callback::accept);
        if (mFeatureFlags.carrierRoamingNbIotNtn()) {
            List<SatelliteSubscriberInfo> subscriberInfoList =
                    getNtnOnlySatelliteSubscriberInfoList(result);
            if (subscriberInfoList == null) {
                return null;
            }
            ResultReceiver internalReceiver = new ResultReceiver(this) {
                @Override
                protected void onReceiveResult(int resultCode, Bundle resultData) {
                    plogd("provisionSatelliteService: resultCode=" + resultCode
                              + ", resultData=" + resultData);
                    result.accept(resultCode);
                }
            };
            provisionSatellite(subscriberInfoList, internalReceiver);

            ICancellationSignal cancelTransport = CancellationSignal.createTransport();
            CancellationSignal.fromTransport(cancelTransport).setOnCancelListener(() -> {
                deprovisionSatellite(subscriberInfoList, internalReceiver);
                mProvisionMetricsStats.setIsCanceled(true);
            });
            return cancelTransport;
        } else {
            int error = evaluateOemSatelliteRequestAllowed(false);
            if (error != SATELLITE_RESULT_SUCCESS) {
                result.accept(error);
@@ -2405,7 +2436,7 @@ public class SatelliteController extends Handler {
                return null;
            }

        Boolean satelliteProvisioned = isSatelliteViaOemProvisioned();
            Boolean satelliteProvisioned = isDeviceProvisioned();
            if (satelliteProvisioned != null && satelliteProvisioned) {
                result.accept(SATELLITE_RESULT_SUCCESS);
                return null;
@@ -2424,6 +2455,7 @@ public class SatelliteController extends Handler {
            });
            return cancelTransport;
        }
    }

    /**
     * Unregister the device/subscription with the satellite provider.
@@ -2438,13 +2470,29 @@ public class SatelliteController extends Handler {
    public void deprovisionSatelliteService(
            @NonNull String token, @NonNull IIntegerConsumer callback) {
        Consumer<Integer> result = FunctionalUtils.ignoreRemoteException(callback::accept);
        if (mFeatureFlags.carrierRoamingNbIotNtn()) {
            List<SatelliteSubscriberInfo> subscriberInfoList =
                    getNtnOnlySatelliteSubscriberInfoList(result);
            if (subscriberInfoList == null) {
                return;
            }
            ResultReceiver internalReceiver = new ResultReceiver(this) {
                @Override
                protected void onReceiveResult(int resultCode, Bundle resultData) {
                    plogd("deprovisionSatelliteService: resultCode=" + resultCode
                              + ", resultData=" + resultData);
                    result.accept(resultCode);
                }
            };
            deprovisionSatellite(subscriberInfoList, internalReceiver);
        } else {
            int error = evaluateOemSatelliteRequestAllowed(false);
            if (error != SATELLITE_RESULT_SUCCESS) {
                result.accept(error);
                return;
            }

        if (Boolean.FALSE.equals(isSatelliteViaOemProvisioned())) {
            if (Boolean.FALSE.equals(isDeviceProvisioned())) {
                result.accept(SATELLITE_RESULT_SUCCESS);
                return;
            }
@@ -2454,6 +2502,7 @@ public class SatelliteController extends Handler {
                        result, getSelectedSatelliteSubId()),
                null);
        }
    }

    /**
     * Registers for the satellite provision state changed.
@@ -2471,13 +2520,13 @@ public class SatelliteController extends Handler {

        mSatelliteProvisionStateChangedListeners.put(callback.asBinder(), callback);

        boolean isProvisioned = Boolean.TRUE.equals(isSatelliteViaOemProvisioned());
        boolean isProvisioned = Boolean.TRUE.equals(isDeviceProvisioned());
        try {
            callback.onSatelliteProvisionStateChanged(isProvisioned);
        } catch (RemoteException ex) {
            loge("registerForSatelliteProvisionStateChanged: " + ex);
        }
        synchronized (mSatelliteViaOemProvisionLock) {
        synchronized (mDeviceProvisionLock) {
            plogd("registerForSatelliteProvisionStateChanged: report current provisioned "
                    + "state, state=" + isProvisioned);
        }
@@ -2516,11 +2565,11 @@ public class SatelliteController extends Handler {
            return;
        }

        synchronized (mSatelliteViaOemProvisionLock) {
            if (mIsSatelliteViaOemProvisioned != null) {
        synchronized (mDeviceProvisionLock) {
            if (mIsDeviceProvisioned != null) {
                Bundle bundle = new Bundle();
                bundle.putBoolean(SatelliteManager.KEY_SATELLITE_PROVISIONED,
                        mIsSatelliteViaOemProvisioned);
                        mIsDeviceProvisioned);
                result.send(SATELLITE_RESULT_SUCCESS, bundle);
                return;
            }
@@ -2992,8 +3041,8 @@ public class SatelliteController extends Handler {
        synchronized (mIsSatelliteSupportedLock) {
            mIsSatelliteSupported = null;
        }
        synchronized (mSatelliteViaOemProvisionLock) {
            mIsSatelliteViaOemProvisioned = Optional.ofNullable(provisioned)
        synchronized (mDeviceProvisionLock) {
            mIsDeviceProvisioned = Optional.ofNullable(provisioned)
                    .filter(s -> s.equalsIgnoreCase("true") || s.equalsIgnoreCase("false"))
                    .map(s -> s.equalsIgnoreCase("true"))
                    .orElse(null);
@@ -3216,7 +3265,7 @@ public class SatelliteController extends Handler {
            ploge("setOemEnabledSatelliteProvisionStatus: mock modem not allowed");
            return false;
        }
        synchronized (mSatelliteViaOemProvisionLock) {
        synchronized (mDeviceProvisionLock) {
            if (reset) {
                mOverriddenIsSatelliteViaOemProvisioned = null;
            } else {
@@ -3568,6 +3617,11 @@ public class SatelliteController extends Handler {
        }

        int subId = phone.getSubId();
        int carrierRoamingNtnConnectType = getCarrierRoamingNtnConnectType(subId);
        if (carrierRoamingNtnConnectType == CARRIER_ROAMING_NTN_CONNECT_MANUAL) {
            return isInCarrierRoamingNbIotNtn(phone);
        }

        if (!isSatelliteSupportedViaCarrier(subId)) {
            return false;
        }
@@ -3919,8 +3973,8 @@ public class SatelliteController extends Handler {
        if (result == SATELLITE_RESULT_SUCCESS
                || result == SATELLITE_RESULT_REQUEST_NOT_SUPPORTED) {
            persistOemEnabledSatelliteProvisionStatus(true);
            synchronized (mSatelliteViaOemProvisionLock) {
                mIsSatelliteViaOemProvisioned = true;
            synchronized (mDeviceProvisionLock) {
                mIsDeviceProvisioned = true;
            }
            callback.accept(SATELLITE_RESULT_SUCCESS);
            handleEventSatelliteProvisionStateChanged(true);
@@ -3947,8 +4001,8 @@ public class SatelliteController extends Handler {
        if (result == SATELLITE_RESULT_SUCCESS
                || result == SATELLITE_RESULT_REQUEST_NOT_SUPPORTED) {
            persistOemEnabledSatelliteProvisionStatus(false);
            synchronized (mSatelliteViaOemProvisionLock) {
                mIsSatelliteViaOemProvisioned = false;
            synchronized (mDeviceProvisionLock) {
                mIsDeviceProvisioned = false;
            }
            if (arg.callback != null) {
                arg.callback.accept(SATELLITE_RESULT_SUCCESS);
@@ -3998,21 +4052,21 @@ public class SatelliteController extends Handler {
    }

    /**
     * Check if satellite is provisioned for a subscription on the device.
     * @return true if satellite is provisioned on the given subscription else return false.
     * Check if satellite is provisioned for the device.
     * @return {@code true} if device is provisioned for satellite else return {@code false}.
     */
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    @Nullable
    protected Boolean isSatelliteViaOemProvisioned() {
        synchronized (mSatelliteViaOemProvisionLock) {
    protected Boolean isDeviceProvisioned() {
        synchronized (mDeviceProvisionLock) {
            if (mOverriddenIsSatelliteViaOemProvisioned != null) {
                return mOverriddenIsSatelliteViaOemProvisioned;
            }

            if (mIsSatelliteViaOemProvisioned == null) {
                mIsSatelliteViaOemProvisioned = getPersistedOemEnabledSatelliteProvisionStatus();
            if (mIsDeviceProvisioned == null) {
                mIsDeviceProvisioned = getPersistedDeviceProvisionStatus();
            }
            return mIsSatelliteViaOemProvisioned;
            return mIsDeviceProvisioned;
        }
    }

@@ -4240,11 +4294,14 @@ public class SatelliteController extends Handler {
    private void handleEventSatelliteProvisionStateChanged(boolean provisioned) {
        plogd("handleSatelliteProvisionStateChangedEvent: provisioned=" + provisioned);

        synchronized (mSatelliteViaOemProvisionLock) {
        synchronized (mDeviceProvisionLock) {
            persistOemEnabledSatelliteProvisionStatus(provisioned);
            mIsSatelliteViaOemProvisioned = provisioned;
            mIsDeviceProvisioned = provisioned;
        }
        notifyDeviceProvisionStateChanged(provisioned);
    }

    private void notifyDeviceProvisionStateChanged(boolean provisioned) {
        List<ISatelliteProvisionStateCallback> deadCallersList = new ArrayList<>();
        mSatelliteProvisionStateChangedListeners.values().forEach(listener -> {
            try {
@@ -4266,14 +4323,14 @@ public class SatelliteController extends Handler {
        boolean provisionChanged = false;
        synchronized (mSatelliteTokenProvisionedLock) {
            for (SatelliteSubscriberInfo subscriberInfo : newList) {
                if (mProvisionedSubscriberId.getOrDefault(subscriberInfo.getSubscriberId(), false)
                        == provisioned) {
                Boolean currentProvisioned =
                        mProvisionedSubscriberId.get(subscriberInfo.getSubscriberId());
                if (currentProvisioned != null && currentProvisioned == provisioned) {
                    continue;
                }
                provisionChanged = true;
                mProvisionedSubscriberId.put(subscriberInfo.getSubscriberId(), provisioned);
                int subId = mSubscriberIdPerSub.getOrDefault(subscriberInfo.getSubscriberId(),
                        SubscriptionManager.INVALID_SUBSCRIPTION_ID);
                int subId = subscriberInfo.getSubId();
                try {
                    mSubscriptionManagerService.setIsSatelliteProvisionedForNonIpDatagram(subId,
                            provisioned);
@@ -4293,7 +4350,8 @@ public class SatelliteController extends Handler {
                getPrioritizedSatelliteSubscriberProvisionStatusList();
        plogd("handleEventSatelliteSubscriptionProvisionStateChanged: " + informList);
        notifySatelliteSubscriptionProvisionStateChanged(informList);
        // Report updated provisioned status
        updateDeviceProvisionStatus();
        // Report updated provisioned status to metrics.
        synchronized (mSatelliteTokenProvisionedLock) {
            boolean isProvisioned = !mProvisionedSubscriberId.isEmpty()
                    && mProvisionedSubscriberId.containsValue(Boolean.TRUE);
@@ -4303,6 +4361,17 @@ public class SatelliteController extends Handler {
        handleStateChangedForCarrierRoamingNtnEligibility();
    }

    private void updateDeviceProvisionStatus() {
        boolean isProvisioned = getPersistedDeviceProvisionStatus();
        plogd("updateDeviceProvisionStatus: isProvisioned=" + isProvisioned);
        synchronized (mDeviceProvisionLock) {
            if (mIsDeviceProvisioned == null || mIsDeviceProvisioned != isProvisioned) {
                mIsDeviceProvisioned = isProvisioned;
                notifyDeviceProvisionStateChanged(isProvisioned);
            }
        }
    }

    private void notifySatelliteSubscriptionProvisionStateChanged(
            @NonNull List<SatelliteSubscriberProvisionStatus> list) {
        List<ISatelliteProvisionStateCallback> deadCallersList = new ArrayList<>();
@@ -4629,6 +4698,9 @@ public class SatelliteController extends Handler {
                    sendRequestAsync(CMD_UPDATE_SATELLITE_ENABLE_ATTRIBUTES,
                            mSatelliteEnableAttributesUpdateRequest, null);
                }
                synchronized (mSatellitePhoneLock) {
                    updateLastNotifiedNtnModeAndNotify(mSatellitePhone);
                }
            }
        }
    }
@@ -4676,6 +4748,9 @@ public class SatelliteController extends Handler {
                    false, "moveSatelliteToOffStateAndCleanUpResources");
        }
        selectBindingSatelliteSubscription();
        synchronized (mSatellitePhoneLock) {
            updateLastNotifiedNtnModeAndNotify(mSatellitePhone);
        }
    }

    private void setDemoModeEnabled(boolean enabled) {
@@ -5014,6 +5089,8 @@ public class SatelliteController extends Handler {
                }
            }
        }
        // Need to update the provision status of the device
        updateDeviceProvisionStatus();
    }

    @NonNull
@@ -5327,7 +5404,7 @@ public class SatelliteController extends Handler {
        }

        if (isProvisionRequired) {
            Boolean satelliteProvisioned = isSatelliteViaOemProvisioned();
            Boolean satelliteProvisioned = isDeviceProvisioned();
            if (satelliteProvisioned == null) {
                plogd("evaluateOemSatelliteRequestAllowed: satelliteProvisioned is null");
                return SatelliteManager.SATELLITE_RESULT_INVALID_TELEPHONY_STATE;
@@ -5599,10 +5676,10 @@ public class SatelliteController extends Handler {
    }

    private void persistOemEnabledSatelliteProvisionStatus(boolean isProvisioned) {
        synchronized (mSatelliteViaOemProvisionLock) {
        synchronized (mDeviceProvisionLock) {
            plogd("persistOemEnabledSatelliteProvisionStatus: isProvisioned=" + isProvisioned);
            if (mFeatureFlags.carrierRoamingNbIotNtn()) {
                int subId = SatelliteServiceUtils.getNtnOnlySubscriptionId(mContext);
                int subId = getNtnOnlySubscriptionId();
                if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
                    try {
                        mSubscriptionManagerService.setIsSatelliteProvisionedForNonIpDatagram(subId,
@@ -5629,24 +5706,34 @@ public class SatelliteController extends Handler {
    }

    @Nullable
    private Boolean getPersistedOemEnabledSatelliteProvisionStatus() {
        plogd("getPersistedOemEnabledSatelliteProvisionStatus:");
        synchronized (mSatelliteViaOemProvisionLock) {
    private boolean getPersistedDeviceProvisionStatus() {
        plogd("getPersistedDeviceProvisionStatus");
        synchronized (mDeviceProvisionLock) {
            if (mFeatureFlags.carrierRoamingNbIotNtn()) {
                int subId = SatelliteServiceUtils.getNtnOnlySubscriptionId(mContext);
                int subId = getNtnOnlySubscriptionId();
                if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
                    return mSubscriptionManagerService.isSatelliteProvisionedForNonIpDatagram(
                            subId);
                } else {
                    plogd("getPersistedOemEnabledSatelliteProvisionStatus: "
                            + "subId=INVALID_SUBSCRIPTION_ID, return null");
                    return null;
                    if (mSubscriptionManagerService.isSatelliteProvisionedForNonIpDatagram(subId)) {
                        return true;
                    }
                }

                List<SubscriptionInfo> activeSubscriptionInfoList =
                        mSubscriptionManagerService.getActiveSubscriptionInfoList(
                            mContext.getOpPackageName(), mContext.getAttributionTag(), true);
                for (SubscriptionInfo info : activeSubscriptionInfoList) {
                    if (info.isSatelliteESOSSupported()) {
                        if (mSubscriptionManagerService.isSatelliteProvisionedForNonIpDatagram(
                                info.getSubscriptionId())) {
                            return true;
                        }
                    }
                }
                return false;
            } else {
                if (!loadSatelliteSharedPreferences()) return false;

                if (mSharedPreferences == null) {
                    ploge("getPersistedOemEnabledSatelliteProvisionStatus: mSharedPreferences is "
                    ploge("getPersistedDeviceProvisionStatus: mSharedPreferences is "
                            + "null");
                    return false;
                } else {
@@ -5678,7 +5765,7 @@ public class SatelliteController extends Handler {

        Bundle bundle = new Bundle();
        bundle.putBoolean(SatelliteManager.KEY_SATELLITE_PROVISIONED,
                Boolean.TRUE.equals(isSatelliteViaOemProvisioned()));
                Boolean.TRUE.equals(isDeviceProvisioned()));
        ((ResultReceiver) request.argument).send(SATELLITE_RESULT_SUCCESS, bundle);
    }

@@ -6423,6 +6510,9 @@ public class SatelliteController extends Handler {
                if (!isNtnOnly && !isESOSSupported) {
                    continue;
                }
                if (!isActive && !isNtnOnly) {
                    continue;
                }

                int keyPriority = (isESOSSupported && isActive && isDefaultSmsSubId) ? 0
                        : (isESOSSupported && isActive) ? 1
@@ -6448,6 +6538,9 @@ public class SatelliteController extends Handler {
                    logd("Old phone number is removed: id = " + subId);
                    isChanged = true;
                }
                if (!newSubscriberId.isEmpty()) {
                    mSubscriberIdPerSub.put(newSubscriberId, subId);
                }
            }
        }
        plogd("evaluateESOSProfilesPrioritization: newSubsInfoListPerPriority.size()="
@@ -6472,16 +6565,19 @@ public class SatelliteController extends Handler {

    // The subscriberId for ntnOnly SIMs is the Iccid, whereas for ESOS supported SIMs, the
    // subscriberId is the Imsi prefix 6 digit + phone number.
    private Pair<String, Integer> getSubscriberIdAndType(SubscriptionInfo info) {
    private Pair<String, Integer> getSubscriberIdAndType(@Nullable SubscriptionInfo info) {
        String subscriberId = "";
        @SatelliteSubscriberInfo.SubscriberIdType int subscriberIdType =
                SatelliteSubscriberInfo.ICCID;
        if (info.isSatelliteESOSSupported()) {
            subscriberId = getPhoneNumberBasedCarrier(info.getSubscriptionId());
            subscriberIdType = SatelliteSubscriberInfo.IMSI_MSISDN;
        if (info == null) {
            logd("getSubscriberIdAndType: subscription info is null");
            return new Pair<>(subscriberId, subscriberIdType);
        }
        if (info.isOnlyNonTerrestrialNetwork()) {
            subscriberId = info.getIccId();
        } else if (info.isSatelliteESOSSupported()) {
            subscriberId = getPhoneNumberBasedCarrier(info.getSubscriptionId());
            subscriberIdType = SatelliteSubscriberInfo.IMSI_MSISDN;
        }
        logd("getSubscriberIdAndType: subscriberId=" + subscriberId + ", subscriberIdType="
                + subscriberIdType);
@@ -6654,7 +6750,7 @@ public class SatelliteController extends Handler {
        synchronized (mSatelliteTokenProvisionedLock) {
            if (selectedSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID
                    && isSatelliteSupportedViaOem()) {
                selectedSubId = SatelliteServiceUtils.getNtnOnlySubscriptionId(mContext);
                selectedSubId = getNtnOnlySubscriptionId();
            }
            mSelectedSatelliteSubId = selectedSubId;
            setSatellitePhone(selectedSubId);
@@ -6671,7 +6767,12 @@ public class SatelliteController extends Handler {
    }

    private boolean isActiveSubId(int subId) {
        return mSubscriptionManagerService.getSubscriptionInfo(subId).isActive();
        SubscriptionInfo subInfo = mSubscriptionManagerService.getSubscriptionInfo(subId);
        if (subInfo == null) {
            logd("isActiveSubId: subscription associated with subId=" + subId + " not found");
            return false;
        }
        return subInfo.isActive();
    }

    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
@@ -6751,7 +6852,8 @@ public class SatelliteController extends Handler {
            if (mSatellitePhone == null) {
                mSatellitePhone = SatelliteServiceUtils.getPhone();
            }
            plogd("mSatellitePhone:" + (mSatellitePhone != null) + ", subId=" + subId);
            plogd("mSatellitePhone: phoneId=" + (mSatellitePhone != null
                      ? mSatellitePhone.getPhoneId() : "null") + ", subId=" + subId);
            int carrierId = mSatellitePhone.getCarrierId();
            if (carrierId != UNKNOWN_CARRIER_ID) {
                mControllerMetricsStats.setCarrierId(carrierId);
@@ -7150,6 +7252,67 @@ public class SatelliteController extends Handler {
        }
    }

    private int getNtnOnlySubscriptionId() {
        List<SubscriptionInfo> infoList = mSubscriptionManagerService.getAllSubInfoList(
                        mContext.getOpPackageName(), mContext.getAttributionTag());
        int subId = infoList.stream()
                .filter(info -> info.isOnlyNonTerrestrialNetwork())
                .mapToInt(SubscriptionInfo::getSubscriptionId)
                .findFirst()
                .orElse(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        logd("getNtnOnlySubscriptionId: subId=" + subId);
        return subId;
    }

    @Nullable
    private List<SatelliteSubscriberInfo> getNtnOnlySatelliteSubscriberInfoList(
            Consumer<Integer> result) {
        SatelliteSubscriberInfo satelliteSubscriberInfo = getNtnOnlySatelliteSubscriberInfo();
        if (satelliteSubscriberInfo == null) {
            result.accept(SatelliteManager.SATELLITE_RESULT_REQUEST_NOT_SUPPORTED);
            return null;
        }
        List<SatelliteSubscriberInfo> satelliteSubscriberInfoList = new ArrayList<>();
        satelliteSubscriberInfoList.add(satelliteSubscriberInfo);

        return satelliteSubscriberInfoList;
    }

    @Nullable private SatelliteSubscriberInfo getNtnOnlySatelliteSubscriberInfo() {
        int ntnOnlySubId = getNtnOnlySubscriptionId();
        if (ntnOnlySubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            logw("getNtnOnlySatelliteSubscriberInfo: no ntn only subscription found");
            return null;
        }
        SubscriptionInfo subInfo = mSubscriptionManagerService.getSubscriptionInfo(ntnOnlySubId);
        if (subInfo == null) {
            logw("getNtnOnlySatelliteSubscriberInfo: no subscription info found for subId="
                    + ntnOnlySubId);
            return null;
        }
        return getSatelliteSubscriberInfo(subInfo);
    }

    @Nullable private SatelliteSubscriberInfo getSatelliteSubscriberInfo(
        @NonNull SubscriptionInfo subInfo) {
        Pair<String, Integer> subscriberIdPair = getSubscriberIdAndType(subInfo);
        String subscriberId = subscriberIdPair.first;
        int carrierId = subInfo.getCarrierId();
        String apn = getConfigForSubId(subInfo.getSubscriptionId())
                .getString(KEY_SATELLITE_NIDD_APN_NAME_STRING, "");
        logd("getSatelliteSubscriberInfo: subInfo: " + subInfo + ", subscriberId:"
                + subscriberId + " , carrierId=" + carrierId + " , apn=" + apn);
        if (subscriberId.isEmpty()) {
            logw("getSatelliteSubscriberInfo: not a satellite subscription.");
            return null;
        }
        return new SatelliteSubscriberInfo.Builder().setSubscriberId(subscriberId)
                        .setCarrierId(carrierId).setNiddApn(apn)
                        .setSubId(subInfo.getSubscriptionId())
                        .setSubscriberIdType(subscriberIdPair.second)
                        .build();
    }

    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected void handleCarrierRoamingNtnAvailableServicesChanged(int subId) {
        if (!mFeatureFlags.carrierRoamingNbIotNtn()) {
+5 −5

File changed.

Preview size limit exceeded, changes collapsed.

+1 −36

File changed.

Preview size limit exceeded, changes collapsed.

+39 −12

File changed.

Preview size limit exceeded, changes collapsed.

+20 −20

File changed.

Preview size limit exceeded, changes collapsed.

Loading