livedisplay: Convert controller singletons to regular objects

Change-Id: I9ea5b27348acbb6f9d2953d691d54c134b02dea1
diff --git a/livedisplay/1.0/default/controller/LegacyMMController.cpp b/livedisplay/1.0/default/controller/LegacyMMController.cpp
index 12a8e13..403692b 100644
--- a/livedisplay/1.0/default/controller/LegacyMMController.cpp
+++ b/livedisplay/1.0/default/controller/LegacyMMController.cpp
@@ -74,13 +74,6 @@
 namespace implementation {
 
 LegacyMMController::LegacyMMController() {
-    mHandle = openlib();
-    if (mHandle != nullptr) {
-        FOR_EACH_FUNCTION(LOAD_MM_FUNCTION)
-    }
-}
-
-std::shared_ptr<void> LegacyMMController::openlib() {
     std::shared_ptr<void> handle(dlopen(kFilename, RTLD_NOW), [this](void* p) {
         FOR_EACH_FUNCTION(CLOSE_MM_FUNCTION)
         if (p != nullptr) {
@@ -93,14 +86,11 @@
     });
     if (handle == nullptr) {
         LOG(ERROR) << "DLOPEN failed for " << kFilename << " (" << dlerror() << ")";
-        return nullptr;
+        return;
     }
-    return handle;
-}
+    mHandle = handle;
 
-LegacyMMController& LegacyMMController::getInstance() {
-    static LegacyMMController instance{};
-    return instance;
+    FOR_EACH_FUNCTION(LOAD_MM_FUNCTION);
 }
 
 int32_t LegacyMMController::init(int32_t initialize) {
diff --git a/livedisplay/1.0/default/controller/SDMController.cpp b/livedisplay/1.0/default/controller/SDMController.cpp
index 31e0ec7..1355ce2 100644
--- a/livedisplay/1.0/default/controller/SDMController.cpp
+++ b/livedisplay/1.0/default/controller/SDMController.cpp
@@ -72,13 +72,6 @@
 namespace implementation {
 
 SDMController::SDMController() {
-    mHandle = openlib();
-    if (mHandle != nullptr) {
-        FOR_EACH_FUNCTION(LOAD_SDM_FUNCTION)
-    }
-}
-
-std::shared_ptr<void> SDMController::openlib() {
     std::shared_ptr<void> handle(dlopen(kFilename, RTLD_NOW), [this](void* p) {
         FOR_EACH_FUNCTION(CLOSE_SDM_FUNCTION)
         if (p != nullptr) {
@@ -91,14 +84,11 @@
     });
     if (handle == nullptr) {
         LOG(ERROR) << "DLOPEN failed for " << kFilename << " (" << dlerror() << ")";
-        return nullptr;
+        return;
     }
-    return handle;
-}
+    mHandle = handle;
 
-SDMController& SDMController::getInstance() {
-    static SDMController instance{};
-    return instance;
+    FOR_EACH_FUNCTION(LOAD_SDM_FUNCTION)
 }
 
 int32_t SDMController::init(uint64_t* hctx, uint32_t flags) {
diff --git a/livedisplay/1.0/default/impl/LegacyMM.cpp b/livedisplay/1.0/default/impl/LegacyMM.cpp
index 95b1d98..a83a24e 100644
--- a/livedisplay/1.0/default/impl/LegacyMM.cpp
+++ b/livedisplay/1.0/default/impl/LegacyMM.cpp
@@ -63,11 +63,17 @@
 using android::sp;
 using android::status_t;
 
+LegacyMM::LegacyMM() : mController(nullptr) {
+}
+
+LegacyMM::~LegacyMM() {
+}
+
 status_t LegacyMM::getColorBalanceRange(Range& range) {
     struct mm_range r;
     memset(&r, 0, sizeof(struct mm_range));
 
-    status_t rc = LegacyMMController::getInstance().get_color_balance_range(0, &r);
+    status_t rc = mController->get_color_balance_range(0, &r);
     if (rc == OK) {
         range.min = r.min;
         range.max = r.max;
@@ -76,12 +82,12 @@
 }
 
 status_t LegacyMM::setColorBalance(int32_t balance) {
-    return LegacyMMController::getInstance().set_color_balance(0, balance);
+    return mController->set_color_balance(0, balance);
 }
 
 int32_t LegacyMM::getColorBalance() {
     int32_t value = 0;
-    if (LegacyMMController::getInstance().get_color_balance(0, &value) != 0) {
+    if (mController->get_color_balance(0, &value) != 0) {
         value = 0;
     }
     return value;
@@ -111,7 +117,7 @@
 
     d_mode tmp[count];
 
-    rc = LegacyMMController::getInstance().get_display_modes(0, 0, tmp, count);
+    rc = mController->get_display_modes(0, 0, tmp, count);
     if (rc == 0) {
         for (uint32_t i = 0; i < count; i++) {
             const sp<disp_mode> m = new disp_mode;
@@ -136,11 +142,11 @@
         return BAD_VALUE;
     }
 
-    if (LegacyMMController::getInstance().set_active_display_mode(0, modeID) != 0) {
+    if (mController->set_active_display_mode(0, modeID) != 0) {
         return BAD_VALUE;
     }
 
-    if (makeDefault && LegacyMMController::getInstance().set_default_display_mode(0, modeID) != 0) {
+    if (makeDefault && mController->set_default_display_mode(0, modeID) != 0) {
         return BAD_VALUE;
     }
 
@@ -156,7 +162,7 @@
     int32_t id = 0;
     uint32_t mask = 0;
 
-    status_t rc = LegacyMMController::getInstance().get_active_display_mode(0, &id, &mask);
+    status_t rc = mController->get_active_display_mode(0, &id, &mask);
     if (rc == OK && id >= 0) {
         return getDisplayModeById(id);
     }
@@ -174,7 +180,7 @@
         return getDisplayModeById(id);
     }
 
-    status_t rc = LegacyMMController::getInstance().get_default_display_mode(0, &id);
+    status_t rc = mController->get_default_display_mode(0, &id);
     if (rc == OK && id >= 0) {
         return getDisplayModeById(id);
     }
@@ -186,7 +192,7 @@
     struct mm_pa_range r;
     memset(&r, 0, sizeof(struct mm_pa_range));
 
-    status_t rc = LegacyMMController::getInstance().get_pa_range(0, &r);
+    status_t rc = mController->get_pa_range(0, &r);
     if (rc == OK) {
         ranges.hue.min = r.min.hue;
         ranges.hue.max = r.max.hue;
@@ -211,7 +217,7 @@
     struct mm_pa_config config;
     memset(&config, 0, sizeof(struct mm_pa_config));
 
-    status_t rc = LegacyMMController::getInstance().get_pa_config(0, &config);
+    status_t rc = mController->get_pa_config(0, &config);
     if (rc == OK) {
         hsic.hue = config.data.hue;
         hsic.saturation = config.data.saturation;
@@ -237,12 +243,16 @@
     config.data.contrast = hsic.contrast;
     config.data.saturationThreshold = hsic.saturationThreshold;
 
-    return LegacyMMController::getInstance().set_pa_config(0, &config);
+    return mController->set_pa_config(0, &config);
 }
 
 status_t LegacyMM::initialize() {
-    status_t rc = NO_INIT;
-    rc = LegacyMMController::getInstance().init(0);
+    mController = std::make_unique<LegacyMMController>();
+    if (mController == nullptr) {
+        LOG(ERROR) << "Failed to create LegacyMMController";
+        return NO_INIT;
+    }
+    status_t rc = mController->init(0);
     if (rc != OK) {
         LOG(ERROR) << "Failed to initialize LegacyMMController";
         return rc;
@@ -254,7 +264,7 @@
         rc = Utils::readInitialModeId(&id);
         if (rc != OK || id < 0) {
             // Get controller default mode and save it
-            rc = LegacyMMController::getInstance().get_default_display_mode(0, &id);
+            rc = mController->get_default_display_mode(0, &id);
             if (rc == OK && id >= 0) {
                 Utils::writeInitialModeId(id);
             } else {
@@ -272,7 +282,8 @@
 
 status_t LegacyMM::deinitialize() {
     status_t rc = NO_INIT;
-    rc = LegacyMMController::getInstance().init(1);
+    rc = mController->init(1);
+    mController = nullptr;
     if (rc != OK) {
         return rc;
     }
@@ -295,7 +306,7 @@
             return false;
     }
 
-    if (LegacyMMController::getInstance().supported(0, id)) {
+    if (mController->supported(0, id)) {
         // display modes and color balance depend on each other
         if (feature == Feature::DISPLAY_MODES || feature == Feature::COLOR_BALANCE) {
             if (getNumDisplayModes() > 0) {
@@ -322,7 +333,7 @@
 
 uint32_t LegacyMM::getNumDisplayModes() {
     uint32_t count = 0;
-    if (LegacyMMController::getInstance().get_num_display_modes(0, 0, &count) != 0) {
+    if (mController->get_num_display_modes(0, 0, &count) != 0) {
         count = 0;
     }
     return count;
diff --git a/livedisplay/1.0/default/impl/SDM.cpp b/livedisplay/1.0/default/impl/SDM.cpp
index 62a7ffe..22c199d 100644
--- a/livedisplay/1.0/default/impl/SDM.cpp
+++ b/livedisplay/1.0/default/impl/SDM.cpp
@@ -92,10 +92,20 @@
 using ::android::sp;
 using ::android::status_t;
 
-status_t SDM::initialize() {
-    status_t rc = NO_INIT;
+SDM::SDM() : mController(nullptr) {
+}
 
-    rc = SDMController::getInstance().init(&mHandle, 0);
+SDM::~SDM() {
+}
+
+status_t SDM::initialize() {
+    mController = std::make_unique<SDMController>();
+    if (mController == nullptr) {
+        LOG(ERROR) << "Failed to create SDMController";
+        return NO_INIT;
+    }
+
+    status_t rc = mController->init(&mHandle, 0);
     if (rc != OK) {
         return rc;
     }
@@ -120,15 +130,16 @@
 }
 
 status_t SDM::deinitialize() {
-    SDMController::getInstance().deinit(mHandle, 0);
+    mController->deinit(mHandle, 0);
     mHandle = 0;
+    mController = nullptr;
     return OK;
 }
 
 uint32_t SDM::getNumSDMDisplayModes() {
     uint32_t flags = 0;
     int32_t count = 0;
-    if (SDMController::getInstance().get_num_display_modes(mHandle, 0, 0, &count, &flags)) {
+    if (mController->get_num_display_modes(mHandle, 0, 0, &count, &flags)) {
         count = 0;
     }
     return count;
@@ -172,11 +183,11 @@
         }
     } else if (mode->privFlags == PRIV_MODE_FLAG_SDM) {
         if (state) {
-            return SDMController::getInstance().set_active_display_mode(mHandle, 0, mode->id, 0);
+            return mController->set_active_display_mode(mHandle, 0, mode->id, 0);
         } else {
             if (Utils::readInitialModeId(&id) == OK) {
                 LOG(VERBOSE) << "set sdm mode to default: id" << id;
-                return SDMController::getInstance().set_active_display_mode(mHandle, 0, id, 0);
+                return mController->set_active_display_mode(mHandle, 0, id, 0);
             }
         }
     }
@@ -216,7 +227,7 @@
         sdm_mode tmp[sdm_count];
 
         uint32_t flags = 0;
-        rc = SDMController::getInstance().get_display_modes(mHandle, 0, 0, tmp, sdm_count, &flags);
+        rc = mController->get_display_modes(mHandle, 0, 0, tmp, sdm_count, &flags);
         if (rc == 0) {
             for (uint32_t i = 0; i < sdm_count; i++) {
                 const sp<disp_mode> m = new disp_mode;
@@ -283,7 +294,7 @@
     hsic_ranges r;
     memset(&r, 0, sizeof(struct hsic_ranges));
 
-    status_t rc = SDMController::getInstance().get_global_pa_range(mHandle, 0, &r);
+    status_t rc = mController->get_global_pa_range(mHandle, 0, &r);
     if (rc == OK) {
         ranges.hue.min = r.hue.min;
         ranges.hue.max = r.hue.max;
@@ -328,7 +339,7 @@
             return false;
     }
 
-    if (SDMController::getInstance().get_feature_version(mHandle, id, &v, &flags) != OK) {
+    if (mController->get_feature_version(mHandle, id, &v, &flags) != OK) {
         return false;
     }
 
@@ -352,7 +363,7 @@
     int32_t id = 0;
     uint32_t flags = 0;
     if (Utils::readInitialModeId(&id) != OK || id < 0) {
-        if (SDMController::getInstance().get_default_display_mode(mHandle, 0, &id, &flags) == OK &&
+        if (mController->get_default_display_mode(mHandle, 0, &id, &flags) == OK &&
             id >= 0) {
             return Utils::writeInitialModeId(id);
         } else {
@@ -367,7 +378,7 @@
     hsic_config config;
     memset(&config, 0, sizeof(struct hsic_config));
 
-    status_t rc = SDMController::getInstance().get_global_pa_config(mHandle, 0, &enable, &config);
+    status_t rc = mController->get_global_pa_config(mHandle, 0, &enable, &config);
     if (rc == OK) {
         hsic.hue = config.data.hue;
         hsic.saturation = config.data.saturation;
@@ -415,7 +426,7 @@
                 return rc;
             }
             if (mode->privFlags == PRIV_MODE_FLAG_SDM) {
-                rc = SDMController::getInstance().set_default_display_mode(mHandle, 0, mode->id, 0);
+                rc = mController->set_default_display_mode(mHandle, 0, mode->id, 0);
                 if (rc != OK) {
                     LOG(ERROR) << "failed to save mode! err=" << rc;
                     return rc;
@@ -470,7 +481,7 @@
     config.data.contrast = hsic.contrast;
     config.data.saturationThreshold = hsic.saturationThreshold;
 
-    return SDMController::getInstance().set_global_pa_config(mHandle, 0, 1, &config);
+    return mController->set_global_pa_config(mHandle, 0, 1, &config);
 }
 
 HSIC SDM::getDefaultPictureAdjustment() {
diff --git a/livedisplay/1.0/default/include/controller/LegacyMMController.h b/livedisplay/1.0/default/include/controller/LegacyMMController.h
index 48bb403..8265001 100644
--- a/livedisplay/1.0/default/include/controller/LegacyMMController.h
+++ b/livedisplay/1.0/default/include/controller/LegacyMMController.h
@@ -29,7 +29,7 @@
 
 class LegacyMMController {
   public:
-    static LegacyMMController& getInstance();
+    LegacyMMController();
 
     int32_t init(int32_t init);
     int32_t get_color_balance_range(int32_t disp_id, void* range);
@@ -47,10 +47,6 @@
     int32_t supported(int32_t disp_id, uint32_t feature_id);
 
   private:
-    LegacyMMController();
-
-    std::shared_ptr<void> openlib();
-
     typedef int32_t (*disp_api_init)(int32_t);
     typedef int32_t (*disp_api_get_color_balance_range)(int32_t, void*);
     typedef int32_t (*disp_api_set_color_balance)(int32_t, int32_t);
diff --git a/livedisplay/1.0/default/include/controller/SDMController.h b/livedisplay/1.0/default/include/controller/SDMController.h
index e44591a..2e634de 100644
--- a/livedisplay/1.0/default/include/controller/SDMController.h
+++ b/livedisplay/1.0/default/include/controller/SDMController.h
@@ -28,13 +28,8 @@
 namespace implementation {
 
 class SDMController {
-  private:
-    SDMController();
-
-    std::shared_ptr<void> openlib();
-
   public:
-    static SDMController& getInstance();
+    SDMController();
 
     int32_t init(uint64_t* hctx, uint32_t flags);
     int32_t deinit(uint64_t hctx, uint32_t flags);
diff --git a/livedisplay/1.0/default/include/impl/LegacyMM.h b/livedisplay/1.0/default/include/impl/LegacyMM.h
index 7484f41..3401908 100644
--- a/livedisplay/1.0/default/include/impl/LegacyMM.h
+++ b/livedisplay/1.0/default/include/impl/LegacyMM.h
@@ -25,8 +25,13 @@
 namespace V1_0 {
 namespace implementation {
 
+class LegacyMMController;
+
 class LegacyMM : public ColorBackend {
   public:
+    LegacyMM();
+    ~LegacyMM();
+
     virtual android::status_t setAdaptiveBacklightEnabled(bool /* enabled */) override {
         return android::NO_INIT;
     }
@@ -65,6 +70,7 @@
     uint32_t getNumDisplayModes();
     android::sp<disp_mode> getDisplayModeById(int32_t id);
 
+    std::unique_ptr<LegacyMMController> mController;
     HSIC mDefaultPictureAdjustment;
 };
 
diff --git a/livedisplay/1.0/default/include/impl/SDM.h b/livedisplay/1.0/default/include/impl/SDM.h
index b7fd02b..a5fc577 100644
--- a/livedisplay/1.0/default/include/impl/SDM.h
+++ b/livedisplay/1.0/default/include/impl/SDM.h
@@ -28,8 +28,13 @@
 namespace V1_0 {
 namespace implementation {
 
+class SDMController;
+
 class SDM : public ColorBackend {
   public:
+    SDM();
+    ~SDM();
+
     virtual android::status_t getDisplayModes(std::vector<android::sp<disp_mode>>& profiles) override;
     virtual android::sp<disp_mode> getCurrentDisplayMode() override;
     virtual android::sp<disp_mode> getDefaultDisplayMode() override;
@@ -74,6 +79,7 @@
     android::sp<disp_mode> getLocalSRGBMode();
     android::sp<disp_mode> getLocalDCIP3Mode();
 
+    std::unique_ptr<SDMController> mController;
     uint64_t mHandle;
     bool mFOSSEnabled;
     bool mCachedFOSSStatus;