Implement async event callout from drm plugin to Java app

Change-Id: I007f147d693664e777b8758be2bb8a4c7ec0236b
diff --git a/media/libmedia/IDrm.cpp b/media/libmedia/IDrm.cpp
index 1641b56..1578846 100644
--- a/media/libmedia/IDrm.cpp
+++ b/media/libmedia/IDrm.cpp
@@ -51,7 +51,8 @@
     ENCRYPT,
     DECRYPT,
     SIGN,
-    VERIFY
+    VERIFY,
+    SET_LISTENER
 };
 
 struct BpDrm : public BpInterface<IDrm> {
@@ -384,6 +385,14 @@
         return reply.readInt32();
     }
 
+    virtual status_t setListener(const sp<IDrmClient>& listener) {
+        Parcel data, reply;
+        data.writeInterfaceToken(IDrm::getInterfaceDescriptor());
+        data.writeStrongBinder(listener->asBinder());
+        remote()->transact(SET_LISTENER, data, &reply);
+        return reply.readInt32();
+    }
+
 private:
     void readVector(Parcel &reply, Vector<uint8_t> &vector) const {
         uint32_t size = reply.readInt32();
@@ -712,6 +721,14 @@
             return OK;
         }
 
+    case SET_LISTENER: {
+        CHECK_INTERFACE(IDrm, data, reply);
+        sp<IDrmClient> listener =
+            interface_cast<IDrmClient>(data.readStrongBinder());
+        reply->writeInt32(setListener(listener));
+        return NO_ERROR;
+    } break;
+
     default:
         return BBinder::onTransact(code, data, reply, flags);
     }