Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Side by Side Diff: chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc

Issue 276433003: UMA metrics added for HID detection dialog. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Unused removed. Pref renamed. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.h" 5 #include "chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/metrics/histogram.h"
11 #include "base/prefs/pref_service.h"
10 #include "base/strings/string16.h" 12 #include "base/strings/string16.h"
11 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" 16 #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
17 #include "chrome/common/pref_names.h"
14 #include "device/bluetooth/bluetooth_adapter_factory.h" 18 #include "device/bluetooth/bluetooth_adapter_factory.h"
15 #include "grit/chromium_strings.h" 19 #include "grit/chromium_strings.h"
16 #include "grit/generated_resources.h" 20 #include "grit/generated_resources.h"
17 #include "ui/base/l10n/l10n_util.h" 21 #include "ui/base/l10n/l10n_util.h"
18 22
19 namespace { 23 namespace {
20 24
21 const char kJsScreenPath[] = "login.HIDDetectionScreen"; 25 const char kJsScreenPath[] = "login.HIDDetectionScreen";
22 26
23 // Variants of pairing state. 27 // Variants of pairing state.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 64
61 namespace chromeos { 65 namespace chromeos {
62 66
63 HIDDetectionScreenHandler::HIDDetectionScreenHandler() 67 HIDDetectionScreenHandler::HIDDetectionScreenHandler()
64 : BaseScreenHandler(kJsScreenPath), 68 : BaseScreenHandler(kJsScreenPath),
65 delegate_(NULL), 69 delegate_(NULL),
66 show_on_init_(false), 70 show_on_init_(false),
67 mouse_is_pairing_(false), 71 mouse_is_pairing_(false),
68 keyboard_is_pairing_(false), 72 keyboard_is_pairing_(false),
69 switch_on_adapter_when_ready_(false), 73 switch_on_adapter_when_ready_(false),
70 skip_screen_if_devices_present_(true), 74 first_time_screen_show_(true),
71 weak_ptr_factory_(this) { 75 weak_ptr_factory_(this) {
72 } 76 }
73 77
74 HIDDetectionScreenHandler::~HIDDetectionScreenHandler() { 78 HIDDetectionScreenHandler::~HIDDetectionScreenHandler() {
75 if (adapter_.get()) 79 if (adapter_.get())
76 adapter_->RemoveObserver(this); 80 adapter_->RemoveObserver(this);
77 input_service_proxy_.RemoveObserver(this); 81 input_service_proxy_.RemoveObserver(this);
78 if (delegate_) 82 if (delegate_)
79 delegate_->OnActorDestroyed(this); 83 delegate_->OnActorDestroyed(this);
80 } 84 }
(...skipping 11 matching lines...) Expand all
92 96
93 void HIDDetectionScreenHandler::FindDevicesError() { 97 void HIDDetectionScreenHandler::FindDevicesError() {
94 VLOG(1) << "Failed to start Bluetooth discovery."; 98 VLOG(1) << "Failed to start Bluetooth discovery.";
95 } 99 }
96 100
97 void HIDDetectionScreenHandler::Show() { 101 void HIDDetectionScreenHandler::Show() {
98 if (!page_is_ready()) { 102 if (!page_is_ready()) {
99 show_on_init_ = true; 103 show_on_init_ = true;
100 return; 104 return;
101 } 105 }
106 PrefService* const local_state = g_browser_process->local_state();
107 int num_of_times_dialog_was_shown = local_state->GetInteger(
108 prefs::kTimesHIDDialogShown);
109 local_state->SetInteger(prefs::kTimesHIDDialogShown,
110 num_of_times_dialog_was_shown + 1);
111
102 input_service_proxy_.AddObserver(this); 112 input_service_proxy_.AddObserver(this);
103 skip_screen_if_devices_present_ = true; 113 first_time_screen_show_ = true;
104 UpdateDevices(); 114 UpdateDevices();
105 ShowScreen(OobeUI::kScreenHIDDetection, NULL); 115 ShowScreen(OobeUI::kScreenHIDDetection, NULL);
106 } 116 }
107 117
108 void HIDDetectionScreenHandler::Hide() { 118 void HIDDetectionScreenHandler::Hide() {
109 if (adapter_.get()) 119 if (adapter_.get())
110 adapter_->RemoveObserver(this); 120 adapter_->RemoveObserver(this);
111 input_service_proxy_.RemoveObserver(this); 121 input_service_proxy_.RemoveObserver(this);
112 } 122 }
113 123
114 void HIDDetectionScreenHandler::SetDelegate(Delegate* delegate) { 124 void HIDDetectionScreenHandler::SetDelegate(Delegate* delegate) {
115 delegate_ = delegate; 125 delegate_ = delegate;
116 if (page_is_ready()) 126 if (page_is_ready())
117 Initialize(); 127 Initialize();
118 } 128 }
119 129
130 // static
ygorshenin1 2014/05/14 09:35:36 Move this method after OnInputDeviceRemoved() (fol
merkulova 2014/05/14 13:11:05 Done.
131 void HIDDetectionScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) {
132 registry->RegisterIntegerPref(prefs::kTimesHIDDialogShown, 0);
133 }
134
120 void HIDDetectionScreenHandler::DeclareLocalizedValues( 135 void HIDDetectionScreenHandler::DeclareLocalizedValues(
121 LocalizedValuesBuilder* builder) { 136 LocalizedValuesBuilder* builder) {
122 builder->Add("hidDetectionContinue", IDS_HID_DETECTION_CONTINUE_BUTTON); 137 builder->Add("hidDetectionContinue", IDS_HID_DETECTION_CONTINUE_BUTTON);
123 builder->Add("hidDetectionInvitation", IDS_HID_DETECTION_INVITATION_TEXT); 138 builder->Add("hidDetectionInvitation", IDS_HID_DETECTION_INVITATION_TEXT);
124 builder->Add("hidDetectionPrerequisites", 139 builder->Add("hidDetectionPrerequisites",
125 IDS_HID_DETECTION_PRECONDITION_TEXT); 140 IDS_HID_DETECTION_PRECONDITION_TEXT);
126 builder->Add("hidDetectionMouseSearching", IDS_HID_DETECTION_SEARCHING_MOUSE); 141 builder->Add("hidDetectionMouseSearching", IDS_HID_DETECTION_SEARCHING_MOUSE);
127 builder->Add("hidDetectionKeyboardSearching", 142 builder->Add("hidDetectionKeyboardSearching",
128 IDS_HID_DETECTION_SEARCHING_KEYBOARD); 143 IDS_HID_DETECTION_SEARCHING_KEYBOARD);
129 builder->Add("hidDetectionUSBMouseConnected", 144 builder->Add("hidDetectionUSBMouseConnected",
(...skipping 18 matching lines...) Expand all
148 show_on_init_ = false; 163 show_on_init_ = false;
149 } 164 }
150 } 165 }
151 166
152 void HIDDetectionScreenHandler::RegisterMessages() { 167 void HIDDetectionScreenHandler::RegisterMessages() {
153 AddCallback( 168 AddCallback(
154 "HIDDetectionOnContinue", &HIDDetectionScreenHandler::HandleOnContinue); 169 "HIDDetectionOnContinue", &HIDDetectionScreenHandler::HandleOnContinue);
155 } 170 }
156 171
157 void HIDDetectionScreenHandler::HandleOnContinue() { 172 void HIDDetectionScreenHandler::HandleOnContinue() {
173 if (!first_time_screen_show_) {
174 // Continue button pressed.
175 int scenario_type;
176 if (!pointing_device_id_.empty() && !keyboard_device_id_.empty())
177 scenario_type = hid::All_DEVICES_DETECTED;
178 else if (pointing_device_id_.empty())
179 scenario_type = hid::KEYBOARD_DEVICE_ONLY_DETECTED;
180 else
181 scenario_type = hid::POINTING_DEVICE_ONLY_DETECTED;
182
183 UMA_HISTOGRAM_ENUMERATION(
184 "HIDDetection.OOBEDevicesDetectedOnContinuePressed",
185 scenario_type,
186 hid::CONTINUE_SCENARIO_TYPE_SIZE);
187 } else {
188 // Screen not shown as devices were autodetected.
189 PrefService* local_state = g_browser_process->local_state();
190 int num_of_times_dialog_was_shown = local_state->GetInteger(
191 prefs::kTimesHIDDialogShown);
192 local_state->SetInteger(prefs::kTimesHIDDialogShown,
ygorshenin1 2014/05/14 09:35:36 After discussion: could you please get rid of this
merkulova 2014/05/14 13:11:05 Done.
193 num_of_times_dialog_was_shown - 1);
194 }
158 if (delegate_) 195 if (delegate_)
159 delegate_->OnExit(); 196 delegate_->OnExit();
160 } 197 }
161 198
162 void HIDDetectionScreenHandler::InitializeAdapter( 199 void HIDDetectionScreenHandler::InitializeAdapter(
163 scoped_refptr<device::BluetoothAdapter> adapter) { 200 scoped_refptr<device::BluetoothAdapter> adapter) {
164 adapter_ = adapter; 201 adapter_ = adapter;
165 CHECK(adapter_.get()); 202 CHECK(adapter_.get());
166 203
167 adapter_->AddObserver(this); 204 adapter_->AddObserver(this);
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 pointing_device_connect_type_ = it->type; 402 pointing_device_connect_type_ = it->type;
366 SendPointingDeviceNotification(); 403 SendPointingDeviceNotification();
367 } 404 }
368 if (keyboard_device_id_.empty() && it->is_keyboard) { 405 if (keyboard_device_id_.empty() && it->is_keyboard) {
369 keyboard_device_id_ = it->id; 406 keyboard_device_id_ = it->id;
370 keyboard_device_name_ = it->name; 407 keyboard_device_name_ = it->name;
371 keyboard_device_connect_type_ = it->type; 408 keyboard_device_connect_type_ = it->type;
372 SendKeyboardDeviceNotification(NULL); 409 SendKeyboardDeviceNotification(NULL);
373 } 410 }
374 } 411 }
375 // Skip screen if both devices are present and skip was requested. 412
376 if (!pointing_device_id_.empty() && 413 if (first_time_screen_show_) {
377 !keyboard_device_id_.empty() && 414 // Skip screen if both devices are present and it's first show.
378 skip_screen_if_devices_present_) { 415 bool all_devices_autodetected = !pointing_device_id_.empty() &&
379 HandleOnContinue(); 416 !keyboard_device_id_.empty();
417 UMA_HISTOGRAM_BOOLEAN("HIDDetection.OOBEDialogShown",
418 !all_devices_autodetected);
419 if (all_devices_autodetected)
420 HandleOnContinue();
380 } 421 }
381 // Skip requested only once on dialog show. 422
382 skip_screen_if_devices_present_ = false; 423 first_time_screen_show_ = false;
383 if ((pointing_device_id_.empty() || keyboard_device_id_.empty()) && 424 if ((pointing_device_id_.empty() || keyboard_device_id_.empty()) &&
384 adapter_) { 425 adapter_) {
385 if (!adapter_->IsPresent()) { 426 if (!adapter_->IsPresent()) {
386 // Switch on BT adapter later when it's available. 427 // Switch on BT adapter later when it's available.
387 switch_on_adapter_when_ready_ = true; 428 switch_on_adapter_when_ready_ = true;
388 } else if (!adapter_->IsPowered()) { 429 } else if (!adapter_->IsPowered()) {
389 adapter_->SetPowered( 430 adapter_->SetPowered(
390 true, 431 true,
391 base::Bind(&HIDDetectionScreenHandler::StartBTDiscoverySession, 432 base::Bind(&HIDDetectionScreenHandler::StartBTDiscoverySession,
392 weak_ptr_factory_.GetWeakPtr()), 433 weak_ptr_factory_.GetWeakPtr()),
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 l10n_util::GetStringFUTF16( 533 l10n_util::GetStringFUTF16(
493 IDS_HID_DETECTION_PAIRED_BLUETOOTH_KEYBOARD, 534 IDS_HID_DETECTION_PAIRED_BLUETOOTH_KEYBOARD,
494 base::UTF8ToUTF16(keyboard_device_name_))); 535 base::UTF8ToUTF16(keyboard_device_name_)));
495 } else { 536 } else {
496 state_info.SetString("state", kUSBConnectedState); 537 state_info.SetString("state", kUSBConnectedState);
497 } 538 }
498 CallJS("setKeyboardDeviceState", state_info); 539 CallJS("setKeyboardDeviceState", state_info);
499 } 540 }
500 541
501 } // namespace chromeos 542 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698