summaryrefslogtreecommitdiff
path: root/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
diff options
context:
space:
mode:
Diffstat (limited to 'libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java')
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java62
1 files changed, 36 insertions, 26 deletions
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
index e464090a5..d704d395c 100644
--- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
+++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java
@@ -42,7 +42,6 @@ import android.net.wifi.sharedconnectivity.app.KnownNetworkConnectionStatus;
import android.net.wifi.sharedconnectivity.app.SharedConnectivityClientCallback;
import android.net.wifi.sharedconnectivity.app.SharedConnectivityManager;
import android.net.wifi.sharedconnectivity.app.SharedConnectivitySettingsState;
-import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.telephony.SubscriptionManager;
@@ -92,10 +91,8 @@ import java.util.concurrent.Executor;
public class BaseWifiTracker {
private final String mTag;
- private static boolean sVerboseLogging;
-
- public static boolean isVerboseLoggingEnabled() {
- return BaseWifiTracker.sVerboseLogging;
+ public boolean isVerboseLoggingEnabled() {
+ return mInjector.isVerboseLoggingEnabled();
}
private int mWifiState = WifiManager.WIFI_STATE_DISABLED;
@@ -192,18 +189,20 @@ public class BaseWifiTracker {
@WorkerThread
public void onCapabilitiesChanged(@NonNull Network network,
@NonNull NetworkCapabilities networkCapabilities) {
- List<Network> underlyingNetworks =
- networkCapabilities.getUnderlyingNetworks();
+ // If the default network has an underlying Wi-Fi network (e.g. it's
+ // a VPN), treat the Wi-Fi network as the default network.
+ List<Network> underlyingNetworks = BuildCompat.isAtLeastT()
+ ? networkCapabilities.getUnderlyingNetworks() : null;
if (underlyingNetworks != null) {
- Network currentWifiNetwork = mWifiManager.getCurrentNetwork();
- if (underlyingNetworks.contains(currentWifiNetwork)) {
- // If the default network has an underlying Wi-Fi network (e.g. it's
- // a VPN), treat the Wi-Fi network as the default network.
- handleDefaultNetworkCapabilitiesChanged(currentWifiNetwork,
- new NetworkCapabilities.Builder(networkCapabilities)
- .setTransportInfo(mWifiManager.getConnectionInfo())
- .build());
- return;
+ for (Network underlyingNetwork : underlyingNetworks) {
+ NetworkCapabilities underlyingNetworkCapabilities =
+ mConnectivityManager.getNetworkCapabilities(underlyingNetwork);
+ if (underlyingNetworkCapabilities != null
+ && underlyingNetworkCapabilities.hasTransport(TRANSPORT_WIFI)) {
+ handleDefaultNetworkCapabilitiesChanged(
+ underlyingNetwork, underlyingNetworkCapabilities);
+ return;
+ }
}
}
handleDefaultNetworkCapabilitiesChanged(network, networkCapabilities);
@@ -345,9 +344,6 @@ public class BaseWifiTracker {
BaseWifiTracker.this.onDestroy();
}
};
- if (lifecycle != null) {
- lifecycle.addObserver(mLifecycleObserver);
- }
mContext = context;
mWifiManager = wifiManager;
mConnectivityManager = connectivityManager;
@@ -367,12 +363,9 @@ public class BaseWifiTracker {
mScanResultUpdater = new ScanResultUpdater(clock,
maxScanAgeMillis + scanIntervalMillis);
mScanner = new BaseWifiTracker.Scanner(workerHandler.getLooper());
- if (mContext.getResources().getBoolean(
- R.bool.wifitrackerlib_enable_verbose_logging_for_userdebug)
- && Build.TYPE.equals("userdebug")) {
- sVerboseLogging = true;
- } else {
- sVerboseLogging = mWifiManager.isVerboseLoggingEnabled();
+
+ if (lifecycle != null) { // Need to add after mScanner is initialized.
+ lifecycle.addObserver(mLifecycleObserver);
}
}
@@ -383,7 +376,7 @@ public class BaseWifiTracker {
mIsScanningDisabled = true;
// This method indicates SystemUI usage, which shouldn't output verbose logs since it's
// always up.
- sVerboseLogging = false;
+ mInjector.disableVerboseLogging();
}
/**
@@ -838,6 +831,7 @@ public class BaseWifiTracker {
Log.v(mTag, "Issuing scan request from WifiScanner");
}
wifiScanner.startScan(scanSettings, mFirstScanListener);
+ notifyOnScanRequested();
return;
} else {
Log.e(mTag, "Failed to retrieve WifiScanner!");
@@ -872,6 +866,7 @@ public class BaseWifiTracker {
// Remove any pending scanLoops in case possiblyStartScanning was called more than once.
removeCallbacksAndMessages(null);
mWifiManager.startScan();
+ notifyOnScanRequested();
postDelayed(this::scanLoop, mScanIntervalMillis);
}
}
@@ -894,6 +889,16 @@ public class BaseWifiTracker {
}
/**
+ * Posts onScanRequested callback on the main thread.
+ */
+ @WorkerThread
+ private void notifyOnScanRequested() {
+ if (mListener != null) {
+ mMainHandler.post(mListener::onScanRequested);
+ }
+ }
+
+ /**
* Base callback handling Wi-Fi state changes
*
* Subclasses should extend this for their own needs.
@@ -904,5 +909,10 @@ public class BaseWifiTracker {
*/
@MainThread
void onWifiStateChanged();
+
+ @MainThread
+ default void onScanRequested() {
+ // Do nothing.
+ }
}
}