hidl: livedisplay: Add binderized service implementation

* Change default ::implementation namespace to ::samsung
* Fill in required methods for used impls
* Cleanup passthrough code for used impls
* Remove unused impls
* Add and setup binderized service

Change-Id: I545a7c0ac8bf4fce04da73a0d39d4ac1938496f2
diff --git a/lineagehw/hidl/livedisplay/SunlightEnhancement.cpp b/lineagehw/hidl/livedisplay/SunlightEnhancement.cpp
index 8a3c329..5c3ca51 100644
--- a/lineagehw/hidl/livedisplay/SunlightEnhancement.cpp
+++ b/lineagehw/hidl/livedisplay/SunlightEnhancement.cpp
@@ -14,33 +14,64 @@
  * limitations under the License.
  */
 
+
+#include <android-base/file.h>
+#include <android-base/strings.h>
+
+#include <fstream>
+
 #include "SunlightEnhancement.h"
 
+using android::base::ReadFileToString;
+using android::base::Trim;
+using android::base::WriteStringToFile;
+
 namespace vendor {
 namespace lineage {
 namespace livedisplay {
 namespace V2_0 {
-namespace implementation {
+namespace samsung {
+
+static constexpr const char *kHBMPath = "/sys/class/lcd/panel/panel/auto_brightness";
+static constexpr const char *kSREPath = "/sys/class/mdnie/mdnie/outdoor";
 
 // Methods from ::vendor::lineage::livedisplay::V2_0::ISunlightEnhancement follow.
+bool SunlightEnhancement::isSupported() {
+    std::fstream sre(kSREPath, sre.in | sre.out);
+    std::fstream hbm(kHBMPath, hbm.in | hbm.out);
+
+    if (hbm.good()) {
+        mHasHBM = true;
+    }
+
+    return sre.good();
+}
+
+// Methods from ::vendor::lineage::livedisplay::V2_0::IAdaptiveBacklight follow.
 Return<bool> SunlightEnhancement::isEnabled() {
-    // TODO implement
-    return bool {};
+    std::string tmp;
+    int32_t statusSRE = 0;
+    int32_t statusHBM = 0;
+    if (ReadFileToString(kSREPath, &tmp)) {
+        statusSRE = std::stoi(Trim(tmp));
+    }
+
+    if (mHasHBM && ReadFileToString(kHBMPath, &tmp)) {
+        statusHBM = std::stoi(Trim(tmp));
+    }
+    
+    return ((statusSRE == 1 && statusHBM == 6) || statusSRE == 1);
 }
 
 Return<bool> SunlightEnhancement::setEnabled(bool enabled) {
-    // TODO implement
-    return bool {};
+    if (mHasHBM) {
+        WriteStringToFile(enabled ? "6" : "0", kHBMPath, true);
+    }
+
+    return WriteStringToFile(enabled ? "1" : "0", kSREPath, true);
 }
 
-
-// Methods from ::android::hidl::base::V1_0::IBase follow.
-
-//ISunlightEnhancement* HIDL_FETCH_ISunlightEnhancement(const char* /* name */) {
-    //return new SunlightEnhancement();
-//}
-//
-}  // namespace implementation
+}  // namespace samsung
 }  // namespace V2_0
 }  // namespace livedisplay
 }  // namespace lineage