OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef ATHENA_SYSTEM_ORIENTATION_CONTROLLER_H_ | 5 #ifndef ATHENA_SYSTEM_ORIENTATION_CONTROLLER_H_ |
6 #define ATHENA_SYSTEM_ORIENTATION_CONTROLLER_H_ | 6 #define ATHENA_SYSTEM_ORIENTATION_CONTROLLER_H_ |
7 | 7 |
8 #include "athena/system/device_socket_listener.h" | |
9 #include "base/macros.h" | 8 #include "base/macros.h" |
10 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
11 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
12 #include "base/memory/weak_ptr.h" | 11 #include "base/memory/weak_ptr.h" |
| 12 #include "chromeos/accelerometer/accelerometer_reader.h" |
13 #include "ui/gfx/display.h" | 13 #include "ui/gfx/display.h" |
14 | 14 |
15 namespace base { | 15 namespace base { |
16 class FilePath; | |
17 class FilePathWatcher; | |
18 class TaskRunner; | 16 class TaskRunner; |
19 } | 17 } |
20 | 18 |
21 namespace athena { | 19 namespace athena { |
22 | 20 |
23 // Monitors accelerometers, detecting orientation changes. When a change is | 21 // Monitors accelerometers, detecting orientation changes. When a change is |
24 // detected rotates the root window to match. | 22 // detected rotates the root window to match. |
25 class OrientationController | 23 class OrientationController |
26 : public DeviceSocketListener, | 24 : public chromeos::AccelerometerReader::Delegate { |
27 public base::RefCountedThreadSafe<OrientationController> { | |
28 public: | 25 public: |
29 OrientationController(); | 26 OrientationController(); |
| 27 virtual ~OrientationController(); |
30 | 28 |
31 void InitWith(scoped_refptr<base::TaskRunner> file_task_runner); | 29 void InitWith(scoped_refptr<base::TaskRunner> blocking_task_runner); |
32 | |
33 void Shutdown(); | 30 void Shutdown(); |
34 | 31 |
| 32 // chromeos::AccelerometerReader::Delegate |
| 33 virtual void HandleAccelerometerUpdate( |
| 34 const ui::AccelerometerUpdate& update) OVERRIDE; |
| 35 |
35 private: | 36 private: |
36 friend class base::RefCountedThreadSafe<OrientationController>; | |
37 | |
38 virtual ~OrientationController(); | |
39 | |
40 void ShutdownOnFILE(); | |
41 // Watch for the socket path to be created, called on the FILE thread. | |
42 void WatchForSocketPathOnFILE(); | |
43 void OnFilePathChangedOnFILE(const base::FilePath& path, bool error); | |
44 | |
45 // Overridden from device::DeviceSocketListener: | |
46 virtual void OnDataAvailableOnFILE(const void* data) OVERRIDE; | |
47 | |
48 // Rotates the display to |rotation|, called on the UI thread. | |
49 void RotateOnUI(gfx::Display::Rotation rotation); | |
50 | |
51 // The last configured rotation. | 37 // The last configured rotation. |
52 gfx::Display::Rotation current_rotation_; | 38 gfx::Display::Rotation current_rotation_; |
53 | 39 |
54 // The timestamp of the last applied orientation change. | 40 scoped_ptr<chromeos::AccelerometerReader> accelerometer_reader_; |
55 int64_t last_orientation_change_time_; | |
56 | |
57 // True if the OrientaionController has already been shutdown. | |
58 // This is initialized on UI thread, but must be accessed / modified | |
59 // only on FILE thread. | |
60 bool shutdown_; | |
61 | |
62 // A task runner for the UI thread. | |
63 scoped_refptr<base::TaskRunner> ui_task_runner_; | |
64 | |
65 // A task runner for the FILE thread. | |
66 scoped_refptr<base::TaskRunner> file_task_runner_; | |
67 | |
68 // File path watcher used to detect when sensors are present. | |
69 scoped_ptr<base::FilePathWatcher> watcher_; | |
70 | 41 |
71 DISALLOW_COPY_AND_ASSIGN(OrientationController); | 42 DISALLOW_COPY_AND_ASSIGN(OrientationController); |
72 }; | 43 }; |
73 | 44 |
74 } // namespace athena | 45 } // namespace athena |
75 | 46 |
76 #endif // ATHENA_SYSTEM_ORIENTATION_CONTROLLER_H_ | 47 #endif // ATHENA_SYSTEM_ORIENTATION_CONTROLLER_H_ |
OLD | NEW |