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

Commit ed5c2a1b authored by Antony Sargent's avatar Antony Sargent
Browse files

Don't allow CBRS subscriptions to be set as default for Calls/SMS

CBRS subscriptions (also known as "opportunistic" in the code base) are
data-only and it should not be possible to try to set them as the
default for Calls or SMS.

Fixes: 125855327
Test: make RunSettingsRoboTests
Change-Id: Ie20ef21ccc7b27315089f6a61cceb6e1512ec373
parent 44427259
Loading
Loading
Loading
Loading
+14 −11
Original line number Original line Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.settings.core.BasePreferenceController;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.SubscriptionUtil;
import com.android.settings.network.SubscriptionsChangeListener;
import com.android.settings.network.SubscriptionsChangeListener;


import java.util.ArrayList;
import java.util.List;
import java.util.List;


import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.Lifecycle;
@@ -124,27 +125,29 @@ public abstract class DefaultSubscriptionController extends BasePreferenceContro


        // We'll have one entry for each available subscription, plus one for a "ask me every
        // We'll have one entry for each available subscription, plus one for a "ask me every
        // time" entry at the end.
        // time" entry at the end.
        final CharSequence[] displayNames = new CharSequence[subs.size() + 1];
        final ArrayList<CharSequence> displayNames = new ArrayList<>();
        final CharSequence[] subscriptionIds = new CharSequence[subs.size() + 1];
        final ArrayList<CharSequence> subscriptionIds = new ArrayList<>();


        final int serviceDefaultSubId = getDefaultSubscriptionId();
        final int serviceDefaultSubId = getDefaultSubscriptionId();
        boolean subIsAvailable = false;
        boolean subIsAvailable = false;


        int i = 0;
        for (SubscriptionInfo sub : subs) {
        for (; i < subs.size(); i++) {
            if (sub.isOpportunistic()) {
            displayNames[i] = subs.get(i).getDisplayName();
                continue;
            final int subId = subs.get(i).getSubscriptionId();
            }
            subscriptionIds[i] = Integer.toString(subId);
            displayNames.add(sub.getDisplayName());
            final int subId = sub.getSubscriptionId();
            subscriptionIds.add(Integer.toString(subId));
            if (subId == serviceDefaultSubId) {
            if (subId == serviceDefaultSubId) {
                subIsAvailable = true;
                subIsAvailable = true;
            }
            }
        }
        }
        // Add the extra "Ask every time" value at the end.
        // Add the extra "Ask every time" value at the end.
        displayNames[i] = mContext.getString(R.string.calls_and_sms_ask_every_time);
        displayNames.add(mContext.getString(R.string.calls_and_sms_ask_every_time));
        subscriptionIds[i] = Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        subscriptionIds.add(Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID));


        mPreference.setEntries(displayNames);
        mPreference.setEntries(displayNames.toArray(new CharSequence[0]));
        mPreference.setEntryValues(subscriptionIds);
        mPreference.setEntryValues(subscriptionIds.toArray(new CharSequence[0]));


        if (subIsAvailable) {
        if (subIsAvailable) {
            mPreference.setValue(Integer.toString(serviceDefaultSubId));
            mPreference.setValue(Integer.toString(serviceDefaultSubId));
+28 −0
Original line number Original line Diff line number Diff line
@@ -147,6 +147,34 @@ public class DefaultSubscriptionControllerTest {
                Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
                Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
    }
    }


    @Test
    public void displayPreference_threeSubsOneIsOpportunistic_correctListPreferenceValues() {
        final SubscriptionInfo sub1 = createMockSub(111, "sub1");
        final SubscriptionInfo sub2 = createMockSub(222, "sub2");
        final SubscriptionInfo sub3 = createMockSub(333, "sub3");

        // Mark sub2 as opportunistic; then it should not appear in the list of entries/entryValues.
        when(sub2.isOpportunistic()).thenReturn(true);

        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2, sub3));
        doReturn(sub1.getSubscriptionId()).when(mController).getDefaultSubscriptionId();

        mController.displayPreference(mScreen);

        final CharSequence[] entries = mListPreference.getEntries();
        assertThat(entries.length).isEqualTo(3);
        assertThat(entries[0]).isEqualTo("sub1");
        assertThat(entries[1]).isEqualTo("sub3");
        assertThat(entries[2]).isEqualTo(mContext.getString(R.string.calls_and_sms_ask_every_time));

        final CharSequence[] entryValues = mListPreference.getEntryValues();
        assertThat(entryValues.length).isEqualTo(3);
        assertThat(entryValues[0]).isEqualTo("111");
        assertThat(entryValues[1]).isEqualTo("333");
        assertThat(entryValues[2]).isEqualTo(
                Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
    }

    @Test
    @Test
    public void onPreferenceChange_prefChangedToSub2_callbackCalledCorrectly() {
    public void onPreferenceChange_prefChangedToSub2_callbackCalledCorrectly() {
        final SubscriptionInfo sub1 = createMockSub(111, "sub1");
        final SubscriptionInfo sub1 = createMockSub(111, "sub1");