Don't process dup unwanted() when unregistering NetworkAgent

In cases where the NetworkAgent is unregistered (eg. Safe mode), but the
VCN is not shut down, the NetworkAgent.unwanted() call should not
trigger a teardown.

Test: atest FrameworksVcnTests
Change-Id: Icf32cb464bce2aae2846448d5a6a53a97f558398
diff --git a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
index efe7837..20c08eb 100644
--- a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
+++ b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
@@ -1474,7 +1474,13 @@
                             mVcnContext.getVcnNetworkProvider(),
                             () -> {
                                 Slog.d(TAG, "NetworkAgent was unwanted");
-                                teardownAsynchronously();
+                                // If network agent has already been torn down, skip sending the
+                                // disconnect. Unwanted() is always called, even when networkAgents
+                                // are unregistered in teardownNetwork(), so prevent duplicate
+                                // notifications.
+                                if (mNetworkAgent != null) {
+                                    teardownAsynchronously();
+                                }
                             } /* networkUnwantedCallback */,
                             (status) -> {
                                 if (status == NetworkAgent.VALIDATION_STATUS_VALID) {
diff --git a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
index 54086c2..34c0018 100644
--- a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
+++ b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
@@ -312,6 +312,9 @@
         verifySafeModeTimeoutNotifiesCallbackAndUnregistersNetworkAgent(
                 mGatewayConnection.mConnectedState);
 
+        assertTrue(mGatewayConnection.isInSafeMode());
+        assertFalse(mGatewayConnection.isQuitting());
+
         triggerChildOpened();
         mTestLooper.dispatchAll();