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

Commit 35168cf0 authored by Sooraj Sasindran's avatar Sooraj Sasindran Committed by Hakjun Choi
Browse files

SatelliteController: check if the subscription is provisioned for non-IP datagram

This is to ensure that the provisioned state is consistent between the
SatelliteController and the SubscriptionManagerService.

Bug: 379338966
Flag: NONE bugfix
Change-Id: I215f6fbf7bfe9dce01972747bb280f4af66afa49
Test: verify using system test that phone number update is working fine
Test: atest SatelliteControllerTest --rerun-until-failure 100
parent 2ed72abe
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -4580,14 +4580,31 @@ public class SatelliteController extends Handler {
        boolean provisionChanged = false;
        synchronized (mSatelliteTokenProvisionedLock) {
            for (SatelliteSubscriberInfo subscriberInfo : newList) {

                int subId = subscriberInfo.getSubId();
                Boolean currentProvisioned =
                        mProvisionedSubscriberId.get(subscriberInfo.getSubscriberId());
                if (currentProvisioned != null && currentProvisioned == provisioned) {
                if (currentProvisioned == null) {
                    currentProvisioned = false;
                }

                Boolean isProvisionedInPersistentDb = false;
                try {
                    isProvisionedInPersistentDb = mSubscriptionManagerService
                         .isSatelliteProvisionedForNonIpDatagram(subId);
                    if (isProvisionedInPersistentDb == null) {
                        isProvisionedInPersistentDb = false;
                    }
                } catch (IllegalArgumentException | SecurityException ex) {
                    ploge("isSatelliteProvisionedForNonIpDatagram: subId=" + subId + ", ex="
                            + ex);
                }
                if (currentProvisioned == provisioned
                        && isProvisionedInPersistentDb == provisioned) {
                    continue;
                }
                provisionChanged = true;
                mProvisionedSubscriberId.put(subscriberInfo.getSubscriberId(), provisioned);
                int subId = subscriberInfo.getSubId();
                try {
                    mSubscriptionManagerService.setIsSatelliteProvisionedForNonIpDatagram(subId,
                            provisioned);
+29 −0
Original line number Diff line number Diff line
@@ -4569,6 +4569,18 @@ public class SatelliteControllerTest extends TelephonyTest {
                }
            }
        };

        TestSubscriptionManager testSubscriptionManager = new TestSubscriptionManager();
        doAnswer(invocation -> {
            testSubscriptionManager.setIsSatelliteProvisionedForNonIpDatagram(
                    invocation.getArgument(0), invocation.getArgument(1));
            return null;
        }).when(mMockSubscriptionManagerService).setIsSatelliteProvisionedForNonIpDatagram(anyInt(),
                anyBoolean());
        doAnswer(invocation -> testSubscriptionManager.isSatelliteProvisionedForNonIpDatagram(
                invocation.getArgument(0))).when(
                mMockSubscriptionManagerService).isSatelliteProvisionedForNonIpDatagram(anyInt());

        setUpResponseForRequestIsSatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
        verifySatelliteSupported(true, SATELLITE_RESULT_SUCCESS);
        int errorCode = mSatelliteControllerUT.registerForSatelliteProvisionStateChanged(callback);
@@ -6022,4 +6034,21 @@ public class SatelliteControllerTest extends TelephonyTest {
        assertTrue(mSharedPreferences.getBoolean(
                SatelliteController.NTN_SMS_SUPPORTED_BY_MESSAGES_APP_KEY, false));
    }

    private static class TestSubscriptionManager {
        public Map<Integer, Boolean> mSatelliteProvisionedForNonIpDatagram = new HashMap<>();

        public void resetProvisionMapForNonIpDatagram() {
            mSatelliteProvisionedForNonIpDatagram.clear();
        }

        public void setIsSatelliteProvisionedForNonIpDatagram(int subId, boolean provisioned) {
            mSatelliteProvisionedForNonIpDatagram.put(subId, provisioned);
        }

        public boolean isSatelliteProvisionedForNonIpDatagram(int subId) {
            Boolean isProvisioned = mSatelliteProvisionedForNonIpDatagram.get(subId);
            return isProvisioned != null ? isProvisioned : false;
        }
    }
}