// Copyright 2013 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.

#include "ash/system/system_clock_observer.h"

#include "ash/shell.h"
#include "ash/system/tray/system_tray_notifier.h"
#include "chromeos/dbus/dbus_thread_manager.h"

namespace ash {

SystemClockObserver::SystemClockObserver() {
  chromeos::DBusThreadManager::Get()->GetSystemClockClient()->AddObserver(this);
  chromeos::system::TimezoneSettings::GetInstance()->AddObserver(this);
  can_set_time_ =
      chromeos::DBusThreadManager::Get()->GetSystemClockClient()->CanSetTime();
}

SystemClockObserver::~SystemClockObserver() {
  chromeos::DBusThreadManager::Get()->GetSystemClockClient()->RemoveObserver(
      this);
  chromeos::system::TimezoneSettings::GetInstance()->RemoveObserver(this);
}

void SystemClockObserver::SystemClockUpdated() {
  Shell::Get()->system_tray_notifier()->NotifySystemClockTimeUpdated();
}

void SystemClockObserver::SystemClockCanSetTimeChanged(bool can_set_time) {
  can_set_time_ = can_set_time;
  Shell::Get()->system_tray_notifier()->NotifySystemClockCanSetTimeChanged(
      can_set_time_);
}

void SystemClockObserver::TimezoneChanged(const icu::TimeZone& timezone) {
  Shell::Get()->system_tray_notifier()->NotifyRefreshClock();
}

}  // namespace ash
