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

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

Merge "Fix adopt the last data profile that works for internet as preferred" am: cd7e084a

parents fb42af7a cd7e084a
Loading
Loading
Loading
Loading
+7 −17
Original line number Original line Diff line number Diff line
@@ -170,10 +170,6 @@ public class DataProfileManager extends Handler {
                            @NonNull List<DataProfile> dataProfiles) {
                            @NonNull List<DataProfile> dataProfiles) {
                        DataProfileManager.this.onInternetDataNetworkConnected(dataProfiles);
                        DataProfileManager.this.onInternetDataNetworkConnected(dataProfiles);
                    }
                    }
                    @Override
                    public void onInternetDataNetworkDisconnected() {
                        DataProfileManager.this.onInternetDataNetworkDisconnected();
                    }
                });
                });
        mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) {
        mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) {
            @Override
            @Override
@@ -411,30 +407,24 @@ public class DataProfileManager extends Handler {
     * @param dataProfiles The connected internet data networks' profiles.
     * @param dataProfiles The connected internet data networks' profiles.
     */
     */
    private void onInternetDataNetworkConnected(@NonNull List<DataProfile> dataProfiles) {
    private void onInternetDataNetworkConnected(@NonNull List<DataProfile> dataProfiles) {
        // If there is already a preferred data profile set, then we don't need to do anything.
        if (mPreferredDataProfile != null) return;

        // If there is no preferred data profile, then we should use one of the data profiles,
        // which is good for internet, as the preferred data profile.

        // Most of the cases there should be only one, but in case there are multiple, choose the
        // Most of the cases there should be only one, but in case there are multiple, choose the
        // one which has longest life cycle.
        // one which has longest life cycle.
        DataProfile dataProfile = dataProfiles.stream()
        DataProfile dataProfile = dataProfiles.stream()
                .max(Comparator.comparingLong(DataProfile::getLastSetupTimestamp).reversed())
                .max(Comparator.comparingLong(DataProfile::getLastSetupTimestamp).reversed())
                .orElse(null);
                .orElse(null);

        // Update a working internet data profile as a future candidate for preferred data profile
        // after APNs are reset to default
        mLastInternetDataProfile = dataProfile;
        mLastInternetDataProfile = dataProfile;

        // If there is no preferred data profile, then we should use one of the data profiles,
        // which is good for internet, as the preferred data profile.
        if (mPreferredDataProfile != null) return;
        // Save the preferred data profile into database.
        // Save the preferred data profile into database.
        setPreferredDataProfile(dataProfile);
        setPreferredDataProfile(dataProfile);
        updateDataProfiles(ONLY_UPDATE_IA_IF_CHANGED);
        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.
     * Get the preferred data profile for internet data.
     *
     *
+17 −8
Original line number Original line Diff line number Diff line
@@ -1065,7 +1065,6 @@ public class DataProfileManagerTest extends TelephonyTest {
                tnr, TelephonyManager.NETWORK_TYPE_LTE, false);
                tnr, TelephonyManager.NETWORK_TYPE_LTE, false);
        assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN);
        assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN);
        dataProfile.setLastSetupTimestamp(SystemClock.elapsedRealtime());
        dataProfile.setLastSetupTimestamp(SystemClock.elapsedRealtime());
        dataProfile.setPreferred(true);
        mDataNetworkControllerCallback.onInternetDataNetworkConnected(List.of(dataProfile));
        mDataNetworkControllerCallback.onInternetDataNetworkConnected(List.of(dataProfile));
        processAllMessages();
        processAllMessages();


@@ -1082,25 +1081,35 @@ public class DataProfileManagerTest extends TelephonyTest {
        assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isTrue();
        assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isTrue();
        assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue();
        assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue();


        // no active internet, expect no preferred APN after reset
        // Test user selected a bad data profile, expects to adopt the last data profile that
        mDataNetworkControllerCallback.onInternetDataNetworkDisconnected();
        // succeeded for internet setup after APN reset
        mPreferredApnId = -1;
        // some bad profile that cannot be used for internet
        mApnSettingContentProvider.setPreferredApn(MATCH_ALL_APN_SET_ID_IMS_APN);
        mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget();
        mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget();
        processAllMessages();
        processAllMessages();


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


        // setup internet again
        // APN reset, preferred APN should set to be the last data profile that succeeded for
        // internet setup
        mPreferredApnId = -1;
        mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget();
        processAllMessages();

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

        // Test removed data profile(user created after reset) shouldn't show up
        mDataNetworkControllerCallback.onInternetDataNetworkConnected(List.of(dataProfile));
        mDataNetworkControllerCallback.onInternetDataNetworkConnected(List.of(dataProfile));
        processAllMessages();
        processAllMessages();
        //APN reset and removed GENERAL_PURPOSE_APN(as if user created) from APN DB
        //APN reset and removed GENERAL_PURPOSE_APN from APN DB
        mPreferredApnId = -1;
        mPreferredApnId = -1;
        mApnSettingContentProvider.removeApnByApnId(1);
        mApnSettingContentProvider.removeApnByApnId(1);
        mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget();
        mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget();
        processAllMessages();
        processAllMessages();


        // There should be no preferred APN after APN reset
        // There should be no preferred APN after APN reset because last working profile is removed
        assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isFalse();
        assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isFalse();
        assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isFalse();
        assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isFalse();