Loading src/java/com/android/internal/telephony/data/DataProfileManager.java +19 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading Loading @@ -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. * Loading Loading @@ -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); } } Loading tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java +13 −1 Original line number Diff line number Diff line Loading @@ -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); Loading Loading
src/java/com/android/internal/telephony/data/DataProfileManager.java +19 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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() { Loading Loading @@ -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. * Loading Loading @@ -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); } } Loading
tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java +13 −1 Original line number Diff line number Diff line Loading @@ -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); Loading