DrmManager: check drm.service.enabled in init

Bug: 170678524
Test: atest DRMTest#testForwardLockAccess
Change-Id: Ifaee3f867988c0e22046c18e087bd8bd26bb585d
diff --git a/drm/drmserver/drmserver.rc b/drm/drmserver/drmserver.rc
index de46fb9..eb176c1 100644
--- a/drm/drmserver/drmserver.rc
+++ b/drm/drmserver/drmserver.rc
@@ -1,5 +1,12 @@
 service drm /system/bin/drmserver
+    disabled
     class main
     user drm
     group drm system inet drmrpc readproc
     writepid /dev/cpuset/foreground/tasks
+
+on property:drm.service.enabled=true
+    start drm
+
+on property:drm.service.enabled=1
+    start drm
diff --git a/drm/libdrmframework/DrmManagerClientImpl.cpp b/drm/libdrmframework/DrmManagerClientImpl.cpp
index b0a441b..38591bc 100644
--- a/drm/libdrmframework/DrmManagerClientImpl.cpp
+++ b/drm/libdrmframework/DrmManagerClientImpl.cpp
@@ -52,25 +52,22 @@
 const sp<IDrmManagerService>& DrmManagerClientImpl::getDrmManagerService() {
     Mutex::Autolock lock(sMutex);
     if (NULL == sDrmManagerService.get()) {
-        char value[PROPERTY_VALUE_MAX];
-        if (property_get("drm.service.enabled", value, NULL) == 0) {
-            // Drm is undefined for this device
-            return sDrmManagerService;
-        }
-
         sp<IServiceManager> sm = defaultServiceManager();
         sp<IBinder> binder;
-        do {
+        for(int i = 0; i < 10; i++) {
             binder = sm->getService(String16("drm.drmManager"));
             if (binder != 0) {
                 break;
             }
-            ALOGW("DrmManagerService not published, waiting...");
+            ALOGW("DrmManagerService not published, waiting... %d", i);
             struct timespec reqt;
             reqt.tv_sec  = 0;
             reqt.tv_nsec = 500000000; //0.5 sec
             nanosleep(&reqt, NULL);
-        } while (true);
+        }
+        if (binder == NULL) {
+            return sDrmManagerService;
+        }
         if (NULL == sDeathNotifier.get()) {
             sDeathNotifier = new DeathNotifier();
         }