audio policy: fix capture concurrency mode checks

Capture concurrency mode indicated by policy manager
after startInput() is a bit field and should be handled as
such by startInput() in AudioPolicyInterfaceImpl.

Bug: 26994864
Change-Id: Iff093a82b8b68262abab50bc84060cf023450783
diff --git a/services/audiopolicy/AudioPolicyInterface.h b/services/audiopolicy/AudioPolicyInterface.h
index 75e0530..4dcc6b2 100644
--- a/services/audiopolicy/AudioPolicyInterface.h
+++ b/services/audiopolicy/AudioPolicyInterface.h
@@ -71,6 +71,8 @@
         API_INPUT_CONCURRENCY_NONE = 0,
         API_INPUT_CONCURRENCY_CALL = (1 << 0),      // Concurrency with a call
         API_INPUT_CONCURRENCY_CAPTURE = (1 << 1),   // Concurrency with another capture
+
+        API_INPUT_CONCURRENCY_ALL = (API_INPUT_CONCURRENCY_CALL | API_INPUT_CONCURRENCY_CAPTURE),
    };
 
    typedef uint32_t concurrency_type__mask_t;
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index e08c952..ae5cf3d 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -353,19 +353,15 @@
     status_t status = mAudioPolicyManager->startInput(input, session, &concurrency);
 
     if (status == NO_ERROR) {
+        LOG_ALWAYS_FATAL_IF(concurrency & ~AudioPolicyInterface::API_INPUT_CONCURRENCY_ALL,
+                            "startInput(): invalid concurrency type %d", (int)concurrency);
+
         // enforce permission (if any) required for each type of concurrency
-        switch (concurrency) {
-        case AudioPolicyInterface::API_INPUT_CONCURRENCY_NONE:
-            break;
-        case AudioPolicyInterface::API_INPUT_CONCURRENCY_CALL:
+        if (concurrency & AudioPolicyInterface::API_INPUT_CONCURRENCY_CALL) {
             //TODO: check incall capture permission
-            break;
-        case AudioPolicyInterface::API_INPUT_CONCURRENCY_CAPTURE:
+        }
+        if (concurrency & AudioPolicyInterface::API_INPUT_CONCURRENCY_CAPTURE) {
             //TODO: check concurrent capture permission
-            break;
-       default:
-            LOG_ALWAYS_FATAL("startInput() encountered an invalid input type %d",
-                    (int)concurrency);
         }
     }