audio: effect: prevents spurious call to remove/add device effects

Bug: 268441977
Test: make

When multiple clients are using a same input, each time a client is
added/removed, the audio path will be recreated, thus leading to
removing/adding the device effect on audio hal if a device effect is
used.
This CL prevents from removing/adding a device effect when a patch handle
is reused, by checking if it involves same sink device/source mix or sink mix
/source device.

Change-Id: I9545f701835a4269a870b66e4f68351aca384683
Signed-off-by: François Gaffie <francois.gaffie@renault.com>
diff --git a/services/audioflinger/Effects.h b/services/audioflinger/Effects.h
index 2d8775b..0c0af73 100644
--- a/services/audioflinger/Effects.h
+++ b/services/audioflinger/Effects.h
@@ -680,11 +680,20 @@
         return onCreatePatch(patchHandle,
                 *reinterpret_cast<const AudioFlinger::PatchPanel::Patch *>(patch));
     }
+    // TODO(b/288339104) type
+    status_t onUpdatePatch(audio_patch_handle_t oldPatchHandle, audio_patch_handle_t newPatchHandle,
+            /* const PatchPanel::Patch& */ const void * patch) final {
+        return onUpdatePatch(oldPatchHandle, newPatchHandle,
+                *reinterpret_cast<const AudioFlinger::PatchPanel::Patch *>(patch));
+    }
 
     status_t init(const std::map<audio_patch_handle_t, AudioFlinger::PatchPanel::Patch>& patches);
     status_t onCreatePatch(
             audio_patch_handle_t patchHandle, const AudioFlinger::PatchPanel::Patch& patch);
 
+    status_t onUpdatePatch(audio_patch_handle_t oldPatchHandle, audio_patch_handle_t newPatchHandle,
+            const AudioFlinger::PatchPanel::Patch& patch);
+
     void onReleasePatch(audio_patch_handle_t patchHandle) final;
 
     size_t removeEffect(const sp<IAfEffectModule>& effect) final;