[Wi-Fi] Fix SavedAccessPointsPreferenceController crash when editing Settings search box

In getAvailabilityStatus(), refresh mAccessPoints before using it.

Bug: 147096386
Test: make RunSettingsRoboTests ROBOTEST_FILTER=SavedAccessPointsPreferenceControllerTest
Change-Id: Id6818bd7bab1effb2e4e1447b18d5f5f02d7cfca
This commit is contained in:
Arc Wang
2020-01-03 17:47:05 +08:00
parent bcaac763d2
commit d90eac593a
2 changed files with 6 additions and 10 deletions

View File

@@ -59,6 +59,7 @@ public class SavedAccessPointsPreferenceController extends BasePreferenceControl
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
refreshSavedAccessPoints();
return mAccessPoints.size() > 0 ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; return mAccessPoints.size() > 0 ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
} }

View File

@@ -16,7 +16,6 @@
package com.android.settings.wifi.savedaccesspoints; package com.android.settings.wifi.savedaccesspoints;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -30,19 +29,14 @@ import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.Bundle;
import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.testutils.shadow.ShadowAccessPoint; import com.android.settings.testutils.shadow.ShadowAccessPoint;
import com.android.settings.testutils.shadow.ShadowWifiManager; import com.android.settings.testutils.shadow.ShadowWifiManager;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPointPreference; import com.android.settingslib.wifi.AccessPointPreference;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -53,6 +47,8 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import java.util.ArrayList;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowWifiManager.class}) @Config(shadows = {ShadowWifiManager.class})
public class SavedAccessPointsPreferenceControllerTest { public class SavedAccessPointsPreferenceControllerTest {
@@ -89,11 +85,10 @@ public class SavedAccessPointsPreferenceControllerTest {
} }
@Test @Test
public void getAvailability_oneSavedAccessPoint_shouldAvailable() { public void getAvailability_shouldRefreshSavedAccessPoints() {
final AccessPoint accessPoint = new AccessPoint(mContext, new Bundle() /* savedState */); mController.getAvailabilityStatus();
mController.mAccessPoints = new ArrayList<AccessPoint>(Arrays.asList(accessPoint));
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); verify(mController).refreshSavedAccessPoints();
} }
@Test @Test