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

View File

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