diff --git a/src/com/android/settings/wifi/WifiEntryShell.java b/src/com/android/settings/wifi/WifiEntryShell.java
new file mode 100644
index 00000000000..6b6fef80b28
--- /dev/null
+++ b/src/com/android/settings/wifi/WifiEntryShell.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.wifi;
+
+import android.net.NetworkInfo.DetailedState;
+
+import com.android.wifitrackerlib.WifiEntry;
+
+/**
+ * {@link WifiEntry is working in progess, many methods are not available, this class is to group
+ * all the unavalable {@link AccessPoint} methods & constants.
+ *
+ * TODO(b/143326832): Replace all methods & constants with WifiEntry version when it's available.
+ * TODO(b/143326832): How about AccessPoint#getSettingsSummary(boolean convertSavedAsDisconnected)?
+ */
+public class WifiEntryShell {
+ public WifiEntryShell(){};
+
+ /**
+ * Lower bound on the 2.4 GHz (802.11b/g/n) WLAN channels
+ */
+ public static final int LOWER_FREQ_24GHZ = 2400;
+
+ /**
+ * Upper bound on the 2.4 GHz (802.11b/g/n) WLAN channels
+ */
+ public static final int HIGHER_FREQ_24GHZ = 2500;
+
+ /**
+ * Lower bound on the 5.0 GHz (802.11a/h/j/n/ac) WLAN channels
+ */
+ public static final int LOWER_FREQ_5GHZ = 4900;
+
+ /**
+ * Upper bound on the 5.0 GHz (802.11a/h/j/n/ac) WLAN channels
+ */
+ public static final int HIGHER_FREQ_5GHZ = 5900;
+
+ /**
+ * Mapping of the corresponding {@link WifiConfiguration} field
+ */
+ public static int getNetworkId(WifiEntry wifiEntry) {
+ return 0;
+ }
+
+ /**
+ * Mapping of the corresponding {@link WifiConfiguration} field
+ */
+ public static boolean hiddenSSID(WifiEntry wifiEntry) {
+ return false;
+ }
+
+ /**
+ * Mapping of the corresponding {@link WifiDetailPreferenceController} method
+ */
+ public static boolean canModifyNetwork(WifiEntry wifiEntry) {
+ return false;
+ }
+
+ /**
+ * Mapping of the corresponding {@link AccessPoint} method
+ */
+ public static String getSecurityString(WifiEntry wifiEntry, boolean concise) {
+ return "None";
+ }
+
+ /**
+ * Mapping of the corresponding {@link AccessPoint} method
+ */
+ public static DetailedState getDetailedState(WifiEntry wifiEntry) {
+ return null;
+ }
+
+ // Passpoint methods
+
+ /**
+ * Mapping of the corresponding {@link AccessPoint} method
+ */
+ public static boolean isPasspoint(WifiEntry wifiEntry) {
+ return false;
+ }
+
+ /**
+ * Mapping of the corresponding {@link AccessPoint} method
+ */
+ public static boolean isExpired(WifiEntry wifiEntry) {
+ return false;
+ }
+
+ /**
+ * Mapping of the corresponding {@link AccessPoint} method
+ */
+ public static boolean isPasspointConfigurationR1(WifiEntry wifiEntry) {
+ return false;
+ }
+
+ /**
+ * Mapping of the corresponding {@link AccessPoint} method
+ */
+ public static boolean isPasspointConfigurationOsuProvisioned(WifiEntry wifiEntry) {
+ return false;
+ }
+
+ /**
+ * Mapping of the corresponding {@link AccessPoint} method
+ */
+ public static boolean isOsuProvider(WifiEntry wifiEntry) {
+ return false;
+ }
+
+ /**
+ * Mapping of the corresponding {@link AccessPoint} method
+ */
+ public static String getPasspointFqdn(WifiEntry wifiEntry) {
+ return "Fake passpoint FQDN";
+ }
+}
diff --git a/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java b/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java
index de831b74d27..3a50107c052 100644
--- a/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/AddDevicePreferenceController2.java
@@ -25,7 +25,7 @@ import androidx.preference.Preference;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.wifi.dpp.WifiDppUtils;
-import com.android.settingslib.wifi.AccessPoint;
+import com.android.wifitrackerlib.WifiEntry;
/**
* {@link BasePreferenceController} that launches Wi-Fi Easy Connect configurator flow
@@ -36,7 +36,7 @@ public class AddDevicePreferenceController2 extends BasePreferenceController {
private static final String KEY_ADD_DEVICE = "add_device_to_network";
- private AccessPoint mAccessPoint;
+ private WifiEntry mWifiEntry;
private WifiManager mWifiManager;
public AddDevicePreferenceController2(Context context) {
@@ -45,18 +45,13 @@ public class AddDevicePreferenceController2 extends BasePreferenceController {
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
}
- /**
- * Initiate with an {@link AccessPoint}.
- */
- public AddDevicePreferenceController2 init(AccessPoint accessPoint) {
- mAccessPoint = accessPoint;
-
- return this;
+ public void setWifiEntry(WifiEntry wifiEntry) {
+ mWifiEntry = wifiEntry;
}
@Override
public int getAvailabilityStatus() {
- if (WifiDppUtils.isSupportConfiguratorQrCodeScanner(mContext, mAccessPoint)) {
+ if (WifiDppUtils.isSupportConfiguratorQrCodeScanner(mContext, mWifiEntry)) {
return AVAILABLE;
} else {
return CONDITIONALLY_UNAVAILABLE;
@@ -75,7 +70,7 @@ public class AddDevicePreferenceController2 extends BasePreferenceController {
private void launchWifiDppConfiguratorQrCodeScanner() {
final Intent intent = WifiDppUtils.getConfiguratorQrCodeScannerIntentOrNull(mContext,
- mWifiManager, mAccessPoint);
+ mWifiManager, mWifiEntry);
if (intent == null) {
Log.e(TAG, "Launch Wi-Fi QR code scanner with a wrong Wi-Fi network!");
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index 1d6e4574b49..9473c362dfc 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -23,10 +23,8 @@ import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.settings.SettingsEnums;
-import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
@@ -41,10 +39,8 @@ import android.net.NetworkInfo;
import android.net.NetworkRequest;
import android.net.NetworkUtils;
import android.net.RouteInfo;
-import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
-import android.os.CountDownTimer;
import android.os.Handler;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
@@ -67,7 +63,7 @@ import com.android.settings.datausage.WifiDataUsageSummaryPreferenceController;
import com.android.settings.widget.EntityHeaderController;
import com.android.settings.wifi.WifiDialog;
import com.android.settings.wifi.WifiDialog.WifiDialogListener;
-import com.android.settings.wifi.WifiUtils;
+import com.android.settings.wifi.WifiEntryShell;
import com.android.settings.wifi.dpp.WifiDppUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -77,15 +73,17 @@ import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;
import com.android.settingslib.widget.ActionButtonsPreference;
import com.android.settingslib.widget.LayoutPreference;
-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.WifiEntry.ConnectedInfo;
+import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback;
+import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.ConnectStatus;
+import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.DisconnectStatus;
+import com.android.wifitrackerlib.WifiEntry.WifiEntryCallback.ForgetStatus;
import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
-import java.time.Duration;
import java.util.StringJoiner;
import java.util.stream.Collectors;
@@ -95,7 +93,7 @@ import java.util.stream.Collectors;
*/
public class WifiDetailPreferenceController2 extends AbstractPreferenceController
implements PreferenceControllerMixin, WifiDialogListener, LifecycleObserver, OnPause,
- OnResume {
+ OnResume, WifiEntryCallback {
private static final String TAG = "WifiDetailsPrefCtrl2";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -133,21 +131,7 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
@VisibleForTesting
static final String KEY_IPV6_ADDRESSES_PREF = "ipv6_addresses";
- private static final int STATE_NONE = 1;
- private static final int STATE_ENABLE_WIFI = 2;
- private static final int STATE_ENABLE_WIFI_FAILED = 3;
- private static final int STATE_CONNECTING = 4;
- private static final int STATE_CONNECTED = 5;
- private static final int STATE_FAILED = 6;
- private static final int STATE_NOT_IN_RANGE = 7;
- private static final int STATE_DISCONNECTED = 8;
- private static final long TIMEOUT = Duration.ofSeconds(10).toMillis();
-
- // Be static to avoid too much object not be reset.
- @VisibleForTesting
- static CountDownTimer sTimer;
-
- private AccessPoint mAccessPoint;
+ private final WifiEntry mWifiEntry;
private final ConnectivityManager mConnectivityManager;
private final PreferenceFragmentCompat mFragment;
private final Handler mHandler;
@@ -157,16 +141,9 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
private NetworkCapabilities mNetworkCapabilities;
private int mRssiSignalLevel = -1;
private String[] mSignalStr;
- private WifiConfiguration mWifiConfig;
private WifiInfo mWifiInfo;
private final WifiManager mWifiManager;
- private final WifiTracker mWifiTracker;
private final MetricsFeatureProvider mMetricsFeatureProvider;
- private boolean mIsOutOfRange;
- private boolean mIsEphemeral;
- private boolean mConnected;
- private int mConnectingState;
- private WifiManager.ActionListener mConnectListener;
// UI elements - in order of appearance
private ActionButtonsPreference mButtonsPref;
@@ -189,36 +166,6 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
WifiDataUsageSummaryPreferenceController mSummaryHeaderController;
private final IconInjector mIconInjector;
- private final IntentFilter mFilter;
-
- // Passpoint information - cache it in case of losing these information after
- // updateAccessPointFromScannedList(). For R2, we should update these data from
- // WifiManager#getPasspointConfigurations() after users manage the passpoint profile.
- private boolean mIsExpired;
- private boolean mIsPasspointConfigurationR1;
-
- private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- switch (intent.getAction()) {
- case WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION:
- if (!intent.getBooleanExtra(WifiManager.EXTRA_MULTIPLE_NETWORKS_CHANGED,
- false /* defaultValue */)) {
- // only one network changed
- WifiConfiguration wifiConfiguration = intent
- .getParcelableExtra(WifiManager.EXTRA_WIFI_CONFIGURATION);
- if (mAccessPoint.matches(wifiConfiguration)) {
- mWifiConfig = wifiConfiguration;
- }
- }
- // fall through
- case WifiManager.NETWORK_STATE_CHANGED_ACTION:
- case WifiManager.RSSI_CHANGED_ACTION:
- refreshPage();
- break;
- }
- }
- };
private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder()
.clearCapabilities().addTransportType(TRANSPORT_WIFI).build();
@@ -265,7 +212,8 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
|| hasCapabilityChanged(nc, NET_CAPABILITY_VALIDATED)
|| hasCapabilityChanged(nc, NET_CAPABILITY_CAPTIVE_PORTAL)
|| hasCapabilityChanged(nc, NET_CAPABILITY_PARTIAL_CONNECTIVITY)) {
- mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo);
+ // TODO(b/143326832): What to do with WifiEntry?
+ // mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo);
refreshEntityHeader();
}
mNetworkCapabilities = nc;
@@ -277,45 +225,20 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
@Override
public void onLost(Network network) {
// Ephemeral network not a saved network, leave detail page once disconnected
- if (mIsEphemeral && network.equals(mNetwork)) {
- exitActivity();
+ if (!mWifiEntry.isSaved() && network.equals(mNetwork)) {
+ if (DEBUG) {
+ Log.d(TAG, "OnLost and exit WifiNetworkDetailsPage");
+ }
+ mFragment.getActivity().finish();
}
}
};
- @VisibleForTesting
- final WifiTracker.WifiListener mWifiListener = new WifiTracker.WifiListener() {
- /** Called when the state of Wifi has changed. */
- public void onWifiStateChanged(int state) {
- Log.d(TAG, "onWifiStateChanged(" + state + ")");
- if (mConnectingState == STATE_ENABLE_WIFI && state == WifiManager.WIFI_STATE_ENABLED) {
- updateConnectingState(STATE_CONNECTING);
- } else if (mConnectingState != STATE_NONE && state == WifiManager.WIFI_STATE_DISABLED) {
- // update as disconnected once Wi-Fi disabled since may not received
- // onConnectedChanged for this case.
- updateConnectingState(STATE_DISCONNECTED);
- }
- }
-
- /** Called when the connection state of wifi has changed. */
- public void onConnectedChanged() {
- refreshPage();
- }
-
- /**
- * Called to indicate the list of AccessPoints has been updated and
- * {@link WifiTracker#getAccessPoints()} should be called to get the updated list.
- */
- public void onAccessPointsChanged() {
- refreshPage();
- }
- };
-
/**
* To get an instance of {@link WifiDetailPreferenceController2}
*/
public static WifiDetailPreferenceController2 newInstance(
- AccessPoint accessPoint,
+ WifiEntry wifiEntry,
ConnectivityManager connectivityManager,
Context context,
PreferenceFragmentCompat fragment,
@@ -324,13 +247,13 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
WifiManager wifiManager,
MetricsFeatureProvider metricsFeatureProvider) {
return new WifiDetailPreferenceController2(
- accessPoint, connectivityManager, context, fragment, handler, lifecycle,
+ wifiEntry, connectivityManager, context, fragment, handler, lifecycle,
wifiManager, metricsFeatureProvider, new IconInjector(context));
}
@VisibleForTesting
/* package */ WifiDetailPreferenceController2(
- AccessPoint accessPoint,
+ WifiEntry wifiEntry,
ConnectivityManager connectivityManager,
Context context,
PreferenceFragmentCompat fragment,
@@ -341,49 +264,18 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
IconInjector injector) {
super(context);
- mAccessPoint = accessPoint;
+ mWifiEntry = wifiEntry;
+ mWifiEntry.setListener(this);
mConnectivityManager = connectivityManager;
mFragment = fragment;
mHandler = handler;
mSignalStr = context.getResources().getStringArray(R.array.wifi_signal);
- mWifiConfig = accessPoint.getConfig();
mWifiManager = wifiManager;
mMetricsFeatureProvider = metricsFeatureProvider;
mIconInjector = injector;
- mFilter = new IntentFilter();
- mFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
- mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
- mFilter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION);
-
mLifecycle = lifecycle;
lifecycle.addObserver(this);
-
- mWifiTracker = WifiTrackerFactory.create(
- mFragment.getActivity(),
- mWifiListener,
- mLifecycle,
- true /*includeSaved*/,
- true /*includeScans*/);
- mConnected = mAccessPoint.isActive();
- // When lost the network connection, WifiInfo/NetworkInfo will be clear. So causes we
- // could not check if the AccessPoint is ephemeral. Need to cache it in first.
- mIsEphemeral = mAccessPoint.isEphemeral();
- mConnectingState = STATE_NONE;
- mConnectListener = new WifiManager.ActionListener() {
- @Override
- public void onSuccess() {
- // Do nothing
- }
-
- @Override
- public void onFailure(int reason) {
- updateConnectingState(STATE_FAILED);
- }
- };
-
- mIsExpired = mAccessPoint.isExpired();
- mIsPasspointConfigurationR1 = mAccessPoint.isPasspointConfigurationR1();
}
@Override
@@ -404,7 +296,8 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
setupEntityHeader(screen);
mButtonsPref = ((ActionButtonsPreference) screen.findPreference(KEY_BUTTONS_PREF))
- .setButton1Text(R.string.forget)
+ .setButton1Text(!mWifiEntry.isSaved()
+ ? R.string.wifi_disconnect_button_text : R.string.forget)
.setButton1Icon(R.drawable.ic_settings_delete)
.setButton1OnClickListener(view -> forgetNetwork())
.setButton2Text(R.string.wifi_sign_in_button_text)
@@ -418,11 +311,6 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
.setButton4Icon(R.drawable.ic_qrcode_24dp)
.setButton4OnClickListener(view -> shareNetwork());
- if (isPasspointConfigurationR1Expired()) {
- // Hide Connect button.
- mButtonsPref.setButton3Visible(false);
- }
-
mSignalStrengthPref = screen.findPreference(KEY_SIGNAL_STRENGTH_PREF);
mTxLinkSpeedPref = screen.findPreference(KEY_TX_LINK_SPEED);
mRxLinkSpeedPref = screen.findPreference(KEY_RX_LINK_SPEED);
@@ -439,7 +327,7 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
mIpv6Category = screen.findPreference(KEY_IPV6_CATEGORY);
mIpv6AddressPref = screen.findPreference(KEY_IPV6_ADDRESSES_PREF);
- mSecurityPref.setSummary(mAccessPoint.getSecurityString(/* concise */ false));
+ mSecurityPref.setSummary(WifiEntryShell.getSecurityString(mWifiEntry, /* concise */ false));
}
private void setupEntityHeader(PreferenceScreen screen) {
@@ -451,7 +339,8 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
mDataUsageSummaryPref.setVisible(true);
mSummaryHeaderController =
new WifiDataUsageSummaryPreferenceController(mFragment.getActivity(),
- mLifecycle, (PreferenceFragmentCompat) mFragment, mAccessPoint.getSsid());
+ mLifecycle, (PreferenceFragmentCompat) mFragment,
+ mWifiEntry.getTitle());
return;
}
@@ -464,22 +353,14 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
- mEntityHeaderController.setLabel(mAccessPoint.getTitle());
+ mEntityHeaderController.setLabel(mWifiEntry.getTitle());
}
private void refreshEntityHeader() {
if (usingDataUsageHeader(mContext)) {
mSummaryHeaderController.updateState(mDataUsageSummaryPref);
} else {
- String summary;
- if (isPasspointConfigurationR1Expired()) {
- // Not able to get summary from AccessPoint because we may lost
- // PasspointConfiguration information after updateAccessPointFromScannedList().
- summary = mContext.getResources().getString(
- com.android.settingslib.R.string.wifi_passpoint_expired);
- } else {
- summary = mAccessPoint.getSettingsSummary(true /* convertSavedAsDisconnected */);
- }
+ String summary = mWifiEntry.getSummary();
mEntityHeaderController
.setSummary(summary)
@@ -489,9 +370,19 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
}
private void updateNetworkInfo() {
- mNetwork = mWifiManager.getCurrentNetwork();
- mLinkProperties = mConnectivityManager.getLinkProperties(mNetwork);
- mNetworkCapabilities = mConnectivityManager.getNetworkCapabilities(mNetwork);
+ if (mWifiEntry.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTED) {
+ mNetwork = mWifiManager.getCurrentNetwork();
+ mLinkProperties = mConnectivityManager.getLinkProperties(mNetwork);
+ mNetworkCapabilities = mConnectivityManager.getNetworkCapabilities(mNetwork);
+ mNetworkInfo = mConnectivityManager.getNetworkInfo(mNetwork);
+ mWifiInfo = mWifiManager.getConnectionInfo();
+ } else {
+ mNetwork = null;
+ mLinkProperties = null;
+ mNetworkCapabilities = null;
+ mNetworkInfo = null;
+ mWifiInfo = null;
+ }
}
@Override
@@ -500,27 +391,16 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
// NetworkCallback only looks at changes to mNetwork.
updateNetworkInfo();
refreshPage();
- mContext.registerReceiver(mReceiver, mFilter);
mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback,
mHandler);
}
@Override
public void onPause() {
- mNetwork = null;
- mLinkProperties = null;
- mNetworkCapabilities = null;
- mNetworkInfo = null;
- mWifiInfo = null;
- mContext.unregisterReceiver(mReceiver);
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
}
private void refreshPage() {
- if (!updateAccessPoint()) {
- return;
- }
-
Log.d(TAG, "Update UI!");
// refresh header
@@ -545,65 +425,11 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
refreshMacAddress();
}
- @VisibleForTesting
- boolean updateAccessPoint() {
- boolean changed = false;
- // remember mIsOutOfRange as old before updated
- boolean oldState = mIsOutOfRange;
- updateAccessPointFromScannedList();
-
- if (mAccessPoint.isActive()) {
- updateNetworkInfo();
- mNetworkInfo = mConnectivityManager.getNetworkInfo(mNetwork);
- mWifiInfo = mWifiManager.getConnectionInfo();
- if (mNetwork == null || mNetworkInfo == null || mWifiInfo == null) {
- // Once connected, can't get mNetwork immediately, return false and wait for
- // next time to update UI. also reset {@code mIsOutOfRange}
- mIsOutOfRange = oldState;
- return false;
- }
- changed |= mAccessPoint.update(mWifiConfig, mWifiInfo, mNetworkInfo);
- }
-
- // signal level changed
- changed |= mRssiSignalLevel != mAccessPoint.getLevel();
- // In/Out of range changed
- changed |= oldState != mIsOutOfRange;
- // connect state changed
- if (mConnected != mAccessPoint.isActive()) {
- mConnected = mAccessPoint.isActive();
- changed = true;
- updateConnectingState(mAccessPoint.isActive() ? STATE_CONNECTED : STATE_DISCONNECTED);
- }
-
- return changed;
- }
-
- private void updateAccessPointFromScannedList() {
- mIsOutOfRange = true;
-
- for (AccessPoint ap : mWifiTracker.getAccessPoints()) {
- if (mAccessPoint.matches(ap)) {
- mAccessPoint = ap;
- mWifiConfig = ap.getConfig();
- mIsOutOfRange = !mAccessPoint.isReachable();
- return;
- }
- }
- }
-
- private void exitActivity() {
- if (DEBUG) {
- Log.d(TAG, "Exiting the WifiNetworkDetailsPage");
- }
- mFragment.getActivity().finish();
- }
-
private void refreshRssiViews() {
- int signalLevel = mAccessPoint.getLevel();
+ int signalLevel = mWifiEntry.getLevel();
// Disappears signal view if not in range. e.g. for saved networks.
- if (mIsOutOfRange) {
+ if (signalLevel == WifiEntry.WIFI_LEVEL_UNREACHABLE) {
mSignalStrengthPref.setVisible(false);
mRssiSignalLevel = -1;
return;
@@ -656,24 +482,26 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
}
private void refreshFrequency() {
- if (mWifiInfo == null) {
+ final ConnectedInfo connectedInfo = mWifiEntry.getConnectedInfo();
+ if (connectedInfo == null) {
mFrequencyPref.setVisible(false);
return;
}
- final int frequency = mWifiInfo.getFrequency();
+ final int frequency = connectedInfo.frequencyMhz;
String band = null;
- if (frequency >= AccessPoint.LOWER_FREQ_24GHZ
- && frequency < AccessPoint.HIGHER_FREQ_24GHZ) {
+ if (frequency >= WifiEntryShell.LOWER_FREQ_24GHZ
+ && frequency < WifiEntryShell.HIGHER_FREQ_24GHZ) {
band = mContext.getResources().getString(R.string.wifi_band_24ghz);
- } else if (frequency >= AccessPoint.LOWER_FREQ_5GHZ
- && frequency < AccessPoint.HIGHER_FREQ_5GHZ) {
+ } else if (frequency >= WifiEntryShell.LOWER_FREQ_5GHZ
+ && frequency < WifiEntryShell.HIGHER_FREQ_5GHZ) {
band = mContext.getResources().getString(R.string.wifi_band_5ghz);
} else {
- Log.e(TAG, "Unexpected frequency " + frequency);
// Connecting state is unstable, make it disappeared if unexpected
- if (mConnectingState == STATE_CONNECTING) {
+ if (mWifiEntry.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTING) {
mFrequencyPref.setVisible(false);
+ } else {
+ Log.e(TAG, "Unexpected frequency " + frequency);
}
return;
}
@@ -706,9 +534,9 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
}
private void refreshSsid() {
- if (mAccessPoint.isPasspoint() || mAccessPoint.isOsuProvider()) {
+ if (WifiEntryShell.isPasspoint(mWifiEntry) || WifiEntryShell.isOsuProvider(mWifiEntry)) {
mSsidPref.setVisible(true);
- mSsidPref.setSummary(mAccessPoint.getSsidStr());
+ mSsidPref.setSummary(mWifiEntry.getTitle());
} else {
mSsidPref.setVisible(false);
}
@@ -733,15 +561,8 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
}
private String getMacAddress() {
- if (mWifiInfo != null) {
- // get MAC address from connected network information
- return mWifiInfo.getMacAddress();
- }
-
- // return randomized MAC address
- if (mWifiConfig != null && mWifiConfig.macRandomizationSetting
- == WifiConfiguration.RANDOMIZATION_PERSISTENT) {
- return mWifiConfig.getRandomizedMacAddress().toString();
+ if (mWifiEntry.isSaved() && mWifiEntry.getPrivacy() == WifiEntry.PRIVACY_RANDOMIZED_MAC) {
+ return mWifiEntry.getMacAddress();
}
// return device MAC address
@@ -764,13 +585,9 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
}
private void refreshButtons() {
- // Ephemeral network won't be removed permanently, but be putted in blacklist.
- mButtonsPref.setButton1Text(
- mIsEphemeral ? R.string.wifi_disconnect_button_text : R.string.forget);
-
- boolean canForgetNetwork = canForgetNetwork();
+ boolean canForgetNetwork = mWifiEntry.canForget();
boolean canSignIntoNetwork = canSignIntoNetwork();
- boolean canConnectNetwork = canConnectNetwork() && !isPasspointConfigurationR1Expired();
+ boolean canConnectNetwork = mWifiEntry.canConnect();
boolean canShareNetwork = canShareNetwork();
mButtonsPref.setButton1Visible(canForgetNetwork);
@@ -783,18 +600,10 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
|| canShareNetwork);
}
- private boolean canConnectNetwork() {
- // Display connect button for disconnected AP even not in the range.
- return !mAccessPoint.isActive();
- }
-
- private boolean isPasspointConfigurationR1Expired() {
- return mIsPasspointConfigurationR1 && mIsExpired;
- }
-
private void refreshIpLayerInfo() {
// Hide IP layer info if not a connected network.
- if (!mAccessPoint.isActive() || mNetwork == null || mLinkProperties == null) {
+ if (mWifiEntry.getConnectedState() != WifiEntry.CONNECTED_STATE_CONNECTED
+ || mNetwork == null || mLinkProperties == null) {
mIpAddressPref.setVisible(false);
mSubnetPref.setVisible(false);
mGatewayPref.setVisible(false);
@@ -856,48 +665,37 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
}
}
- /**
- * Returns whether the network represented by this preference can be forgotten.
- */
- private boolean canForgetNetwork() {
- return (mWifiInfo != null && mWifiInfo.isEphemeral()) || canModifyNetwork()
- || mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig();
- }
-
/**
* Returns whether the network represented by this preference can be modified.
*/
public boolean canModifyNetwork() {
- return mWifiConfig != null && !WifiUtils.isNetworkLockedDown(mContext, mWifiConfig);
+ return WifiEntryShell.canModifyNetwork(mWifiEntry);
}
/**
* Returns whether the user can sign into the network represented by this preference.
*/
private boolean canSignIntoNetwork() {
- return mAccessPoint.isActive() && WifiUtils.canSignIntoNetwork(mNetworkCapabilities);
+ return mWifiEntry.canSignIn();
}
/**
* Returns whether the user can share the network represented by this preference with QR code.
*/
private boolean canShareNetwork() {
- return mAccessPoint.getConfig() != null
- && WifiDppUtils.isSupportConfiguratorQrCodeGenerator(mContext, mAccessPoint);
+ return mWifiEntry.canShare();
}
/**
* Forgets the wifi network associated with this preference.
*/
private void forgetNetwork() {
- if (mWifiInfo != null && mWifiInfo.isEphemeral()) {
- mWifiManager.disableEphemeralNetwork(mWifiInfo.getSSID());
- } else if (mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig()) {
+ if (WifiEntryShell.isPasspoint(mWifiEntry)) {
// Post a dialog to confirm if user really want to forget the passpoint network.
showConfirmForgetDialog();
return;
- } else if (mWifiConfig != null) {
- mWifiManager.forget(mWifiConfig.networkId, null /* action listener */);
+ } else {
+ mWifiEntry.forget();
}
mMetricsFeatureProvider.action(
@@ -910,10 +708,10 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
final AlertDialog dialog = new AlertDialog.Builder(mContext)
.setPositiveButton(R.string.forget, ((dialog1, which) -> {
try {
- mWifiManager.removePasspointConfiguration(mAccessPoint.getPasspointFqdn());
+ mWifiEntry.forget();
} catch (RuntimeException e) {
Log.e(TAG, "Failed to remove Passpoint configuration for "
- + mAccessPoint.getPasspointFqdn());
+ + WifiEntryShell.getPasspointFqdn(mWifiEntry));
}
mMetricsFeatureProvider.action(
mFragment.getActivity(), SettingsEnums.ACTION_WIFI_FORGET);
@@ -931,7 +729,7 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
*/
private void launchWifiDppConfiguratorActivity() {
final Intent intent = WifiDppUtils.getConfiguratorQrCodeGeneratorIntentOrNull(mContext,
- mWifiManager, mAccessPoint);
+ mWifiManager, mWifiEntry);
if (intent == null) {
Log.e(TAG, "Launch Wi-Fi DPP QR code generator with a wrong Wi-Fi network!");
@@ -1005,203 +803,95 @@ public class WifiDetailPreferenceController2 extends AbstractPreferenceControlle
@VisibleForTesting
void connectNetwork() {
- final Activity activity = mFragment.getActivity();
- // error handling, connected/saved network should have mWifiConfig.
- if (mWifiConfig == null) {
- Toast.makeText(activity,
- R.string.wifi_failed_connect_message,
- Toast.LENGTH_SHORT).show();
- return;
- }
-
- // init state before connect
- mConnectingState = STATE_NONE;
-
- if (mWifiManager.isWifiEnabled()) {
- updateConnectingState(STATE_CONNECTING);
- } else {
- // Enable Wi-Fi automatically to connect AP
- updateConnectingState(STATE_ENABLE_WIFI);
- }
- }
-
- private void updateConnectingState(int state) {
- final Activity activity = mFragment.getActivity();
- Log.d(TAG, "updateConnectingState from " + mConnectingState + " to " + state);
- switch (mConnectingState) {
- case STATE_NONE:
- case STATE_ENABLE_WIFI:
- if (state == STATE_ENABLE_WIFI) {
- Log.d(TAG, "Turn on Wi-Fi automatically!");
- updateConnectedButton(STATE_ENABLE_WIFI);
- Toast.makeText(activity,
- R.string.wifi_turned_on_message,
- Toast.LENGTH_SHORT).show();
- mWifiManager.setWifiEnabled(true);
- // start timer for error handling
- startTimer();
- } else if (state == STATE_CONNECTING) {
- Log.d(TAG, "connecting...");
- updateConnectedButton(STATE_CONNECTING);
- if (mAccessPoint.isPasspoint()) {
- mWifiManager.connect(mWifiConfig, mConnectListener);
- } else {
- mWifiManager.connect(mWifiConfig.networkId, mConnectListener);
- }
- // start timer for error handling since framework didn't call back if failed
- startTimer();
- } else if (state == STATE_ENABLE_WIFI_FAILED) {
- Log.e(TAG, "Wi-Fi failed to enable network!");
- stopTimer();
- // reset state
- state = STATE_NONE;
- Toast.makeText(activity,
- R.string.wifi_failed_connect_message,
- Toast.LENGTH_SHORT).show();
- updateConnectedButton(STATE_ENABLE_WIFI_FAILED);
- }
- // Do not break here for disconnected event.
- case STATE_CONNECTED:
- if (state == STATE_DISCONNECTED) {
- Log.d(TAG, "disconnected");
- // reset state
- state = STATE_NONE;
- updateConnectedButton(STATE_DISCONNECTED);
- refreshPage();
- // clear for getting MAC Address from saved configuration
- mWifiInfo = null;
- }
- break;
- case STATE_CONNECTING:
- if (state == STATE_CONNECTED) {
- Log.d(TAG, "connected");
- stopTimer();
- updateConnectedButton(STATE_CONNECTED);
- Toast.makeText(activity,
- mContext.getString(R.string.wifi_connected_to_message,
- mAccessPoint.getTitle()),
- Toast.LENGTH_SHORT).show();
-
- refreshPage();
- } else if (state == STATE_NOT_IN_RANGE) {
- Log.d(TAG, "AP not in range");
- stopTimer();
- // reset state
- state = STATE_NONE;
- Toast.makeText(activity,
- R.string.wifi_not_in_range_message,
- Toast.LENGTH_SHORT).show();
- updateConnectedButton(STATE_NOT_IN_RANGE);
- } else if (state == STATE_FAILED) {
- Log.d(TAG, "failed");
- stopTimer();
- // reset state
- state = STATE_NONE;
- Toast.makeText(activity,
- R.string.wifi_failed_connect_message,
- Toast.LENGTH_SHORT).show();
- updateConnectedButton(STATE_FAILED);
- }
- break;
- default:
- Log.e(TAG, "Invalid state : " + mConnectingState);
- // don't update invalid state
- return;
- }
-
- mConnectingState = state;
- }
-
- private void updateConnectedButton(int state) {
- switch (state) {
- case STATE_ENABLE_WIFI:
- case STATE_CONNECTING:
- mButtonsPref.setButton3Text(R.string.wifi_connecting)
- .setButton3Enabled(false);
- break;
- case STATE_CONNECTED:
- // init button state and set as invisible
- mButtonsPref.setButton3Text(R.string.wifi_connect)
- .setButton3Icon(R.drawable.ic_settings_wireless)
- .setButton3Enabled(true)
- .setButton3Visible(false);
- break;
- case STATE_DISCONNECTED:
- case STATE_NOT_IN_RANGE:
- case STATE_FAILED:
- case STATE_ENABLE_WIFI_FAILED:
- if (isPasspointConfigurationR1Expired()) {
- // Hide Connect button.
- mButtonsPref.setButton3Visible(false);
- } else {
- mButtonsPref.setButton3Text(R.string.wifi_connect)
- .setButton3Icon(R.drawable.ic_settings_wireless)
- .setButton3Enabled(true)
- .setButton3Visible(true);
- }
- break;
- default:
- Log.e(TAG, "Invalid connect button state : " + state);
- break;
- }
- }
-
- private void startTimer() {
- if (sTimer != null) {
- stopTimer();
- }
-
- sTimer = new CountDownTimer(TIMEOUT, TIMEOUT + 1) {
- @Override
- public void onTick(long millisUntilFinished) {
- // Do nothing
- }
- @Override
- public void onFinish() {
- if (mFragment == null || mFragment.getActivity() == null) {
- Log.d(TAG, "Ignore timeout since activity not exist!");
- return;
- }
- Log.e(TAG, "Timeout for state:" + mConnectingState);
- if (mConnectingState == STATE_ENABLE_WIFI) {
- updateConnectingState(STATE_ENABLE_WIFI_FAILED);
- } else if (mConnectingState == STATE_CONNECTING) {
- updateAccessPointFromScannedList();
- if (mIsOutOfRange) {
- updateConnectingState(STATE_NOT_IN_RANGE);
- } else {
- updateConnectingState(STATE_FAILED);
- }
- }
- }
- };
- sTimer.start();
- }
-
- private void stopTimer() {
- if (sTimer == null) return;
-
- sTimer.cancel();
- sTimer = null;
+ // TODO(b/143326832): What to do with WifiManager#isWifiEnabled() false case?
+ mButtonsPref.setButton3Text(R.string.wifi_connecting).setButton3Enabled(false);
+ mWifiEntry.connect();
}
private void refreshMacTitle() {
- if (mWifiConfig == null) {
+ if (!mWifiEntry.isSaved()) {
return;
}
// For saved Passpoint network, framework doesn't have the field to keep the MAC choice
// persistently, so Passpoint network will always use the default value so far, which is
// randomized MAC address, so don't need to modify title.
- if (mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig()) {
+ if (WifiEntryShell.isPasspoint(mWifiEntry)) {
return;
}
mMacAddressPref.setTitle(
- (mWifiConfig.macRandomizationSetting
- == WifiConfiguration.RANDOMIZATION_PERSISTENT)
+ (mWifiEntry.getPrivacy() == WifiEntry.PRIVACY_RANDOMIZED_MAC)
? R.string.wifi_advanced_randomized_mac_address_title
: R.string.wifi_advanced_device_mac_address_title);
+ }
+ /**
+ * Indicates the state of the WifiEntry has changed and clients may retrieve updates through
+ * the WifiEntry getter methods.
+ */
+ @Override
+ public void onUpdated() {
+ refreshPage();
+ }
+
+ /**
+ * Result of the connect request indicated by the CONNECT_STATUS constants.
+ */
+ @Override
+ public void onConnectResult(@ConnectStatus int status) {
+ if (status == WifiEntryCallback.CONNECT_STATUS_SUCCESS) {
+ Toast.makeText(mContext,
+ mContext.getString(R.string.wifi_connected_to_message, mWifiEntry.getTitle()),
+ Toast.LENGTH_SHORT).show();
+ updateNetworkInfo();
+ refreshPage();
+ } else if (mWifiEntry.getLevel() == WifiEntry.WIFI_LEVEL_UNREACHABLE) {
+ Toast.makeText(mContext,
+ R.string.wifi_not_in_range_message,
+ Toast.LENGTH_SHORT).show();
+ } else {
+ Toast.makeText(mContext,
+ R.string.wifi_failed_connect_message,
+ Toast.LENGTH_SHORT).show();
+ }
+ mButtonsPref.setButton3Text(R.string.wifi_connect)
+ .setButton3Icon(R.drawable.ic_settings_wireless)
+ .setButton3Enabled(true)
+ .setButton3Visible(true);
+ }
+
+ /**
+ * Result of the disconnect request indicated by the DISCONNECT_STATUS constants.
+ */
+ @Override
+ public void onDisconnectResult(@DisconnectStatus int status) {
+ if (status != WifiEntryCallback.DISCONNECT_STATUS_SUCCESS) {
+ Log.e(TAG, "Disconnect Wi-Fi network failed");
+ }
+
+ updateNetworkInfo();
+ refreshPage();
+ }
+
+ /**
+ * Result of the forget request indicated by the FORGET_STATUS constants.
+ */
+ @Override
+ public void onForgetResult(@ForgetStatus int status) {
+ if (status != WifiEntryCallback.FORGET_STATUS_SUCCESS) {
+ Log.e(TAG, "Forget Wi-Fi network failed");
+ }
+
+ mMetricsFeatureProvider.action(mFragment.getActivity(), SettingsEnums.ACTION_WIFI_FORGET);
+ mFragment.getActivity().finish();
+ }
+
+ /**
+ * Result of the sign-in request indicated by the SIGNIN_STATUS constants.
+ */
+ @Override
+ public void onSignInResult(@SignInStatus int status) {
+ refreshPage();
}
}
diff --git a/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java
index 99967dcf966..09151528c55 100644
--- a/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2.java
@@ -18,8 +18,6 @@ package com.android.settings.wifi.details2;
import android.app.backup.BackupManager;
import android.content.Context;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiManager;
import androidx.annotation.VisibleForTesting;
import androidx.preference.DropDownPreference;
@@ -29,6 +27,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.wifi.WifiDialog;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.wifitrackerlib.WifiEntry;
/**
* {@link AbstractPreferenceController} that controls whether the wifi network is metered or not
@@ -37,14 +36,12 @@ public class WifiMeteredPreferenceController2 extends BasePreferenceController i
Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {
private static final String KEY_WIFI_METERED = "metered";
- private WifiConfiguration mWifiConfiguration;
- private WifiManager mWifiManager;
+ private WifiEntry mWifiEntry;
private Preference mPreference;
- public WifiMeteredPreferenceController2(Context context, WifiConfiguration wifiConfiguration) {
+ public WifiMeteredPreferenceController2(Context context, WifiEntry wifiEntry) {
super(context, KEY_WIFI_METERED);
- mWifiConfiguration = wifiConfiguration;
- mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+ mWifiEntry = wifiEntry;
}
@Override
@@ -62,10 +59,10 @@ public class WifiMeteredPreferenceController2 extends BasePreferenceController i
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- if (mWifiConfiguration != null) {
- mWifiConfiguration.meteredOverride = Integer.parseInt((String) newValue);
+ if (mWifiEntry.isSaved()) {
+ mWifiEntry.setMeteredChoice(Integer.parseInt((String) newValue));
}
- mWifiManager.updateNetwork(mWifiConfiguration);
+
// Stage the backup of the SettingsProvider package which backs this up
BackupManager.dataChanged("com.android.providers.settings");
updateSummary((DropDownPreference) preference, getMeteredOverride());
@@ -74,11 +71,11 @@ public class WifiMeteredPreferenceController2 extends BasePreferenceController i
@VisibleForTesting
int getMeteredOverride() {
- if (mWifiConfiguration != null) {
+ if (mWifiEntry.isSaved()) {
// Wrap the meteredOverride since robolectric cannot recognize it
- return mWifiConfiguration.meteredOverride;
+ return mWifiEntry.getMeteredChoice();
}
- return WifiConfiguration.METERED_OVERRIDE_NONE;
+ return WifiEntry.METERED_CHOICE_AUTO;
}
private void updateSummary(DropDownPreference preference, int meteredOverride) {
@@ -93,16 +90,17 @@ public class WifiMeteredPreferenceController2 extends BasePreferenceController i
@Override
public void onSubmit(WifiDialog dialog) {
- if (dialog.getController() != null) {
- final WifiConfiguration newConfig = dialog.getController().getConfig();
- if (newConfig == null || mWifiConfiguration == null) {
- return;
- }
-
- if (newConfig.meteredOverride != mWifiConfiguration.meteredOverride) {
- mWifiConfiguration = newConfig;
- onPreferenceChange(mPreference, String.valueOf(newConfig.meteredOverride));
- }
- }
+ // TODO(b/143326832): Create WifiDialog2 and let it work for WifiEntry.
+ //if (dialog.getController() != null) {
+ // final WifiConfiguration newConfig = dialog.getController().getConfig();
+ // if (newConfig == null || mWifiConfiguration == null) {
+ // return;
+ // }
+ //
+ // if (newConfig.meteredOverride != mWifiConfiguration.meteredOverride) {
+ // mWifiConfiguration = newConfig;
+ // onPreferenceChange(mPreference, String.valueOf(newConfig.meteredOverride));
+ // }
+ //}
}
}
diff --git a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
index 5eb4b287268..c23c2ed30ad 100644
--- a/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
+++ b/src/com/android/settings/wifi/details2/WifiNetworkDetailsFragment2.java
@@ -21,45 +21,59 @@ import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.net.ConnectivityManager;
+import android.net.NetworkScoreManager;
import android.net.wifi.WifiManager;
-import android.os.Bundle;
import android.os.Handler;
+import android.os.HandlerThread;
import android.os.Looper;
+import android.os.Process;
+import android.os.SimpleClock;
+import android.os.SystemClock;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.wifi.WifiConfigUiBase;
import com.android.settings.wifi.WifiDialog;
+import com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsWifiSettings2;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.wifi.AccessPoint;
+import com.android.wifitrackerlib.NetworkDetailsTracker;
+import com.android.wifitrackerlib.WifiEntry;
+import java.time.Clock;
+import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.List;
/**
* Detail page for the currently connected wifi network.
*
- *
The AccessPoint should be saved to the intent Extras when launching this class via
- * {@link AccessPoint#saveWifiState(Bundle)} in order to properly render this page.
+ *
The key of {@link WifiEntry} should be saved to the intent Extras when launching this class
+ * in order to properly render this page.
*/
public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
WifiDialog.WifiDialogListener {
private static final String TAG = "WifiNetworkDetailsFrg2";
- private AccessPoint mAccessPoint;
+ // Max age of tracked WifiEntries
+ private static final long MAX_SCAN_AGE_MILLIS = 15_000;
+ // Interval between initiating SavedNetworkTracker scans
+ private static final long SCAN_INTERVAL_MILLIS = 10_000;
+
+ private NetworkDetailsTracker mNetworkDetailsTracker;
+ private HandlerThread mWorkerThread;
private WifiDetailPreferenceController2 mWifiDetailPreferenceController2;
private List mWifiDialogListeners = new ArrayList<>();
@Override
- public void onAttach(Context context) {
- mAccessPoint = new AccessPoint(context, getArguments());
- super.onAttach(context);
+ public void onDestroy() {
+ mWorkerThread.quit();
+
+ super.onDestroy();
}
@Override
@@ -87,15 +101,15 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
@Override
public Dialog onCreateDialog(int dialogId) {
- if (getActivity() == null || mWifiDetailPreferenceController2 == null
- || mAccessPoint == null) {
+ if (getActivity() == null || mWifiDetailPreferenceController2 == null) {
return null;
}
- return WifiDialog.createModal(getActivity(), this, mAccessPoint,
- WifiConfigUiBase.MODE_MODIFY);
+ // TODO(b/143326832): Replace it with WifiEntry.
+ return null;
+ //return WifiDialog.createModal(getActivity(), this, mAccessPoint,
+ // WifiConfigUiBase.MODE_MODIFY);
}
-
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem item = menu.add(0, Menu.FIRST, 0, R.string.wifi_modify);
@@ -124,9 +138,11 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
protected List createPreferenceControllers(Context context) {
final List controllers = new ArrayList<>();
final ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
+ setupNetworksDetailTracker();
+ final WifiEntry wifiEntry = mNetworkDetailsTracker.getWifiEntry();
mWifiDetailPreferenceController2 = WifiDetailPreferenceController2.newInstance(
- mAccessPoint,
+ wifiEntry,
cm,
context,
this,
@@ -134,20 +150,20 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
getSettingsLifecycle(),
context.getSystemService(WifiManager.class),
mMetricsFeatureProvider);
-
controllers.add(mWifiDetailPreferenceController2);
- controllers.add(new AddDevicePreferenceController2(context).init(mAccessPoint));
+
+ final AddDevicePreferenceController2 addDevicePreferenceController2 =
+ new AddDevicePreferenceController2(context);
+ addDevicePreferenceController2.setWifiEntry(wifiEntry);
+ controllers.add(addDevicePreferenceController2);
final WifiMeteredPreferenceController2 meteredPreferenceController2 =
- new WifiMeteredPreferenceController2(context, mAccessPoint.getConfig());
+ new WifiMeteredPreferenceController2(context, wifiEntry);
controllers.add(meteredPreferenceController2);
final WifiPrivacyPreferenceController2 privacyController2 =
new WifiPrivacyPreferenceController2(context);
- privacyController2.setWifiConfiguration(mAccessPoint.getConfig());
- privacyController2.setIsEphemeral(mAccessPoint.isEphemeral());
- privacyController2.setIsPasspoint(
- mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig());
+ privacyController2.setWifiEntry(wifiEntry);
controllers.add(privacyController2);
// Sets callback listener for wifi dialog.
@@ -164,4 +180,35 @@ public class WifiNetworkDetailsFragment2 extends DashboardFragment implements
listener.onSubmit(dialog);
}
}
+
+ private void setupNetworksDetailTracker() {
+ if (mNetworkDetailsTracker != null) {
+ return;
+ }
+
+ final Context context = getContext();
+ 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();
+ }
+ };
+
+ mNetworkDetailsTracker = NetworkDetailsTracker.createNetworkDetailsTracker(
+ getSettingsLifecycle(),
+ context,
+ context.getSystemService(WifiManager.class),
+ context.getSystemService(ConnectivityManager.class),
+ context.getSystemService(NetworkScoreManager.class),
+ new Handler(Looper.getMainLooper()),
+ mWorkerThread.getThreadHandler(),
+ elapsedRealtimeClock,
+ MAX_SCAN_AGE_MILLIS,
+ SCAN_INTERVAL_MILLIS,
+ getArguments().getString(SavedAccessPointsWifiSettings2.KEY_KEY));
+ }
}
diff --git a/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
index d85b6079933..bca4de12a43 100644
--- a/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2.java
@@ -17,8 +17,6 @@
package com.android.settings.wifi.details2;
import android.content.Context;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import androidx.annotation.VisibleForTesting;
@@ -30,6 +28,7 @@ import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.wifi.WifiDialog;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.wifitrackerlib.WifiEntry;
/**
* {@link AbstractPreferenceController} that controls whether the wifi network is mac randomized
@@ -39,28 +38,18 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i
Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {
private static final String KEY_WIFI_PRIVACY = "privacy";
- private WifiConfiguration mWifiConfiguration;
private WifiManager mWifiManager;
- private boolean mIsEphemeral = false;
- private boolean mIsPasspoint = false;
+ private WifiEntry mWifiEntry;
private Preference mPreference;
public WifiPrivacyPreferenceController2(Context context) {
super(context, KEY_WIFI_PRIVACY);
- mWifiConfiguration = null;
+
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
}
- public void setWifiConfiguration(WifiConfiguration wifiConfiguration) {
- mWifiConfiguration = wifiConfiguration;
- }
-
- public void setIsEphemeral(boolean isEphemeral) {
- mIsEphemeral = isEphemeral;
- }
-
- public void setIsPasspoint(boolean isPasspoint) {
- mIsPasspoint = isPasspoint;
+ public void setWifiEntry(WifiEntry wifiEntry) {
+ mWifiEntry = wifiEntry;
}
@Override
@@ -83,7 +72,7 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i
updateSummary(dropDownPreference, randomizationLevel);
// Makes preference not selectable, when this is a ephemeral network.
- if (mIsEphemeral || mIsPasspoint) {
+ if (!mWifiEntry.canSetPrivacy()) {
preference.setSelectable(false);
dropDownPreference.setSummary(R.string.wifi_privacy_settings_ephemeral_summary);
}
@@ -91,27 +80,26 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- if (mWifiConfiguration != null) {
- mWifiConfiguration.macRandomizationSetting = Integer.parseInt((String) newValue);
- mWifiManager.updateNetwork(mWifiConfiguration);
+ final int privacy = Integer.parseInt((String) newValue);
+ if (mWifiEntry.isSaved()) {
+ mWifiEntry.setPrivacy(privacy);
// To activate changing, we need to reconnect network. WiFi will auto connect to
// current network after disconnect(). Only needed when this is connected network.
- final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
- if (wifiInfo != null && wifiInfo.getNetworkId() == mWifiConfiguration.networkId) {
- mWifiManager.disconnect();
+ if (mWifiEntry.getConnectedState() == WifiEntry.CONNECTED_STATE_CONNECTED) {
+ mWifiEntry.disconnect();
}
}
- updateSummary((DropDownPreference) preference, Integer.parseInt((String) newValue));
+ updateSummary((DropDownPreference) preference, privacy);
return true;
}
@VisibleForTesting
int getRandomizationValue() {
- if (mWifiConfiguration != null) {
- return mWifiConfiguration.macRandomizationSetting;
+ if (mWifiEntry.isSaved()) {
+ return mWifiEntry.getPrivacy();
}
- return WifiConfiguration.RANDOMIZATION_PERSISTENT;
+ return WifiEntry.PRIVACY_RANDOMIZED_MAC;
}
private static final int PREF_RANDOMIZATION_PERSISTENT = 0;
@@ -124,7 +112,7 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i
* @return index value of preference
*/
public static int translateMacRandomizedValueToPrefValue(int macRandomized) {
- return (macRandomized == WifiConfiguration.RANDOMIZATION_PERSISTENT)
+ return (macRandomized == WifiEntry.PRIVACY_RANDOMIZED_MAC)
? PREF_RANDOMIZATION_PERSISTENT : PREF_RANDOMIZATION_NONE;
}
@@ -136,7 +124,7 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i
*/
public static int translatePrefValueToMacRandomizedValue(int prefMacRandomized) {
return (prefMacRandomized == PREF_RANDOMIZATION_PERSISTENT)
- ? WifiConfiguration.RANDOMIZATION_PERSISTENT : WifiConfiguration.RANDOMIZATION_NONE;
+ ? WifiEntry.PRIVACY_RANDOMIZED_MAC : WifiEntry.PRIVACY_DEVICE_MAC;
}
private void updateSummary(DropDownPreference preference, int macRandomized) {
@@ -147,16 +135,17 @@ public class WifiPrivacyPreferenceController2 extends BasePreferenceController i
@Override
public void onSubmit(WifiDialog dialog) {
- if (dialog.getController() != null) {
- final WifiConfiguration newConfig = dialog.getController().getConfig();
- if (newConfig == null || mWifiConfiguration == null) {
- return;
- }
-
- if (newConfig.macRandomizationSetting != mWifiConfiguration.macRandomizationSetting) {
- mWifiConfiguration = newConfig;
- onPreferenceChange(mPreference, String.valueOf(newConfig.macRandomizationSetting));
- }
- }
+ // TODO(b/143326832): Create WifiDialog2 and let it work for WifiEntry.
+ //if (dialog.getController() != null) {
+ // final WifiConfiguration newConfig = dialog.getController().getConfig();
+ // if (newConfig == null || mWifiConfiguration == null) {
+ // return;
+ // }
+ //
+ // if (newConfig.macRandomizationSetting != mWifiConfiguration.macRandomizationSetting) {
+ // mWifiConfiguration = newConfig;
+ // onPreferenceChange(mPreference, String.valueOf(newConfig.macRandomizationSetting));
+ // }
+ //}
}
}
diff --git a/src/com/android/settings/wifi/dpp/WifiDppUtils.java b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
index 6e01aef1104..22180c3ac3a 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppUtils.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
@@ -32,7 +32,9 @@ import android.os.Vibrator;
import android.text.TextUtils;
import com.android.settings.R;
+import com.android.settings.wifi.WifiEntryShell;
import com.android.settingslib.wifi.AccessPoint;
+import com.android.wifitrackerlib.WifiEntry;
import java.time.Duration;
import java.util.List;
@@ -148,6 +150,24 @@ public class WifiDppUtils {
return wifiConfiguration.preSharedKey;
}
+ private static String getPresharedKey(WifiManager wifiManager, WifiEntry wifiEntry) {
+ final List privilegedWifiConfigurations =
+ wifiManager.getPrivilegedConfiguredNetworks();
+
+ for (WifiConfiguration privilegedWifiConfiguration : privilegedWifiConfigurations) {
+ if (privilegedWifiConfiguration.networkId == WifiEntryShell.getNetworkId(wifiEntry)) {
+ // WEP uses a shared key hence the AuthAlgorithm.SHARED is used to identify it.
+ if (wifiEntry.getSecurity() == WifiEntry.SECURITY_WEP) {
+ return privilegedWifiConfiguration
+ .wepKeys[privilegedWifiConfiguration.wepTxKeyIndex];
+ } else {
+ return privilegedWifiConfiguration.preSharedKey;
+ }
+ }
+ }
+ return "";
+ }
+
private static String removeFirstAndLastDoubleQuotes(String str) {
if (TextUtils.isEmpty(str)) {
return str;
@@ -179,6 +199,22 @@ public class WifiDppUtils {
WifiQrCode.SECURITY_NO_PASSWORD : WifiQrCode.SECURITY_WEP;
}
+ static String getSecurityString(WifiEntry wifiEntry) {
+ final int security = wifiEntry.getSecurity();
+ switch (security) {
+ case WifiEntry.SECURITY_SAE:
+ return WifiQrCode.SECURITY_SAE;
+ case WifiEntry.SECURITY_PSK:
+ return WifiQrCode.SECURITY_WPA_PSK;
+ case WifiEntry.SECURITY_WEP:
+ return WifiQrCode.SECURITY_WEP;
+ case WifiEntry.SECURITY_OWE:
+ case WifiEntry.SECURITY_NONE:
+ default:
+ return WifiQrCode.SECURITY_NO_PASSWORD;
+ }
+ }
+
/**
* Returns an intent to launch QR code generator. It may return null if the security is not
* supported by QR code generator.
@@ -211,6 +247,37 @@ public class WifiDppUtils {
return intent;
}
+ /**
+ * Returns an intent to launch QR code generator. It may return null if the security is not
+ * supported by QR code generator.
+ *
+ * Do not use this method for Wi-Fi hotspot network, use
+ * {@code getHotspotConfiguratorIntentOrNull} instead.
+ *
+ * @param context The context to use for the content resolver
+ * @param wifiManager An instance of {@link WifiManager}
+ * @param wifiEntry An instance of {@link WifiEntry}
+ * @return Intent for launching QR code generator
+ */
+ public static Intent getConfiguratorQrCodeGeneratorIntentOrNull(Context context,
+ WifiManager wifiManager, WifiEntry wifiEntry) {
+ final Intent intent = new Intent(context, WifiDppConfiguratorActivity.class);
+ if (wifiEntry.canShare()) {
+ intent.setAction(WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_QR_CODE_GENERATOR);
+ } else {
+ return null;
+ }
+
+ setConfiguratorIntentExtra(intent, wifiManager, wifiEntry);
+
+ // For a transition mode Wi-Fi AP, creates a QR code that's compatible with more devices
+ if (wifiEntry.getSecurity() == WifiEntry.SECURITY_PSK_SAE_TRANSITION) {
+ intent.putExtra(EXTRA_WIFI_SECURITY, WifiQrCode.SECURITY_WPA_PSK);
+ }
+
+ return intent;
+ }
+
/**
* Returns an intent to launch QR code scanner. It may return null if the security is not
* supported by QR code scanner.
@@ -241,6 +308,36 @@ public class WifiDppUtils {
return intent;
}
+ /**
+ * Returns an intent to launch QR code scanner. It may return null if the security is not
+ * supported by QR code scanner.
+ *
+ * @param context The context to use for the content resolver
+ * @param wifiManager An instance of {@link WifiManager}
+ * @param wifiEntry An instance of {@link WifiEntry}
+ * @return Intent for launching QR code scanner
+ */
+ public static Intent getConfiguratorQrCodeScannerIntentOrNull(Context context,
+ WifiManager wifiManager, WifiEntry wifiEntry) {
+ final Intent intent = new Intent(context, WifiDppConfiguratorActivity.class);
+ if (isSupportConfiguratorQrCodeScanner(context, wifiEntry)) {
+ intent.setAction(WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_QR_CODE_SCANNER);
+ } else {
+ return null;
+ }
+
+ setConfiguratorIntentExtra(intent, wifiManager, wifiEntry);
+
+ final int networkId = WifiEntryShell.getNetworkId(wifiEntry);
+ if (networkId == WifiConfiguration.INVALID_NETWORK_ID) {
+ throw new IllegalArgumentException("Invalid network ID");
+ } else {
+ intent.putExtra(EXTRA_WIFI_NETWORK_ID, networkId);
+ }
+
+ return intent;
+ }
+
/**
* Returns an intent to launch QR code generator for the Wi-Fi hotspot. It may return null if
* the security is not supported by QR code generator.
@@ -320,6 +417,28 @@ public class WifiDppUtils {
intent.putExtra(EXTRA_WIFI_HIDDEN_SSID, wifiConfiguration.hiddenSSID);
}
+ private static void setConfiguratorIntentExtra(Intent intent, WifiManager wifiManager,
+ WifiEntry wifiEntry) {
+ final String ssid = removeFirstAndLastDoubleQuotes(wifiEntry.getTitle());
+ final String security = getSecurityString(wifiEntry);
+
+ // When the value of this key is read, the actual key is not returned, just a "*".
+ // Call privileged system API to obtain actual key.
+ final String preSharedKey = removeFirstAndLastDoubleQuotes(getPresharedKey(wifiManager,
+ wifiEntry));
+
+ if (!TextUtils.isEmpty(ssid)) {
+ intent.putExtra(EXTRA_WIFI_SSID, ssid);
+ }
+ if (!TextUtils.isEmpty(security)) {
+ intent.putExtra(EXTRA_WIFI_SECURITY, security);
+ }
+ if (!TextUtils.isEmpty(preSharedKey)) {
+ intent.putExtra(EXTRA_WIFI_PRE_SHARED_KEY, preSharedKey);
+ }
+ intent.putExtra(EXTRA_WIFI_HIDDEN_SSID, WifiEntryShell.hiddenSSID(wifiEntry));
+ }
+
/**
* Shows authentication screen to confirm credentials (pin, pattern or password) for the current
* user of the device.
@@ -378,6 +497,19 @@ public class WifiDppUtils {
return isSupportWifiDpp(context, accessPoint.getSecurity());
}
+ /**
+ * Checks if QR code scanner supports to config other devices with the Wi-Fi network
+ *
+ * @param context The context to use for {@link WifiManager#isEasyConnectSupported()}
+ * @param wifiEntry The {@link WifiEntry} of the Wi-Fi network
+ */
+ public static boolean isSupportConfiguratorQrCodeScanner(Context context, WifiEntry wifiEntry) {
+ if (WifiEntryShell.isPasspoint(wifiEntry)) {
+ return false;
+ }
+ return isSupportWifiDpp(context, wifiEntry.getSecurity());
+ }
+
/**
* Checks if QR code generator supports to config other devices with the Wi-Fi network
*
diff --git a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
index e094051ccd4..cdcb5429a9e 100644
--- a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
+++ b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
@@ -53,7 +53,7 @@ public class SavedAccessPointsWifiSettings2 extends DashboardFragment
private static final String TAG = "SavedAccessPoints2";
// Key of a Bundle to save/restore the selected WifiEntry
- static final String KEY_KEY = "key_key";
+ public static final String KEY_KEY = "key_key";
// Max age of tracked WifiEntries
private static final long MAX_SCAN_AGE_MILLIS = 15_000;
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
index 5b125e9982a..e60303e7ec1 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
@@ -22,7 +22,6 @@ import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.nullable;
-import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
@@ -77,11 +76,11 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.ActionButtonsPreference;
import com.android.settingslib.widget.LayoutPreference;
-import com.android.settingslib.wifi.AccessPoint;
-import com.android.settingslib.wifi.WifiTracker;
-import com.android.settingslib.wifi.WifiTrackerFactory;
+import com.android.wifitrackerlib.NetworkDetailsTracker;
+import com.android.wifitrackerlib.WifiEntry;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
@@ -99,10 +98,12 @@ import org.robolectric.shadows.ShadowToast;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;
+// TODO(b/143326832): Should add test cases for connect button.
+// TODO(b/143326832): WifiEntry is not mature, should remove @Ignore after it's constructed.
+@Ignore
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowDevicePolicyManager.class, ShadowEntityHeaderController.class})
public class WifiDetailPreferenceController2Test {
@@ -115,14 +116,15 @@ public class WifiDetailPreferenceController2Test {
private static final String MAC_ADDRESS = "01:23:45:67:89:ab";
private static final String RANDOMIZED_MAC_ADDRESS = "RANDOMIZED_MAC_ADDRESS";
private static final String FACTORY_MAC_ADDRESS = "FACTORY_MAC_ADDRESS";
- private static final String SECURITY = "None";
+ // TODO(b/143326832): Add WifiEntry#getSecurityString
+ //private static final String SECURITY = "None";
private static final String FQDN = "fqdn";
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private PreferenceScreen mMockScreen;
@Mock
- private AccessPoint mMockAccessPoint;
+ private WifiEntry mMockWifiEntry;
@Mock
private FragmentActivity mMockActivity;
@Mock
@@ -140,7 +142,7 @@ public class WifiDetailPreferenceController2Test {
@Mock
private WifiManager mMockWifiManager;
@Mock
- private WifiTracker mMockWifiTracker;
+ private NetworkDetailsTracker mMockNetworkDetailsTracker;
@Mock
private MetricsFeatureProvider mMockMetricsFeatureProvider;
@Mock
@@ -258,10 +260,10 @@ public class WifiDetailPreferenceController2Test {
mLifecycle = new Lifecycle(mLifecycleOwner);
when(mContext.getPackageManager()).thenReturn(mMockPackageManager);
- when(mMockAccessPoint.getConfig()).thenReturn(mMockWifiConfig);
- when(mMockAccessPoint.getLevel()).thenReturn(LEVEL);
- when(mMockAccessPoint.getSecurityString(false)).thenReturn(SECURITY);
- when(mMockAccessPoint.getSsidStr()).thenReturn(SSID);
+ when(mMockWifiEntry.getLevel()).thenReturn(LEVEL);
+ // TODO(b/143326832): Add WifiEntry#getSecurityString
+ //when(mMockWifiEntry.getSecurityString(false)).thenReturn(SECURITY);
+ when(mMockWifiEntry.getTitle()).thenReturn(SSID);
when(mMockConnectivityManager.getNetworkInfo(any(Network.class)))
.thenReturn(mMockNetworkInfo);
doNothing().when(mMockConnectivityManager).registerNetworkCallback(
@@ -293,44 +295,30 @@ public class WifiDetailPreferenceController2Test {
}
private void setUpForConnectedNetwork() {
- when(mMockAccessPoint.isActive()).thenReturn(true);
- ArrayList list = new ArrayList<>();
- list.add(mMockAccessPoint);
- when(mMockWifiTracker.getAccessPoints()).thenReturn(list);
- WifiTrackerFactory.setTestingWifiTracker(mMockWifiTracker);
- when(mMockAccessPoint.matches(any(AccessPoint.class))).thenReturn(true);
- when(mMockAccessPoint.isReachable()).thenReturn(true);
+ when(mMockNetworkDetailsTracker.getWifiEntry()).thenReturn(mMockWifiEntry);
+ when(mMockWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED);
mController = newWifiDetailPreferenceController2();
}
private void setUpForDisconnectedNetwork() {
- when(mMockAccessPoint.isActive()).thenReturn(false);
- ArrayList list = new ArrayList<>();
- list.add(mMockAccessPoint);
- when(mMockWifiTracker.getAccessPoints()).thenReturn(list);
- WifiTrackerFactory.setTestingWifiTracker(mMockWifiTracker);
- when(mMockAccessPoint.matches(any(AccessPoint.class))).thenReturn(true);
- when(mMockAccessPoint.isReachable()).thenReturn(true);
+ when(mMockNetworkDetailsTracker.getWifiEntry()).thenReturn(mMockWifiEntry);
+ when(mMockWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_DISCONNECTED);
mController = newWifiDetailPreferenceController2();
}
private void setUpForNotInRangeNetwork() {
- when(mMockAccessPoint.isActive()).thenReturn(false);
- ArrayList list = new ArrayList<>();
- list.add(mMockAccessPoint);
- when(mMockWifiTracker.getAccessPoints()).thenReturn(list);
- WifiTrackerFactory.setTestingWifiTracker(mMockWifiTracker);
- when(mMockAccessPoint.matches(any(AccessPoint.class))).thenReturn(false);
- when(mMockAccessPoint.isReachable()).thenReturn(false);
+ when(mMockWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_DISCONNECTED);
+ when(mMockNetworkDetailsTracker.getWifiEntry()).thenReturn(mMockWifiEntry);
+ when(mMockWifiEntry.getLevel()).thenReturn(WifiEntry.WIFI_LEVEL_UNREACHABLE);
mController = newWifiDetailPreferenceController2();
}
private WifiDetailPreferenceController2 newWifiDetailPreferenceController2() {
- return new WifiDetailPreferenceController2(
- mMockAccessPoint,
+ return spy(new WifiDetailPreferenceController2(
+ mMockWifiEntry,
mMockConnectivityManager,
mContext,
mMockFragment,
@@ -338,7 +326,7 @@ public class WifiDetailPreferenceController2Test {
mLifecycle,
mMockWifiManager,
mMockMetricsFeatureProvider,
- mMockIconInjector);
+ mMockIconInjector));
}
private void setupMockedPreferenceScreen() {
@@ -392,6 +380,7 @@ public class WifiDetailPreferenceController2Test {
assertThat(mController.isAvailable()).isTrue();
}
+ /* TODO(b/143326832): Add WifiEntry#getSecurityString
@Test
public void securityPreference_stringShouldBeSet() {
setUpForConnectedNetwork();
@@ -399,6 +388,7 @@ public class WifiDetailPreferenceController2Test {
verify(mMockSecurityPref).setSummary(SECURITY);
}
+ */
@Test
public void latestWifiInfo_shouldBeFetchedInDisplayPreferenceForConnectedNetwork() {
@@ -506,7 +496,7 @@ public class WifiDetailPreferenceController2Test {
public void entityHeader_shouldHaveLabelSetToTitle() {
setUpForConnectedNetwork();
String label = "title";
- when(mMockAccessPoint.getTitle()).thenReturn(label);
+ when(mMockWifiEntry.getTitle()).thenReturn(label);
displayAndResume();
@@ -517,8 +507,7 @@ public class WifiDetailPreferenceController2Test {
public void entityHeader_shouldHaveSummarySet() {
setUpForConnectedNetwork();
String summary = "summary";
- when(mMockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
- .thenReturn(summary);
+ when(mMockWifiEntry.getSummary()).thenReturn(summary);
displayAndResume();
@@ -531,7 +520,7 @@ public class WifiDetailPreferenceController2Test {
displayAndResume();
- verify(mMockAccessPoint, times(1)).getSettingsSummary(true /*convertSavedAsDisconnected*/);
+ verify(mMockWifiEntry, times(1)).getSummary();
}
@Test
@@ -674,6 +663,7 @@ public class WifiDetailPreferenceController2Test {
verify(mMockRxLinkSpeedPref, never()).setSummary(any(String.class));
}
+ /* TODO(b/143326832): Support Passpoint test cases while WifiTracker2 supports it.
@Test
public void ssidPref_shouldHaveDetailTextSetForPasspointR1() {
setUpForConnectedNetwork();
@@ -708,6 +698,7 @@ public class WifiDetailPreferenceController2Test {
verify(mMockSsidPref).setVisible(false);
}
+ */
@Test
public void macAddressPref_shouldVisibleForConnectedNetwork() {
@@ -958,8 +949,7 @@ public class WifiDetailPreferenceController2Test {
.thenReturn(new NetworkCapabilities(nc));
String summary = "Connected, no Internet";
- when(mMockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
- .thenReturn(summary);
+ when(mMockWifiEntry.getSummary()).thenReturn(summary);
InOrder inOrder = inOrder(mMockHeaderController);
displayAndResume();
@@ -968,8 +958,7 @@ public class WifiDetailPreferenceController2Test {
// Check that an irrelevant capability update does not update the access point summary, as
// doing so could cause unnecessary jank...
summary = "Connected";
- when(mMockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
- .thenReturn(summary);
+ when(mMockWifiEntry.getSummary()).thenReturn(summary);
updateNetworkCapabilities(nc);
inOrder.verify(mMockHeaderController, never()).setSummary(any(CharSequence.class));
@@ -979,8 +968,7 @@ public class WifiDetailPreferenceController2Test {
inOrder.verify(mMockHeaderController).setSummary(summary);
summary = "Connected, no Internet";
- when(mMockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
- .thenReturn(summary);
+ when(mMockWifiEntry.getSummary()).thenReturn(summary);
// Another irrelevant update won't cause the UI to refresh...
updateNetworkCapabilities(nc);
@@ -993,16 +981,14 @@ public class WifiDetailPreferenceController2Test {
// UI will be refreshed when private DNS is broken.
summary = "Private DNS server cannot be accessed";
- when(mMockAccessPoint.getSettingsSummary(true /* convertSavedAsDisconnected */))
- .thenReturn(summary);
+ when(mMockWifiEntry.getSummary()).thenReturn(summary);
nc.setPrivateDnsBroken(true);
updateNetworkCapabilities(nc);
inOrder.verify(mMockHeaderController).setSummary(summary);
// UI will be refreshed when device connects to a partial connectivity network.
summary = "Limited connection";
- when(mMockAccessPoint.getSettingsSummary(true /*convertSavedAsDisconnected*/))
- .thenReturn(summary);
+ when(mMockWifiEntry.getSummary()).thenReturn(summary);
nc.addCapability(NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY);
updateNetworkCapabilities(nc);
inOrder.verify(mMockHeaderController).setSummary(summary);
@@ -1017,7 +1003,7 @@ public class WifiDetailPreferenceController2Test {
@Test
public void canForgetNetwork_shouldInvisibleIfWithoutConfiguration() {
setUpForConnectedNetwork();
- when(mMockAccessPoint.getConfig()).thenReturn(null);
+ when(mMockWifiEntry.isSaved()).thenReturn(false);
mController = newWifiDetailPreferenceController2();
displayAndResume();
@@ -1029,7 +1015,7 @@ public class WifiDetailPreferenceController2Test {
public void canForgetNetwork_ephemeral() {
setUpForConnectedNetwork();
when(mMockWifiInfo.isEphemeral()).thenReturn(true);
- when(mMockAccessPoint.getConfig()).thenReturn(null);
+ when(mMockWifiEntry.isSaved()).thenReturn(false);
displayAndResume();
@@ -1057,7 +1043,7 @@ public class WifiDetailPreferenceController2Test {
@Test
public void canShareNetwork_shouldInvisibleIfWithoutConfiguration() {
setUpForConnectedNetwork();
- when(mMockAccessPoint.getConfig()).thenReturn(null);
+ when(mMockWifiEntry.isSaved()).thenReturn(false);
displayAndResume();
@@ -1129,6 +1115,7 @@ public class WifiDetailPreferenceController2Test {
.action(mMockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET);
}
+ /* TODO(b/143326832): Support Passpoint test cases while WifiTracker2 supports it.
@Test
public void forgetNetwork_shouldShowDialog() {
setUpForConnectedNetwork();
@@ -1146,6 +1133,7 @@ public class WifiDetailPreferenceController2Test {
.action(mMockActivity, MetricsProto.MetricsEvent.ACTION_WIFI_FORGET);
verify(spyController).showConfirmForgetDialog();
}
+ */
@Test
public void networkStateChangedIntent_shouldRefetchInfo() {
@@ -1344,7 +1332,7 @@ public class WifiDetailPreferenceController2Test {
when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
InOrder inOrder = inOrder(mMockButtonsPref);
String label = "title";
- when(mMockAccessPoint.getTitle()).thenReturn(label);
+ when(mMockWifiEntry.getTitle()).thenReturn(label);
setUpForToast();
displayAndResume();
@@ -1360,8 +1348,7 @@ public class WifiDetailPreferenceController2Test {
verifyConnectBtnSetUpAsConnecting(inOrder);
// update as connected
- when(mMockAccessPoint.isActive()).thenReturn(true);
- mController.updateAccessPoint();
+ when(mMockWifiEntry.getConnectedState()).thenReturn(WifiEntry.CONNECTED_STATE_CONNECTED);
// check connect button invisible, be init as default state and toast success message
verifyConnectBtnBeInitAsDefault(inOrder);
@@ -1419,364 +1406,21 @@ public class WifiDetailPreferenceController2Test {
}
@Test
- public void testConnectButton_clickConnectButTimeout_displayFailMessage() {
- setUpForDisconnectedNetwork();
- when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
- InOrder inOrder = inOrder(mMockButtonsPref);
- setUpForToast();
-
- displayAndResume();
-
- // check connect button exist
- verifyConnectBtnSetUpAsVisible(inOrder);
-
- // click connect button
- mController.connectNetwork();
-
- // check display button as connecting
- verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
- verifyConnectBtnSetUpAsConnecting(inOrder);
-
- // update as failed
- mController.sTimer.onFinish();
-
- // check connect button visible, be init as default and toast failed message
- verifyConnectBtnBeInitAsDefault(inOrder);
- inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
- assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
- mContext.getString(R.string.wifi_failed_connect_message));
- }
-
- @Test
- public void testConnectButton_clickConnectButTimeout_displayNotInRangeMessage() {
- setUpForNotInRangeNetwork();
- when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
- InOrder inOrder = inOrder(mMockButtonsPref);
- setUpForToast();
-
- displayAndResume();
-
- // check connect button exist
- verifyConnectBtnSetUpAsVisible(inOrder);
-
- // click connect button
- mController.connectNetwork();
-
- // check display button as connecting
- verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
- verifyConnectBtnSetUpAsConnecting(inOrder);
-
- // update as failed
- mController.sTimer.onFinish();
-
- // check connect button visible, be init as default and toast failed message
- verifyConnectBtnBeInitAsDefault(inOrder);
- inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
- assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
- mContext.getString(R.string.wifi_not_in_range_message));
- }
-
- @Test
- public void testConnectButton_clickConnectWhenWiFiDisabled_displaySuccessMessage() {
- setUpForDisconnectedNetwork();
- when(mMockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
- InOrder inOrder = inOrder(mMockButtonsPref);
- String label = "title";
- when(mMockAccessPoint.getTitle()).thenReturn(label);
- setUpForToast();
-
- displayAndResume();
-
- // check connect button exist
- verifyConnectBtnSetUpAsVisible(inOrder);
-
- // click connect button
- mController.connectNetwork();
-
- // check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
- verify(mMockWifiManager, times(1)).setWifiEnabled(true);
- verifyConnectBtnSetUpAsConnecting(inOrder);
- assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
- mContext.getString(R.string.wifi_turned_on_message));
-
- // notify Wi-Fi enabled
- mController.mWifiListener.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
-
- // check had connect network and icon display as expected
- verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
- verifyConnectBtnSetUpAsConnecting(inOrder);
-
- // update as connected
- when(mMockAccessPoint.isActive()).thenReturn(true);
- mController.updateAccessPoint();
-
- // check connect button invisible, be init as default state and toast success message
- verifyConnectBtnBeInitAsDefault(inOrder);
- inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(false);
- assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
- mContext.getString(R.string.wifi_connected_to_message, label));
- }
-
- @Test
- public void testConnectButton_clickConnectWhenWiFiDisabled_failedToConnectWiFi() {
- setUpForDisconnectedNetwork();
- when(mMockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
- InOrder inOrder = inOrder(mMockButtonsPref);
- setUpForToast();
-
- displayAndResume();
-
- // check connect button exist
- verifyConnectBtnSetUpAsVisible(inOrder);
-
- // click connect button
- mController.connectNetwork();
-
- // check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
- verify(mMockWifiManager, times(1)).setWifiEnabled(true);
- verifyConnectBtnSetUpAsConnecting(inOrder);
- assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
- mContext.getString(R.string.wifi_turned_on_message));
-
- // notify Wi-Fi enabled
- mController.mWifiListener.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
-
- // check had connect network and icon display as expected
- verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
- verifyConnectBtnSetUpAsConnecting(inOrder);
-
- // update as failed
- mController.sTimer.onFinish();
-
- // check connect button visible, be init as default and toast failed message
- verifyConnectBtnBeInitAsDefault(inOrder);
- inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
- assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
- mContext.getString(R.string.wifi_failed_connect_message));
- }
-
- @Test
- public void
- testConnectButton_clickConnectWhenWiFiDisabled_failedToConnectWifiBecauseNotInRange() {
- setUpForNotInRangeNetwork();
- when(mMockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
- InOrder inOrder = inOrder(mMockButtonsPref);
- setUpForToast();
-
- displayAndResume();
-
- // check connect button exist
- verifyConnectBtnSetUpAsVisible(inOrder);
-
- // click connect button
- mController.connectNetwork();
-
- // check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
- verify(mMockWifiManager, times(1)).setWifiEnabled(true);
- verifyConnectBtnSetUpAsConnecting(inOrder);
- assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
- mContext.getString(R.string.wifi_turned_on_message));
-
- // notify Wi-Fi enabled
- mController.mWifiListener.onWifiStateChanged(WifiManager.WIFI_STATE_ENABLED);
-
- // check had connect network and icon display as expected
- verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
- verifyConnectBtnSetUpAsConnecting(inOrder);
-
- // update as failed
- mController.sTimer.onFinish();
-
- // check connect button visible, be init as default and toast failed message
- verifyConnectBtnBeInitAsDefault(inOrder);
- inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
- assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
- mContext.getString(R.string.wifi_not_in_range_message));
- }
-
- @Test
- public void testConnectButton_clickConnectWhenWiFiDisabled_failedToEnableWifi() {
- setUpForDisconnectedNetwork();
- when(mMockWifiManager.isWifiEnabled()).thenReturn(false); // wifi disabled
- InOrder inOrder = inOrder(mMockButtonsPref);
- setUpForToast();
-
- displayAndResume();
-
- // check connect button exist
- verifyConnectBtnSetUpAsVisible(inOrder);
-
- // click connect button
- mController.connectNetwork();
-
- // check turn on Wi-Fi, display button as connecting and toast turn on Wi-Fi message
- verify(mMockWifiManager, times(1)).setWifiEnabled(true);
- verifyConnectBtnSetUpAsConnecting(inOrder);
- assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
- mContext.getString(R.string.wifi_turned_on_message));
-
- // notify turn on Wi-Fi failed
- mController.sTimer.onFinish();
-
- // check connect button visible, be init as default and toast failed message
- verifyConnectBtnBeInitAsDefault(inOrder);
- inOrder.verify(mMockButtonsPref, times(1)).setButton3Visible(true);
- assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(
- mContext.getString(R.string.wifi_failed_connect_message));
- }
-
- @Test
- public void testConnectButton_clickConnectAndBackKey_ignoreTimeoutEvent() {
- setUpForDisconnectedNetwork();
- when(mMockWifiManager.isWifiEnabled()).thenReturn(true);
- InOrder inOrder = inOrder(mMockButtonsPref);
- setUpForToast();
-
- displayAndResume();
-
- // check connect button exist
- verifyConnectBtnSetUpAsVisible(inOrder);
-
- // click connect button
- mController.connectNetwork();
-
- // check display button as connecting
- verify(mMockWifiManager, times(1)).connect(anyInt(), any(WifiManager.ActionListener.class));
- verifyConnectBtnSetUpAsConnecting(inOrder);
-
- // leave detail page
- when(mMockFragment.getActivity()).thenReturn(null);
-
- // timeout happened
- mController.sTimer.onFinish();
-
- // check connect button visible, be init as default and toast failed message
- inOrder.verify(mMockButtonsPref, never()).setButton3Text(R.string.wifi_connect);
- inOrder.verify(mMockButtonsPref, never()).setButton3Icon(R.drawable.ic_settings_wireless);
- inOrder.verify(mMockButtonsPref, never()).setButton3Enabled(true);
- inOrder.verify(mMockButtonsPref, never()).setButton3Visible(true);
- assertThat(ShadowToast.shownToastCount()).isEqualTo(0);
- }
-
- @Test
- public void updateAccessPoint_returnFalseForNothingChanged() {
- setUpForDisconnectedNetwork();
-
- displayAndResume();
- boolean changed = mController.updateAccessPoint();
-
- assertThat(changed).isFalse();
- }
-
- @Test
- public void updateAccessPoint_returnTrueForSignalLevelChanged() {
- setUpForDisconnectedNetwork();
-
- displayAndResume();
-
- // Level changed
- when(mMockAccessPoint.getLevel()).thenReturn(LEVEL + 1);
- boolean changed = mController.updateAccessPoint();
-
- assertThat(changed).isTrue();
- }
-
- @Test
- public void updateAccessPoint_returnTrueForChangeAsNotInRange() {
- setUpForDisconnectedNetwork();
-
- displayAndResume();
-
- // change as not in range
- when(mMockAccessPoint.matches(any(AccessPoint.class))).thenReturn(false);
- boolean changed = mController.updateAccessPoint();
-
- assertThat(changed).isTrue();
- }
-
- @Test
- public void updateAccessPoint_returnTrueForChangeAsInRange() {
- setUpForNotInRangeNetwork();
-
- displayAndResume();
-
- // change as in range
- when(mMockAccessPoint.matches(any(AccessPoint.class))).thenReturn(true);
- boolean changed = mController.updateAccessPoint();
-
- assertThat(changed).isTrue();
- }
-
- @Test
- public void updateAccessPoint_returnTrueForChangeAsConnected() {
- setUpForDisconnectedNetwork();
-
- displayAndResume();
-
- // change as connected
- when(mMockAccessPoint.isActive()).thenReturn(true);
- boolean changed = mController.updateAccessPoint();
-
- assertThat(changed).isTrue();
- }
-
- @Test
- public void updateAccessPoint_returnTrueForChangeAsDisconnected() {
- setUpForConnectedNetwork();
-
- displayAndResume();
-
- // change as disconnected
- when(mMockAccessPoint.isActive()).thenReturn(false);
- boolean changed = mController.updateAccessPoint();
-
- assertThat(changed).isTrue();
- }
-
- @Test
- public void updateAccessPoint_returnTrueForAccessPointUpdated() {
- setUpForConnectedNetwork();
-
- displayAndResume();
-
- // change as disconnected
- when(mMockAccessPoint.update(mMockWifiConfig, mMockWifiInfo, mMockNetworkInfo))
- .thenReturn(true);
- boolean changed = mController.updateAccessPoint();
-
- assertThat(changed).isTrue();
- }
-
- @Test
- public void testRefreshRssiViews_shouldNotUpdateIfLevelIsSameForConnectedNetwork() {
+ public void testRefreshRssiViews_shouldOnUpdated() {
setUpForConnectedNetwork();
displayAndResume();
mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
- verify(mMockAccessPoint, times(3)).getLevel();
- verify(mMockIconInjector, times(1)).getIcon(anyInt());
- }
-
- @Test
- public void testRefreshRssiViews_shouldUpdateOnLevelChangeForConnectedNetwork() {
- setUpForConnectedNetwork();
- displayAndResume();
-
- when(mMockAccessPoint.getLevel()).thenReturn(0);
- mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
-
- verify(mMockAccessPoint, times(4)).getLevel();
- verify(mMockIconInjector, times(2)).getIcon(anyInt());
+ verify(mController).onUpdated();
}
@Test
public void testRefreshRssiViews_shouldNotUpdateForNotInRangeNetwork() {
setUpForNotInRangeNetwork();
-
displayAndResume();
- when(mMockAccessPoint.getLevel()).thenReturn(0);
+ when(mMockWifiEntry.getLevel()).thenReturn(0);
mContext.sendBroadcast(new Intent(WifiManager.RSSI_CHANGED_ACTION));
verify(mMockSignalStrengthPref, times(2)).setVisible(false);
@@ -1858,6 +1502,7 @@ public class WifiDetailPreferenceController2Test {
verify(mMockMacAddressPref).setTitle(R.string.wifi_advanced_device_mac_address_title);
}
+ /* TODO(b/143326832): Support Passpoint test cases while WifiTracker2 supports it.
@Test
public void entityHeader_expiredPasspointR1_shouldHandleExpiration() {
when(mMockAccessPoint.isPasspoint()).thenReturn(true);
@@ -1872,6 +1517,7 @@ public class WifiDetailPreferenceController2Test {
verify(mMockButtonsPref, atLeastOnce()).setButton3Visible(false);
verify(mMockHeaderController).setSummary(expireSummary);
}
+ */
private ActionButtonsPreference createMock() {
final ActionButtonsPreference pref = mock(ActionButtonsPreference.class);
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2Test.java
index 517c96a3159..edb260f0ec4 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiMeteredPreferenceController2Test.java
@@ -21,11 +21,11 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import android.content.Context;
-import android.net.wifi.WifiConfiguration;
import androidx.preference.DropDownPreference;
import com.android.settings.R;
+import com.android.wifitrackerlib.WifiEntry;
import org.junit.Before;
import org.junit.Test;
@@ -42,7 +42,7 @@ public class WifiMeteredPreferenceController2Test {
private static final int METERED_OVERRIDE_NOT_METERED = 2;
@Mock
- private WifiConfiguration mWifiConfiguration;
+ private WifiEntry mWifiEntry;
private WifiMeteredPreferenceController2 mPreferenceController;
private Context mContext;
@@ -53,7 +53,7 @@ public class WifiMeteredPreferenceController2Test {
mContext = RuntimeEnvironment.application;
mPreferenceController = spy(
- new WifiMeteredPreferenceController2(mContext, mWifiConfiguration));
+ new WifiMeteredPreferenceController2(mContext, mWifiEntry));
mDropDownPreference = new DropDownPreference(mContext);
mDropDownPreference.setEntries(R.array.wifi_metered_entries);
mDropDownPreference.setEntryValues(R.array.wifi_metered_values);
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java
index 91cc01e3500..93a0172bf42 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiPrivacyPreferenceController2Test.java
@@ -20,13 +20,14 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import android.content.Context;
-import android.net.wifi.WifiConfiguration;
import androidx.preference.DropDownPreference;
import com.android.settings.R;
+import com.android.wifitrackerlib.WifiEntry;
import org.junit.Before;
import org.junit.Test;
@@ -38,11 +39,11 @@ import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class WifiPrivacyPreferenceController2Test {
- private static final int PRIVACY_RANDOMIZED = WifiConfiguration.RANDOMIZATION_PERSISTENT;
- private static final int PRIVACY_TRUSTED = WifiConfiguration.RANDOMIZATION_NONE;
+ private static final int PRIVACY_RANDOMIZED = WifiEntry.PRIVACY_RANDOMIZED_MAC;
+ private static final int PRIVACY_TRUSTED = WifiEntry.PRIVACY_DEVICE_MAC;
@Mock
- private WifiConfiguration mWifiConfiguration;
+ private WifiEntry mWifiEntry;
private WifiPrivacyPreferenceController2 mPreferenceController;
private Context mContext;
@@ -55,7 +56,7 @@ public class WifiPrivacyPreferenceController2Test {
WifiPrivacyPreferenceController2 preferenceController =
new WifiPrivacyPreferenceController2(mContext);
- preferenceController.setWifiConfiguration(mWifiConfiguration);
+ preferenceController.setWifiEntry(mWifiEntry);
mPreferenceController = spy(preferenceController);
mDropDownPreference = new DropDownPreference(mContext);
mDropDownPreference.setEntries(R.array.wifi_privacy_entries);
@@ -89,38 +90,23 @@ public class WifiPrivacyPreferenceController2Test {
@Test
public void testController_resilientToNullConfig() {
mPreferenceController = spy(new WifiPrivacyPreferenceController2(mContext));
+ mPreferenceController.setWifiEntry(mWifiEntry);
mPreferenceController.getRandomizationValue();
mPreferenceController.onPreferenceChange(mDropDownPreference, "1");
}
@Test
- public void testUpdateState_isNotEphemeralNetwork_shouldBeSelectable() {
- mPreferenceController.setIsEphemeral(false);
+ public void testUpdateState_canSetPrivacy_shouldBeSelectable() {
+ when(mWifiEntry.canSetPrivacy()).thenReturn(true);
mPreferenceController.updateState(mDropDownPreference);
assertThat(mDropDownPreference.isSelectable()).isTrue();
}
@Test
- public void testUpdateState_isEphemeralNetwork_shouldNotSelectable() {
- mPreferenceController.setIsEphemeral(true);
- mPreferenceController.updateState(mDropDownPreference);
-
- assertThat(mDropDownPreference.isSelectable()).isFalse();
- }
-
- @Test
- public void testUpdateState_isNotPasspointNetwork_shouldBeSelectable() {
- mPreferenceController.setIsPasspoint(false);
- mPreferenceController.updateState(mDropDownPreference);
-
- assertThat(mDropDownPreference.isSelectable()).isTrue();
- }
-
- @Test
- public void testUpdateState_isPasspointNetwork_shouldNotSelectable() {
- mPreferenceController.setIsPasspoint(true);
+ public void testUpdateState_canNotSetPrivacy_shouldNotSelectable() {
+ when(mWifiEntry.canSetPrivacy()).thenReturn(false);
mPreferenceController.updateState(mDropDownPreference);
assertThat(mDropDownPreference.isSelectable()).isFalse();