Loading src/java/com/android/internal/telephony/data/DataProfileManager.java +7 −17 Original line number Diff line number Diff line Loading @@ -170,10 +170,6 @@ public class DataProfileManager extends Handler { @NonNull List<DataProfile> dataProfiles) { DataProfileManager.this.onInternetDataNetworkConnected(dataProfiles); } @Override public void onInternetDataNetworkDisconnected() { DataProfileManager.this.onInternetDataNetworkDisconnected(); } }); mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) { @Override Loading Loading @@ -411,30 +407,24 @@ public class DataProfileManager extends Handler { * @param dataProfiles The connected internet data networks' profiles. */ 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 // one which has longest life cycle. DataProfile dataProfile = dataProfiles.stream() .max(Comparator.comparingLong(DataProfile::getLastSetupTimestamp).reversed()) .orElse(null); // Update a working internet data profile as a future candidate for preferred data profile // after APNs are reset to default 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. 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. * Loading tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java +17 −8 Original line number Diff line number Diff line Loading @@ -1065,7 +1065,6 @@ public class DataProfileManagerTest extends TelephonyTest { tnr, TelephonyManager.NETWORK_TYPE_LTE, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN); dataProfile.setLastSetupTimestamp(SystemClock.elapsedRealtime()); dataProfile.setPreferred(true); mDataNetworkControllerCallback.onInternetDataNetworkConnected(List.of(dataProfile)); processAllMessages(); Loading @@ -1082,25 +1081,35 @@ public class DataProfileManagerTest extends TelephonyTest { assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isTrue(); assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue(); // no active internet, expect no preferred APN after reset mDataNetworkControllerCallback.onInternetDataNetworkDisconnected(); mPreferredApnId = -1; // Test user selected a bad data profile, expects to adopt the last data profile that // succeeded for internet setup after APN reset // 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(); processAllMessages(); assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isFalse(); assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isTrue(); 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)); 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; mApnSettingContentProvider.removeApnByApnId(1); mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget(); 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.isDataProfilePreferred(dataProfile)).isFalse(); Loading Loading
src/java/com/android/internal/telephony/data/DataProfileManager.java +7 −17 Original line number Diff line number Diff line Loading @@ -170,10 +170,6 @@ public class DataProfileManager extends Handler { @NonNull List<DataProfile> dataProfiles) { DataProfileManager.this.onInternetDataNetworkConnected(dataProfiles); } @Override public void onInternetDataNetworkDisconnected() { DataProfileManager.this.onInternetDataNetworkDisconnected(); } }); mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) { @Override Loading Loading @@ -411,30 +407,24 @@ public class DataProfileManager extends Handler { * @param dataProfiles The connected internet data networks' profiles. */ 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 // one which has longest life cycle. DataProfile dataProfile = dataProfiles.stream() .max(Comparator.comparingLong(DataProfile::getLastSetupTimestamp).reversed()) .orElse(null); // Update a working internet data profile as a future candidate for preferred data profile // after APNs are reset to default 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. 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. * Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java +17 −8 Original line number Diff line number Diff line Loading @@ -1065,7 +1065,6 @@ public class DataProfileManagerTest extends TelephonyTest { tnr, TelephonyManager.NETWORK_TYPE_LTE, false); assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN); dataProfile.setLastSetupTimestamp(SystemClock.elapsedRealtime()); dataProfile.setPreferred(true); mDataNetworkControllerCallback.onInternetDataNetworkConnected(List.of(dataProfile)); processAllMessages(); Loading @@ -1082,25 +1081,35 @@ public class DataProfileManagerTest extends TelephonyTest { assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isTrue(); assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue(); // no active internet, expect no preferred APN after reset mDataNetworkControllerCallback.onInternetDataNetworkDisconnected(); mPreferredApnId = -1; // Test user selected a bad data profile, expects to adopt the last data profile that // succeeded for internet setup after APN reset // 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(); processAllMessages(); assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isFalse(); assertThat(mDataProfileManagerUT.isAnyPreferredDataProfileExisting()).isTrue(); 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)); 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; mApnSettingContentProvider.removeApnByApnId(1); mDataProfileManagerUT.obtainMessage(2 /*EVENT_APN_DATABASE_CHANGED*/).sendToTarget(); 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.isDataProfilePreferred(dataProfile)).isFalse(); Loading