summaryrefslogtreecommitdiff
path: root/libs/WifiTrackerLib/src/com/android/wifitrackerlib
diff options
context:
space:
mode:
authorQuang Luong <qal@google.com>2022-11-16 19:59:55 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-11-16 19:59:55 +0000
commit59e0d25be505a352989b607a7f21011e18a50348 (patch)
treeb7f0ecfc293dc032e93b1a0d513b71dd0329a540 /libs/WifiTrackerLib/src/com/android/wifitrackerlib
parentf524ba68d22e51965b6b554d629e1f4e280ecefd (diff)
parent87210af36547e728a554cc3bbd5ece70a1e7679e (diff)
downloadwifi-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')
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/BaseWifiTracker.java33
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/NetworkDetailsTracker.java11
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/PasspointWifiEntry.java3
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/SavedNetworkTracker.java11
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/StandardWifiEntry.java3
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/Utils.java16
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiEntry.java30
-rw-r--r--libs/WifiTrackerLib/src/com/android/wifitrackerlib/WifiPickerTracker.java14
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);