Convert IResourceManagerService to stable AIDL

Convert with minimal change to the interface itself.

Add additional test to cover DrmSessionManager's usage
of possible negative value field (which is signed now).

bug: 142396029
test: ResourceManagerService_test, DrmSessionManager_test,
CTS ResourceManagerServiceTest;
Manually check battery stats reporting.

Change-Id: I5c537a54efc2663281c96ddbdbd4ee56f23c1adf
diff --git a/drm/libmediadrm/DrmHal.cpp b/drm/libmediadrm/DrmHal.cpp
index bd4b521..cac90ea 100644
--- a/drm/libmediadrm/DrmHal.cpp
+++ b/drm/libmediadrm/DrmHal.cpp
@@ -25,6 +25,7 @@
 
 #include <android/hardware/drm/1.2/types.h>
 #include <android/hidl/manager/1.2/IServiceManager.h>
+#include <android/media/BnResourceManagerClient.h>
 #include <hidl/ServiceManagement.h>
 #include <media/EventMetric.h>
 #include <media/PluginMetricsReporting.h>
@@ -295,21 +296,43 @@
 
 Mutex DrmHal::mLock;
 
-bool DrmHal::DrmSessionClient::reclaimResource() {
+struct DrmHal::DrmSessionClient : public android::media::BnResourceManagerClient {
+    explicit DrmSessionClient(DrmHal* drm, const Vector<uint8_t>& sessionId)
+      : mSessionId(sessionId),
+        mDrm(drm) {}
+
+    ::android::binder::Status reclaimResource(bool* _aidl_return) override;
+    ::android::binder::Status getName(::std::string* _aidl_return) override;
+
+    const Vector<uint8_t> mSessionId;
+
+protected:
+    virtual ~DrmSessionClient();
+
+private:
+    wp<DrmHal> mDrm;
+
+    DISALLOW_EVIL_CONSTRUCTORS(DrmSessionClient);
+};
+
+::android::binder::Status DrmHal::DrmSessionClient::reclaimResource(bool* _aidl_return) {
     sp<DrmHal> drm = mDrm.promote();
     if (drm == NULL) {
-        return true;
+        *_aidl_return = true;
+        return ::android::binder::Status::ok();
     }
     status_t err = drm->closeSession(mSessionId);
     if (err != OK) {
-        return false;
+        *_aidl_return = false;
+        return ::android::binder::Status::ok();
     }
     drm->sendEvent(EventType::SESSION_RECLAIMED,
             toHidlVec(mSessionId), hidl_vec<uint8_t>());
-    return true;
+    *_aidl_return = true;
+    return ::android::binder::Status::ok();
 }
 
-String8 DrmHal::DrmSessionClient::getName() {
+::android::binder::Status DrmHal::DrmSessionClient::getName(::std::string* _aidl_return) {
     String8 name;
     sp<DrmHal> drm = mDrm.promote();
     if (drm == NULL) {
@@ -323,7 +346,8 @@
         name.appendFormat("%02x", mSessionId[i]);
     }
     name.append("]");
-    return name;
+    *_aidl_return = name;
+    return ::android::binder::Status::ok();
 }
 
 DrmHal::DrmSessionClient::~DrmSessionClient() {