15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved.
25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be
35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file.
45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/webui/options/chromeos/date_time_options_handler.h"
65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/bind.h"
85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/bind_helpers.h"
95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/values.h"
105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/chromeos/set_time_dialog.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chromeos/dbus/dbus_thread_manager.h"
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chromeos/dbus/system_clock_client.h"
145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/public/browser/web_contents.h"
155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/public/browser/web_ui.h"
165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ui/base/l10n/l10n_util.h"
175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace chromeos {
195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace options {
205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuDateTimeOptionsHandler::DateTimeOptionsHandler()
225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    : can_set_time_(false), page_initialized_(false) {
235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuDateTimeOptionsHandler::~DateTimeOptionsHandler() {
265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  DBusThreadManager::Get()->GetSystemClockClient()->RemoveObserver(this);
275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid DateTimeOptionsHandler::GetLocalizedValues(
305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    base::DictionaryValue* localized_strings) {
315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  DCHECK(localized_strings);
325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  localized_strings->SetString(
345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      "setTimeButton",
355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_SET_TIME_BUTTON));
365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  localized_strings->SetString(
375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      "timeSyncedExplanation",
385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_OPTIONS_SETTINGS_TIME_SYNCED_EXPLANATION));
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid DateTimeOptionsHandler::InitializeHandler() {
425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SystemClockClient* system_clock_client =
435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      DBusThreadManager::Get()->GetSystemClockClient();
445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  system_clock_client->AddObserver(this);
455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  can_set_time_ = system_clock_client->CanSetTime();
475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SystemClockCanSetTimeChanged(can_set_time_);
485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid DateTimeOptionsHandler::InitializePage() {
515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  page_initialized_ = true;
525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SystemClockCanSetTimeChanged(can_set_time_);
535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid DateTimeOptionsHandler::RegisterMessages() {
565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Callback for set time button.
575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  web_ui()->RegisterMessageCallback(
585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      "showSetTime",
595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      base::Bind(&DateTimeOptionsHandler::HandleShowSetTime,
605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                 base::Unretained(this)));
615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid DateTimeOptionsHandler::SystemClockCanSetTimeChanged(bool can_set_time) {
645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (page_initialized_) {
655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    web_ui()->CallJavascriptFunction("BrowserOptions.setCanSetTime",
665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                     base::FundamentalValue(can_set_time));
675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  }
685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  can_set_time_ = can_set_time;
695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid DateTimeOptionsHandler::HandleShowSetTime(const base::ListValue* args) {
725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Make sure the clock status hasn't changed since the button was clicked.
735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (can_set_time_) {
745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetTimeDialog::ShowDialog(
75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        web_ui()->GetWebContents()->GetTopLevelNativeWindow());
765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  }
775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace options
805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}  // namespace chromeos
81