Commit 1ac37d68 authored by Ahmed Fakhry's avatar Ahmed Fakhry Committed by Commit Bot

Fix AccelerometerFileReader to keep reading when auto-rotation is on

Auto rotation depends on the tablet physical state of the device,
not the UI state. Therefore AccelerometerFileReader should keep
reading accelerometer data as long as the device is physically
a tablet (detached or flipped).

BUG=1056862
TEST=Manually on hatch.

Change-Id: I96f6c8f1430fa2d50b20aaa97bd25e072bce098f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2079618Reviewed-by: default avatarXiaoqian Dai <xdai@chromium.org>
Commit-Queue: Ahmed Fakhry <afakhry@chromium.org>
Cr-Commit-Position: refs/heads/master@{#745284}
parent 9757f66b
...@@ -189,10 +189,7 @@ class AccelerometerFileReader ...@@ -189,10 +189,7 @@ class AccelerometerFileReader
void StopListenToTabletModeController(); void StopListenToTabletModeController();
// TabletModeObserver: // TabletModeObserver:
// OnTabletModeStarted() triggers accelerometer read. void OnTabletPhysicalStateChanged() override;
// OnTabletModeEnding() disables accelerometer read.
void OnTabletModeStarted() override;
void OnTabletModeEnding() override;
private: private:
friend class base::RefCountedThreadSafe<AccelerometerFileReader>; friend class base::RefCountedThreadSafe<AccelerometerFileReader>;
...@@ -544,31 +541,30 @@ void AccelerometerFileReader::StopListenToTabletModeController() { ...@@ -544,31 +541,30 @@ void AccelerometerFileReader::StopListenToTabletModeController() {
Shell::Get()->tablet_mode_controller()->RemoveObserver(this); Shell::Get()->tablet_mode_controller()->RemoveObserver(this);
} }
void AccelerometerFileReader::OnTabletModeStarted() { void AccelerometerFileReader::OnTabletPhysicalStateChanged() {
// When CrOS EC lid angle driver is not present, accelerometer read is always // When CrOS EC lid angle driver is not present, accelerometer read is always
// ON and can't be tuned. Thus AccelerometerFileReader no longer listens to // ON and can't be tuned. Thus AccelerometerFileReader no longer listens to
// tablet mode event. // tablet mode event.
auto* tablet_mode_controller = Shell::Get()->tablet_mode_controller();
if (ec_lid_angle_driver_ == NOT_SUPPORTED) { if (ec_lid_angle_driver_ == NOT_SUPPORTED) {
Shell::Get()->tablet_mode_controller()->RemoveObserver(this); tablet_mode_controller->RemoveObserver(this);
return; return;
} }
task_runner_->PostNonNestableTask( // Auto rotation is turned on when the device is physically used as a tablet
FROM_HERE, base::BindOnce(&AccelerometerFileReader::TriggerRead, this)); // (i.e. flipped or detached), regardless of the UI state (i.e. whether tablet
} // mode is turned on or off).
const bool is_auto_rotation_on =
void AccelerometerFileReader::OnTabletModeEnding() { tablet_mode_controller->is_in_tablet_physical_state();
if (ec_lid_angle_driver_ == NOT_SUPPORTED) {
Shell::Get()->tablet_mode_controller()->RemoveObserver(this);
return;
}
task_runner_->PostNonNestableTask( task_runner_->PostNonNestableTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&AccelerometerFileReader::CancelRead, this)); is_auto_rotation_on
? base::BindOnce(&AccelerometerFileReader::TriggerRead, this)
: base::BindOnce(&AccelerometerFileReader::CancelRead, this));
} }
AccelerometerFileReader::~AccelerometerFileReader() {} AccelerometerFileReader::~AccelerometerFileReader() = default;
bool AccelerometerFileReader::InitializeAccelerometer( bool AccelerometerFileReader::InitializeAccelerometer(
const base::FilePath& iio_path, const base::FilePath& iio_path,
......
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