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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/webui/chromeos/login/controller_pairing_screen_handler.h"
6
7 #include "base/strings/string_util.h"
8 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
9 #include "content/public/browser/web_contents.h"
10 #include "grit/generated_resources.h"
11
12 namespace chromeos {
13
14 namespace {
15
16 const char kJsScreenPath[] = "login.ControllerPairingScreen";
17
18 const char kMethodContextChanged[] = "contextChanged";
19
20 const char kCallbackUserActed[] = "userActed";
21 const char kCallbackContextChanged[] = "contextChanged";
22
23 } // namespace
24
ControllerPairingScreenHandler()25 ControllerPairingScreenHandler::ControllerPairingScreenHandler()
26 : BaseScreenHandler(kJsScreenPath), delegate_(NULL), show_on_init_(false) {
27 }
28
~ControllerPairingScreenHandler()29 ControllerPairingScreenHandler::~ControllerPairingScreenHandler() {
30 if (delegate_)
31 delegate_->OnActorDestroyed(this);
32 }
33
HandleUserActed(const std::string & action)34 void ControllerPairingScreenHandler::HandleUserActed(
35 const std::string& action) {
36 if (!delegate_)
37 return;
38 delegate_->OnUserActed(action);
39 }
40
HandleContextChanged(const base::DictionaryValue * diff)41 void ControllerPairingScreenHandler::HandleContextChanged(
42 const base::DictionaryValue* diff) {
43 if (!delegate_)
44 return;
45 delegate_->OnScreenContextChanged(*diff);
46 }
47
Initialize()48 void ControllerPairingScreenHandler::Initialize() {
49 if (!page_is_ready() || !delegate_)
50 return;
51
52 if (show_on_init_) {
53 Show();
54 show_on_init_ = false;
55 }
56 }
57
DeclareLocalizedValues(LocalizedValuesBuilder * builder)58 void ControllerPairingScreenHandler::DeclareLocalizedValues(
59 LocalizedValuesBuilder* builder) {
60 // TODO(dzhioev): Move the prefix logic to the base screen handler after
61 // migration.
62 std::string prefix;
63 base::ReplaceChars(kJsScreenPath, ".", "_", &prefix);
64 prefix += "_";
65
66 builder->Add(prefix + "welcome", IDS_PAIRING_CONTROLLER_WELCOME);
67 builder->Add(prefix + "searching", IDS_PAIRING_CONTROLLER_SEARCHING);
68 builder->Add(prefix + "needHelp", IDS_PAIRING_NEED_HELP);
69 builder->Add(prefix + "troubleConnecting",
70 IDS_PAIRING_CONTROLLER_TROUBLE_CONNECTING);
71 builder->Add(prefix + "connectingAdvice",
72 IDS_PAIRING_CONTROLLER_CONNECTING_ADVICE);
73 builder->Add(prefix + "adviceGotIt", IDS_PAIRING_CONTROLLER_ADVICE_GOT_IT);
74 builder->Add(prefix + "selectTitle", IDS_PAIRING_CONTROLLER_SELECT_TITLE);
75 builder->Add(prefix + "connect", IDS_PAIRING_CONTROLLER_CONNECT);
76 builder->Add(prefix + "connecting", IDS_PAIRING_CONTROLLER_CONNECTING);
77 builder->Add(prefix + "confirmationTitle",
78 IDS_PAIRING_CONTROLLER_CONFIRMATION_TITLE);
79 builder->Add(prefix + "confirmationQuestion",
80 IDS_PAIRING_CONTROLLER_CONFIRMATION_QUESTION);
81 builder->Add(prefix + "rejectCode", IDS_PAIRING_CONTROLLER_REJECT_CODE);
82 builder->Add(prefix + "acceptCode", IDS_PAIRING_CONTROLLER_ACCEPT_CODE);
83 builder->Add(prefix + "updateTitle", IDS_PAIRING_CONTROLLER_UPDATE_TITLE);
84 builder->Add(prefix + "updateText", IDS_PAIRING_CONTROLLER_UPDATE_TEXT);
85 builder->Add(prefix + "connectionLostTitle",
86 IDS_PAIRING_CONTROLLER_CONNECTION_LOST_TITLE);
87 builder->Add(prefix + "connectionLostText",
88 IDS_PAIRING_CONTROLLER_CONNECTION_LOST_TEXT);
89 builder->Add(prefix + "enrollTitle", IDS_PAIRING_ENROLL_TITLE);
90 builder->Add(prefix + "enrollText1", IDS_PAIRING_CONTROLLER_ENROLL_TEXT_1);
91 builder->Add(prefix + "enrollText2", IDS_PAIRING_CONTROLLER_ENROLL_TEXT_2);
92 builder->Add(prefix + "continue", IDS_PAIRING_CONTROLLER_CONTINUE);
93 builder->Add(prefix + "enrollmentInProgress",
94 IDS_PAIRING_ENROLLMENT_IN_PROGRESS);
95 builder->Add(prefix + "enrollmentErrorTitle",
96 IDS_PAIRING_ENROLLMENT_ERROR_TITLE);
97 builder->Add(prefix + "enrollmentErrorHostRestarts",
98 IDS_PAIRING_CONTROLLER_ENROLLMENT_ERROR_HOST_RESTARTS);
99 builder->Add(prefix + "successTitle", IDS_PAIRING_CONTROLLER_SUCCESS_TITLE);
100 builder->Add(prefix + "successText", IDS_PAIRING_CONTROLLER_SUCCESS_TEXT);
101 builder->Add(prefix + "continueToHangouts",
102 IDS_PAIRING_CONTROLLER_CONTINUE_TO_HANGOUTS);
103 }
104
RegisterMessages()105 void ControllerPairingScreenHandler::RegisterMessages() {
106 AddPrefixedCallback(kCallbackUserActed,
107 &ControllerPairingScreenHandler::HandleUserActed);
108 AddPrefixedCallback(kCallbackContextChanged,
109 &ControllerPairingScreenHandler::HandleContextChanged);
110 }
111
Show()112 void ControllerPairingScreenHandler::Show() {
113 if (!page_is_ready()) {
114 show_on_init_ = true;
115 return;
116 }
117 ShowScreen(OobeUI::kScreenControllerPairing, NULL);
118 }
119
Hide()120 void ControllerPairingScreenHandler::Hide() {
121 }
122
SetDelegate(Delegate * delegate)123 void ControllerPairingScreenHandler::SetDelegate(Delegate* delegate) {
124 delegate_ = delegate;
125 if (page_is_ready())
126 Initialize();
127 }
128
OnContextChanged(const base::DictionaryValue & diff)129 void ControllerPairingScreenHandler::OnContextChanged(
130 const base::DictionaryValue& diff) {
131 CallJS(kMethodContextChanged, diff);
132 }
133
GetBrowserContext()134 content::BrowserContext* ControllerPairingScreenHandler::GetBrowserContext() {
135 return web_ui()->GetWebContents()->GetBrowserContext();
136 }
137
138 } // namespace chromeos
139