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

Commit 8f625028 authored by Ling Ma's avatar Ling Ma
Browse files

Adopt the last data profile that works for internet as preferred

After APN reset, if no carrier configured default, and the data profile
that was successfully used in the current internet connection still exists,
adopt that one as the preferred as the best guess.

Test: atest
Fix: 242968857
Change-Id: I26a1e7e41f5705d0e30b446fe9bb8d66b13cf0f8
Merged-In: I26a1e7e41f5705d0e30b446fe9bb8d66b13cf0f8
parent 2b02b5c6
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -106,6 +106,9 @@ public class DataProfileManager extends Handler {
    /** The preferred data profile used for internet. */
    private @Nullable DataProfile mPreferredDataProfile = null;

    /** The last data profile that's successful for internet connection. */
    private @Nullable DataProfile mLastInternetDataProfile = null;

    /** Preferred data profile set id. */
    private int mPreferredDataProfileSetId = Telephony.Carriers.NO_APN_SET_ID;

@@ -166,7 +169,12 @@ public class DataProfileManager extends Handler {
                    public void onInternetDataNetworkConnected(
                            @NonNull List<DataProfile> dataProfiles) {
                        DataProfileManager.this.onInternetDataNetworkConnected(dataProfiles);
                    }});
                    }
                    @Override
                    public void onInternetDataNetworkDisconnected() {
                        DataProfileManager.this.onInternetDataNetworkDisconnected();
                    }
                });
        mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) {
            @Override
            public void onCarrierConfigChanged() {
@@ -410,11 +418,19 @@ public class DataProfileManager extends Handler {
        DataProfile dataProfile = dataProfiles.stream()
                .max(Comparator.comparingLong(DataProfile::getLastSetupTimestamp).reversed())
                .orElse(null);
        mLastInternetDataProfile = dataProfile;
        // Save the preferred data profile into database.
        setPreferredDataProfile(dataProfile);
        updateDataProfiles(ONLY_UPDATE_IA_IF_CHANGED);
    }

    /**
     * Called when internet data is disconnected.
     */
    private void onInternetDataNetworkDisconnected() {
        mLastInternetDataProfile = null;
    }

    /**
     * Get the preferred data profile for internet data.
     *
@@ -498,12 +514,12 @@ public class DataProfileManager extends Handler {
                    setPreferredDataProfile(preferredDataProfile);
                } else {
                    preferredDataProfile = mAllDataProfiles.stream()
                            .filter(dp -> areDataProfileSharingApn(dp, mPreferredDataProfile))
                            .filter(dp -> areDataProfileSharingApn(dp, mLastInternetDataProfile))
                            .findFirst()
                            .orElse(null);
                    if (preferredDataProfile != null) {
                        log("updatePreferredDataProfile: preferredDB is empty and no carrier "
                                + "default configured, setting preferred to be prev preferred DP.");
                                + "default configured, setting preferred to be prev internet DP.");
                        setPreferredDataProfile(preferredDataProfile);
                    }
                }
+13 −1
Original line number Diff line number Diff line
@@ -938,10 +938,22 @@ public class DataProfileManagerTest extends TelephonyTest {
        mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget();
        processAllMessages();

        // preferred APN should set to be the prev preferred
        // preferred APN should set to be the last data profile that succeeded for internet setup
        assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isTrue();
        assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue();

        // no active internet, expect no preferred APN after reset
        mDataNetworkControllerCallback.onInternetDataNetworkDisconnected();
        mPreferredApnId = -1;
        mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget();
        processAllMessages();

        assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isFalse();
        assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isFalse();

        // setup internet again
        mDataNetworkControllerCallback.onInternetDataNetworkConnected(List.of(dataProfile));
        processAllMessages();
        //APN reset and removed GENERAL_PURPOSE_APN(as if user created) from APN DB
        mPreferredApnId = -1;
        mApnSettingContentProvider.removeApnByApnId(1);