Commit 9d6537c0 authored by jonross's avatar jonross Committed by Commit bot

Change AccelerometerReader to a Singleton

On ChromeOS the accelerometer needs to be read by both ash/ and content/

This change removes the ownership of AccelerometerReader from Shell, changing it into a Singleton.

TEST=Confirmed that a device with an accelerometer enters maximize mode.
BUG=342908

Review URL: https://codereview.chromium.org/822503003

Cr-Commit-Position: refs/heads/master@{#311353}
parent 15625947
...@@ -74,7 +74,7 @@ ScreenOrientationController::ScreenOrientationController() ...@@ -74,7 +74,7 @@ ScreenOrientationController::ScreenOrientationController()
ScreenOrientationController::~ScreenOrientationController() { ScreenOrientationController::~ScreenOrientationController() {
content::ScreenOrientationProvider::SetDelegate(NULL); content::ScreenOrientationProvider::SetDelegate(NULL);
Shell::GetInstance()->RemoveShellObserver(this); Shell::GetInstance()->RemoveShellObserver(this);
Shell::GetInstance()->accelerometer_reader()->RemoveObserver(this); chromeos::AccelerometerReader::GetInstance()->RemoveObserver(this);
Shell::GetInstance()->display_controller()->RemoveObserver(this); Shell::GetInstance()->display_controller()->RemoveObserver(this);
} }
...@@ -220,14 +220,14 @@ void ScreenOrientationController::OnMaximizeModeStarted() { ...@@ -220,14 +220,14 @@ void ScreenOrientationController::OnMaximizeModeStarted() {
display_manager->GetDisplayInfo(gfx::Display::InternalDisplayId()) display_manager->GetDisplayInfo(gfx::Display::InternalDisplayId())
.rotation(); .rotation();
LoadDisplayRotationProperties(); LoadDisplayRotationProperties();
Shell::GetInstance()->accelerometer_reader()->AddObserver(this); chromeos::AccelerometerReader::GetInstance()->AddObserver(this);
Shell::GetInstance()->display_controller()->AddObserver(this); Shell::GetInstance()->display_controller()->AddObserver(this);
} }
void ScreenOrientationController::OnMaximizeModeEnded() { void ScreenOrientationController::OnMaximizeModeEnded() {
if (!Shell::GetInstance()->display_manager()->HasInternalDisplay()) if (!Shell::GetInstance()->display_manager()->HasInternalDisplay())
return; return;
Shell::GetInstance()->accelerometer_reader()->RemoveObserver(this); chromeos::AccelerometerReader::GetInstance()->RemoveObserver(this);
Shell::GetInstance()->display_controller()->RemoveObserver(this); Shell::GetInstance()->display_controller()->RemoveObserver(this);
if (current_rotation_ != user_rotation_) if (current_rotation_ != user_rotation_)
SetDisplayRotation(user_rotation_); SetDisplayRotation(user_rotation_);
......
...@@ -138,7 +138,6 @@ ...@@ -138,7 +138,6 @@
#include "ash/virtual_keyboard_controller.h" #include "ash/virtual_keyboard_controller.h"
#include "base/bind_helpers.h" #include "base/bind_helpers.h"
#include "base/sys_info.h" #include "base/sys_info.h"
#include "chromeos/accelerometer/accelerometer_reader.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "ui/chromeos/user_activity_power_manager_notifier.h" #include "ui/chromeos/user_activity_power_manager_notifier.h"
#include "ui/display/chromeos/display_configurator.h" #include "ui/display/chromeos/display_configurator.h"
...@@ -638,7 +637,6 @@ Shell::Shell(ShellDelegate* delegate) ...@@ -638,7 +637,6 @@ Shell::Shell(ShellDelegate* delegate)
window_positioner_(new WindowPositioner), window_positioner_(new WindowPositioner),
activation_client_(NULL), activation_client_(NULL),
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
accelerometer_reader_(new chromeos::AccelerometerReader()),
display_configurator_(new ui::DisplayConfigurator()), display_configurator_(new ui::DisplayConfigurator()),
#endif // defined(OS_CHROMEOS) #endif // defined(OS_CHROMEOS)
native_cursor_manager_(new AshNativeCursorManager), native_cursor_manager_(new AshNativeCursorManager),
......
...@@ -42,12 +42,6 @@ class FocusClient; ...@@ -42,12 +42,6 @@ class FocusClient;
} }
} }
#if defined(OS_CHROMEOS)
namespace chromeos {
class AccelerometerReader;
}
#endif
namespace gfx { namespace gfx {
class ImageSkia; class ImageSkia;
class Point; class Point;
...@@ -517,10 +511,6 @@ class ASH_EXPORT Shell : public SystemModalContainerEventFilterDelegate, ...@@ -517,10 +511,6 @@ class ASH_EXPORT Shell : public SystemModalContainerEventFilterDelegate,
} }
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
chromeos::AccelerometerReader* accelerometer_reader() {
return accelerometer_reader_.get();
}
// TODO(oshima): Move these objects to DisplayController. // TODO(oshima): Move these objects to DisplayController.
ui::DisplayConfigurator* display_configurator() { ui::DisplayConfigurator* display_configurator() {
return display_configurator_.get(); return display_configurator_.get();
...@@ -714,7 +704,6 @@ class ASH_EXPORT Shell : public SystemModalContainerEventFilterDelegate, ...@@ -714,7 +704,6 @@ class ASH_EXPORT Shell : public SystemModalContainerEventFilterDelegate,
scoped_ptr<LocaleNotificationController> locale_notification_controller_; scoped_ptr<LocaleNotificationController> locale_notification_controller_;
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
scoped_ptr<chromeos::AccelerometerReader> accelerometer_reader_;
scoped_ptr<PowerEventObserver> power_event_observer_; scoped_ptr<PowerEventObserver> power_event_observer_;
scoped_ptr<ui::UserActivityPowerManagerNotifier> user_activity_notifier_; scoped_ptr<ui::UserActivityPowerManagerNotifier> user_activity_notifier_;
scoped_ptr<VideoActivityNotifier> video_activity_notifier_; scoped_ptr<VideoActivityNotifier> video_activity_notifier_;
......
...@@ -79,7 +79,7 @@ MaximizeModeController::MaximizeModeController() ...@@ -79,7 +79,7 @@ MaximizeModeController::MaximizeModeController()
lid_is_closed_(false) { lid_is_closed_(false) {
Shell::GetInstance()->AddShellObserver(this); Shell::GetInstance()->AddShellObserver(this);
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
Shell::GetInstance()->accelerometer_reader()->AddObserver(this); chromeos::AccelerometerReader::GetInstance()->AddObserver(this);
chromeos::DBusThreadManager::Get()-> chromeos::DBusThreadManager::Get()->
GetPowerManagerClient()->AddObserver(this); GetPowerManagerClient()->AddObserver(this);
#endif // OS_CHROMEOS #endif // OS_CHROMEOS
...@@ -88,7 +88,7 @@ MaximizeModeController::MaximizeModeController() ...@@ -88,7 +88,7 @@ MaximizeModeController::MaximizeModeController()
MaximizeModeController::~MaximizeModeController() { MaximizeModeController::~MaximizeModeController() {
Shell::GetInstance()->RemoveShellObserver(this); Shell::GetInstance()->RemoveShellObserver(this);
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
Shell::GetInstance()->accelerometer_reader()->RemoveObserver(this); chromeos::AccelerometerReader::GetInstance()->RemoveObserver(this);
chromeos::DBusThreadManager::Get()-> chromeos::DBusThreadManager::Get()->
GetPowerManagerClient()->RemoveObserver(this); GetPowerManagerClient()->RemoveObserver(this);
#endif // OS_CHROMEOS #endif // OS_CHROMEOS
......
...@@ -57,7 +57,7 @@ class MaximizeModeControllerTest : public test::AshTestBase { ...@@ -57,7 +57,7 @@ class MaximizeModeControllerTest : public test::AshTestBase {
void SetUp() override { void SetUp() override {
test::AshTestBase::SetUp(); test::AshTestBase::SetUp();
Shell::GetInstance()->accelerometer_reader()->RemoveObserver( chromeos::AccelerometerReader::GetInstance()->RemoveObserver(
maximize_mode_controller()); maximize_mode_controller());
// Set the first display to be the internal display for the accelerometer // Set the first display to be the internal display for the accelerometer
...@@ -67,7 +67,7 @@ class MaximizeModeControllerTest : public test::AshTestBase { ...@@ -67,7 +67,7 @@ class MaximizeModeControllerTest : public test::AshTestBase {
} }
void TearDown() override { void TearDown() override {
Shell::GetInstance()->accelerometer_reader()->AddObserver( chromeos::AccelerometerReader::GetInstance()->AddObserver(
maximize_mode_controller()); maximize_mode_controller());
test::AshTestBase::TearDown(); test::AshTestBase::TearDown();
} }
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/files/file_util.h" #include "base/files/file_util.h"
#include "base/message_loop/message_loop.h" #include "base/message_loop/message_loop.h"
#include "base/task_runner.h" #include "base/task_runner.h"
#include "chromeos/accelerometer/accelerometer_reader.h"
namespace athena { namespace athena {
...@@ -24,18 +25,16 @@ OrientationController::OrientationController() { ...@@ -24,18 +25,16 @@ OrientationController::OrientationController() {
void OrientationController::InitWith( void OrientationController::InitWith(
scoped_refptr<base::TaskRunner> blocking_task_runner) { scoped_refptr<base::TaskRunner> blocking_task_runner) {
accelerometer_reader_.reset(new chromeos::AccelerometerReader()); chromeos::AccelerometerReader::GetInstance()->Initialize(
accelerometer_reader_->Initialize(blocking_task_runner); blocking_task_runner);
accelerometer_reader_->AddObserver(this); chromeos::AccelerometerReader::GetInstance()->AddObserver(this);
} }
OrientationController::~OrientationController() { OrientationController::~OrientationController() {
DCHECK(!accelerometer_reader_.get());
} }
void OrientationController::Shutdown() { void OrientationController::Shutdown() {
accelerometer_reader_->RemoveObserver(this); chromeos::AccelerometerReader::GetInstance()->RemoveObserver(this);
accelerometer_reader_.reset();
} }
void OrientationController::OnAccelerometerUpdated( void OrientationController::OnAccelerometerUpdated(
......
...@@ -35,8 +35,6 @@ class OrientationController : public chromeos::AccelerometerReader::Observer { ...@@ -35,8 +35,6 @@ class OrientationController : public chromeos::AccelerometerReader::Observer {
// The last configured rotation. // The last configured rotation.
gfx::Display::Rotation current_rotation_; gfx::Display::Rotation current_rotation_;
scoped_ptr<chromeos::AccelerometerReader> accelerometer_reader_;
DISALLOW_COPY_AND_ASSIGN(OrientationController); DISALLOW_COPY_AND_ASSIGN(OrientationController);
}; };
......
...@@ -65,7 +65,7 @@ void OpenAsh(gfx::AcceleratedWidget remote_window) { ...@@ -65,7 +65,7 @@ void OpenAsh(gfx::AcceleratedWidget remote_window) {
scoped_ptr<ash::ScreenshotDelegate>(new ChromeScreenshotGrabber).Pass()); scoped_ptr<ash::ScreenshotDelegate>(new ChromeScreenshotGrabber).Pass());
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
// TODO(flackr): Investigate exposing a blocking pool task runner to chromeos. // TODO(flackr): Investigate exposing a blocking pool task runner to chromeos.
shell->accelerometer_reader()->Initialize( chromeos::AccelerometerReader::GetInstance()->Initialize(
content::BrowserThread::GetBlockingPool() content::BrowserThread::GetBlockingPool()
->GetTaskRunnerWithShutdownBehavior( ->GetTaskRunnerWithShutdownBehavior(
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/files/file_util.h" #include "base/files/file_util.h"
#include "base/location.h" #include "base/location.h"
#include "base/memory/singleton.h"
#include "base/message_loop/message_loop.h" #include "base/message_loop/message_loop.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
...@@ -187,12 +188,9 @@ AccelerometerReader::ConfigurationData::ConfigurationData() ...@@ -187,12 +188,9 @@ AccelerometerReader::ConfigurationData::ConfigurationData()
AccelerometerReader::ConfigurationData::~ConfigurationData() { AccelerometerReader::ConfigurationData::~ConfigurationData() {
} }
AccelerometerReader::AccelerometerReader() // static
: configuration_(new AccelerometerReader::Configuration()), AccelerometerReader* AccelerometerReader::GetInstance() {
weak_factory_(this) { return Singleton<AccelerometerReader>::get();
}
AccelerometerReader::~AccelerometerReader() {
} }
void AccelerometerReader::Initialize( void AccelerometerReader::Initialize(
...@@ -224,6 +222,14 @@ bool AccelerometerReader::IsReadingStable(const ui::AccelerometerUpdate& update, ...@@ -224,6 +222,14 @@ bool AccelerometerReader::IsReadingStable(const ui::AccelerometerUpdate& update,
kDeviationFromGravityThreshold; kDeviationFromGravityThreshold;
} }
AccelerometerReader::AccelerometerReader()
: configuration_(new AccelerometerReader::Configuration()),
weak_factory_(this) {
}
AccelerometerReader::~AccelerometerReader() {
}
void AccelerometerReader::OnInitialized( void AccelerometerReader::OnInitialized(
scoped_refptr<AccelerometerReader::Configuration> configuration, scoped_refptr<AccelerometerReader::Configuration> configuration,
bool success) { bool success) {
......
...@@ -11,6 +11,9 @@ ...@@ -11,6 +11,9 @@
#include "chromeos/chromeos_export.h" #include "chromeos/chromeos_export.h"
#include "ui/accelerometer/accelerometer_types.h" #include "ui/accelerometer/accelerometer_types.h"
template <typename T>
struct DefaultSingletonTraits;
namespace base { namespace base {
class TaskRunner; class TaskRunner;
} }
...@@ -54,8 +57,7 @@ class CHROMEOS_EXPORT AccelerometerReader { ...@@ -54,8 +57,7 @@ class CHROMEOS_EXPORT AccelerometerReader {
virtual ~Observer() {} virtual ~Observer() {}
}; };
AccelerometerReader(); static AccelerometerReader* GetInstance();
~AccelerometerReader();
void Initialize(scoped_refptr<base::TaskRunner> blocking_task_runner); void Initialize(scoped_refptr<base::TaskRunner> blocking_task_runner);
...@@ -69,7 +71,13 @@ class CHROMEOS_EXPORT AccelerometerReader { ...@@ -69,7 +71,13 @@ class CHROMEOS_EXPORT AccelerometerReader {
static bool IsReadingStable(const ui::AccelerometerUpdate& update, static bool IsReadingStable(const ui::AccelerometerUpdate& update,
ui::AccelerometerSource source); ui::AccelerometerSource source);
protected:
AccelerometerReader();
virtual ~AccelerometerReader();
private: private:
friend struct DefaultSingletonTraits<AccelerometerReader>;
// Dispatched when initialization is complete. If |success|, |configuration| // Dispatched when initialization is complete. If |success|, |configuration|
// provides the details of the detected accelerometer. // provides the details of the detected accelerometer.
void OnInitialized(scoped_refptr<Configuration> configuration, bool success); void OnInitialized(scoped_refptr<Configuration> configuration, bool success);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment