Chromium Code Reviews| Index: chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc |
| diff --git a/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc |
| index 567a8ad77fba4cddef20dd7974a140a2a4019daf..e73c2432c5bf7b109f7b30436d3700874f2b0476 100644 |
| --- a/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc |
| +++ b/chrome/browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc |
| @@ -7,10 +7,14 @@ |
| #include "base/bind.h" |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| +#include "base/metrics/histogram.h" |
| +#include "base/prefs/pref_service.h" |
| #include "base/strings/string16.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "chrome/browser/browser_process.h" |
| #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" |
| +#include "chrome/common/pref_names.h" |
| #include "device/bluetooth/bluetooth_adapter_factory.h" |
| #include "grit/chromium_strings.h" |
| #include "grit/generated_resources.h" |
| @@ -67,7 +71,7 @@ HIDDetectionScreenHandler::HIDDetectionScreenHandler() |
| mouse_is_pairing_(false), |
| keyboard_is_pairing_(false), |
| switch_on_adapter_when_ready_(false), |
| - skip_screen_if_devices_present_(true), |
| + first_time_screen_show_(true), |
| weak_ptr_factory_(this) { |
| } |
| @@ -99,8 +103,15 @@ void HIDDetectionScreenHandler::Show() { |
| show_on_init_ = true; |
| return; |
| } |
| + PrefService* const local_state = g_browser_process->local_state(); |
| + int num_of_times_dialog_was_shown = local_state->GetInteger( |
| + prefs::kTimesHIDDialogShown); |
| + local_state->SetInteger(prefs::kTimesHIDDialogShown, |
| + num_of_times_dialog_was_shown + 1); |
| + local_state->CommitPendingWrite(); |
|
Mattias Nissler (ping if slow)
2014/05/12 11:10:02
This should not be necessary.
merkulova
2014/05/13 07:18:01
Done.
|
| + |
| input_service_proxy_.AddObserver(this); |
| - skip_screen_if_devices_present_ = true; |
| + first_time_screen_show_ = true; |
| UpdateDevices(); |
| ShowScreen(OobeUI::kScreenHIDDetection, NULL); |
| } |
| @@ -117,6 +128,11 @@ void HIDDetectionScreenHandler::SetDelegate(Delegate* delegate) { |
| Initialize(); |
| } |
| +// static |
| +void HIDDetectionScreenHandler::RegisterPrefs(PrefRegistrySimple* registry) { |
| + registry->RegisterIntegerPref(prefs::kTimesHIDDialogShown, 0); |
| +} |
| + |
| void HIDDetectionScreenHandler::DeclareLocalizedValues( |
| LocalizedValuesBuilder* builder) { |
| builder->Add("hidDetectionContinue", IDS_HID_DETECTION_CONTINUE_BUTTON); |
| @@ -155,6 +171,29 @@ void HIDDetectionScreenHandler::RegisterMessages() { |
| } |
| void HIDDetectionScreenHandler::HandleOnContinue() { |
| + if (!first_time_screen_show_) { |
| + // Continue button pressed. |
| + int scenario_type; |
| + if (!pointing_device_id_.empty() && !keyboard_device_id_.empty()) |
| + scenario_type = hid::All_DEVICES_DETECTED; |
| + else if (pointing_device_id_.empty()) |
| + scenario_type = hid::KEYBOARD_DEVICE_ONLY_DETECTED; |
| + else |
| + scenario_type = hid::POINTING_DEVICE_ONLY_DETECTED; |
| + |
| + UMA_HISTOGRAM_ENUMERATION( |
| + "HIDDetection.OOBEDevicesDetectedOnContinuePressed", |
| + scenario_type, |
| + hid::CONTINUE_SCENARIO_TYPE_SIZE); |
| + } else { |
| + // Screen not shown as devices were autodetected. |
| + PrefService* local_state = g_browser_process->local_state(); |
| + int num_of_times_dialog_was_shown = local_state->GetInteger( |
| + prefs::kTimesHIDDialogShown); |
| + local_state->SetInteger(prefs::kTimesHIDDialogShown, |
| + num_of_times_dialog_was_shown - 1); |
| + local_state->CommitPendingWrite(); |
|
Mattias Nissler (ping if slow)
2014/05/12 11:10:02
not necessary.
merkulova
2014/05/13 07:18:01
Done.
|
| + } |
| if (delegate_) |
| delegate_->OnExit(); |
| } |
| @@ -372,14 +411,18 @@ void HIDDetectionScreenHandler::OnGetInputDevicesList( |
| SendKeyboardDeviceNotification(NULL); |
| } |
| } |
| - // Skip screen if both devices are present and skip was requested. |
| - if (!pointing_device_id_.empty() && |
| - !keyboard_device_id_.empty() && |
| - skip_screen_if_devices_present_) { |
| - HandleOnContinue(); |
| + |
| + if (first_time_screen_show_) { |
| + // Skip screen if both devices are present and it's first show. |
| + bool all_devices_autodetected = !pointing_device_id_.empty() && |
| + !keyboard_device_id_.empty(); |
| + UMA_HISTOGRAM_BOOLEAN("HIDDetection.OOBEDialogShown", |
| + !all_devices_autodetected); |
| + if (all_devices_autodetected) |
| + HandleOnContinue(); |
| } |
| - // Skip requested only once on dialog show. |
| - skip_screen_if_devices_present_ = false; |
| + |
| + first_time_screen_show_ = false; |
| if ((pointing_device_id_.empty() || keyboard_device_id_.empty()) && |
| adapter_) { |
| if (!adapter_->IsPresent()) { |