diff options
author | Quang Luong <qal@google.com> | 2022-11-16 19:59:55 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2022-11-16 19:59:55 +0000 |
commit | 59e0d25be505a352989b607a7f21011e18a50348 (patch) | |
tree | b7f0ecfc293dc032e93b1a0d513b71dd0329a540 /libs/WifiTrackerLib/src/com/android/wifitrackerlib | |
parent | f524ba68d22e51965b6b554d629e1f4e280ecefd (diff) | |
parent | 87210af36547e728a554cc3bbd5ece70a1e7679e (diff) | |
download | wifi-59e0d25be505a352989b607a7f21011e18a50348.tar.gz |
Show "Checking for internet access..." if network not validated yet am: 1942e8b658 am: 87210af365
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/opt/net/wifi/+/20389791
Change-Id: Id3fd4fd7feccb28b672c6ab108b6b21a0ed2dc63
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'libs/WifiTrackerLib/src/com/android/wifitrackerlib')
8 files changed, 104 insertions, 17 deletions
diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java index e75869a72..49bd990b0 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java @@ -24,6 +24,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.net.ConnectivityDiagnosticsManager; import android.net.ConnectivityManager; import android.net.LinkProperties; import android.net.Network; @@ -129,6 +130,7 @@ public class BaseWifiTracker implements LifecycleObserver { protected final Context mContext; protected final WifiManager mWifiManager; protected final ConnectivityManager mConnectivityManager; + protected final ConnectivityDiagnosticsManager mConnectivityDiagnosticsManager; protected final Handler mMainHandler; protected final Handler mWorkerHandler; protected final long mMaxScanAgeMillis; @@ -137,6 +139,7 @@ public class BaseWifiTracker implements LifecycleObserver { protected boolean mIsWifiValidated; protected boolean mIsWifiDefaultRoute; protected boolean mIsCellDefaultRoute; + protected Network mPrimaryNetwork; // Network request for listening on changes to Wifi link properties and network capabilities // such as captive portal availability. @@ -156,6 +159,7 @@ public class BaseWifiTracker implements LifecycleObserver { mConnectivityManager.getNetworkCapabilities(network))) { return; } + mPrimaryNetwork = network; handleLinkPropertiesChanged(lp); } @@ -166,6 +170,7 @@ public class BaseWifiTracker implements LifecycleObserver { if (!isPrimaryWifiNetwork(networkCapabilities)) { return; } + mPrimaryNetwork = network; final boolean oldWifiValidated = mIsWifiValidated; mIsWifiValidated = networkCapabilities.hasCapability(NET_CAPABILITY_VALIDATED); if (isVerboseLoggingEnabled() && mIsWifiValidated != oldWifiValidated) { @@ -182,6 +187,7 @@ public class BaseWifiTracker implements LifecycleObserver { return; } mIsWifiValidated = false; + mPrimaryNetwork = null; } }; @@ -220,6 +226,16 @@ public class BaseWifiTracker implements LifecycleObserver { } }; + private final ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback + mConnectivityDiagnosticsCallback = + new ConnectivityDiagnosticsManager.ConnectivityDiagnosticsCallback() { + @Override + public void onConnectivityReportAvailable( + @NonNull ConnectivityDiagnosticsManager.ConnectivityReport report) { + handleConnectivityReportAvailable(report); + } + }; + private boolean isPrimaryWifiNetwork(@Nullable NetworkCapabilities networkCapabilities) { if (networkCapabilities == null) { return false; @@ -278,6 +294,8 @@ public class BaseWifiTracker implements LifecycleObserver { mContext = context; mWifiManager = wifiManager; mConnectivityManager = connectivityManager; + mConnectivityDiagnosticsManager = + context.getSystemService(ConnectivityDiagnosticsManager.class); mMainHandler = mainHandler; mWorkerHandler = workerHandler; mMaxScanAgeMillis = maxScanAgeMillis; @@ -311,6 +329,8 @@ public class BaseWifiTracker implements LifecycleObserver { /* broadcastPermission */ null, mWorkerHandler); mConnectivityManager.registerNetworkCallback(mNetworkRequest, mNetworkCallback, mWorkerHandler); + mConnectivityDiagnosticsManager.registerConnectivityDiagnosticsCallback(mNetworkRequest, + command -> mWorkerHandler.post(command), mConnectivityDiagnosticsCallback); NonSdkApiWrapper.registerSystemDefaultNetworkCallback( mConnectivityManager, mDefaultNetworkCallback, mWorkerHandler); handleOnStart(); @@ -330,6 +350,8 @@ public class BaseWifiTracker implements LifecycleObserver { mContext.unregisterReceiver(mBroadcastReceiver); mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); mConnectivityManager.unregisterNetworkCallback(mDefaultNetworkCallback); + mConnectivityDiagnosticsManager.unregisterConnectivityDiagnosticsCallback( + mConnectivityDiagnosticsCallback); } catch (IllegalArgumentException e) { // Already unregistered in onDestroyed(). } @@ -347,6 +369,8 @@ public class BaseWifiTracker implements LifecycleObserver { mContext.unregisterReceiver(mBroadcastReceiver); mConnectivityManager.unregisterNetworkCallback(mNetworkCallback); mConnectivityManager.unregisterNetworkCallback(mDefaultNetworkCallback); + mConnectivityDiagnosticsManager.unregisterConnectivityDiagnosticsCallback( + mConnectivityDiagnosticsCallback); } catch (IllegalArgumentException e) { // Already unregistered in onStop() worker thread runnable. } @@ -441,6 +465,15 @@ public class BaseWifiTracker implements LifecycleObserver { } /** + * Handle network capability changes for the current connected Wifi network. + */ + @WorkerThread + protected void handleConnectivityReportAvailable( + @NonNull ConnectivityDiagnosticsManager.ConnectivityReport connectivityReport) { + // Do nothing. + } + + /** * Handle when the default route changes. Whether Wifi is the default route is stored in * mIsWifiDefaultRoute. */ diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkDetailsTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkDetailsTracker.java index f2d9efe51..47528cd43 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkDetailsTracker.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkDetailsTracker.java @@ -22,6 +22,7 @@ import static com.android.wifitrackerlib.WifiEntry.CONNECTED_STATE_CONNECTED; import android.content.Context; import android.content.Intent; +import android.net.ConnectivityDiagnosticsManager; import android.net.ConnectivityManager; import android.net.LinkProperties; import android.net.NetworkCapabilities; @@ -168,6 +169,16 @@ public abstract class NetworkDetailsTracker extends BaseWifiTracker { @WorkerThread @Override + protected void handleConnectivityReportAvailable( + @NonNull ConnectivityDiagnosticsManager.ConnectivityReport connectivityReport) { + final WifiEntry chosenEntry = getWifiEntry(); + if (chosenEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) { + chosenEntry.updateConnectivityReport(connectivityReport); + } + } + + @WorkerThread + @Override protected void handleDefaultRouteChanged() { final WifiEntry chosenEntry = getWifiEntry(); if (chosenEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) { diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java index 568afd673..18f48a4fb 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java @@ -192,7 +192,8 @@ public class PasspointWifiEntry extends WifiEntry implements WifiEntry.WifiEntry mWifiConfig, mNetworkCapabilities, mIsDefaultNetwork, - mIsLowQuality); + mIsLowQuality, + mConnectivityReport); break; default: Log.e(TAG, "getConnectedState() returned unknown state: " + connectedState); diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/SavedNetworkTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/SavedNetworkTracker.java index b59688ba1..1e4b72f70 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/SavedNetworkTracker.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/SavedNetworkTracker.java @@ -28,6 +28,7 @@ import static java.util.stream.Collectors.toMap; import android.content.Context; import android.content.Intent; +import android.net.ConnectivityDiagnosticsManager; import android.net.ConnectivityManager; import android.net.LinkProperties; import android.net.Network; @@ -307,6 +308,16 @@ public class SavedNetworkTracker extends BaseWifiTracker { } @WorkerThread + @Override + protected void handleConnectivityReportAvailable( + @NonNull ConnectivityDiagnosticsManager.ConnectivityReport connectivityReport) { + if (mConnectedWifiEntry != null + && mConnectedWifiEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) { + mConnectedWifiEntry.updateConnectivityReport(connectivityReport); + } + } + + @WorkerThread protected void handleDefaultRouteChanged() { if (mConnectedWifiEntry != null) { mConnectedWifiEntry.setIsDefaultNetwork(mIsWifiDefaultRoute); diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java index 9c4d6377d..5d7a2ebcc 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java @@ -207,7 +207,8 @@ public class StandardWifiEntry extends WifiEntry { mTargetWifiConfig, mNetworkCapabilities, mIsDefaultNetwork, - mIsLowQuality); + mIsLowQuality, + mConnectivityReport); break; default: Log.e(TAG, "getConnectedState() returned unknown state: " + connectedState); diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java index b71618746..0d61f2c43 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java @@ -26,6 +26,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.net.ConnectivityDiagnosticsManager; import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.NetworkInfo.DetailedState; @@ -229,7 +230,8 @@ public class Utils { WifiConfiguration wifiConfiguration, NetworkCapabilities networkCapabilities, boolean isDefaultNetwork, - boolean isLowQuality) { + boolean isLowQuality, + ConnectivityDiagnosticsManager.ConnectivityReport connectivityReport) { final StringJoiner sj = new StringJoiner(context.getString( R.string.wifitrackerlib_summary_separator)); @@ -255,8 +257,8 @@ public class Utils { } // For displaying network capability info, such as captive portal or no internet - String networkCapabilitiesInformation = - getCurrentNetworkCapabilitiesInformation(context, networkCapabilities); + String networkCapabilitiesInformation = getCurrentNetworkCapabilitiesInformation( + context, networkCapabilities, connectivityReport); if (!TextUtils.isEmpty(networkCapabilitiesInformation)) { sj.add(networkCapabilitiesInformation); } @@ -514,8 +516,9 @@ public class Utils { return description.toString(); } - static String getCurrentNetworkCapabilitiesInformation(Context context, - NetworkCapabilities networkCapabilities) { + static String getCurrentNetworkCapabilitiesInformation(@Nullable Context context, + @Nullable NetworkCapabilities networkCapabilities, + @Nullable ConnectivityDiagnosticsManager.ConnectivityReport connectivityReport) { if (context == null || networkCapabilities == null) { return ""; } @@ -531,6 +534,9 @@ public class Utils { } if (!networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) { + if (connectivityReport == null) { + return context.getString(R.string.wifitrackerlib_checking_for_internet_access); + } if (networkCapabilities.isPrivateDnsBroken()) { return context.getString(R.string.wifitrackerlib_private_dns_broken); } diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java index e7d99bdd7..96ded2e4d 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java @@ -23,6 +23,7 @@ import static androidx.core.util.Preconditions.checkNotNull; import static com.android.wifitrackerlib.Utils.getNetworkPart; import static com.android.wifitrackerlib.Utils.getSingleSecurityTypeFromMultipleSecurityTypes; +import android.net.ConnectivityDiagnosticsManager; import android.net.LinkAddress; import android.net.LinkProperties; import android.net.NetworkCapabilities; @@ -232,6 +233,7 @@ public class WifiEntry { protected WifiInfo mWifiInfo; protected NetworkInfo mNetworkInfo; protected NetworkCapabilities mNetworkCapabilities; + protected ConnectivityDiagnosticsManager.ConnectivityReport mConnectivityReport; protected ConnectedInfo mConnectedInfo; protected ConnectCallback mConnectCallback; @@ -241,7 +243,6 @@ public class WifiEntry { protected boolean mCalledConnect = false; protected boolean mCalledDisconnect = false; - private boolean mIsValidated; protected boolean mIsDefaultNetwork; protected boolean mIsLowQuality; @@ -327,7 +328,9 @@ public class WifiEntry { */ public boolean shouldShowXLevelIcon() { return getConnectedState() != CONNECTED_STATE_DISCONNECTED - && (!mIsValidated || !mIsDefaultNetwork) && !canSignIn(); + && mConnectivityReport != null + && (!hasInternetAccess() || !mIsDefaultNetwork) + && !canSignIn(); } /** @@ -335,7 +338,8 @@ public class WifiEntry { * Note: This does not necessarily mean the network is the default route. */ public boolean hasInternetAccess() { - return mIsValidated; + return mNetworkCapabilities != null + && mNetworkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); } /** @@ -667,8 +671,8 @@ public class WifiEntry { String getNetworkCapabilityDescription() { final StringBuilder sb = new StringBuilder(); if (getConnectedState() == CONNECTED_STATE_CONNECTED) { - sb.append("isValidated:") - .append(mIsValidated) + sb.append("hasInternet:") + .append(hasInternetAccess()) .append(", isDefaultNetwork:") .append(mIsDefaultNetwork) .append(", isLowQuality:") @@ -864,7 +868,7 @@ public class WifiEntry { mNetworkInfo = null; mNetworkCapabilities = null; mConnectedInfo = null; - mIsValidated = false; + mConnectivityReport = null; mIsDefaultNetwork = false; mIsLowQuality = false; if (mCalledDisconnect) { @@ -954,8 +958,14 @@ public class WifiEntry { return; } mConnectedInfo.networkCapabilities = mNetworkCapabilities; - mIsValidated = mNetworkCapabilities != null - && mNetworkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); + notifyOnUpdated(); + } + + // Method for WifiTracker to update a connected WifiEntry's validation status. + @WorkerThread + synchronized void updateConnectivityReport( + @Nullable ConnectivityDiagnosticsManager.ConnectivityReport connectivityReport) { + mConnectivityReport = connectivityReport; notifyOnUpdated(); } @@ -1070,8 +1080,8 @@ public class WifiEntry { .append(getConnectedState() == CONNECTED_STATE_CONNECTED ? "true" : "false") .append(",connectedInfo:") .append(getConnectedInfo()) - .append(",isValidated:") - .append(mIsValidated) + .append(",hasInternet:") + .append(hasInternetAccess()) .append(",isDefaultNetwork:") .append(mIsDefaultNetwork) .toString(); diff --git a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java index e1cc09dbd..c273c5516 100644 --- a/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java +++ b/libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java @@ -32,6 +32,7 @@ import static java.util.stream.Collectors.toMap; import android.content.Context; import android.content.Intent; +import android.net.ConnectivityDiagnosticsManager; import android.net.ConnectivityManager; import android.net.LinkProperties; import android.net.Network; @@ -338,6 +339,19 @@ public class WifiPickerTracker extends BaseWifiTracker { } @WorkerThread + @Override + protected void handleConnectivityReportAvailable( + @NonNull ConnectivityDiagnosticsManager.ConnectivityReport connectivityReport) { + if (mConnectedWifiEntry != null + && mConnectedWifiEntry.getConnectedState() == CONNECTED_STATE_CONNECTED) { + mConnectedWifiEntry.updateConnectivityReport(connectivityReport); + } + if (mMergedCarrierEntry != null) { + mMergedCarrierEntry.updateConnectivityReport(connectivityReport); + } + } + + @WorkerThread protected void handleDefaultRouteChanged() { if (mConnectedWifiEntry != null) { mConnectedWifiEntry.setIsDefaultNetwork(mIsWifiDefaultRoute); |