diff options
author | Lucas Lin <lucaslin@google.com> | 2019-10-23 02:52:05 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-10-23 02:52:05 -0700 |
commit | 440b0e360e78bf2d77352709a42c7fa6f0a348c3 (patch) | |
tree | be5ecb1a31afcda9c730714a2f09fccf552e439c /src | |
parent | 35c9a1f201e91d93881493c926637499d16a9d52 (diff) | |
parent | 8714a70f652664b3b1540568f3f269deddda678e (diff) |
Merge "Send the probe status from NetworkMonitor to ConnectivityService"
am: 8714a70f65
Change-Id: Ib2add8402f694f9a34112248ef30e5a07cd63b17
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/server/connectivity/NetworkMonitor.java | 67 |
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 |