Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f709d7fd authored by Arc Wang's avatar Arc Wang Committed by Android (Google) Code Review
Browse files

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

parents d2cbfa2d be55640a
Loading
Loading
Loading
Loading
+11 −4
Original line number Original line Diff line number Diff line
@@ -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();
            }
            }
        };
        };
+55 −20
Original line number Original line Diff line number Diff line
@@ -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(