audio service: add watchdog for audio mode

Add a watchdog to remove an application from the audio mode
owner stack if it has requested mode IN_COMMUNICATION and
has not been playing or capturing audio for more than 3 seconds.

This will prevent volume, routing and recording issues when
misbehaving apps do not properly reset the audio mode at the
end of a call.

Bug: 161564483
Test: Manual regression tests for VoIP use cases
Change-Id: I7c6f57a2c9a6c31d107a1bba2d7dfac6e3f275bd
(cherry picked from commit 852cd7d7d4734081162ea7be8650bbbcfd3a862b)
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index e786388..fe61969 100755
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -6428,8 +6428,8 @@
                                     CHECK_MODE_FOR_UID_PERIOD_MS);
                             break;
                         }
-                        // For now just log the fact that an app is hogging the audio mode.
-                        // TODO(b/160260850): remove abusive app from audio mode stack.
+                        setModeInt(AudioSystem.MODE_NORMAL, h.getBinder(), h.getPid(), h.getUid(),
+                                h.isPrivileged(), "MSG_CHECK_MODE_FOR_UID");
                         mModeLogger.log(new PhoneStateEvent(h.getPackage(), h.getPid()));
                     }
                     break;