diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java index 67d3171e3d6..b26e7835754 100644 --- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java +++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java @@ -52,6 +52,7 @@ import com.android.settingslib.utils.ThreadUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -360,12 +361,19 @@ public class NetworkSelectSettings extends DashboardFragment { CellInfoUtil.getCellIdentityMccMnc(cellInfo.getCellIdentity())); Class className = cellInfo.getClass(); - if (aggregatedList.stream().anyMatch( + Optional itemInTheList = aggregatedList.stream().filter( item -> { String itemPlmn = CellInfoUtil.getNetworkTitle(item.getCellIdentity(), CellInfoUtil.getCellIdentityMccMnc(item.getCellIdentity())); return itemPlmn.equals(plmn) && item.getClass().equals(className); - })) { + }) + .findFirst(); + if (itemInTheList.isPresent()) { + if (cellInfo.isRegistered() && !itemInTheList.get().isRegistered()) { + // Adding the registered cellinfo item into list. If there are two registered + // cellinfo items, then select first one from source list. + aggregatedList.set(aggregatedList.indexOf(itemInTheList.get()), cellInfo); + } continue; } aggregatedList.add(cellInfo); diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java index 6dbc4c9099e..7d860185a31 100644 --- a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java +++ b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java @@ -267,6 +267,20 @@ public class NetworkSelectSettingsTest { assertThat(mNetworkSelectSettings.doAggregation(testList)).isEqualTo(expected); } + @Test + public void doAggregation_hasDuplicateItemsDiffMccMncCase3_removeSamePlmnRatItem() { + mNetworkSelectSettings.onCreateInitialization(); + List testList = Arrays.asList( + createLteCellInfo(false, 123, "123", "232", "CarrierA"), + createLteCellInfo(false, 124, "123", "233", "CarrierA"), + createLteCellInfo(true, 125, "123", "234", "CarrierA"), + createGsmCellInfo(false, 126, "456", "232", "CarrierA")); + List expected = Arrays.asList( + createLteCellInfo(true, 125, "123", "234", "CarrierA"), + createGsmCellInfo(false, 126, "456", "232", "CarrierA")); + assertThat(mNetworkSelectSettings.doAggregation(testList)).isEqualTo(expected); + } + private CellInfoLte createLteCellInfo(boolean registered, int cellId, String mcc, String mnc, String plmnName) { CellIdentityLte cil = new CellIdentityLte(