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

Commit d1f0d3d8 authored by Ling Ma's avatar Ling Ma
Browse files

Sync preferred apn and preferred apn set id

When APN db is reset to default, mPreferredSetId is set to 0 along with
the preferred db is reset to empty. However, we do have preferred
profile that's loaded from carrier config, and the preferred db should
be in sync with the mPreferredDataProfile.

Bug: 232890963
Test: manual basic + atest
Change-Id: I5784a39c7796e92c1b94412d2a10163ef1926913
parent 0135e3e9
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -312,14 +312,15 @@ public class DataProfileManager extends Handler {
            profilesChanged = true;
        }

        // Reload the latest preferred data profile from either database or config.
        profilesChanged |= updatePreferredDataProfile();

        int setId = getPreferredDataProfileSetId();
        if (setId != mPreferredDataProfileSetId) {
            logl("Changed preferred data profile set id to " + setId);
            mPreferredDataProfileSetId = setId;
            profilesChanged = true;
        }
        // Reload the latest preferred data profile from either database or config.
        profilesChanged |= updatePreferredDataProfile();

        updateDataProfilesAtModem();
        updateInitialAttachDataProfileAtModem();
@@ -461,6 +462,8 @@ public class DataProfileManager extends Handler {
            preferredDataProfile = getPreferredDataProfileFromDb();
            if (preferredDataProfile == null) {
                preferredDataProfile = getPreferredDataProfileFromConfig();
                // Save the preferred data profile into database.
                setPreferredDataProfile(preferredDataProfile);
            }
        } else {
            preferredDataProfile = null;
@@ -647,7 +650,7 @@ public class DataProfileManager extends Handler {
            return null;
        }

        // Check if the remaining data profiles can used in current data network type.
        // Check if the remaining data profiles can be used in current data network type.
        dataProfiles = dataProfiles.stream()
                .filter(dp -> dp.getApnSetting() != null
                        && dp.getApnSetting().canSupportNetworkType(networkType))
+37 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
@@ -832,7 +833,7 @@ public class DataProfileManagerTest extends TelephonyTest {
    }

    @Test
    public void testResetApn() {
    public void testResetApnNoPreferredConfig() {
        mSimInserted = true;
        mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget();
        processAllMessages();
@@ -863,6 +864,41 @@ public class DataProfileManagerTest extends TelephonyTest {
        assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isFalse();
    }

    @Test
    public void testResetApnWithPreferredConfig() {
        // carrier configured preferred data profile should be picked
        doReturn(GENERAL_PURPOSE_APN1).when(mDataConfigManager).getDefaultPreferredApn();
        clearInvocations(mDataConfigManager);
        TelephonyNetworkRequest tnr = new TelephonyNetworkRequest(
                new NetworkRequest.Builder()
                        .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                        .build(), mPhone);
        mSimInserted = true;
        mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget();
        processAllMessages();

        // The carrier configured data profile should be the preferred APN after APN reset
        DataProfile dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
                tnr, TelephonyManager.NETWORK_TYPE_LTE);

        verify(mDataConfigManager).getDefaultPreferredApn();
        assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN1);
        assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue();

        // APN reset
        mPreferredApnId = -1;
        mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget();
        clearInvocations(mDataConfigManager);
        processAllMessages();

        // The carrier configured data profile should be the preferred APN after APN reset
        dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest(
                tnr, TelephonyManager.NETWORK_TYPE_LTE);
        verify(mDataConfigManager).getDefaultPreferredApn();
        assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN1);
        assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue();
    }

    @Test
    public void testTetheringApnExisting() {
        assertThat(mDataProfileManagerUT.isTetheringDataProfileExisting(