[Wi-Fi] Refactor AddAppNetworksFragment to use WifiEntry but not AccessPoint.
Because WifiTracker2 refactoring in framework side is done, Settings App need to refactor AddAppNetworksFragment to use WifiEntry but not AccessPoint. Bug: 152454787 Test: make RunSettingsRoboTests ROBOTEST_FILTER=AddAppNetworksFragmentTest Change-Id: Ica2fb7e7fcac112140e5d64f3e4193222c974352
This commit is contained in:
@@ -24,6 +24,8 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.NetworkScoreManager;
|
||||||
import android.net.wifi.WifiConfiguration;
|
import android.net.wifi.WifiConfiguration;
|
||||||
import android.net.wifi.WifiConfiguration.KeyMgmt;
|
import android.net.wifi.WifiConfiguration.KeyMgmt;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
@@ -31,7 +33,12 @@ import android.net.wifi.WifiNetworkSuggestion;
|
|||||||
import android.net.wifi.hotspot2.PasspointConfiguration;
|
import android.net.wifi.hotspot2.PasspointConfiguration;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.os.HandlerThread;
|
||||||
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
|
import android.os.Process;
|
||||||
|
import android.os.SimpleClock;
|
||||||
|
import android.os.SystemClock;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -53,10 +60,11 @@ import com.android.internal.annotations.VisibleForTesting;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.core.InstrumentedFragment;
|
import com.android.settings.core.InstrumentedFragment;
|
||||||
import com.android.settingslib.wifi.AccessPoint;
|
import com.android.wifitrackerlib.WifiEntry;
|
||||||
import com.android.settingslib.wifi.WifiTracker;
|
import com.android.wifitrackerlib.WifiPickerTracker;
|
||||||
import com.android.settingslib.wifi.WifiTrackerFactory;
|
|
||||||
|
|
||||||
|
import java.time.Clock;
|
||||||
|
import java.time.ZoneOffset;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -66,7 +74,7 @@ import java.util.Optional;
|
|||||||
* choose on either saving those networks or rejecting the request.
|
* choose on either saving those networks or rejecting the request.
|
||||||
*/
|
*/
|
||||||
public class AddAppNetworksFragment extends InstrumentedFragment implements
|
public class AddAppNetworksFragment extends InstrumentedFragment implements
|
||||||
WifiTracker.WifiListener {
|
WifiPickerTracker.WifiPickerTrackerCallback {
|
||||||
public static final String TAG = "AddAppNetworksFragment";
|
public static final String TAG = "AddAppNetworksFragment";
|
||||||
|
|
||||||
// Possible result values in each item of the returned result list, which is used
|
// 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.
|
// Signal level for the initial signal icon.
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final int INITIAL_RSSI_SIGNAL_LEVEL = 0;
|
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;
|
private static final int MAX_SPECIFIC_NETWORKS_COUNT = 5;
|
||||||
|
|
||||||
// Duration for showing different status message.
|
// Duration for showing different status message.
|
||||||
private static final long SHOW_SAVING_INTERVAL_MILLIS = 500L;
|
private static final long SHOW_SAVING_INTERVAL_MILLIS = 500L;
|
||||||
private static final long SHOW_SAVED_INTERVAL_MILLIS = 1000L;
|
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
|
@VisibleForTesting
|
||||||
FragmentActivity mActivity;
|
FragmentActivity mActivity;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -110,7 +123,7 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
List<Integer> mResultCodeArrayList;
|
List<Integer> mResultCodeArrayList;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
WifiTracker mWifiTracker;
|
WifiPickerTracker mWifiPickerTracker;
|
||||||
|
|
||||||
private boolean mIsSingleNetwork;
|
private boolean mIsSingleNetwork;
|
||||||
private boolean mAnyNetworkSavedSuccess;
|
private boolean mAnyNetworkSavedSuccess;
|
||||||
@@ -120,6 +133,8 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
|
|||||||
private UiConfigurationItemAdapter mUiConfigurationItemAdapter;
|
private UiConfigurationItemAdapter mUiConfigurationItemAdapter;
|
||||||
private WifiManager.ActionListener mSaveListener;
|
private WifiManager.ActionListener mSaveListener;
|
||||||
private WifiManager mWifiManager;
|
private WifiManager mWifiManager;
|
||||||
|
// Worker thread used for WifiPickerTracker work
|
||||||
|
private HandlerThread mWorkerThread;
|
||||||
|
|
||||||
private final Handler mHandler = new Handler() {
|
private final Handler mHandler = new Handler() {
|
||||||
@Override
|
@Override
|
||||||
@@ -164,9 +179,26 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
|
|||||||
@Nullable Bundle savedInstanceState) {
|
@Nullable Bundle savedInstanceState) {
|
||||||
mActivity = getActivity();
|
mActivity = getActivity();
|
||||||
mWifiManager = mActivity.getSystemService(WifiManager.class);
|
mWifiManager = mActivity.getSystemService(WifiManager.class);
|
||||||
mWifiTracker = WifiTrackerFactory.create(mActivity.getApplication(), this,
|
mWorkerThread = new HandlerThread(
|
||||||
getSettingsLifecycle(), true /* includeSaved */, true /* includeScans */);
|
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);
|
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
|
@VisibleForTesting
|
||||||
void updateScanResultsToUi(List<AccessPoint> allAccessPoints) {
|
void updateScanResultsToUi(List<WifiEntry> allEntries) {
|
||||||
if (mUiToRequestedList == null) {
|
if (mUiToRequestedList == null) {
|
||||||
// Nothing need to be updated.
|
// Nothing need to be updated.
|
||||||
return;
|
return;
|
||||||
@@ -724,14 +748,15 @@ public class AddAppNetworksFragment extends InstrumentedFragment implements
|
|||||||
// Update the signal level of the UI networks.
|
// Update the signal level of the UI networks.
|
||||||
for (UiConfigurationItem uiConfigurationItem : mUiToRequestedList) {
|
for (UiConfigurationItem uiConfigurationItem : mUiToRequestedList) {
|
||||||
uiConfigurationItem.mLevel = 0;
|
uiConfigurationItem.mLevel = 0;
|
||||||
if (allAccessPoints != null) {
|
if (allEntries != null) {
|
||||||
final Optional<AccessPoint> matchedAccessPoint = allAccessPoints
|
final Optional<WifiEntry> matchedWifiEntry = allEntries.stream()
|
||||||
.stream()
|
.filter(wifiEntry -> TextUtils.equals(
|
||||||
.filter(accesspoint -> accesspoint.matches(
|
uiConfigurationItem.mWifiNetworkSuggestion.getSsid(),
|
||||||
uiConfigurationItem.mWifiNetworkSuggestion.getWifiConfiguration()))
|
wifiEntry.getSsid()))
|
||||||
|
.filter(wifiEntry -> !wifiEntry.isSaved())
|
||||||
.findFirst();
|
.findFirst();
|
||||||
uiConfigurationItem.mLevel =
|
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
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
onAccessPointsChanged();
|
onWifiEntriesChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Called when the state of Wifi has changed. */
|
||||||
|
@Override
|
||||||
|
public void onWifiStateChanged() {
|
||||||
|
onWifiEntriesChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the results when data changes
|
* Update the results when data changes
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onAccessPointsChanged() {
|
public void onWifiEntriesChanged() {
|
||||||
updateScanResultsToUi(
|
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.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,8 +18,6 @@ package com.android.settings.wifi.addappnetworks;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
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.doReturn;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
@@ -36,9 +34,8 @@ import android.widget.TextView;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settingslib.wifi.AccessPoint;
|
import com.android.wifitrackerlib.WifiEntry;
|
||||||
import com.android.settingslib.wifi.WifiTracker;
|
import com.android.wifitrackerlib.WifiPickerTracker;
|
||||||
import com.android.settingslib.wifi.WifiTrackerFactory;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -53,6 +50,7 @@ import java.util.List;
|
|||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class AddAppNetworksFragmentTest {
|
public class AddAppNetworksFragmentTest {
|
||||||
|
|
||||||
private static final String FAKE_APP_NAME = "fake_app_name";
|
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_WPA_SSID = "fake_new_wpa_ssid";
|
||||||
private static final String FAKE_NEW_OPEN_SSID = "fake_new_open_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<>();
|
private ArrayList<Integer> mFakedResultArrayList = new ArrayList<>();
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private AccessPoint mMockAccessPoint;
|
private WifiEntry mMockWifiEntry;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private WifiTracker mMockWifiTracker;
|
private WifiPickerTracker mMockWifiPickerTracker;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private WifiManager mMockWifiManager;
|
private WifiManager mMockWifiManager;
|
||||||
@@ -91,12 +89,8 @@ public class AddAppNetworksFragmentTest {
|
|||||||
WifiConfiguration.KeyMgmt.NONE, null);
|
WifiConfiguration.KeyMgmt.NONE, null);
|
||||||
mSavedWpaConfigurationEntry = generateRegularWifiConfiguration(FAKE_NEW_SAVED_WPA_SSID,
|
mSavedWpaConfigurationEntry = generateRegularWifiConfiguration(FAKE_NEW_SAVED_WPA_SSID,
|
||||||
WifiConfiguration.KeyMgmt.WPA_PSK, "\"1234567890\"");
|
WifiConfiguration.KeyMgmt.WPA_PSK, "\"1234567890\"");
|
||||||
when(mMockWifiTracker.getManager()).thenReturn(mMockWifiManager);
|
|
||||||
when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
|
when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
|
||||||
|
mAddAppNetworksFragment.mWifiPickerTracker = mMockWifiPickerTracker;
|
||||||
mAddAppNetworksFragment.mWifiTracker = mMockWifiTracker;
|
|
||||||
WifiTrackerFactory.setTestingWifiTracker(mMockWifiTracker);
|
|
||||||
|
|
||||||
setUpOneScannedNetworkWithScanedLevel4();
|
setUpOneScannedNetworkWithScanedLevel4();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,7 +210,7 @@ public class AddAppNetworksFragmentTest {
|
|||||||
@Test
|
@Test
|
||||||
public void withOneSuggestion_whenScanResultChanged_uiListShouldHaveNewLevel() {
|
public void withOneSuggestion_whenScanResultChanged_uiListShouldHaveNewLevel() {
|
||||||
// Arrange
|
// 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.
|
// Setup a fake saved network list and assign to fragment.
|
||||||
addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry);
|
addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry);
|
||||||
// Setup one specified networks and its results and assign to fragment.
|
// Setup one specified networks and its results and assign to fragment.
|
||||||
@@ -226,7 +220,7 @@ public class AddAppNetworksFragmentTest {
|
|||||||
mAddAppNetworksFragment.filterSavedNetworks(mFakeSavedNetworksList);
|
mAddAppNetworksFragment.filterSavedNetworks(mFakeSavedNetworksList);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
mAddAppNetworksFragment.onAccessPointsChanged();
|
mAddAppNetworksFragment.onWifiEntriesChanged();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertThat(mAddAppNetworksFragment.mUiToRequestedList.get(0).mLevel).isEqualTo(
|
assertThat(mAddAppNetworksFragment.mUiToRequestedList.get(0).mLevel).isEqualTo(
|
||||||
@@ -236,7 +230,7 @@ public class AddAppNetworksFragmentTest {
|
|||||||
@Test
|
@Test
|
||||||
public void withOneSuggestion_whenScanResultChangedButWifiOff_uiListShouldHaveZeroLevel() {
|
public void withOneSuggestion_whenScanResultChangedButWifiOff_uiListShouldHaveZeroLevel() {
|
||||||
// Arrange
|
// 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.
|
// Setup a fake saved network list and assign to fragment.
|
||||||
addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry);
|
addOneSavedNetworkConfiguration(mSavedWpaConfigurationEntry);
|
||||||
// Setup one specified networks and its results and assign to fragment.
|
// Setup one specified networks and its results and assign to fragment.
|
||||||
@@ -246,7 +240,7 @@ public class AddAppNetworksFragmentTest {
|
|||||||
mAddAppNetworksFragment.filterSavedNetworks(mFakeSavedNetworksList);
|
mAddAppNetworksFragment.filterSavedNetworks(mFakeSavedNetworksList);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
mAddAppNetworksFragment.onAccessPointsChanged();
|
mAddAppNetworksFragment.onWifiEntriesChanged();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertThat(mAddAppNetworksFragment.mUiToRequestedList.get(0).mLevel).isEqualTo(
|
assertThat(mAddAppNetworksFragment.mUiToRequestedList.get(0).mLevel).isEqualTo(
|
||||||
@@ -255,11 +249,10 @@ public class AddAppNetworksFragmentTest {
|
|||||||
|
|
||||||
private void setUpOneScannedNetworkWithScanedLevel4() {
|
private void setUpOneScannedNetworkWithScanedLevel4() {
|
||||||
final ArrayList list = new ArrayList<>();
|
final ArrayList list = new ArrayList<>();
|
||||||
list.add(mMockAccessPoint);
|
list.add(mMockWifiEntry);
|
||||||
when(mMockWifiTracker.getAccessPoints()).thenReturn(list);
|
when(mMockWifiPickerTracker.getWifiEntries()).thenReturn(list);
|
||||||
when(mMockAccessPoint.getSsidStr()).thenReturn(FAKE_NEW_OPEN_SSID);
|
when(mMockWifiEntry.getSsid()).thenReturn(FAKE_NEW_OPEN_SSID);
|
||||||
when(mMockAccessPoint.matches(any(WifiConfiguration.class))).thenReturn(true);
|
when(mMockWifiEntry.getLevel()).thenReturn(SCANED_LEVEL4);
|
||||||
when(mMockAccessPoint.getLevel()).thenReturn(SCANED_LEVEL4);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addOneSavedNetworkConfiguration(@NonNull WifiConfiguration wifiConfiguration) {
|
private void addOneSavedNetworkConfiguration(@NonNull WifiConfiguration wifiConfiguration) {
|
||||||
|
Reference in New Issue
Block a user