diff options
author | Ling Ma <linggm@google.com> | 2022-06-02 23:20:54 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-06-02 23:20:54 +0000 |
commit | 51613ffbcc8aeaa471456cabb2bf4d7e803eea9f (patch) | |
tree | b64e574123ce15e226ed10d6fd501696e2f32ce1 | |
parent | 36e5ecf1ba146c8a097f5edbb55ccd57dfbf1d0b (diff) | |
parent | c9d38985575291cb7b325a64e5cf17af4c3b4083 (diff) | |
download | telephony-51613ffbcc8aeaa471456cabb2bf4d7e803eea9f.tar.gz |
Fix Sync preferred apn and preferred apn set id am: c9d3898557
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/18719908
Change-Id: Ia14743488645f5832c7cf145436502587fc26a90
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | src/java/com/android/internal/telephony/data/DataProfileManager.java | 9 | ||||
-rw-r--r-- | tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java | 42 |
2 files changed, 49 insertions, 2 deletions
diff --git a/src/java/com/android/internal/telephony/data/DataProfileManager.java b/src/java/com/android/internal/telephony/data/DataProfileManager.java index abf1009358..1ec345c943 100644 --- a/src/java/com/android/internal/telephony/data/DataProfileManager.java +++ b/src/java/com/android/internal/telephony/data/DataProfileManager.java @@ -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,10 @@ public class DataProfileManager extends Handler { preferredDataProfile = getPreferredDataProfileFromDb(); if (preferredDataProfile == null) { preferredDataProfile = getPreferredDataProfileFromConfig(); + if (preferredDataProfile != null) { + // Save the carrier specified preferred data profile into database + setPreferredDataProfile(preferredDataProfile); + } } } else { preferredDataProfile = null; diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java index 96e2098673..783df82e39 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataProfileManagerTest.java @@ -363,6 +363,16 @@ public class DataProfileManagerTest extends TelephonyTest { logd("ApnSettingContentProvider: uri=" + uri + ", values=" + values); if (uri.isPathPrefixMatch(Telephony.Carriers.PREFERRED_APN_URI)) { mPreferredApnId = values.getAsInteger(Telephony.Carriers.APN_ID); + if (mPreferredApnId != -1) { + for (Object apnSetting : mAllApnSettings) { + int id = (int) ((Object[]) apnSetting)[0]; + if (id == mPreferredApnId) { + mPreferredApnSet = (int) ((Object[]) apnSetting)[28]; //update setId too + } + } + } else { + mPreferredApnSet = 0; // db is emptied + } logd("mPreferredApnId=" + mPreferredApnId); } return null; @@ -864,6 +874,38 @@ public class DataProfileManagerTest extends TelephonyTest { } @Test + public void testResetApnWithPreferredConfig() { + // carrier configured preferred data profile should be picked + doReturn(GENERAL_PURPOSE_APN1).when(mDataConfigManager).getDefaultPreferredApn(); + 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); + + 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(); + Mockito.clearInvocations(mDataConfigManager); + processAllMessages(); + + // The carrier configured data profile should be the preferred APN after APN reset + dataProfile = mDataProfileManagerUT.getDataProfileForNetworkRequest( + tnr, TelephonyManager.NETWORK_TYPE_LTE); + assertThat(dataProfile.getApnSetting().getApnName()).isEqualTo(GENERAL_PURPOSE_APN1); + assertThat(mDataProfileManagerUT.isDataProfilePreferred(dataProfile)).isTrue(); + } + + @Test public void testTetheringApnExisting() { assertThat(mDataProfileManagerUT.isTetheringDataProfileExisting( TelephonyManager.NETWORK_TYPE_NR)).isTrue(); |