[M85 Migration] Refactor ScreenEfl. 75/246275/1
authorsuyambu.rm <suyambu.rm@samsung.com>
Thu, 22 Oct 2020 19:01:34 +0000 (00:31 +0530)
committerSuyambulingam R M <suyambu.rm@samsung.com>
Tue, 27 Oct 2020 13:09:10 +0000 (13:09 +0000)
Added features (AddObserver, RemoveObserver and NotifyDevice) in
DeviceDisplayInfoEflImpl.

References:
https://review.tizen.org/gerrit/223074

Change-Id: Ifdf1c7d4b05259c4933af0731122aba455471716
Signed-off-by: ayushi.arya <ayushi.arya@partner.samsung.com>
Signed-off-by: suyambu.rm <suyambu.rm@samsung.com>
(cherry picked from commit 1961110af787ad4b73eb7a99e859962933ef47b7)

tizen_src/chromium_impl/ui/display/device_display_info_efl.cc
tizen_src/chromium_impl/ui/display/device_display_info_efl.h
tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h [new file with mode: 0644]
tizen_src/chromium_impl/ui/display/screen_efl.cc
tizen_src/chromium_impl/ui/ui_efl.gni

index 22846cf..5527da6 100644 (file)
@@ -5,7 +5,9 @@
 #include "ui/display/device_display_info_efl.h"
 
 #include "base/logging.h"
+#include "base/observer_list.h"
 #include "tizen/system_info.h"
