| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ASH_DISPLAY_DISPLAY_PREFS_H_ |
| #define ASH_DISPLAY_DISPLAY_PREFS_H_ |
| |
| #include <stdint.h> |
| #include <array> |
| #include <memory> |
| |
| #include "ash/ash_export.h" |
| #include "ash/session/session_observer.h" |
| #include "ash/shell_observer.h" |
| #include "base/optional.h" |
| #include "third_party/cros_system_api/dbus/service_constants.h" |
| #include "ui/display/display.h" |
| #include "ui/display/display_layout.h" |
| |
| class PrefRegistry; |
| class PrefRegistrySimple; |
| class PrefService; |
| |
| namespace base { |
| class Value; |
| } |
| |
| namespace gfx { |
| class Point; |
| } |
| |
| namespace display { |
| struct MixedMirrorModeParams; |
| struct TouchCalibrationData; |
| } // namespace display |
| |
| namespace ash { |
| |
| class DisplayPrefsTest; |
| |
| // Manages display preference settings. Settings are stored in the local state |
| // for the session. |
| class ASH_EXPORT DisplayPrefs : public ShellObserver, public SessionObserver { |
| public: |
| // Returns a dictionary of display pref values stored in PrefService. |
| // See chrome/browser/ui/ash/ash_shell_init.cc for details. |
| static std::unique_ptr<base::Value> GetInitialDisplayPrefsFromPrefService( |
| PrefService* pref_service); |
| // Registers the prefs associated with display settings. |
| static void RegisterLocalStatePrefs(PrefRegistrySimple* registry); |
| static void RegisterForeignPrefs(PrefRegistry* registry); |
| |
| explicit DisplayPrefs(std::unique_ptr<base::Value> initial_prefs); |
| ~DisplayPrefs() override; |
| |
| // ShellObserver |
| void OnLocalStatePrefServiceInitialized(PrefService* pref_service) override; |
| |
| // SessionObserver: |
| void OnFirstSessionStarted() override; |
| |
| // Stores all current displays preferences or queues a request until |
| // LoadDisplayPreferences is called. |
| void MaybeStoreDisplayPrefs(); |
| |
| // Test helper methods. |
| void StoreDisplayRotationPrefsForTest(display::Display::Rotation rotation, |
| bool rotation_lock); |
| void StoreDisplayLayoutPrefForTest(const display::DisplayIdList& list, |
| const display::DisplayLayout& layout); |
| void StoreDisplayPowerStateForTest(chromeos::DisplayPowerState power_state); |
| void LoadTouchAssociationPreferenceForTest(); |
| void StoreLegacyTouchDataForTest(int64_t display_id, |
| const display::TouchCalibrationData& data); |
| // Parses the marshalled string data stored in local preferences for |
| // calibration points and populates |point_pair_quad| using the unmarshalled |
| // data. See TouchCalibrationData in Managed display info. |
| bool ParseTouchCalibrationStringForTest( |
| const std::string& str, |
| std::array<std::pair<gfx::Point, gfx::Point>, 4>* point_pair_quad); |
| |
| // Stores the given |mixed_params| for tests. Clears stored parameters if |
| // |mixed_params| is null. |
| void StoreDisplayMixedMirrorModeParamsForTest( |
| const base::Optional<display::MixedMirrorModeParams>& mixed_params); |
| |
| // Class wrapping a PrefService and a dictionary of initial pref values to use |
| // until OnLocalStatePrefServiceInitialized is called. |
| class LocalState; |
| |
| protected: |
| friend class DisplayPrefsTest; |
| |
| // Loads display preferences from |local_state_|. |
| void LoadDisplayPreferences(); |
| |
| // Constructs a LocalState instance with |pref_service| for testing. |
| void SetPrefServiceForTest(PrefService* pref_service); |
| |
| private: |
| std::unique_ptr<LocalState> local_state_; |
| bool store_requested_ = false; |
| |
| DISALLOW_COPY_AND_ASSIGN(DisplayPrefs); |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_DISPLAY_DISPLAY_PREFS_H_ |