Merge "[Wi-Fi] Updates internal AccessPoint list upon onAccessPointsChanged"

This commit is contained in:
Arc Wang
2019-10-19 11:05:26 +00:00
committed by Android (Google) Code Review
2 changed files with 66 additions and 24 deletions

View File

@@ -34,16 +34,19 @@ import android.widget.BaseAdapter;
import android.widget.Button; import android.widget.Button;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.preference.internal.PreferenceImageView; import androidx.preference.internal.PreferenceImageView;
import com.android.settings.R; import com.android.settings.R;
import com.android.settingslib.Utils; import com.android.settingslib.Utils;
import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.wifi.AccessPoint; import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.WifiTracker; import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory; import com.android.settingslib.wifi.WifiTrackerFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -63,7 +66,8 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme
private boolean mShowLimitedItem = true; private boolean mShowLimitedItem = true;
private List<AccessPoint> mAccessPointList; private List<AccessPoint> mAccessPointList;
private FilterWifiTracker mFilterWifiTracker; @VisibleForTesting
FilterWifiTracker mFilterWifiTracker;
private AccessPointAdapter mDialogAdapter; private AccessPointAdapter mDialogAdapter;
private NetworkRequestUserSelectionCallback mUserSelectionCallback; private NetworkRequestUserSelectionCallback mUserSelectionCallback;
@@ -115,7 +119,7 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme
neutralBtn.setVisibility(View.GONE); neutralBtn.setVisibility(View.GONE);
neutralBtn.setOnClickListener(v -> { neutralBtn.setOnClickListener(v -> {
mShowLimitedItem = false; mShowLimitedItem = false;
renewAccessPointList(null /* List<ScanResult> */); renewAccessPointList(null /* scanResults */);
notifyAdapterRefresh(); notifyAdapterRefresh();
neutralBtn.setVisibility(View.GONE); neutralBtn.setVisibility(View.GONE);
}); });
@@ -323,7 +327,8 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme
// Do nothing when selection is failed, let user could try again easily. // Do nothing when selection is failed, let user could try again easily.
} }
private final class FilterWifiTracker { @VisibleForTesting
final class FilterWifiTracker {
private final List<String> mAccessPointKeys; private final List<String> mAccessPointKeys;
private final WifiTracker mWifiTracker; private final WifiTracker mWifiTracker;
@@ -381,7 +386,8 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme
return result; return result;
} }
private WifiTracker.WifiListener mWifiListener = new WifiTracker.WifiListener() { @VisibleForTesting
WifiTracker.WifiListener mWifiListener = new WifiTracker.WifiListener() {
@Override @Override
public void onWifiStateChanged(int state) { public void onWifiStateChanged(int state) {
@@ -395,6 +401,7 @@ public class NetworkRequestDialogFragment extends NetworkRequestDialogBaseFragme
@Override @Override
public void onAccessPointsChanged() { public void onAccessPointsChanged() {
renewAccessPointList(null /* scanResults */);
notifyAdapterRefresh(); notifyAdapterRefresh();
} }
}; };

View File

@@ -17,6 +17,7 @@
package com.android.settings.wifi; package com.android.settings.wifi;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
@@ -33,14 +34,16 @@ import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat; import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settingslib.wifi.AccessPoint; import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.WifiTracker; import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory; import com.android.settingslib.wifi.WifiTrackerFactory;
import java.util.ArrayList;
import java.util.List;
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;
@@ -49,6 +52,9 @@ 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;
import java.util.List;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowAlertDialogCompat.class) @Config(shadows = ShadowAlertDialogCompat.class)
public class NetworkRequestDialogFragmentTest { public class NetworkRequestDialogFragmentTest {
@@ -57,14 +63,14 @@ public class NetworkRequestDialogFragmentTest {
private static final String KEY_SECURITY = "key_security"; private static final String KEY_SECURITY = "key_security";
private static final String TEST_APP_NAME = "TestAppName"; private static final String TEST_APP_NAME = "TestAppName";
private NetworkRequestDialogActivity mActivity; private FragmentActivity mActivity;
private NetworkRequestDialogFragment networkRequestDialogFragment; private NetworkRequestDialogFragment networkRequestDialogFragment;
private Context mContext; private Context mContext;
private WifiTracker mWifiTracker; private WifiTracker mWifiTracker;
@Before @Before
public void setUp() { public void setUp() {
mActivity = Robolectric.buildActivity(NetworkRequestDialogActivity.class, mActivity = Robolectric.buildActivity(FragmentActivity.class,
new Intent().putExtra(NetworkRequestDialogFragment.EXTRA_APP_NAME, new Intent().putExtra(NetworkRequestDialogFragment.EXTRA_APP_NAME,
TEST_APP_NAME)).setup().get(); TEST_APP_NAME)).setup().get();
networkRequestDialogFragment = spy(NetworkRequestDialogFragment.newInstance()); networkRequestDialogFragment = spy(NetworkRequestDialogFragment.newInstance());
@@ -108,7 +114,6 @@ public class NetworkRequestDialogFragmentTest {
@Test @Test
public void onUserSelectionCallbackRegistration_onClick_shouldCallSelect() { public void onUserSelectionCallbackRegistration_onClick_shouldCallSelect() {
// Assert.
final int indexClickItem = 3; final int indexClickItem = 3;
List<AccessPoint> accessPointList = createAccessPointList(); List<AccessPoint> accessPointList = createAccessPointList();
AccessPoint clickedAccessPoint = accessPointList.get(indexClickItem); AccessPoint clickedAccessPoint = accessPointList.get(indexClickItem);
@@ -129,7 +134,6 @@ public class NetworkRequestDialogFragmentTest {
@Test @Test
public void onMatch_shouldUpdatedList() { public void onMatch_shouldUpdatedList() {
// Assert.
when(networkRequestDialogFragment.getContext()).thenReturn(mContext); when(networkRequestDialogFragment.getContext()).thenReturn(mContext);
Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext()); Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext());
when(mContext.getApplicationContext()).thenReturn(applicationContext); when(mContext.getApplicationContext()).thenReturn(applicationContext);
@@ -140,15 +144,15 @@ public class NetworkRequestDialogFragmentTest {
List<AccessPoint> accessPointList = createAccessPointList(); List<AccessPoint> accessPointList = createAccessPointList();
when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList); when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList);
final String SSID_AP1 = "Test AP 1"; final String ssidAp1 = "Test AP 1";
final String SSID_AP2 = "Test AP 2"; final String ssidAp2 = "Test AP 2";
List<ScanResult> scanResults = new ArrayList<>(); List<ScanResult> scanResults = new ArrayList<>();
ScanResult scanResult = new ScanResult(); ScanResult scanResult = new ScanResult();
scanResult.SSID = SSID_AP1; scanResult.SSID = ssidAp1;
scanResult.capabilities = "WEP"; scanResult.capabilities = "WEP";
scanResults.add(scanResult); scanResults.add(scanResult);
scanResult = new ScanResult(); scanResult = new ScanResult();
scanResult.SSID = SSID_AP2; scanResult.SSID = ssidAp2;
scanResult.capabilities = "WEP"; scanResult.capabilities = "WEP";
scanResults.add(scanResult); scanResults.add(scanResult);
@@ -159,8 +163,43 @@ public class NetworkRequestDialogFragmentTest {
List<AccessPoint> returnList = networkRequestDialogFragment.getAccessPointList(); List<AccessPoint> returnList = networkRequestDialogFragment.getAccessPointList();
assertThat(returnList).isNotEmpty(); assertThat(returnList).isNotEmpty();
assertThat(returnList.size()).isEqualTo(2); assertThat(returnList.size()).isEqualTo(2);
assertThat(returnList.get(0).getSsid()).isEqualTo(SSID_AP1); assertThat(returnList.get(0).getSsid()).isEqualTo(ssidAp1);
assertThat(returnList.get(1).getSsid()).isEqualTo(SSID_AP2); assertThat(returnList.get(1).getSsid()).isEqualTo(ssidAp2);
}
@Test
public void onAccessPointsChanged_shouldUpdatedList() {
when(networkRequestDialogFragment.getContext()).thenReturn(mContext);
Context applicationContext = spy(RuntimeEnvironment.application.getApplicationContext());
when(mContext.getApplicationContext()).thenReturn(applicationContext);
WifiManager wifiManager = mock(WifiManager.class);
when(applicationContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(wifiManager);
networkRequestDialogFragment.onResume();
List<AccessPoint> accessPointList = new ArrayList<>();
when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList);
final String ssidAp1 = "Test AP 1";
List<ScanResult> scanResults = new ArrayList<>();
ScanResult scanResult = new ScanResult();
scanResult.SSID = ssidAp1;
scanResult.capabilities = "WEP";
scanResults.add(scanResult);
// Act.
networkRequestDialogFragment.onMatch(scanResults);
accessPointList = createAccessPointList();
when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList);
// Act.
networkRequestDialogFragment.mFilterWifiTracker.mWifiListener.onAccessPointsChanged();
// Check.
List<AccessPoint> returnList = networkRequestDialogFragment.getAccessPointList();
assertThat(returnList).isNotEmpty();
assertThat(returnList.size()).isEqualTo(1);
assertThat(returnList.get(0).getSsid()).isEqualTo(ssidAp1);
} }
private List<AccessPoint> createAccessPointList() { private List<AccessPoint> createAccessPointList() {
@@ -208,16 +247,14 @@ public class NetworkRequestDialogFragmentTest {
public void onMatchManyResult_showNeutralButton() { public void onMatchManyResult_showNeutralButton() {
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null); networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog(); final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
List<AccessPoint> accessPointList = createAccessPointList(); List<AccessPoint> accessPointList = createAccessPointList();
when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList); when(mWifiTracker.getAccessPoints()).thenReturn(accessPointList);
final String SSID_AP = "Test AP "; final String ssidAp = "Test AP ";
final List<ScanResult> scanResults = new ArrayList<>(); final List<ScanResult> scanResults = new ArrayList<>();
for (int i = 0; i < 7 ; i ++) { for (int i = 0; i < 7 ; i ++) {
ScanResult scanResult = new ScanResult(); ScanResult scanResult = new ScanResult();
scanResult.SSID = SSID_AP + i; scanResult.SSID = ssidAp + i;
scanResult.capabilities = "WEP"; scanResult.capabilities = "WEP";
scanResults.add(scanResult); scanResults.add(scanResult);
} }
@@ -230,15 +267,14 @@ public class NetworkRequestDialogFragmentTest {
@Test @Test
public void clickNeutralButton_hideNeutralButton() { public void clickNeutralButton_hideNeutralButton() {
// Assert
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null); networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog(); final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
final String SSID_AP = "Test AP "; final String ssidAp = "Test AP ";
final List<ScanResult> scanResults = new ArrayList<>(); final List<ScanResult> scanResults = new ArrayList<>();
for (int i = 0; i < 6 ; i ++) { for (int i = 0; i < 6 ; i ++) {
ScanResult scanResult = new ScanResult(); ScanResult scanResult = new ScanResult();
scanResult.SSID = SSID_AP + i; scanResult.SSID = ssidAp + i;
scanResult.capabilities = "WEP"; scanResult.capabilities = "WEP";
scanResults.add(scanResult); scanResults.add(scanResult);
} }
@@ -254,7 +290,6 @@ public class NetworkRequestDialogFragmentTest {
@Test @Test
public void cancelDialog_callsReject() { public void cancelDialog_callsReject() {
// Assert
networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null); networkRequestDialogFragment.show(mActivity.getSupportFragmentManager(), /* tag */ null);
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog(); final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
final NetworkRequestUserSelectionCallback selectionCallback = mock( final NetworkRequestUserSelectionCallback selectionCallback = mock(