clock_model.cc 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // Copyright 2013 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/system/model/clock_model.h"
  5. #include "ash/public/cpp/system_tray_client.h"
  6. #include "ash/session/session_controller_impl.h"
  7. #include "ash/shell.h"
  8. #include "ash/system/model/clock_observer.h"
  9. #include "ash/system/model/system_tray_model.h"
  10. namespace ash {
  11. ClockModel::ClockModel() : hour_clock_type_(base::GetHourClockType()) {
  12. // SystemClockClient may be null in tests.
  13. if (SystemClockClient::Get()) {
  14. SystemClockClient::Get()->AddObserver(this);
  15. can_set_time_ = SystemClockClient::Get()->CanSetTime();
  16. }
  17. system::TimezoneSettings::GetInstance()->AddObserver(this);
  18. }
  19. ClockModel::~ClockModel() {
  20. // SystemClockClient may be null in tests.
  21. if (SystemClockClient::Get())
  22. SystemClockClient::Get()->RemoveObserver(this);
  23. system::TimezoneSettings::GetInstance()->RemoveObserver(this);
  24. }
  25. void ClockModel::AddObserver(ClockObserver* observer) {
  26. observers_.AddObserver(observer);
  27. }
  28. void ClockModel::RemoveObserver(ClockObserver* observer) {
  29. observers_.RemoveObserver(observer);
  30. }
  31. void ClockModel::SetUse24HourClock(bool use_24_hour) {
  32. hour_clock_type_ = use_24_hour ? base::k24HourClock : base::k12HourClock;
  33. NotifyDateFormatChanged();
  34. }
  35. bool ClockModel::IsLoggedIn() const {
  36. return Shell::Get()->session_controller()->login_status() !=
  37. LoginStatus::NOT_LOGGED_IN;
  38. }
  39. bool ClockModel::IsSettingsAvailable() const {
  40. return Shell::Get()->session_controller()->ShouldEnableSettings() ||
  41. can_set_time();
  42. }
  43. void ClockModel::ShowDateSettings() {
  44. Shell::Get()->system_tray_model()->client()->ShowDateSettings();
  45. }
  46. void ClockModel::ShowPowerSettings() {
  47. Shell::Get()->system_tray_model()->client()->ShowPowerSettings();
  48. }
  49. void ClockModel::ShowSetTimeDialog() {
  50. Shell::Get()->system_tray_model()->client()->ShowSetTimeDialog();
  51. }
  52. void ClockModel::NotifyRefreshClock() {
  53. for (auto& observer : observers_)
  54. observer.Refresh();
  55. }
  56. void ClockModel::NotifyDateFormatChanged() {
  57. for (auto& observer : observers_)
  58. observer.OnDateFormatChanged();
  59. }
  60. void ClockModel::NotifySystemClockTimeUpdated() {
  61. for (auto& observer : observers_)
  62. observer.OnSystemClockTimeUpdated();
  63. }
  64. void ClockModel::NotifySystemClockCanSetTimeChanged(bool can_set_time) {
  65. for (auto& observer : observers_)
  66. observer.OnSystemClockCanSetTimeChanged(can_set_time);
  67. }
  68. void ClockModel::SystemClockUpdated() {
  69. NotifySystemClockTimeUpdated();
  70. }
  71. void ClockModel::SystemClockCanSetTimeChanged(bool can_set_time) {
  72. can_set_time_ = can_set_time;
  73. NotifySystemClockCanSetTimeChanged(can_set_time_);
  74. }
  75. void ClockModel::TimezoneChanged(const icu::TimeZone& timezone) {
  76. NotifyRefreshClock();
  77. }
  78. } // namespace ash