| Index: chrome/browser/ui/views/location_bar/location_bar_view.cc
|
| diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
|
| index 083b8fdf0ebdea27e6ed8715cf1d882a47a046a2..0bb09b5fa3357201b1aaf4375a9e357087aa5864 100644
|
| --- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
|
| +++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
|
| @@ -35,6 +35,7 @@
|
| #include "chrome/browser/ui/content_settings/content_setting_bubble_model.h"
|
| #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| +#include "chrome/browser/ui/view_ids.h"
|
| #include "chrome/browser/ui/views/autofill/save_card_icon_view.h"
|
| #include "chrome/browser/ui/views/browser_dialogs.h"
|
| #include "chrome/browser/ui/views/layout_constants.h"
|
| @@ -73,6 +74,7 @@
|
| #include "grit/theme_resources.h"
|
| #include "ui/accessibility/ax_view_state.h"
|
| #include "ui/base/dragdrop/drag_drop_types.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
| #include "ui/base/resource/material_design/material_design_controller.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| #include "ui/base/theme_provider.h"
|
| @@ -91,6 +93,7 @@
|
| #include "ui/views/background.h"
|
| #include "ui/views/border.h"
|
| #include "ui/views/button_drag_utils.h"
|
| +#include "ui/views/controls/button/image_button.h"
|
| #include "ui/views/controls/label.h"
|
| #include "ui/views/widget/widget.h"
|
|
|
| @@ -136,6 +139,7 @@
|
| selected_keyword_view_(NULL),
|
| suggested_text_view_(NULL),
|
| keyword_hint_view_(NULL),
|
| + mic_search_view_(NULL),
|
| zoom_view_(NULL),
|
| open_pdf_in_reader_view_(NULL),
|
| manage_passwords_icon_view_(NULL),
|
| @@ -153,6 +157,9 @@
|
| base::Bind(&LocationBarView::UpdateWithoutTabRestore,
|
| base::Unretained(this)));
|
|
|
| + if (browser_)
|
| + browser_->search_model()->AddObserver(this);
|
| +
|
| ui_zoom::ZoomEventManager::GetForBrowserContext(profile)
|
| ->AddZoomEventManagerObserver(this);
|
|
|
| @@ -166,6 +173,8 @@
|
| LocationBarView::~LocationBarView() {
|
| if (template_url_service_)
|
| template_url_service_->RemoveObserver(this);
|
| + if (browser_)
|
| + browser_->search_model()->RemoveObserver(this);
|
|
|
| ui_zoom::ZoomEventManager::GetForBrowserContext(profile())
|
| ->RemoveZoomEventManagerObserver(this);
|
| @@ -270,6 +279,20 @@
|
| background_color);
|
| AddChildView(keyword_hint_view_);
|
|
|
| + mic_search_view_ = new views::ImageButton(this);
|
| + mic_search_view_->set_id(VIEW_ID_MIC_SEARCH_BUTTON);
|
| + mic_search_view_->SetAccessibilityFocusable(true);
|
| + mic_search_view_->SetTooltipText(
|
| + l10n_util::GetStringUTF16(IDS_TOOLTIP_MIC_SEARCH));
|
| + mic_search_view_->SetImage(
|
| + views::Button::STATE_NORMAL,
|
| + ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
|
| + IDR_OMNIBOX_MIC_SEARCH));
|
| + mic_search_view_->SetImageAlignment(views::ImageButton::ALIGN_CENTER,
|
| + views::ImageButton::ALIGN_MIDDLE);
|
| + mic_search_view_->SetVisible(false);
|
| + AddChildView(mic_search_view_);
|
| +
|
| const SkColor text_color = GetColor(SecurityStateModel::NONE, TEXT);
|
| for (ContentSettingsType type :
|
| ContentSettingBubbleModel::GetSupportedBubbleTypes()) {
|
| @@ -555,11 +578,12 @@
|
| // Compute width of omnibox-trailing content.
|
| int trailing_width = horizontal_edge_thickness;
|
| trailing_width += IncrementalMinimumWidth(star_view_) +
|
| - IncrementalMinimumWidth(translate_icon_view_) +
|
| - IncrementalMinimumWidth(open_pdf_in_reader_view_) +
|
| - IncrementalMinimumWidth(save_credit_card_icon_view_) +
|
| - IncrementalMinimumWidth(manage_passwords_icon_view_) +
|
| - IncrementalMinimumWidth(zoom_view_);
|
| + IncrementalMinimumWidth(translate_icon_view_) +
|
| + IncrementalMinimumWidth(open_pdf_in_reader_view_) +
|
| + IncrementalMinimumWidth(save_credit_card_icon_view_) +
|
| + IncrementalMinimumWidth(manage_passwords_icon_view_) +
|
| + IncrementalMinimumWidth(zoom_view_) +
|
| + IncrementalMinimumWidth(mic_search_view_);
|
| for (PageActionViews::const_iterator i(page_action_views_.begin());
|
| i != page_action_views_.end(); ++i)
|
| trailing_width += IncrementalMinimumWidth((*i));
|
| @@ -682,6 +706,10 @@
|
| *i);
|
| }
|
| }
|
| + if (mic_search_view_->visible()) {
|
| + trailing_decorations.AddDecoration(vertical_padding, location_height,
|
| + mic_search_view_);
|
| + }
|
| // Because IMEs may eat the tab key, we don't show "press tab to search" while
|
| // IME composition is in progress.
|
| if (!keyword.empty() && omnibox_view_->model()->is_keyword_hint() &&
|
| @@ -792,6 +820,9 @@
|
| }
|
|
|
| void LocationBarView::Update(const WebContents* contents) {
|
| + mic_search_view_->SetVisible(
|
| + !GetToolbarModel()->input_in_progress() && browser_ &&
|
| + browser_->search_model()->voice_search_supported());
|
| RefreshContentSettingViews();
|
| RefreshZoomView();
|
| RefreshPageActionViews();
|
| @@ -1304,6 +1335,15 @@
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| +// LocationBarView, private views::ButtonListener implementation:
|
| +
|
| +void LocationBarView::ButtonPressed(views::Button* sender,
|
| + const ui::Event& event) {
|
| + DCHECK_EQ(mic_search_view_, sender);
|
| + command_updater()->ExecuteCommand(IDC_TOGGLE_SPEECH_INPUT);
|
| +}
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| // LocationBarView, private views::DragController implementation:
|
|
|
| void LocationBarView::WriteDragDataForView(views::View* sender,
|
| @@ -1392,3 +1432,16 @@
|
| if (omnibox_view_ && omnibox_view_->GetWidget()->IsActive())
|
| ShowFirstRunBubble();
|
| }
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// LocationBarView, private SearchModelObserver implementation:
|
| +
|
| +void LocationBarView::ModelChanged(const SearchModel::State& old_state,
|
| + const SearchModel::State& new_state) {
|
| + const bool visible = !GetToolbarModel()->input_in_progress() &&
|
| + new_state.voice_search_supported;
|
| + if (mic_search_view_->visible() != visible) {
|
| + mic_search_view_->SetVisible(visible);
|
| + Layout();
|
| + }
|
| +}
|
|
|