Fix empty network scan result

Settings use TelephonyScanManager.NetworkScanCallback to scan, and its
onComplete() could happens before onResults().

We will change Settings to fix.

Fix: 338986191
Test: manual - on NetworkSelectSettings
Test: unit test
Change-Id: If41d957f916a99eacc1becb6b460e58722a4dca7
Merged-In: If41d957f916a99eacc1becb6b460e58722a4dca7
This commit is contained in:
Chaohui Wang
2024-05-10 14:59:04 +08:00
parent 12158eb1fe
commit 99b09df4a8
4 changed files with 81 additions and 113 deletions

View File

@@ -32,9 +32,6 @@ import android.telephony.TelephonyManager.NETWORK_CLASS_BITMASK_5G
import android.telephony.TelephonyScanManager
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settings.network.telephony.scan.NetworkScanRepository.NetworkScanCellInfos
import com.android.settings.network.telephony.scan.NetworkScanRepository.NetworkScanComplete
import com.android.settings.network.telephony.scan.NetworkScanRepository.NetworkScanError
import com.android.settingslib.spa.testutils.firstWithTimeoutOrNull
import com.android.settingslib.spa.testutils.toListWithTimeout
import com.google.common.truth.Truth.assertThat
@@ -88,7 +85,12 @@ class NetworkScanRepositoryTest {
callback?.onResults(cellInfos)
assertThat(listDeferred.await()).containsExactly(NetworkScanCellInfos(cellInfos))
assertThat(listDeferred.await()).containsExactly(
NetworkScanRepository.NetworkScanResult(
state = NetworkScanRepository.NetworkScanState.ACTIVE,
cellInfos = cellInfos,
)
)
}
@Test
@@ -100,7 +102,12 @@ class NetworkScanRepositoryTest {
callback?.onComplete()
assertThat(listDeferred.await()).containsExactly(NetworkScanComplete)
assertThat(listDeferred.await()).containsExactly(
NetworkScanRepository.NetworkScanResult(
state = NetworkScanRepository.NetworkScanState.COMPLETE,
cellInfos = emptyList(),
)
)
}
@Test
@@ -112,7 +119,12 @@ class NetworkScanRepositoryTest {
callback?.onError(1)
assertThat(listDeferred.await()).containsExactly(NetworkScanError(1))
assertThat(listDeferred.await()).containsExactly(
NetworkScanRepository.NetworkScanResult(
state = NetworkScanRepository.NetworkScanState.ERROR,
cellInfos = emptyList(),
)
)
}
@Test
@@ -133,12 +145,13 @@ class NetworkScanRepositoryTest {
callback?.onResults(cellInfos)
assertThat(listDeferred.await()).containsExactly(
NetworkScanCellInfos(
listOf(
NetworkScanRepository.NetworkScanResult(
state = NetworkScanRepository.NetworkScanState.ACTIVE,
cellInfos = listOf(
createCellInfoLte("123", false),
createCellInfoLte("124", true),
createCellInfoGsm("123", false),
)
),
)
)
}
@@ -162,8 +175,9 @@ class NetworkScanRepositoryTest {
callback?.onResults(cellInfos)
assertThat(listDeferred.await()).containsExactly(
NetworkScanCellInfos(
listOf(
NetworkScanRepository.NetworkScanResult(
state = NetworkScanRepository.NetworkScanState.ACTIVE,
cellInfos = listOf(
createCellInfoLte("123", false),
createCellInfoLte("123", true),
createCellInfoLte("124", false),

View File

@@ -44,8 +44,12 @@ import androidx.preference.PreferenceManager;
import androidx.test.annotation.UiThreadTest;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.network.telephony.scan.NetworkScanRepository;
import com.android.settings.network.telephony.scan.NetworkScanRepository.NetworkScanResult;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.google.common.collect.ImmutableList;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
@@ -163,8 +167,7 @@ public class NetworkSelectSettingsTest {
}
@Override
protected NetworkOperatorPreference
createNetworkOperatorPreference(CellInfo cellInfo) {
protected NetworkOperatorPreference createNetworkOperatorPreference(CellInfo cellInfo) {
NetworkOperatorPreference pref = super.createNetworkOperatorPreference(cellInfo);
if (cellInfo == mTestEnv.mCellInfo1) {
pref.updateCell(cellInfo, mTestEnv.mCellId1);
@@ -183,9 +186,14 @@ public class NetworkSelectSettingsTest {
@Test
@UiThreadTest
public void updateAllPreferenceCategory_correctOrderingPreference() {
NetworkScanResult result = new NetworkScanResult(
NetworkScanRepository.NetworkScanState.COMPLETE,
ImmutableList.of(mCellInfo1, mCellInfo2));
mNetworkSelectSettings.onCreateInitialization();
mNetworkSelectSettings.enablePreferenceScreen(true);
mNetworkSelectSettings.scanResultHandler(Arrays.asList(mCellInfo1, mCellInfo2));
mNetworkSelectSettings.scanResultHandler(result);
assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(2);
final NetworkOperatorPreference preference =
(NetworkOperatorPreference) mPreferenceCategory.getPreference(1);