[Wi-Fi] Updates internal AccessPoint list upon onAccessPointsChanged
Updating access point list requires WifiTracker's AccessPoints and WifiNetworkFactory's matching scan results. When WifiNetworkFactory sends the matching scan results to NetworkRequestDialogFragment, if WifiTracker still does not receive scan results, UI will not be updated. This CL is to update internal AccessPoint list from WifiTracker upon onAccessPointsChanged callback to reflect results properly. Bug: 140600730 Test: manual, robotests Change-Id: I0f9814821b3d56f3c55f1e6419c8b7a03b03589e Signed-off-by: Daichi Ueura <daichi.ueura@sony.com>
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -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(
|
||||||
|
Reference in New Issue
Block a user