Enable useSessionIdToScheduleMdnsTask

In case that the task is not canceled successfully, use session ID to
check if this task should continue to schedule more.

Bug: 285260665
Test: atest CtsNetTest FrameworksNetTests
Change-Id: Ic953ae781449a7ebf943999c8c8d3040a97641d9
diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsConfigs.java b/service-t/src/com/android/server/connectivity/mdns/MdnsConfigs.java
index 761c477..f5e7790 100644
--- a/service-t/src/com/android/server/connectivity/mdns/MdnsConfigs.java
+++ b/service-t/src/com/android/server/connectivity/mdns/MdnsConfigs.java
@@ -51,7 +51,7 @@
     }
 
     public static boolean useSessionIdToScheduleMdnsTask() {
-        return false;
+        return true;
     }
 
     public static boolean shouldCancelScanTaskWhenFutureIsNull() {
diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java
index 14302c2..49a376c 100644
--- a/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java
+++ b/service-t/src/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java
@@ -191,14 +191,14 @@
             }
             // Cancel the next scheduled periodical task.
             if (requestTaskFuture != null) {
-                requestTaskFuture.cancel(true);
+                cancelRequestTaskLocked();
             }
             // Keep tracking the ScheduledFuture for the task so we can cancel it if caller is not
             // interested anymore.
             final QueryTaskConfig taskConfig = new QueryTaskConfig(
                     searchOptions.getSubtypes(),
                     searchOptions.isPassiveMode(),
-                    ++currentSessionId,
+                    currentSessionId,
                     network);
             if (hadReply) {
                 requestTaskFuture = scheduleNextRunLocked(taskConfig);
@@ -208,6 +208,13 @@
         }
     }
 
+    @GuardedBy("lock")
+    private void cancelRequestTaskLocked() {
+        requestTaskFuture.cancel(true);
+        ++currentSessionId;
+        requestTaskFuture = null;
+    }
+
     private boolean responseMatchesOptions(@NonNull MdnsResponse response,
             @NonNull MdnsSearchOptions options) {
         final boolean matchesInstanceName = options.getResolveInstanceName() == null
@@ -241,8 +248,7 @@
                 return listeners.isEmpty();
             }
             if (listeners.isEmpty() && requestTaskFuture != null) {
-                requestTaskFuture.cancel(true);
-                requestTaskFuture = null;
+                cancelRequestTaskLocked();
             }
             return listeners.isEmpty();
         }
@@ -319,8 +325,7 @@
             }
 
             if (requestTaskFuture != null) {
-                requestTaskFuture.cancel(true);
-                requestTaskFuture = null;
+                cancelRequestTaskLocked();
             }
         }
     }
diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java b/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java
index a696150..7f50386 100644
--- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java
+++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java
@@ -379,9 +379,7 @@
     }
 
     @Test
-    @Ignore("MdnsConfigs is not configurable currently.")
     public void testIfPreviousTaskIsCanceledWhenNewSessionStarts() {
-        //MdnsConfigsFlagsImpl.useSessionIdToScheduleMdnsTask.override(true);
         MdnsSearchOptions searchOptions =
                 MdnsSearchOptions.newBuilder().addSubtype("12345").setIsPassiveMode(true).build();
         client.startSendAndReceive(mockListenerOne, searchOptions);