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

Commit 33123754 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix VCN crash when retrieving carrier config while phone is gone" into main am: 6bef7bab

parents 4ecab603 6bef7bab
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import android.util.Slog;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting.Visibility;
import com.android.internal.telephony.flags.Flags;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.vcn.util.PersistableBundleUtils.PersistableBundleWrapper;

@@ -318,7 +319,11 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver {

        if (SubscriptionManager.isValidSubscriptionId(subId)) {
            // Get only configs as needed to save memory.
            final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId,
            final PersistableBundle carrierConfig =
                    Flags.fixCrashOnGettingConfigWhenPhoneIsGone()
                            ? CarrierConfigManager.getCarrierConfigSubset(mContext, subId,
                                    VcnManager.VCN_RELATED_CARRIER_CONFIG_KEYS)
                            : mCarrierConfigManager.getConfigForSubId(subId,
                                    VcnManager.VCN_RELATED_CARRIER_CONFIG_KEYS);
            if (mDeps.isConfigForIdentifiedCarrier(carrierConfig)) {
                mReadySubIdsBySlotId.put(slotId, subId);
+1 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ android_test {
        "platform-test-annotations",
        "services.core",
        "service-connectivity-tiramisu-pre-jarjar",
        "flag-junit",
    ],
    libs: [
        "android.test.runner",
+19 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
@@ -58,6 +59,7 @@ import android.os.HandlerExecutor;
import android.os.ParcelUuid;
import android.os.PersistableBundle;
import android.os.test.TestLooper;
import android.platform.test.flag.junit.SetFlagsRule;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
@@ -71,7 +73,10 @@ import android.util.ArraySet;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;

import com.android.internal.telephony.flags.Flags;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -128,6 +133,9 @@ public class TelephonySubscriptionTrackerTest {
        TEST_SUBID_TO_CARRIER_CONFIG_MAP = Collections.unmodifiableMap(subIdToCarrierConfigMap);
    }

    @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();


    @NonNull private final Context mContext;
    @NonNull private final TestLooper mTestLooper;
    @NonNull private final Handler mHandler;
@@ -185,6 +193,7 @@ public class TelephonySubscriptionTrackerTest {

    @Before
    public void setUp() throws Exception {
        mSetFlagsRule.enableFlags(Flags.FLAG_FIX_CRASH_ON_GETTING_CONFIG_WHEN_PHONE_IS_GONE);
        doReturn(2).when(mTelephonyManager).getActiveModemCount();

        mCallback = mock(TelephonySubscriptionTrackerCallback.class);
@@ -594,4 +603,14 @@ public class TelephonySubscriptionTrackerTest {
                new ArraySet<>(Arrays.asList(TEST_SUBSCRIPTION_ID_1, TEST_SUBSCRIPTION_ID_2)),
                snapshot.getAllSubIdsInGroup(TEST_PARCEL_UUID));
    }

    @Test
    public void testCarrierConfigChangeWhenPhoneIsGoneShouldNotCrash() throws Exception {
        doThrow(new IllegalStateException("Carrier config loader is not available."))
                .when(mCarrierConfigManager)
                .getConfigForSubId(eq(TEST_SUBSCRIPTION_ID_1), any());

        sendCarrierConfigChange(true /* hasValidSubscription */);
        mTestLooper.dispatchAll();
    }
}