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

Commit f18e5a00 authored by Nagendra Prasad Nagarle Basavaraju's avatar Nagendra Prasad Nagarle Basavaraju Committed by Cherrypicker Worker
Browse files

[Esim Bootstrap] DDS scenario handling at ESIM bootstrap activation

- Avoid dialogs at esim bootstrap activation
- Avoid setting dds to bootstrap sim.

Bug: 326958028
Test: m and device test at b/326958028#comment6
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:37fcbc3641ce2b5fe9b1e5406331f219eb29733c)
Merged-In: Iab2513f4db14ec9350a7f4e53991a732c2f08739
Change-Id: Iab2513f4db14ec9350a7f4e53991a732c2f08739
parent 28183684
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.internal.telephony;

import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
import static android.telephony.SubscriptionManager.PROFILE_CLASS_PROVISIONING;
import static android.telephony.TelephonyManager.ACTION_PRIMARY_SUBSCRIPTION_LIST_CHANGED;
import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE;
import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_ALL;
@@ -632,7 +633,9 @@ public class MultiSimSettingController extends Handler {
            if (hasData()) mSubscriptionManagerService.setDefaultDataSubId(subId);
            if (hasCalling()) mSubscriptionManagerService.setDefaultVoiceSubId(subId);
            if (hasMessaging()) mSubscriptionManagerService.setDefaultSmsSubId(subId);
            if (!mSubscriptionManagerService.isEsimBootStrapProvisioningActivated()) {
                sendDefaultSubConfirmedNotification(subId);
            }
            return;
        }

@@ -685,7 +688,9 @@ public class MultiSimSettingController extends Handler {
        // Update mPrimarySubList. Opportunistic subscriptions can't be default
        // data / voice / sms subscription.
        List<Integer> prevPrimarySubList = mPrimarySubList;
        mPrimarySubList = activeSubList.stream().filter(info -> !info.isOpportunistic())
        mPrimarySubList = activeSubList.stream()
                .filter(info -> !info.isOpportunistic())
                .filter(info -> info.getProfileClass() != PROFILE_CLASS_PROVISIONING)
                .map(info -> info.getSubscriptionId())
                .collect(Collectors.toList());

@@ -751,6 +756,12 @@ public class MultiSimSettingController extends Handler {

    private void sendSubChangeNotificationIfNeeded(int change, boolean dataSelected,
            boolean voiceSelected, boolean smsSelected) {

        if (mSubscriptionManagerService.isEsimBootStrapProvisioningActivated()) {
            log("esim bootstrap activation in progress, skip notification");
            return;
        }

        @TelephonyManager.DefaultSubscriptionSelectType
        int simSelectDialogType = getSimSelectDialogType(
                change, dataSelected, voiceSelected, smsSelected);
+37 −0
Original line number Diff line number Diff line
@@ -4421,6 +4421,43 @@ public class SubscriptionManagerService extends ISub.Stub {
                Collectors.toList());
    }

    /**
     * checks whether esim bootstrap is activated for any of the available active subscription info
     * list.
     *
     * @return {@code true} if esim bootstrap is activated for any of the active subscription,
     * else {@code false}
     *
     */
    public boolean isEsimBootStrapProvisioningActivated() {
        if (!mFeatureFlags.esimBootstrapProvisioningFlag()) {
            return false;
        }

        List<SubscriptionInfo> activeSubInfos =
                getActiveSubscriptionInfoList(mContext.getOpPackageName(),
                        mContext.getAttributionTag(), true/*isForAllProfile*/);

        return activeSubInfos.stream().anyMatch(subInfo -> subInfo != null
                && subInfo.getProfileClass() == SubscriptionManager.PROFILE_CLASS_PROVISIONING);
    }

    /**
     * checks whether esim bootstrap is activated for the subscription.
     *
     * @return {@code true} if esim bootstrap is activated for sub id else {@code false}
     *
     */
    public boolean isEsimBootStrapProvisioningActiveForSubId(int subId) {
        if (!mFeatureFlags.esimBootstrapProvisioningFlag()) {
            return false;
        }

        SubscriptionInfoInternal subInfo = getSubscriptionInfoInternal(subId);
        return subInfo != null
                && subInfo.getProfileClass() == SubscriptionManager.PROFILE_CLASS_PROVISIONING;
    }

    /**
     * Get the current calling package name.
     * @return the current calling package name
+53 −0
Original line number Diff line number Diff line
@@ -1007,4 +1007,57 @@ public class MultiSimSettingControllerTest extends TelephonyTest {
        // Default data is set to sub1
        verify(mSubscriptionManagerService).syncGroupedSetting(1);
    }

    @Test
    public void testDailogsAndWarnings_WithBootstrapSim() {
        doReturn(true).when(mFeatureFlags).esimBootstrapProvisioningFlag();

        // Mark sub 2 as inactive.
        markSubscriptionInactive(2);
        mMultiSimSettingControllerUT.notifyAllSubscriptionLoaded();
        sendCarrierConfigChanged(0, 1);
        processAllMessages();

        // Sub 1 should be default sub silently.
        verify(mSubscriptionManagerService).setDefaultDataSubId(1);
        verify(mSubscriptionManagerService).setDefaultVoiceSubId(1);
        verify(mSubscriptionManagerService).setDefaultSmsSubId(1);
        verifyDismissIntentSent();

        // Mark sub 2 bootstrap sim as active in phone[1].
        doReturn(true).when(mSubscriptionManagerService).isEsimBootStrapProvisioningActivated();
        setSimSlotIndex(2, 1);
        clearInvocations(mSubscriptionManagerService);
        clearInvocations(mContext);
        mSubInfo[2] = new SubscriptionInfoInternal.Builder().setId(2).setSimSlotIndex(1)
                .setProfileClass(SubscriptionManager.PROFILE_CLASS_PROVISIONING).build();
        mMultiSimSettingControllerUT.notifySubscriptionInfoChanged();
        sendCarrierConfigChanged(1, 2);
        processAllMessages();

        // Taking out SIM 1.
        clearInvocations(mSubscriptionManagerService);
        markSubscriptionInactive(1/*subid*/);
        mMultiSimSettingControllerUT.notifySubscriptionInfoChanged();
        sendCarrierConfigChanged(0/*phoneid*/, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        processAllMessages();

        // No user selection needed, no intent should be sent for notification
        verify(mContext, never()).sendBroadcast(any());

        //Insert back sim1 and switch from sub 1 to sub 3 in phone[0].
        clearInvocations(mSubscriptionManagerService);
        markSubscriptionInactive(1);
        setSimSlotIndex(3, 0);
        mMultiSimSettingControllerUT.notifySubscriptionInfoChanged();
        sendCarrierConfigChanged(0/*phoneid*/, 3/*subid*/);
        processAllMessages();

        // Sub 3 should be default sub.
        verify(mSubscriptionManagerService).setDefaultDataSubId(3);
        verify(mSubscriptionManagerService).setDefaultVoiceSubId(3);
        verify(mSubscriptionManagerService).setDefaultSmsSubId(3);
        verify(mContext, never()).sendBroadcast(any());
    }

}