Merge "sdm: Check for color manager object presence."
diff --git a/sdm/libs/hwc/hwc_color_manager.h b/sdm/libs/hwc/hwc_color_manager.h
index abf016f..cb80b48 100644
--- a/sdm/libs/hwc/hwc_color_manager.h
+++ b/sdm/libs/hwc/hwc_color_manager.h
@@ -69,13 +69,12 @@
   };
 
   struct ActiveFeatureCMD {
-    const char *cmd_on;
-    const char *cmd_off;
-    const char *cmd_query_status;
-    const char *running;
+    const char *cmd_on = NULL;
+    const char *cmd_off = NULL;
+    const char *cmd_query_status = NULL;
+    const char *running = NULL;
     ActiveFeatureCMD(const char *arg1, const char *arg2, const char *arg3, const char *arg4)
         : cmd_on(arg1), cmd_off(arg2), cmd_query_status(arg3), running(arg4) {}
-    ActiveFeatureCMD() : cmd_on(NULL), cmd_off(NULL), cmd_query_status(NULL), running(NULL) {}
   };
 
   static const ActiveFeatureCMD kActiveFeatureCMD[kMaxNumActiveFeature];
@@ -86,19 +85,17 @@
   int EnableQDCMMode(bool enable, HWCDisplay *hwc_display);
 
  protected:
-  HWCQDCMModeManager() : cabl_was_running_(false), socket_fd_(-1), wakelock_token_(NULL),
-        power_mgr_(NULL), entry_timeout_(0) {}
   bool SendSocketCmd();
   int AcquireAndroidWakeLock(bool enable);
   int EnableActiveFeatures(bool enable);
   int EnableActiveFeatures(bool enable, const ActiveFeatureCMD &cmds, bool *was_running);
 
  private:
-  bool cabl_was_running_;
-  int socket_fd_;
-  android::sp<android::IBinder> wakelock_token_;
-  android::sp<android::IPowerManager> power_mgr_;
-  uint32_t entry_timeout_;
+  bool cabl_was_running_ = false;
+  int socket_fd_ = -1;
+  android::sp<android::IBinder> wakelock_token_ = NULL;
+  android::sp<android::IPowerManager> power_mgr_ = NULL;
+  uint32_t entry_timeout_ = 0;
   static const char *const kSocketName;
   static const char *const kTagName;
   static const char *const kPackageName;
@@ -122,22 +119,21 @@
   bool SolidFillLayersSet(hwc_display_contents_1_t **displays, HWCDisplay *hwc_display);
 
  protected:
-  HWCColorManager() : color_apis_lib_(NULL), diag_client_lib_(NULL), color_apis_(NULL),
-        qdcm_mode_mgr_(NULL), solid_fill_enable_(false), solid_fill_layers_(NULL) {}
   int CreateSolidFillLayers(HWCDisplay *hwc_display);
   void DestroySolidFillLayers();
   static uint32_t Get8BitsARGBColorValue(const PPColorFillParams &params);
 
  private:
-  void *color_apis_lib_, *diag_client_lib_;
-  void *color_apis_;
-  QDCMDiagInit qdcm_diag_init_;
-  QDCMDiagDeInit qdcm_diag_deinit_;
-  HWCQDCMModeManager *qdcm_mode_mgr_;
+  void *color_apis_lib_ = NULL;
+  void *diag_client_lib_ = NULL;
+  void *color_apis_ = NULL;
+  QDCMDiagInit qdcm_diag_init_ = NULL;
+  QDCMDiagDeInit qdcm_diag_deinit_ = NULL;
+  HWCQDCMModeManager *qdcm_mode_mgr_ = NULL;
 
-  bool solid_fill_enable_;
+  bool solid_fill_enable_ = false;
   PPColorFillParams solid_fill_params_;
-  hwc_display_contents_1_t *solid_fill_layers_;
+  hwc_display_contents_1_t *solid_fill_layers_ = NULL;
   Locker locker_;
 };
 
diff --git a/sdm/libs/hwc/hwc_session.cpp b/sdm/libs/hwc/hwc_session.cpp
index 6e61686..7a4361b 100644
--- a/sdm/libs/hwc/hwc_session.cpp
+++ b/sdm/libs/hwc/hwc_session.cpp
@@ -242,11 +242,13 @@
 
   hwc_session->HandleSecureDisplaySession(displays);
 
-  HWCDisplay *&primary_display = hwc_session->hwc_display_[HWC_DISPLAY_PRIMARY];
-  if (primary_display) {
-    int ret = hwc_session->color_mgr_->SolidFillLayersPrepare(displays, primary_display);
-    if (ret)
-      return 0;
+  if (hwc_session->color_mgr_) {
+    HWCDisplay *primary_display = hwc_session->hwc_display_[HWC_DISPLAY_PRIMARY];
+    if (primary_display) {
+      int ret = hwc_session->color_mgr_->SolidFillLayersPrepare(displays, primary_display);
+      if (ret)
+        return 0;
+    }
   }
 
   for (ssize_t dpy = static_cast<ssize_t>(num_displays - 1); dpy >= 0; dpy--) {
@@ -279,11 +281,13 @@
 
   HWCSession *hwc_session = static_cast<HWCSession *>(device);
 
-  HWCDisplay *&primary_display = hwc_session->hwc_display_[HWC_DISPLAY_PRIMARY];
-  if (primary_display) {
-    int ret = hwc_session->color_mgr_->SolidFillLayersSet(displays, primary_display);
-    if (ret)
-      return 0;
+  if (hwc_session->color_mgr_) {
+    HWCDisplay *primary_display = hwc_session->hwc_display_[HWC_DISPLAY_PRIMARY];
+    if (primary_display) {
+      int ret = hwc_session->color_mgr_->SolidFillLayersSet(displays, primary_display);
+      if (ret)
+        return 0;
+    }
   }
 
   for (size_t dpy = 0; dpy < num_displays; dpy++) {
@@ -826,6 +830,10 @@
   PPPendingParams pending_action;
   PPDisplayAPIPayload resp_payload, req_payload;
 
+  if (!color_mgr_) {
+    return -1;
+  }
+
   // Read display_id, payload_size and payload from in_parcel.
   ret = HWCColorManager::CreatePayloadFromParcel(*input_parcel, &display_id, &req_payload);
   if (!ret) {
@@ -857,12 +865,12 @@
       break;
     case kApplySolidFill:
       ret = color_mgr_->SetSolidFill(pending_action.params,
-                                        true, hwc_display_[HWC_DISPLAY_PRIMARY]);
+                                     true, hwc_display_[HWC_DISPLAY_PRIMARY]);
       hwc_procs_->invalidate(hwc_procs_);
       break;
     case kDisableSolidFill:
       ret = color_mgr_->SetSolidFill(pending_action.params,
-                                        false, hwc_display_[HWC_DISPLAY_PRIMARY]);
+                                     false, hwc_display_[HWC_DISPLAY_PRIMARY]);
       hwc_procs_->invalidate(hwc_procs_);
       break;
     case kSetPanelBrightness: