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

Commit 6f16992d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Wi-Fi] Refactor AddAppNetworksFragment to use WifiEntry but not AccessPoint." into rvc-dev

parents 7bc50ac2 0fc956bc
Loading
Loading
Loading
Loading
+69 −27
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.net.ConnectivityManager;
import android.net.NetworkScoreManager;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiConfiguration.KeyMgmt;
import android.net.wifi.WifiManager;
@@ -31,7 +33,12 @@ import android.net.wifi.WifiNetworkSuggestion;
import android.net.wifi.hotspot2.PasspointConfiguration;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.os.SimpleClock;
import android.os.SystemClock;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
@@ -53,10 +60,11 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.InstrumentedFragment;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiPickerTracker;

import java.time.Clock;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -66,7 +74,7 @@ import java.util.Optional;
 * choose on either saving those networks or rejecting the request.
 */
public class AddAppNetworksFragment extends InstrumentedFragment implements
        WifiTracker.WifiListener {
        WifiPickerTracker.WifiPickerTrackerCallback {
    public static final String TAG = "AddAppNetworksFragment";

    // Possible result values in each item of the returned result list, which is used
@@ -86,13 +94,18 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
    // Signal level for the initial signal icon.
    @VisibleForTesting
    static final int INITIAL_RSSI_SIGNAL_LEVEL = 0;
    // Max networks count within one request
    // Max networks count within one request.
    private static final int MAX_SPECIFIC_NETWORKS_COUNT = 5;

    // Duration for showing different status message.
    private static final long SHOW_SAVING_INTERVAL_MILLIS = 500L;
    private static final long SHOW_SAVED_INTERVAL_MILLIS = 1000L;

    // Max age of tracked WifiEntries.
    private static final long MAX_SCAN_AGE_MILLIS = 15_000;
    // Interval between initiating WifiPickerTracker scans.
    private static final long SCAN_INTERVAL_MILLIS = 10_000;

    @VisibleForTesting
    FragmentActivity mActivity;
    @VisibleForTesting
@@ -110,7 +123,7 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
    @VisibleForTesting
    List<Integer> mResultCodeArrayList;
    @VisibleForTesting
    WifiTracker mWifiTracker;
    WifiPickerTracker mWifiPickerTracker;

    private boolean mIsSingleNetwork;
    private boolean mAnyNetworkSavedSuccess;
@@ -120,6 +133,8 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
    private UiConfigurationItemAdapter mUiConfigurationItemAdapter;
    private WifiManager.ActionListener mSaveListener;
    private WifiManager mWifiManager;
    // Worker thread used for WifiPickerTracker work
    private HandlerThread mWorkerThread;

    private final Handler mHandler = new Handler() {
        @Override
@@ -164,9 +179,26 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
            @Nullable Bundle savedInstanceState) {
        mActivity = getActivity();
        mWifiManager = mActivity.getSystemService(WifiManager.class);
        mWifiTracker = WifiTrackerFactory.create(mActivity.getApplication(), this,
                getSettingsLifecycle(), true /* includeSaved */, true /* includeScans */);

        mWorkerThread = new HandlerThread(
                TAG + "{" + Integer.toHexString(System.identityHashCode(this)) + "}",
                Process.THREAD_PRIORITY_BACKGROUND);
        mWorkerThread.start();
        final Clock elapsedRealtimeClock = new SimpleClock(ZoneOffset.UTC) {
            @Override
            public long millis() {
                return SystemClock.elapsedRealtime();
            }
        };
        mWifiPickerTracker = new WifiPickerTracker(getSettingsLifecycle(), mActivity,
                mActivity.getSystemService(WifiManager.class),
                mActivity.getSystemService(ConnectivityManager.class),
                mActivity.getSystemService(NetworkScoreManager.class),
                new Handler(Looper.getMainLooper()),
                mWorkerThread.getThreadHandler(),
                elapsedRealtimeClock,
                MAX_SCAN_AGE_MILLIS,
                SCAN_INTERVAL_MILLIS,
                this);
        return inflater.inflate(R.layout.wifi_add_app_networks, container, false);
    }

@@ -704,18 +736,10 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
        }
    }

    @Override
    public void onWifiStateChanged(int state) {
        // Do nothing
    }

    @Override
    public void onConnectedChanged() {
        // Do nothing
    }

    @VisibleForTesting
    void updateScanResultsToUi(List<AccessPoint> allAccessPoints) {
    void updateScanResultsToUi(List<WifiEntry> allEntries) {
        if (mUiToRequestedList == null) {
            // Nothing need to be updated.
            return;
@@ -724,14 +748,15 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
        // Update the signal level of the UI networks.
        for (UiConfigurationItem uiConfigurationItem : mUiToRequestedList) {
            uiConfigurationItem.mLevel = 0;
            if (allAccessPoints != null) {
                final Optional<AccessPoint> matchedAccessPoint = allAccessPoints
                        .stream()
                        .filter(accesspoint -> accesspoint.matches(
                                uiConfigurationItem.mWifiNetworkSuggestion.getWifiConfiguration()))
            if (allEntries != null) {
                final Optional<WifiEntry> matchedWifiEntry = allEntries.stream()
                        .filter(wifiEntry -> TextUtils.equals(
                                uiConfigurationItem.mWifiNetworkSuggestion.getSsid(),
                                wifiEntry.getSsid()))
                        .filter(wifiEntry -> !wifiEntry.isSaved())
                        .findFirst();
                uiConfigurationItem.mLevel =
                        matchedAccessPoint.isPresent() ? matchedAccessPoint.get().getLevel() : 0;
                        matchedWifiEntry.isPresent() ? matchedWifiEntry.get().getLevel() : 0;
            }
        }

@@ -747,15 +772,32 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
    @Override
    public void onResume() {
        super.onResume();
        onAccessPointsChanged();
        onWifiEntriesChanged();
    }

    /** Called when the state of Wifi has changed. */
    @Override
    public void onWifiStateChanged() {
        onWifiEntriesChanged();
    }

    /**
     * Update the results when data changes
     */
    @Override
    public void onAccessPointsChanged() {
    public void onWifiEntriesChanged() {
        updateScanResultsToUi(
                mWifiTracker.getManager().isWifiEnabled() ? mWifiTracker.getAccessPoints() : null);
                (mWifiPickerTracker.getWifiState() == WifiManager.WIFI_STATE_ENABLED)
                        ? mWifiPickerTracker.getWifiEntries() : null);
    }

    @Override
    public void onNumSavedSubscriptionsChanged() {
        // Do nothing.
    }

    @Override
    public void onNumSavedNetworksChanged() {
        // Do nothing.
    }
}
+14 −21
Original line number Diff line number Diff line
@@ -18,8 +18,6 @@ package com.android.settings.wifi.addappnetworks;

import static com.google.common.truth.Truth.assertThat;


import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -36,9 +34,8 @@ import android.widget.TextView;
import androidx.annotation.NonNull;

import com.android.settings.R;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory;
import com.android.wifitrackerlib.WifiEntry;
import com.android.wifitrackerlib.WifiPickerTracker;

import org.junit.Before;
import org.junit.Test;
@@ -53,6 +50,7 @@ import java.util.List;

@RunWith(RobolectricTestRunner.class)
public class AddAppNetworksFragmentTest {

    private static final String FAKE_APP_NAME = "fake_app_name";
    private static final String FAKE_NEW_WPA_SSID = "fake_new_wpa_ssid";
    private static final String FAKE_NEW_OPEN_SSID = "fake_new_open_ssid";
@@ -73,10 +71,10 @@ public class AddAppNetworksFragmentTest {
    private ArrayList<Integer> mFakedResultArrayList = new ArrayList<>();

    @Mock
    private AccessPoint mMockAccessPoint;
    private WifiEntry mMockWifiEntry;

    @Mock
    private WifiTracker mMockWifiTracker;
    private WifiPickerTracker mMockWifiPickerTracker;

    @Mock
    private WifiManager mMockWifiManager;
@@ -91,12 +89,8 @@ public class AddAppNetworksFragmentTest {
                WifiConfiguration.KeyMgmt.NONE, null);
        mSavedWpaConfigurationEntry = generateRegularWifiConfiguration(FAKE_NEW_SAVED_WPA_SSID,
                WifiConfiguration.KeyMgmt.WPA_PSK, "\"1234567890\"");
        when(mMockWifiTracker.getManager()).thenReturn(mMockWifiManager);
        when(mMockWifiManager.isWifiEnabled()).thenReturn(true);

        mAddAppNetworksFragment.mWifiTracker = mMockWifiTracker;
        WifiTrackerFactory.setTestingWifiTracker(mMockWifiTracker);

        mAddAppNetworksFragment.mWifiPickerTracker = mMockWifiPickerTracker;
        setUpOneScannedNetworkWithScanedLevel4();
    }

@@ -216,7 +210,7 @@ public class AddAppNetworksFragmentTest {
    @Test
    public void withOneSuggestion_whenScanResultChanged_uiListShouldHaveNewLevel() {
        // Arrange
        when(mAddAppNetworksFragment.mWifiTracker.getManager().isWifiEnabled()).thenReturn(true);
        when(mMockWifiPickerTracker.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
        // Setup a fake saved network list and assign to fragment.
        addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry);
        // Setup one specified networks and its results and assign to fragment.
@@ -226,7 +220,7 @@ public class AddAppNetworksFragmentTest {
        mAddAppNetworksFragment.filterSavedNetworks(mFakeSavedNetworksList);

        // Act
        mAddAppNetworksFragment.onAccessPointsChanged();
        mAddAppNetworksFragment.onWifiEntriesChanged();

        // Assert
        assertThat(mAddAppNetworksFragment.mUiToRequestedList.get(0).mLevel).isEqualTo(
@@ -236,7 +230,7 @@ public class AddAppNetworksFragmentTest {
    @Test
    public void withOneSuggestion_whenScanResultChangedButWifiOff_uiListShouldHaveZeroLevel() {
        // Arrange
        when(mAddAppNetworksFragment.mWifiTracker.getManager().isWifiEnabled()).thenReturn(false);
        when(mMockWifiPickerTracker.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED);
        // Setup a fake saved network list and assign to fragment.
        addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry);
        // Setup one specified networks and its results and assign to fragment.
@@ -246,7 +240,7 @@ public class AddAppNetworksFragmentTest {
        mAddAppNetworksFragment.filterSavedNetworks(mFakeSavedNetworksList);

        // Act
        mAddAppNetworksFragment.onAccessPointsChanged();
        mAddAppNetworksFragment.onWifiEntriesChanged();

        // Assert
        assertThat(mAddAppNetworksFragment.mUiToRequestedList.get(0).mLevel).isEqualTo(
@@ -255,11 +249,10 @@ public class AddAppNetworksFragmentTest {

    private void setUpOneScannedNetworkWithScanedLevel4() {
        final ArrayList list = new ArrayList<>();
        list.add(mMockAccessPoint);
        when(mMockWifiTracker.getAccessPoints()).thenReturn(list);
        when(mMockAccessPoint.getSsidStr()).thenReturn(FAKE_NEW_OPEN_SSID);
        when(mMockAccessPoint.matches(any(WifiConfiguration.class))).thenReturn(true);
        when(mMockAccessPoint.getLevel()).thenReturn(SCANED_LEVEL4);
        list.add(mMockWifiEntry);
        when(mMockWifiPickerTracker.getWifiEntries()).thenReturn(list);
        when(mMockWifiEntry.getSsid()).thenReturn(FAKE_NEW_OPEN_SSID);
        when(mMockWifiEntry.getLevel()).thenReturn(SCANED_LEVEL4);
    }

    private void addOneSavedNetworkConfiguration(@NonNull WifiConfiguration wifiConfiguration) {