| // Copyright 2016 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 "chrome/browser/chooser_controller/mock_chooser_controller.h" |
| |
| #include <algorithm> |
| |
| #include "base/logging.h" |
| #include "base/strings/utf_string_conversions.h" |
| #include "chrome/grit/generated_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| |
| MockChooserController::MockChooserController(content::RenderFrameHost* owner) |
| : ChooserController(owner, |
| IDS_USB_DEVICE_CHOOSER_PROMPT_ORIGIN, |
| IDS_USB_DEVICE_CHOOSER_PROMPT_EXTENSION_NAME) {} |
| |
| MockChooserController::~MockChooserController() {} |
| |
| bool MockChooserController::ShouldShowIconBeforeText() const { |
| return true; |
| } |
| |
| base::string16 MockChooserController::GetNoOptionsText() const { |
| return l10n_util::GetStringUTF16(IDS_DEVICE_CHOOSER_NO_DEVICES_FOUND_PROMPT); |
| } |
| |
| base::string16 MockChooserController::GetOkButtonLabel() const { |
| return l10n_util::GetStringUTF16(IDS_USB_DEVICE_CHOOSER_CONNECT_BUTTON_TEXT); |
| } |
| |
| size_t MockChooserController::NumOptions() const { |
| return options_.size(); |
| } |
| |
| int MockChooserController::GetSignalStrengthLevel(size_t index) const { |
| return options_[index].signal_strength_level; |
| } |
| |
| base::string16 MockChooserController::GetOption(size_t index) const { |
| return options_[index].name; |
| } |
| |
| bool MockChooserController::IsConnected(size_t index) const { |
| return options_[index].connected_paired_status & |
| ConnectedPairedStatus::CONNECTED; |
| } |
| |
| bool MockChooserController::IsPaired(size_t index) const { |
| return options_[index].connected_paired_status & |
| ConnectedPairedStatus::PAIRED; |
| } |
| |
| base::string16 MockChooserController::GetStatus() const { |
| return status_text_; |
| } |
| |
| void MockChooserController::OnAdapterPresenceChanged( |
| content::BluetoothChooser::AdapterPresence presence) { |
| ClearAllOptions(); |
| switch (presence) { |
| case content::BluetoothChooser::AdapterPresence::ABSENT: |
| NOTREACHED(); |
| break; |
| case content::BluetoothChooser::AdapterPresence::POWERED_OFF: |
| status_text_ = base::string16(); |
| if (view()) |
| view()->OnAdapterEnabledChanged(false /* Adapter is turned off */); |
| break; |
| case content::BluetoothChooser::AdapterPresence::POWERED_ON: |
| status_text_ = |
| l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN); |
| if (view()) |
| view()->OnAdapterEnabledChanged(true /* Adapter is turned on */); |
| break; |
| } |
| } |
| |
| void MockChooserController::OnDiscoveryStateChanged( |
| content::BluetoothChooser::DiscoveryState state) { |
| switch (state) { |
| case content::BluetoothChooser::DiscoveryState::DISCOVERING: |
| ClearAllOptions(); |
| status_text_ = |
| l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_SCANNING); |
| if (view()) { |
| view()->OnRefreshStateChanged( |
| true /* Refreshing options is in progress */); |
| } |
| break; |
| case content::BluetoothChooser::DiscoveryState::IDLE: |
| case content::BluetoothChooser::DiscoveryState::FAILED_TO_START: |
| status_text_ = |
| l10n_util::GetStringUTF16(IDS_BLUETOOTH_DEVICE_CHOOSER_RE_SCAN); |
| if (view()) { |
| view()->OnRefreshStateChanged( |
| false /* Refreshing options is complete */); |
| } |
| break; |
| } |
| } |
| |
| void MockChooserController::OptionAdded(const base::string16& option_name, |
| int signal_strength_level, |
| int connected_paired_status) { |
| options_.push_back( |
| {option_name, signal_strength_level, connected_paired_status}); |
| if (view()) |
| view()->OnOptionAdded(options_.size() - 1); |
| } |
| |
| void MockChooserController::OptionRemoved(const base::string16& option_name) { |
| auto it = std::find_if(options_.begin(), options_.end(), |
| [&option_name](const OptionInfo& option) { |
| return option.name == option_name; |
| }); |
| |
| if (it != options_.end()) { |
| size_t index = it - options_.begin(); |
| options_.erase(it); |
| if (view()) |
| view()->OnOptionRemoved(index); |
| } |
| } |
| |
| void MockChooserController::OptionUpdated( |
| const base::string16& previous_option_name, |
| const base::string16& new_option_name, |
| int new_signal_strength_level, |
| int new_connected_paired_status) { |
| auto it = std::find_if(options_.begin(), options_.end(), |
| [&previous_option_name](const OptionInfo& option) { |
| return option.name == previous_option_name; |
| }); |
| |
| if (it != options_.end()) { |
| *it = {new_option_name, new_signal_strength_level, |
| new_connected_paired_status}; |
| if (view()) |
| view()->OnOptionUpdated(it - options_.begin()); |
| } |
| } |
| |
| const int MockChooserController::kNoSignalStrengthLevelImage = -1; |
| const int MockChooserController::kSignalStrengthLevel0Bar = 0; |
| const int MockChooserController::kSignalStrengthLevel1Bar = 1; |
| const int MockChooserController::kSignalStrengthLevel2Bar = 2; |
| const int MockChooserController::kSignalStrengthLevel3Bar = 3; |
| const int MockChooserController::kSignalStrengthLevel4Bar = 4; |
| const int MockChooserController::kImageColorUnselected = 0; |
| const int MockChooserController::kImageColorSelected = 1; |
| |
| void MockChooserController::ClearAllOptions() { |
| options_.clear(); |
| } |