summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/server/connectivity/NetworkMonitor.java67
1 files changed, 57 insertions, 10 deletions
diff --git a/src/com/android/server/connectivity/NetworkMonitor.java b/src/com/android/server/connectivity/NetworkMonitor.java
index 585e38e..7cabb1e 100644
--- a/src/com/android/server/connectivity/NetworkMonitor.java
+++ b/src/com/android/server/connectivity/NetworkMonitor.java
@@ -368,7 +368,13 @@ public class NetworkMonitor extends StateMachine {
} catch (RemoteException e) {
version = 0;
}
- if (version == Build.VERSION_CODES.CUR_DEVELOPMENT) version = 0;
+ // The AIDL was freezed from Q beta 5 but it's unfreezing from R before releasing. In order
+ // to distinguish the behavior between R and Q beta 5 and before Q beta 5, add SDK and
+ // CODENAME check here. Basically, it's only expected to return 0 for Q beta 4 and below
+ // because the test result has changed.
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q
+ && Build.VERSION.CODENAME.equals("REL")
+ && version == Build.VERSION_CODES.CUR_DEVELOPMENT) version = 0;
return version;
}
@@ -555,6 +561,14 @@ public class NetworkMonitor extends StateMachine {
}
}
+ private void notifyProbeStatusChanged(int probesCompleted, int probesSucceeded) {
+ try {
+ mCallback.notifyProbeStatusChanged(probesCompleted, probesSucceeded);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error sending probe status", e);
+ }
+ }
+
private void showProvisioningNotification(String action) {
try {
mCallback.showProvisioningNotification(action, mContext.getPackageName());
@@ -1020,6 +1034,9 @@ public class NetworkMonitor extends StateMachine {
handlePrivateDnsEvaluationFailure();
break;
}
+ handlePrivateDnsEvaluationSuccess();
+ } else {
+ mEvaluationState.removeProbeResult(NETWORK_VALIDATION_PROBE_PRIVDNS);
}
// All good!
@@ -1051,8 +1068,6 @@ public class NetworkMonitor extends StateMachine {
} catch (UnknownHostException uhe) {
mPrivateDnsConfig = null;
}
- mEvaluationState.noteProbeResult(NETWORK_VALIDATION_PROBE_PRIVDNS,
- (mPrivateDnsConfig != null) /* succeeded */);
}
private void notifyPrivateDnsConfigResolved() {
@@ -1063,7 +1078,14 @@ public class NetworkMonitor extends StateMachine {
}
}
+ private void handlePrivateDnsEvaluationSuccess() {
+ mEvaluationState.noteProbeResult(NETWORK_VALIDATION_PROBE_PRIVDNS,
+ true /* succeeded */);
+ }
+
private void handlePrivateDnsEvaluationFailure() {
+ mEvaluationState.noteProbeResult(NETWORK_VALIDATION_PROBE_PRIVDNS,
+ false /* succeeded */);
mEvaluationState.reportEvaluationResult(NETWORK_VALIDATION_RESULT_INVALID,
null /* redirectUrl */);
// Queue up a re-evaluation with backoff.
@@ -1101,7 +1123,6 @@ public class NetworkMonitor extends StateMachine {
String.format("%dms - Error: %s", time, uhe.getMessage()));
}
logValidationProbe(time, PROBE_PRIVDNS, success ? DNS_SUCCESS : DNS_FAILURE);
- mEvaluationState.noteProbeResult(NETWORK_VALIDATION_PROBE_PRIVDNS, success);
return success;
}
}
@@ -2105,22 +2126,43 @@ public class NetworkMonitor extends StateMachine {
// Indicates which probes have completed since clearProbeResults was called.
// This is a bitmask of INetworkMonitor.NETWORK_VALIDATION_PROBE_* constants.
private int mProbeResults = 0;
+ // A bitmask to record which probes are completed.
+ private int mProbeCompleted = 0;
// The latest redirect URL.
private String mRedirectUrl;
protected void clearProbeResults() {
mProbeResults = 0;
+ mProbeCompleted = 0;
}
- // Probe result for http probe should be updated from reportHttpProbeResult().
- protected void noteProbeResult(int probeResult, boolean succeeded) {
- if (succeeded) {
- mProbeResults |= probeResult;
- } else {
- mProbeResults &= ~probeResult;
+ private void maybeNotifyProbeResults(@NonNull final Runnable modif) {
+ final int oldCompleted = mProbeCompleted;
+ final int oldResults = mProbeResults;
+ modif.run();
+ if (oldCompleted != mProbeCompleted || oldResults != mProbeResults) {
+ notifyProbeStatusChanged(mProbeCompleted, mProbeResults);
}
}
+ protected void removeProbeResult(final int probeResult) {
+ maybeNotifyProbeResults(() -> {
+ mProbeCompleted &= ~probeResult;
+ mProbeResults &= ~probeResult;
+ });
+ }
+
+ protected void noteProbeResult(final int probeResult, final boolean succeeded) {
+ maybeNotifyProbeResults(() -> {
+ mProbeCompleted |= probeResult;
+ if (succeeded) {
+ mProbeResults |= probeResult;
+ } else {
+ mProbeResults &= ~probeResult;
+ }
+ });
+ }
+
protected void reportEvaluationResult(int result, @Nullable String redirectUrl) {
mEvaluationResult = result;
mRedirectUrl = redirectUrl;
@@ -2139,6 +2181,11 @@ public class NetworkMonitor extends StateMachine {
}
return mEvaluationResult | mProbeResults;
}
+
+ @VisibleForTesting
+ protected int getProbeCompletedResult() {
+ return mProbeCompleted;
+ }
}
@VisibleForTesting