diff options
Diffstat (limited to 'libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java')
-rw-r--r-- | libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java | 62 |
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. + } } } |