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