Commit f583eb6f authored by Yasmin's avatar Yasmin Committed by Commit Bot

Omnibox icon and success delivery message for shared clipboard.

Plus some refactoring to favor composition over inheritance for click_to_call_icon_view.
Recording of the change:(check the omnibox icon and message on 0:12 sec)
https://drive.google.com/file/d/18wxoxYDW6U8fKEmDcRnlYass5I_0sy7U/view


Bug: 994704
Change-Id: I2124794f11e5060f5c233966aa49eedb9b6b97bc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1768349
Commit-Queue: Yasmin Molazadeh <yasmo@chromium.org>
Reviewed-by: default avatarEvan Stade <estade@chromium.org>
Reviewed-by: default avatarPeter Beverloo <peter@chromium.org>
Reviewed-by: default avatarAlex Chau <alexchau@chromium.org>
Cr-Commit-Position: refs/heads/master@{#691718}
parent bcb26611
......@@ -22,6 +22,7 @@
#include "components/vector_icons/vector_icons.h"
#include "content/public/browser/web_contents.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/strings/grit/ui_strings.h"
using SharingMessage = chrome_browser_sharing::SharingMessage;
......@@ -114,4 +115,14 @@ SharingDialog* ClickToCallUiController::DoShowDialog(BrowserWindow* window) {
return window->ShowClickToCallDialog(web_contents(), this);
}
const gfx::VectorIcon& ClickToCallUiController::GetVectorIcon() const {
return vector_icons::kCallIcon;
}
base::string16 ClickToCallUiController::GetTextForTooltipAndAccessibleName()
const {
return l10n_util::GetStringUTF16(
IDS_BROWSER_SHARING_CLICK_TO_CALL_DIALOG_TITLE_LABEL);
}
WEB_CONTENTS_USER_DATA_KEY_IMPL(ClickToCallUiController)
......@@ -41,6 +41,8 @@ class ClickToCallUiController
int GetRequiredDeviceCapabilities() override;
void OnDeviceChosen(const syncer::DeviceInfo& device) override;
void OnAppChosen(const App& app) override;
const gfx::VectorIcon& GetVectorIcon() const override;
base::string16 GetTextForTooltipAndAccessibleName() const override;
// Called by the ClickToCallDialogView when the help text got clicked.
void OnHelpTextClicked();
......
......@@ -8,6 +8,7 @@
#include "base/callback.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/app/vector_icons/vector_icons.h"
#include "chrome/browser/sharing/sharing_device_capability.h"
#include "chrome/browser/sharing/sharing_dialog.h"
#include "chrome/browser/ui/browser_window.h"
......@@ -45,7 +46,7 @@ base::string16 SharedClipboardUiController::GetTitle() {
}
PageActionIconType SharedClipboardUiController::GetIconType() {
return PageActionIconType::kSendTabToSelf;
return PageActionIconType::kSharedClipboard;
}
int SharedClipboardUiController::GetRequiredDeviceCapabilities() {
......@@ -80,4 +81,14 @@ void SharedClipboardUiController::OnHelpTextClicked() {
// No help text
}
const gfx::VectorIcon& SharedClipboardUiController::GetVectorIcon() const {
return kSendTabToSelfIcon;
}
base::string16 SharedClipboardUiController::GetTextForTooltipAndAccessibleName()
const {
// TODO(yasmo): Update the text after approval.
return base::string16();
}
WEB_CONTENTS_USER_DATA_KEY_IMPL(SharedClipboardUiController)
......@@ -37,6 +37,8 @@ class SharedClipboardUiController
int GetRequiredDeviceCapabilities() override;
void OnDeviceChosen(const syncer::DeviceInfo& device) override;
void OnAppChosen(const App& app) override;
const gfx::VectorIcon& GetVectorIcon() const override;
base::string16 GetTextForTooltipAndAccessibleName() const override;
// Called by the SharedClipboardDialogView when the help text got clicked.
void OnHelpTextClicked();
......
......@@ -13,7 +13,6 @@
#include "base/memory/weak_ptr.h"
#include "base/strings/string16.h"
#include "chrome/browser/sharing/proto/sharing_message.pb.h"
#include "chrome/browser/sharing/sharing_send_message_result.h"
#include "chrome/browser/sharing/sharing_service.h"
#include "chrome/browser/ui/page_action/page_action_icon_container.h"
#include "components/sync_device_info/device_info.h"
......@@ -55,16 +54,14 @@ class SharingUiController {
// Title of the dialog.
virtual base::string16 GetTitle() = 0;
// Called when user chooses a synced device to complete the task.
virtual void OnDeviceChosen(const syncer::DeviceInfo& device) = 0;
// Called when user chooses a local app to complete the task.
virtual void OnAppChosen(const App& app) = 0;
virtual PageActionIconType GetIconType() = 0;
virtual int GetRequiredDeviceCapabilities() = 0;
virtual const gfx::VectorIcon& GetVectorIcon() const = 0;
virtual base::string16 GetTextForTooltipAndAccessibleName() const = 0;
// Called by the SharingDialog when it is being closed.
void OnDialogClosed(SharingDialog* dialog);
......@@ -98,12 +95,10 @@ class SharingUiController {
std::vector<std::unique_ptr<syncer::DeviceInfo>> devices) {
devices_ = std::move(devices);
}
void MaybeShowErrorDialog();
protected:
virtual SharingDialog* DoShowDialog(BrowserWindow* window) = 0;
virtual void DoUpdateApps(UpdateAppsCallback callback) = 0;
void SendMessageToDevice(
......
......@@ -3033,8 +3033,6 @@ jumbo_split_static_library("ui") {
"views/session_crashed_bubble_view.h",
"views/sharing/click_to_call/click_to_call_dialog_view.cc",
"views/sharing/click_to_call/click_to_call_dialog_view.h",
"views/sharing/click_to_call/click_to_call_icon_view.cc",
"views/sharing/click_to_call/click_to_call_icon_view.h",
"views/sharing/sharing_icon_view.cc",
"views/sharing/sharing_icon_view.h",
"views/simple_message_box_views.cc",
......
......@@ -16,6 +16,7 @@ enum class PageActionIconType {
kReaderMode,
kSaveCard,
kSendTabToSelf,
kSharedClipboard,
kTranslate,
kZoom,
kNativeFileSystemAccess,
......
......@@ -27,6 +27,7 @@
#include "chrome/browser/send_tab_to_self/send_tab_to_self_desktop_util.h"
#include "chrome/browser/send_tab_to_self/send_tab_to_self_util.h"
#include "chrome/browser/sharing/click_to_call/feature.h"
#include "chrome/browser/sharing/shared_clipboard/feature_flags.h"
#include "chrome/browser/ssl/security_state_tab_helper.h"
#include "chrome/browser/themes/theme_properties.h"
#include "chrome/browser/themes/theme_service.h"
......@@ -232,6 +233,8 @@ void LocationBarView::Init() {
params.types_enabled.push_back(PageActionIconType::kSendTabToSelf);
if (base::FeatureList::IsEnabled(kClickToCallUI))
params.types_enabled.push_back(PageActionIconType::kClickToCall);
if (base::FeatureList::IsEnabled(kSharedClipboardUI))
params.types_enabled.push_back(PageActionIconType::kSharedClipboard);
if (!base::FeatureList::IsEnabled(
autofill::features::kAutofillEnableToolbarStatusChip)) {
params.types_enabled.push_back(PageActionIconType::kManagePasswords);
......
......@@ -5,6 +5,8 @@
#include "chrome/browser/ui/views/page_action/omnibox_page_action_icon_container_view.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sharing/click_to_call/click_to_call_ui_controller.h"
#include "chrome/browser/sharing/shared_clipboard/shared_clipboard_ui_controller.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/views/location_bar/cookie_controls_icon_view.h"
#include "chrome/browser/ui/views/location_bar/find_bar_icon.h"
......@@ -16,7 +18,8 @@
#include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h"
#include "chrome/browser/ui/views/reader_mode/reader_mode_icon_view.h"
#include "chrome/browser/ui/views/send_tab_to_self/send_tab_to_self_icon_view.h"
#include "chrome/browser/ui/views/sharing/click_to_call/click_to_call_icon_view.h"
#include "chrome/browser/ui/views/sharing/click_to_call/click_to_call_dialog_view.h"
#include "chrome/browser/ui/views/sharing/sharing_icon_view.h"
#include "chrome/browser/ui/views/translate/translate_icon_view.h"
#include "ui/views/layout/box_layout.h"
......@@ -94,10 +97,28 @@ OmniboxPageActionIconContainerView::OmniboxPageActionIconContainerView(
page_action_icons_.push_back(native_file_system_icon_);
break;
case PageActionIconType::kClickToCall:
click_to_call_icon_view_ =
new ClickToCallIconView(params.page_action_icon_delegate);
click_to_call_icon_view_ = new SharingIconView(
params.page_action_icon_delegate,
base::BindRepeating([](content::WebContents* contents) {
return static_cast<SharingUiController*>(
ClickToCallUiController::GetOrCreateFromWebContents(
contents));
}),
base::BindRepeating(ClickToCallDialogView::GetAsBubble));
page_action_icons_.push_back(click_to_call_icon_view_);
break;
case PageActionIconType::kSharedClipboard:
shared_clipboard_icon_view_ = new SharingIconView(
params.page_action_icon_delegate,
base::BindRepeating([](content::WebContents* contents) {
return static_cast<SharingUiController*>(
SharedClipboardUiController::GetOrCreateFromWebContents(
contents));
}),
// TODO(yasmo): create shared clipboard dialog view.
base::BindRepeating(ClickToCallDialogView::GetAsBubble));
page_action_icons_.push_back(shared_clipboard_icon_view_);
break;
case PageActionIconType::kLocalCardMigration:
case PageActionIconType::kSaveCard:
NOTREACHED();
......@@ -148,6 +169,8 @@ PageActionIconView* OmniboxPageActionIconContainerView::GetPageActionIconView(
return native_file_system_icon_;
case PageActionIconType::kClickToCall:
return click_to_call_icon_view_;
case PageActionIconType::kSharedClipboard:
return shared_clipboard_icon_view_;
case PageActionIconType::kLocalCardMigration:
case PageActionIconType::kSaveCard:
NOTREACHED();
......
......@@ -16,7 +16,6 @@
#include "ui/views/view.h"
class Browser;
class ClickToCallIconView;
class CommandUpdater;
class CookieControlsIconView;
class FindBarIcon;
......@@ -25,6 +24,7 @@ class ManagePasswordsIconViews;
class NativeFileSystemAccessIconView;
class PwaInstallView;
class ReaderModeIconView;
class SharingIconView;
class TranslateIconView;
class ZoomView;
......@@ -95,7 +95,8 @@ class OmniboxPageActionIconContainerView
TranslateIconView* translate_icon_ = nullptr;
NativeFileSystemAccessIconView* native_file_system_icon_ = nullptr;
ReaderModeIconView* reader_mode_icon_ = nullptr;
ClickToCallIconView* click_to_call_icon_view_ = nullptr;
SharingIconView* click_to_call_icon_view_ = nullptr;
SharingIconView* shared_clipboard_icon_view_ = nullptr;
std::vector<PageActionIconView*> page_action_icons_;
ScopedObserver<zoom::ZoomEventManager, zoom::ZoomEventManagerObserver>
......
......@@ -289,3 +289,9 @@ base::string16 ClickToCallDialogView::GetWindowTitle() const {
void ClickToCallDialogView::WindowClosing() {
controller_->OnDialogClosed(this);
}
// static
views::BubbleDialogDelegateView* ClickToCallDialogView::GetAsBubble(
SharingDialog* dialog) {
return static_cast<ClickToCallDialogView*>(dialog);
}
......@@ -58,6 +58,8 @@ class ClickToCallDialogView : public SharingDialog,
// views::View:
gfx::Size CalculatePreferredSize() const override;
static views::BubbleDialogDelegateView* GetAsBubble(SharingDialog* dialog);
private:
friend class ClickToCallDialogViewTest;
FRIEND_TEST_ALL_PREFIXES(ClickToCallDialogViewTest, PopulateDialogView);
......
// Copyright 2019 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/ui/views/sharing/click_to_call/click_to_call_icon_view.h"
#include <algorithm>
#include "base/memory/ptr_util.h"
#include "chrome/browser/sharing/click_to_call/click_to_call_ui_controller.h"
#include "chrome/browser/ui/views/sharing/click_to_call/click_to_call_dialog_view.h"
#include "components/vector_icons/vector_icons.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/material_design/material_design_controller.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/strings/grit/ui_strings.h"
#include "ui/views/animation/ink_drop.h"
ClickToCallIconView::ClickToCallIconView(PageActionIconView::Delegate* delegate)
: SharingIconView(delegate) {}
ClickToCallIconView::~ClickToCallIconView() = default;
views::BubbleDialogDelegateView* ClickToCallIconView::GetBubble() const {
auto* controller = GetController();
return controller ? static_cast<ClickToCallDialogView*>(controller->dialog())
: nullptr;
}
const gfx::VectorIcon& ClickToCallIconView::GetVectorIcon() const {
return vector_icons::kCallIcon;
}
SharingUiController* ClickToCallIconView::GetController() const {
content::WebContents* web_contents = GetWebContents();
if (!web_contents)
return nullptr;
return ClickToCallUiController::GetOrCreateFromWebContents(web_contents);
}
base::string16 ClickToCallIconView::GetTextForTooltipAndAccessibleName() const {
return l10n_util::GetStringUTF16(
IDS_BROWSER_SHARING_CLICK_TO_CALL_DIALOG_TITLE_LABEL);
}
// Copyright 2019 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.
#ifndef CHROME_BROWSER_UI_VIEWS_SHARING_CLICK_TO_CALL_CLICK_TO_CALL_ICON_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_SHARING_CLICK_TO_CALL_CLICK_TO_CALL_ICON_VIEW_H_
#include <memory>
#include "base/macros.h"
#include "base/strings/string16.h"
#include "chrome/browser/ui/views/page_action/page_action_icon_view.h"
#include "chrome/browser/ui/views/sharing/sharing_icon_view.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/vector_icon_types.h"
// The location bar icon to show the click to call bubble where the user can
// choose to send a phone number to a target device or use an OS handler app.
class ClickToCallIconView : public SharingIconView {
public:
explicit ClickToCallIconView(PageActionIconView::Delegate* delegate);
~ClickToCallIconView() override;
views::BubbleDialogDelegateView* GetBubble() const override;
base::string16 GetTextForTooltipAndAccessibleName() const override;
protected:
const gfx::VectorIcon& GetVectorIcon() const override;
// SharingIconView
SharingUiController* GetController() const override;
DISALLOW_COPY_AND_ASSIGN(ClickToCallIconView);
};
#endif // CHROME_BROWSER_UI_VIEWS_SHARING_CLICK_TO_CALL_CLICK_TO_CALL_ICON_VIEW_H_
......@@ -4,7 +4,10 @@
#include "chrome/browser/ui/views/sharing/sharing_icon_view.h"
#include "chrome/app/vector_icons/vector_icons.h"
#include "components/vector_icons/vector_icons.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/gfx/scoped_canvas.h"
#include "ui/strings/grit/ui_strings.h"
#include "ui/views/animation/ink_drop.h"
......@@ -17,16 +20,25 @@ constexpr int kIconTextSpacingTouch = 10;
constexpr double kAnimationTextFullLengthShownProgressState = 0.5;
} // namespace
SharingIconView::SharingIconView(PageActionIconView::Delegate* delegate)
SharingIconView::SharingIconView(PageActionIconView::Delegate* delegate,
GetControllerCallback get_controller_callback,
GetBubbleCallback get_bubble_callback)
: PageActionIconView(/*command_updater=*/nullptr,
/*command_id=*/0,
delegate) {
delegate),
get_controller_callback_(std::move(get_controller_callback)),
get_bubble_callback_(std::move(get_bubble_callback)) {
SetVisible(false);
SetUpForInOutAnimation();
}
SharingIconView::~SharingIconView() = default;
SharingUiController* SharingIconView::GetController() const {
content::WebContents* web_contents = GetWebContents();
return web_contents ? get_controller_callback_.Run(web_contents) : nullptr;
}
void SharingIconView::StartLoadingAnimation() {
if (loading_animation_)
return;
......@@ -157,3 +169,19 @@ void SharingIconView::OnExecuting(
bool SharingIconView::IsLoadingAnimationVisible() {
return loading_animation_;
}
views::BubbleDialogDelegateView* SharingIconView::GetBubble() const {
auto* controller = GetController();
return controller ? get_bubble_callback_.Run(controller->dialog()) : nullptr;
}
const gfx::VectorIcon& SharingIconView::GetVectorIcon() const {
auto* controller = GetController();
return controller ? controller->GetVectorIcon() : gfx::kNoneIcon;
}
base::string16 SharingIconView::GetTextForTooltipAndAccessibleName() const {
auto* controller = GetController();
return controller ? controller->GetTextForTooltipAndAccessibleName()
: base::string16();
}
......@@ -13,7 +13,15 @@
// The location bar icon to show the sharing features bubble.
class SharingIconView : public PageActionIconView {
public:
explicit SharingIconView(PageActionIconView::Delegate* delegate);
using GetControllerCallback =
base::RepeatingCallback<SharingUiController*(content::WebContents*)>;
using GetBubbleCallback =
base::RepeatingCallback<views::BubbleDialogDelegateView*(SharingDialog*)>;
explicit SharingIconView(PageActionIconView::Delegate* delegate,
GetControllerCallback get_controller,
GetBubbleCallback get_bubble);
~SharingIconView() override;
void StartLoadingAnimation();
......@@ -25,23 +33,27 @@ class SharingIconView : public PageActionIconView {
bool IsTriggerableEvent(const ui::Event& event) override;
double WidthMultiplier() const override;
const gfx::VectorIcon& GetVectorIconBadge() const override;
views::BubbleDialogDelegateView* GetBubble() const override;
bool Update() override;
const gfx::VectorIcon& GetVectorIcon() const override;
base::string16 GetTextForTooltipAndAccessibleName() const override;
// gfx::AnimationDelegate:
void AnimationProgressed(const gfx::Animation* animation) override;
void AnimationEnded(const gfx::Animation* animation) override;
SharingUiController* GetController() const;
void UpdateInkDrop(bool activate);
void UpdateOpacity();
bool IsLoadingAnimationVisible();
// Get the supporting controller for this icon view.
virtual SharingUiController* GetController() const = 0;
private:
SharingUiController* last_controller_ = nullptr;
bool loading_animation_ = false;
bool should_show_error_ = false;
GetControllerCallback get_controller_callback_;
GetBubbleCallback get_bubble_callback_;
DISALLOW_COPY_AND_ASSIGN(SharingIconView);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment