Change callback argument to boolean.

Bug: 176240491
Test: atest hidl_lazy_test
Change-Id: If909f292288ecf0d521b0eaf93f5517fafaf3969
diff --git a/transport/HidlLazyUtils.cpp b/transport/HidlLazyUtils.cpp
index ce37dd0..be7470f 100644
--- a/transport/HidlLazyUtils.cpp
+++ b/transport/HidlLazyUtils.cpp
@@ -40,8 +40,7 @@
 
     void reRegister();
 
-    void setActiveServicesCountCallback(
-            const std::function<bool(int)>& activeServicesCountCallback);
+    void setActiveServicesCallback(const std::function<bool(bool)>& activeServicesCallback);
 
   protected:
     Return<void> onClients(const sp<IBase>& service, bool clients) override;
@@ -80,7 +79,12 @@
     /**
      * Callback for reporting the number of services with clients.
      */
-    std::function<bool(int)> mActiveServicesCountCallback;
+    std::function<bool(bool)> mActiveServicesCallback;
+
+    /**
+     * Previous value passed to the active services callback.
+     */
+    std::optional<bool> mPreviousHasClients;
 };
 
 class LazyServiceRegistrarImpl {
@@ -91,8 +95,7 @@
                              const std::string& name);
     bool tryUnregister();
     void reRegister();
-    void setActiveServicesCountCallback(
-            const std::function<bool(int)>& activeServicesCountCallback);
+    void setActiveServicesCallback(const std::function<bool(bool)>& activeServicesCallback);
 
   private:
     sp<ClientCounterCallback> mClientCallback;
@@ -166,8 +169,12 @@
               << "/" << registered.name << " has clients: " << clients;
 
     bool handledInCallback = false;
-    if (mActiveServicesCountCallback != nullptr) {
-        handledInCallback = mActiveServicesCountCallback(numWithClients);
+    if (mActiveServicesCallback != nullptr) {
+        bool hasClients = numWithClients != 0;
+        if (hasClients != mPreviousHasClients) {
+            handledInCallback = mActiveServicesCallback(hasClients);
+            mPreviousHasClients = hasClients;
+        }
     }
 
     // If there is no callback defined or the callback did not handle this
@@ -229,9 +236,9 @@
     reRegister();
 }
 
-void ClientCounterCallback::setActiveServicesCountCallback(
-        const std::function<bool(int)>& activeServicesCountCallback) {
-    mActiveServicesCountCallback = activeServicesCountCallback;
+void ClientCounterCallback::setActiveServicesCallback(
+        const std::function<bool(bool)>& activeServicesCallback) {
+    mActiveServicesCallback = activeServicesCallback;
 }
 
 status_t LazyServiceRegistrarImpl::registerService(
@@ -251,9 +258,9 @@
     mClientCallback->reRegister();
 }
 
-void LazyServiceRegistrarImpl::setActiveServicesCountCallback(
-        const std::function<bool(int)>& activeServicesCountCallback) {
-    mClientCallback->setActiveServicesCountCallback(activeServicesCountCallback);
+void LazyServiceRegistrarImpl::setActiveServicesCallback(
+        const std::function<bool(bool)>& activeServicesCallback) {
+    mClientCallback->setActiveServicesCallback(activeServicesCallback);
 }
 
 }  // namespace details
@@ -280,9 +287,9 @@
     mImpl->reRegister();
 }
 
-void LazyServiceRegistrar::setActiveServicesCountCallback(
-        const std::function<bool(int)>& activeServicesCountCallback) {
-    mImpl->setActiveServicesCountCallback(activeServicesCountCallback);
+void LazyServiceRegistrar::setActiveServicesCallback(
+        const std::function<bool(bool)>& activeServicesCallback) {
+    mImpl->setActiveServicesCallback(activeServicesCallback);
 }
 
 }  // namespace hardware