Silently ignore extra audio focus releases

The code originally threw an exception if focus was abandoned by caller
that wasn't recognized as being in the focus stack. This can
legitimately happen.

Bug: 117932927
Test: Run on Jeep and play Radio
Change-Id: I03cd48a08d14348dd91a9fac76ce70c4ef7a9396
diff --git a/service/src/com/android/car/CarAudioFocus.java b/service/src/com/android/car/CarAudioFocus.java
index a0552d9..de1a7f1 100644
--- a/service/src/com/android/car/CarAudioFocus.java
+++ b/service/src/com/android/car/CarAudioFocus.java
@@ -354,9 +354,16 @@
             deadEntry = mFocusLosers.remove(afi.getClientId());
             if (deadEntry == null) {
                 // Caller is providing an unrecognzied clientId!?
-                Log.e(TAG, "Audio focus abandoned by unrecognzied client id: " + afi.getClientId());
-                // NOTE:  We could choose to silently ignore this, but lets make it clear for now
-                throw new RuntimeException("Unrecognized client abandoning audio focus");
+                Log.w(TAG, "Audio focus abandoned by unrecognized client id: " + afi.getClientId());
+                // This probably means an app double released focused for some reason.  One
+                // harmless possibility is a race between an app being told it lost focus and the
+                // app voluntarily abandoning focus.  More likely the app is just sloppy.  :)
+                // The more nefarious possibility is that the clientId is actually corrupted
+                // somehow, in which case we might have a real focus entry that we're going to fail
+                // to remove. If that were to happen, I'd expect either the app to swallow it
+                // silently, or else take unexpected action (eg: resume playing spontaneously), or
+                // else to see "Failure to signal ..." gain/loss error messages in the log from
+                // this module when a focus change tries to take action on a truly zombie entry.
             }
         }