+#include "ui/display/device_display_info_observer_efl.h"
 
 namespace display {
 
@@ -67,9 +69,12 @@ class DISPLAY_EXPORT DeviceDisplayInfoEflImpl {
   int GetDisplayHeight() const;
   double GetDIPScale() const;
   int GetRotationDegrees() const;
+  void AddObserver(DeviceDisplayInfoObserverEfl* observer);
+  void RemoveObserver(DeviceDisplayInfoObserverEfl* observer);
 
  private:
   DeviceDisplayInfoEflImpl();
+  void NotifyDeviceDisplayInfoChanged();
 
   friend struct base::DefaultSingletonTraits<DeviceDisplayInfoEflImpl>;
 
@@ -80,6 +85,7 @@ class DISPLAY_EXPORT DeviceDisplayInfoEflImpl {
   int display_height_;
   double dip_scale_;
   int rotation_degrees_;
+  base::ObserverList<DeviceDisplayInfoObserverEfl>::Unchecked observer_list_;
 
   DISALLOW_COPY_AND_ASSIGN(DeviceDisplayInfoEflImpl);
 };
@@ -107,11 +113,17 @@ void DeviceDisplayInfoEflImpl::Update(int display_width, int display_height,
     rotation_degrees_ = rotation_degrees;
     DCHECK_NE(kInvalidRotationDegrees, rotation_degrees_);
   }
+
+  NotifyDeviceDisplayInfoChanged();
 }
 
 void DeviceDisplayInfoEflImpl::SetRotationDegrees(int rotation_degrees) {
-  base::AutoLock autolock(rotation_accessor_);
-  rotation_degrees_ = rotation_degrees;
+  {
+    base::AutoLock autolock(rotation_accessor_);
+    rotation_degrees_ = rotation_degrees;
+  }
+
+  NotifyDeviceDisplayInfoChanged();
 }
 
 int DeviceDisplayInfoEflImpl::GetDisplayWidth()  const {
@@ -138,12 +150,27 @@ int DeviceDisplayInfoEflImpl::GetRotationDegrees() const {
   return rotation_degrees_;
 }
 
+void DeviceDisplayInfoEflImpl::AddObserver(
+    DeviceDisplayInfoObserverEfl* observer) {
+  observer_list_.AddObserver(observer);
+}
+
+void DeviceDisplayInfoEflImpl::RemoveObserver(
+    DeviceDisplayInfoObserverEfl* observer) {
+  observer_list_.RemoveObserver(observer);
+}
+
 DeviceDisplayInfoEflImpl::DeviceDisplayInfoEflImpl()
     : display_width_(0),
       display_height_(0),
       dip_scale_(1.0),
       rotation_degrees_(kInvalidRotationDegrees) {}
 
+void DeviceDisplayInfoEflImpl::NotifyDeviceDisplayInfoChanged() {
+  for (auto& observer : observer_list_)
+    observer.OnDeviceDisplayInfoChanged();
+}
+
 // DeviceDisplayInfoEfl
 DeviceDisplayInfoEfl::DeviceDisplayInfoEfl() {
   DCHECK(DeviceDisplayInfoEflImpl::GetInstance());
@@ -188,5 +215,14 @@ int DeviceDisplayInfoEfl::GetRotationDegrees() const {
   return DeviceDisplayInfoEflImpl::GetInstance()->GetRotationDegrees();
 }
 
+void DeviceDisplayInfoEfl::AddObserver(DeviceDisplayInfoObserverEfl* observer) {
+  DeviceDisplayInfoEflImpl::GetInstance()->AddObserver(observer);
+}
+
+void DeviceDisplayInfoEfl::RemoveObserver(
+    DeviceDisplayInfoObserverEfl* observer) {
+  DeviceDisplayInfoEflImpl::GetInstance()->RemoveObserver(observer);
+}
+
 }  // namespace display
 
index 43d4ac0..2c3dd9a 100644 (file)
@@ -11,6 +11,8 @@
 
 namespace display {
 
+class DeviceDisplayInfoObserverEfl;
+
 // Facilitates access to device information in browser or renderer.
 class DISPLAY_EXPORT DeviceDisplayInfoEfl {
  public:
@@ -40,6 +42,9 @@ class DISPLAY_EXPORT DeviceDisplayInfoEfl {
   // values are one of { 0, 90, 180, 270 }.
   int GetRotationDegrees() const;
 
+  void AddObserver(DeviceDisplayInfoObserverEfl* observer);
+  void RemoveObserver(DeviceDisplayInfoObserverEfl* observer);
+
  private:
   DISALLOW_COPY_AND_ASSIGN(DeviceDisplayInfoEfl);
 };
diff --git a/tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h b/tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h
new file mode 100644 (file)
index 0000000..9221a6a
--- /dev/null
@@ -0,0 +1,22 @@
+// Copyright 2018 Samsung Electronics. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_DISPLAY_DEVICE_DISPLAY_INFO_OBSERVER_EFL_H_
+#define UI_DISPLAY_DEVICE_DISPLAY_INFO_OBSERVER_EFL_H_
+
+#include "ui/display/display_export.h"
+
+namespace display {
+
+class DISPLAY_EXPORT DeviceDisplayInfoObserverEfl {
+ public:
+  virtual void OnDeviceDisplayInfoChanged() = 0;
+
+ protected:
+  virtual ~DeviceDisplayInfoObserverEfl() {}
+};
+
+}  // namespace display
+
+#endif  // UI_DISPLAY_DEVICE_DISPLAY_INFO_OBSERVER_EFL_H_
index e48ea49..d385a77 100644 (file)
@@ -8,6 +8,7 @@
 
 #include "content/browser/renderer_host/dip_util.h"
 #include "ui/display/device_display_info_efl.h"
+#include "ui/display/device_display_info_observer_efl.h"
 #include "ui/display/display.h"
 #include "ui/display/display_observer.h"
 #include "ui/display/screen.h"
@@ -18,11 +19,19 @@ using namespace display;
 
 namespace ui {
 
-class ScreenEfl : public display::Screen {
+class ScreenEfl : public display::Screen,
+                  public display::DeviceDisplayInfoObserverEfl {
  public:
-  ScreenEfl() { AddDisplay(); }
+  ScreenEfl() {
+    display::DeviceDisplayInfoEfl display_info;
+    display_info.AddObserver(this);
+    UpdateDisplays();
+  }
 
-  ~ScreenEfl() override {}
+  ~ScreenEfl() override {
+    display::DeviceDisplayInfoEfl display_info;
+    display_info.RemoveObserver(this);
+  }
 
   // display::Screen overrides
   gfx::Point GetCursorScreenPoint() override {
@@ -66,7 +75,10 @@ class ScreenEfl : public display::Screen {
     return GetPrimaryDisplay();
   }
 
-  display::Display GetPrimaryDisplay() const override { return displays_[0]; }
+  display::Display GetPrimaryDisplay() const override {
+    DCHECK(!displays_.empty());
+    return displays_[0];
+  }
 
   void AddObserver(display::DisplayObserver* /*observer*/) override {
     NOTIMPLEMENTED();
@@ -76,8 +88,11 @@ class ScreenEfl : public display::Screen {
     NOTIMPLEMENTED();
   }
 
+  // display::DeviceDisplayInfoObserverEfl implementation.
+  void OnDeviceDisplayInfoChanged() override { UpdateDisplays(); }
+
  private:
-  void AddDisplay() {
+  void UpdateDisplays() {
     display::DeviceDisplayInfoEfl display_info;
     const float device_scale_factor =
         display::Display::HasForceDeviceScaleFactor()
@@ -96,8 +111,8 @@ class ScreenEfl : public display::Screen {
 
     display.set_device_scale_factor(device_scale_factor);
     display.set_bounds(bounds_in_dip);
-
-    displays_.push_back(display);
+    std::vector<display::Display> displays(1, display);
+    displays_.swap(displays);
   }
 
   std::vector<display::Display> displays_;
index bab6e66..268f51f 100644 (file)
@@ -62,6 +62,7 @@ if (use_ozone) {
 external_ui_gfx_sources = [
   "//tizen_src/chromium_impl/ui/display/device_display_info_efl.cc",
   "//tizen_src/chromium_impl/ui/display/device_display_info_efl.h",
+  "//tizen_src/chromium_impl/ui/display/device_display_info_observer_efl.h",
   "//tizen_src/chromium_impl/ui/display/screen_efl.cc",
   "//tizen_src/chromium_impl/ui/display/screen_efl.h",
   "//ui/gfx/nine_image_painter.cc",