Commit ea1ce4a7 authored by Richard Knoll's avatar Richard Knoll Committed by Commit Bot

Extract SharingApp from controller.

Extracts SharingUiController::App into a separate file to make includes
easier. Also cleans up overrides in SharingDialogView.

Bug: None
Change-Id: I99cec881b51a4218e4681f05a8ad494ed8b3d11a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1823837
Commit-Queue: Alex Chau <alexchau@chromium.org>
Reviewed-by: default avatarMichael van Ouwerkerk <mvanouwerkerk@chromium.org>
Reviewed-by: default avatarAlex Chau <alexchau@chromium.org>
Cr-Commit-Position: refs/heads/master@{#699697}
parent 2724a28e
...@@ -3439,6 +3439,8 @@ jumbo_split_static_library("browser") { ...@@ -3439,6 +3439,8 @@ jumbo_split_static_library("browser") {
"sharing/shared_clipboard/shared_clipboard_ui_controller.h", "sharing/shared_clipboard/shared_clipboard_ui_controller.h",
"sharing/shared_clipboard/shared_clipboard_utils.cc", "sharing/shared_clipboard/shared_clipboard_utils.cc",
"sharing/shared_clipboard/shared_clipboard_utils.h", "sharing/shared_clipboard/shared_clipboard_utils.h",
"sharing/sharing_app.cc",
"sharing/sharing_app.h",
"sharing/sharing_dialog.h", "sharing/sharing_dialog.h",
"sharing/sharing_notification_handler.cc", "sharing/sharing_notification_handler.cc",
"sharing/sharing_notification_handler.h", "sharing/sharing_notification_handler.h",
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include "ui/strings/grit/ui_strings.h" #include "ui/strings/grit/ui_strings.h"
using SharingMessage = chrome_browser_sharing::SharingMessage; using SharingMessage = chrome_browser_sharing::SharingMessage;
using App = ClickToCallUiController::App;
// static // static
ClickToCallUiController* ClickToCallUiController::GetOrCreateFromWebContents( ClickToCallUiController* ClickToCallUiController::GetOrCreateFromWebContents(
...@@ -85,7 +84,7 @@ ClickToCallUiController::GetRequiredFeature() { ...@@ -85,7 +84,7 @@ ClickToCallUiController::GetRequiredFeature() {
} }
void ClickToCallUiController::DoUpdateApps(UpdateAppsCallback callback) { void ClickToCallUiController::DoUpdateApps(UpdateAppsCallback callback) {
std::vector<App> apps; std::vector<SharingApp> apps;
if (hide_default_handler_) { if (hide_default_handler_) {
std::move(callback).Run(std::move(apps)); std::move(callback).Run(std::move(apps));
return; return;
...@@ -118,7 +117,7 @@ void ClickToCallUiController::SendNumberToDevice( ...@@ -118,7 +117,7 @@ void ClickToCallUiController::SendNumberToDevice(
SendMessageToDevice(device, std::move(sharing_message)); SendMessageToDevice(device, std::move(sharing_message));
} }
void ClickToCallUiController::OnAppChosen(const App& app) { void ClickToCallUiController::OnAppChosen(const SharingApp& app) {
if (ukm_recorder_) if (ukm_recorder_)
std::move(ukm_recorder_).Run(SharingClickToCallSelection::kApp); std::move(ukm_recorder_).Run(SharingClickToCallSelection::kApp);
......
...@@ -43,7 +43,7 @@ class ClickToCallUiController ...@@ -43,7 +43,7 @@ class ClickToCallUiController
PageActionIconType GetIconType() override; PageActionIconType GetIconType() override;
sync_pb::SharingSpecificFields::EnabledFeatures GetRequiredFeature() override; sync_pb::SharingSpecificFields::EnabledFeatures GetRequiredFeature() override;
void OnDeviceChosen(const syncer::DeviceInfo& device) override; void OnDeviceChosen(const syncer::DeviceInfo& device) override;
void OnAppChosen(const App& app) override; void OnAppChosen(const SharingApp& app) override;
void OnDialogClosed(SharingDialog* dialog) override; void OnDialogClosed(SharingDialog* dialog) override;
base::string16 GetContentType() const override; base::string16 GetContentType() const override;
const gfx::VectorIcon& GetVectorIcon() const override; const gfx::VectorIcon& GetVectorIcon() const override;
......
...@@ -17,8 +17,6 @@ ...@@ -17,8 +17,6 @@
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/strings/grit/ui_strings.h" #include "ui/strings/grit/ui_strings.h"
using App = SharingUiController::App;
// static // static
SharedClipboardUiController* SharedClipboardUiController*
SharedClipboardUiController::GetOrCreateFromWebContents( SharedClipboardUiController::GetOrCreateFromWebContents(
...@@ -56,7 +54,7 @@ SharedClipboardUiController::GetRequiredFeature() { ...@@ -56,7 +54,7 @@ SharedClipboardUiController::GetRequiredFeature() {
// No need for apps for shared clipboard feature // No need for apps for shared clipboard feature
void SharedClipboardUiController::DoUpdateApps(UpdateAppsCallback callback) { void SharedClipboardUiController::DoUpdateApps(UpdateAppsCallback callback) {
std::move(callback).Run(std::vector<App>()); std::move(callback).Run(std::vector<SharingApp>());
} }
// Error message dialog. // Error message dialog.
...@@ -74,7 +72,7 @@ void SharedClipboardUiController::OnDeviceChosen( ...@@ -74,7 +72,7 @@ void SharedClipboardUiController::OnDeviceChosen(
SendMessageToDevice(device, std::move(sharing_message)); SendMessageToDevice(device, std::move(sharing_message));
} }
void SharedClipboardUiController::OnAppChosen(const App& app) { void SharedClipboardUiController::OnAppChosen(const SharingApp& app) {
// Do nothing - there is no apps // Do nothing - there is no apps
} }
......
...@@ -36,7 +36,7 @@ class SharedClipboardUiController ...@@ -36,7 +36,7 @@ class SharedClipboardUiController
PageActionIconType GetIconType() override; PageActionIconType GetIconType() override;
sync_pb::SharingSpecificFields::EnabledFeatures GetRequiredFeature() override; sync_pb::SharingSpecificFields::EnabledFeatures GetRequiredFeature() override;
void OnDeviceChosen(const syncer::DeviceInfo& device) override; void OnDeviceChosen(const syncer::DeviceInfo& device) override;
void OnAppChosen(const App& app) override; void OnAppChosen(const SharingApp& app) override;
base::string16 GetContentType() const override; base::string16 GetContentType() const override;
base::string16 GetErrorDialogTitle() const override; base::string16 GetErrorDialogTitle() const override;
base::string16 GetErrorDialogText() const override; base::string16 GetErrorDialogText() const override;
......
// 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/sharing/sharing_app.h"
SharingApp::SharingApp(const gfx::VectorIcon* vector_icon,
const gfx::Image& image,
base::string16 name,
std::string identifier)
: vector_icon(vector_icon),
image(image),
name(std::move(name)),
identifier(std::move(identifier)) {}
SharingApp::SharingApp(SharingApp&& other) = default;
SharingApp::~SharingApp() = default;
// 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_SHARING_SHARING_APP_H_
#define CHROME_BROWSER_SHARING_SHARING_APP_H_
#include <string>
#include "base/macros.h"
#include "base/strings/string16.h"
#include "ui/gfx/image/image.h"
namespace gfx {
struct VectorIcon;
} // namespace gfx
// Represents an external app shown in sharing dialogs.
struct SharingApp {
public:
SharingApp(const gfx::VectorIcon* vector_icon,
const gfx::Image& image,
base::string16 name,
std::string identifier);
SharingApp(SharingApp&& other);
~SharingApp();
const gfx::VectorIcon* vector_icon = nullptr;
gfx::Image image;
base::string16 name;
std::string identifier;
private:
DISALLOW_COPY_AND_ASSIGN(SharingApp);
};
#endif // CHROME_BROWSER_SHARING_SHARING_APP_H_
...@@ -33,19 +33,6 @@ content::WebContents* GetCurrentWebContents( ...@@ -33,19 +33,6 @@ content::WebContents* GetCurrentWebContents(
} // namespace } // namespace
SharingUiController::App::App(const gfx::VectorIcon* vector_icon,
const gfx::Image& image,
base::string16 name,
std::string identifier)
: vector_icon(vector_icon),
image(image),
name(std::move(name)),
identifier(std::move(identifier)) {}
SharingUiController::App::App(App&& other) = default;
SharingUiController::App::~App() = default;
SharingUiController::SharingUiController(content::WebContents* web_contents) SharingUiController::SharingUiController(content::WebContents* web_contents)
: web_contents_(web_contents), : web_contents_(web_contents),
sharing_service_(SharingServiceFactory::GetForBrowserContext( sharing_service_(SharingServiceFactory::GetForBrowserContext(
...@@ -199,7 +186,8 @@ int SharingUiController::GetHeaderImageId() const { ...@@ -199,7 +186,8 @@ int SharingUiController::GetHeaderImageId() const {
return 0; return 0;
} }
void SharingUiController::OnAppsReceived(int dialog_id, std::vector<App> apps) { void SharingUiController::OnAppsReceived(int dialog_id,
std::vector<SharingApp> apps) {
if (dialog_id != last_dialog_id_) if (dialog_id != last_dialog_id_)
return; return;
......
...@@ -14,13 +14,13 @@ ...@@ -14,13 +14,13 @@
#include "base/strings/string16.h" #include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/browser/sharing/proto/sharing_message.pb.h" #include "chrome/browser/sharing/proto/sharing_message.pb.h"
#include "chrome/browser/sharing/sharing_app.h"
#include "chrome/browser/sharing/sharing_constants.h" #include "chrome/browser/sharing/sharing_constants.h"
#include "chrome/browser/sharing/sharing_metrics.h" #include "chrome/browser/sharing/sharing_metrics.h"
#include "chrome/browser/sharing/sharing_service.h" #include "chrome/browser/sharing/sharing_service.h"
#include "chrome/browser/ui/page_action/page_action_icon_type.h" #include "chrome/browser/ui/page_action/page_action_icon_type.h"
#include "components/sync/protocol/device_info_specifics.pb.h" #include "components/sync/protocol/device_info_specifics.pb.h"
#include "components/sync_device_info/device_info.h" #include "components/sync_device_info/device_info.h"
#include "ui/gfx/image/image.h"
#include "ui/views/controls/styled_label.h" #include "ui/views/controls/styled_label.h"
#include "ui/views/controls/styled_label_listener.h" #include "ui/views/controls/styled_label_listener.h"
...@@ -39,21 +39,7 @@ class WebContents; ...@@ -39,21 +39,7 @@ class WebContents;
// The controller for desktop dialog with the list of synced devices and apps. // The controller for desktop dialog with the list of synced devices and apps.
class SharingUiController { class SharingUiController {
public: public:
struct App { using UpdateAppsCallback = base::OnceCallback<void(std::vector<SharingApp>)>;
App(const gfx::VectorIcon* vector_icon,
const gfx::Image& image,
base::string16 name,
std::string identifier);
App(App&& other);
~App();
const gfx::VectorIcon* vector_icon = nullptr;
gfx::Image image;
base::string16 name;
std::string identifier;
};
using UpdateAppsCallback = base::OnceCallback<void(std::vector<App>)>;
explicit SharingUiController(content::WebContents* web_contents); explicit SharingUiController(content::WebContents* web_contents);
virtual ~SharingUiController(); virtual ~SharingUiController();
...@@ -63,7 +49,7 @@ class SharingUiController { ...@@ -63,7 +49,7 @@ class SharingUiController {
// Called when user chooses a synced device to complete the task. // Called when user chooses a synced device to complete the task.
virtual void OnDeviceChosen(const syncer::DeviceInfo& device) = 0; virtual void OnDeviceChosen(const syncer::DeviceInfo& device) = 0;
// Called when user chooses a local app to complete the task. // Called when user chooses a local app to complete the task.
virtual void OnAppChosen(const App& app) = 0; virtual void OnAppChosen(const SharingApp& app) = 0;
virtual PageActionIconType GetIconType() = 0; virtual PageActionIconType GetIconType() = 0;
virtual sync_pb::SharingSpecificFields::EnabledFeatures virtual sync_pb::SharingSpecificFields::EnabledFeatures
GetRequiredFeature() = 0; GetRequiredFeature() = 0;
...@@ -113,12 +99,14 @@ class SharingUiController { ...@@ -113,12 +99,14 @@ class SharingUiController {
bool HasSendFailed() const; bool HasSendFailed() const;
content::WebContents* web_contents() const { return web_contents_; } content::WebContents* web_contents() const { return web_contents_; }
const std::vector<App>& apps() const { return apps_; } const std::vector<SharingApp>& apps() const { return apps_; }
const std::vector<std::unique_ptr<syncer::DeviceInfo>>& devices() const { const std::vector<std::unique_ptr<syncer::DeviceInfo>>& devices() const {
return devices_; return devices_;
} }
void set_apps_for_testing(std::vector<App> apps) { apps_ = std::move(apps); } void set_apps_for_testing(std::vector<SharingApp> apps) {
apps_ = std::move(apps);
}
void set_devices_for_testing( void set_devices_for_testing(
std::vector<std::unique_ptr<syncer::DeviceInfo>> devices) { std::vector<std::unique_ptr<syncer::DeviceInfo>> devices) {
devices_ = std::move(devices); devices_ = std::move(devices);
...@@ -150,7 +138,7 @@ class SharingUiController { ...@@ -150,7 +138,7 @@ class SharingUiController {
// |success| is false and updates the omnibox icon. // |success| is false and updates the omnibox icon.
void OnMessageSentToDevice(int dialog_id, SharingSendMessageResult result); void OnMessageSentToDevice(int dialog_id, SharingSendMessageResult result);
void OnAppsReceived(int dialog_id, std::vector<App> apps); void OnAppsReceived(int dialog_id, std::vector<SharingApp> apps);
SharingDialog* dialog_ = nullptr; SharingDialog* dialog_ = nullptr;
content::WebContents* web_contents_ = nullptr; content::WebContents* web_contents_ = nullptr;
...@@ -161,7 +149,7 @@ class SharingUiController { ...@@ -161,7 +149,7 @@ class SharingUiController {
std::string target_device_name_; std::string target_device_name_;
// Currently used apps and devices since the last call to UpdateAndShowDialog. // Currently used apps and devices since the last call to UpdateAndShowDialog.
std::vector<App> apps_; std::vector<SharingApp> apps_;
std::vector<std::unique_ptr<syncer::DeviceInfo>> devices_; std::vector<std::unique_ptr<syncer::DeviceInfo>> devices_;
// ID of the last shown dialog used to ignore events from old dialogs. // ID of the last shown dialog used to ignore events from old dialogs.
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/app/vector_icons/vector_icons.h" #include "chrome/app/vector_icons/vector_icons.h"
#include "chrome/browser/sharing/sharing_app.h"
#include "chrome/browser/sharing/sharing_metrics.h" #include "chrome/browser/sharing/sharing_metrics.h"
#include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/views/accessibility/non_accessible_image_view.h" #include "chrome/browser/ui/views/accessibility/non_accessible_image_view.h"
...@@ -60,7 +61,7 @@ gfx::ImageSkia CreateDeviceIcon( ...@@ -60,7 +61,7 @@ gfx::ImageSkia CreateDeviceIcon(
: kHardwareSmartphoneIcon); : kHardwareSmartphoneIcon);
} }
gfx::ImageSkia CreateAppIcon(const SharingUiController::App& app) { gfx::ImageSkia CreateAppIcon(const SharingApp& app) {
return app.vector_icon ? CreateVectorIcon(*app.vector_icon) return app.vector_icon ? CreateVectorIcon(*app.vector_icon)
: app.image.AsImageSkia(); : app.image.AsImageSkia();
} }
...@@ -170,7 +171,7 @@ void SharingDialogView::ButtonPressed(views::Button* sender, ...@@ -170,7 +171,7 @@ void SharingDialogView::ButtonPressed(views::Button* sender,
size_t index = static_cast<size_t>(sender->tag()); size_t index = static_cast<size_t>(sender->tag());
const std::vector<std::unique_ptr<syncer::DeviceInfo>>& devices = const std::vector<std::unique_ptr<syncer::DeviceInfo>>& devices =
controller_->devices(); controller_->devices();
const std::vector<SharingUiController::App>& apps = controller_->apps(); const std::vector<SharingApp>& apps = controller_->apps();
DCHECK(index < devices.size() + apps.size()); DCHECK(index < devices.size() + apps.size());
if (index < devices.size()) { if (index < devices.size()) {
...@@ -230,7 +231,7 @@ void SharingDialogView::OnThemeChanged() { ...@@ -230,7 +231,7 @@ void SharingDialogView::OnThemeChanged() {
const std::vector<std::unique_ptr<syncer::DeviceInfo>>& devices = const std::vector<std::unique_ptr<syncer::DeviceInfo>>& devices =
controller_->devices(); controller_->devices();
const std::vector<SharingUiController::App>& apps = controller_->apps(); const std::vector<SharingApp>& apps = controller_->apps();
DCHECK_EQ(devices.size() + apps.size(), button_icons_.size()); DCHECK_EQ(devices.size() + apps.size(), button_icons_.size());
size_t button_index = 0; size_t button_index = 0;
...@@ -248,7 +249,7 @@ void SharingDialogView::OnThemeChanged() { ...@@ -248,7 +249,7 @@ void SharingDialogView::OnThemeChanged() {
void SharingDialogView::InitListView() { void SharingDialogView::InitListView() {
const std::vector<std::unique_ptr<syncer::DeviceInfo>>& devices = const std::vector<std::unique_ptr<syncer::DeviceInfo>>& devices =
controller_->devices(); controller_->devices();
const std::vector<SharingUiController::App>& apps = controller_->apps(); const std::vector<SharingApp>& apps = controller_->apps();
int tag = 0; int tag = 0;
// Devices: // Devices:
......
...@@ -36,31 +36,27 @@ class SharingDialogView : public SharingDialog, ...@@ -36,31 +36,27 @@ class SharingDialogView : public SharingDialog,
~SharingDialogView() override; ~SharingDialogView() override;
// SharingDialogView: // SharingDialog:
void Hide() override; void Hide() override;
// views::WidgetDelegateView: // LocationBarBubbleDelegateView:
bool ShouldShowCloseButton() const override; bool ShouldShowCloseButton() const override;
base::string16 GetWindowTitle() const override; base::string16 GetWindowTitle() const override;
void WindowClosing() override; void WindowClosing() override;
int GetDialogButtons() const override;
std::unique_ptr<views::View> CreateFootnoteView() override;
gfx::Size CalculatePreferredSize() const override;
void AddedToWidget() override;
void OnThemeChanged() override;
// views::StyledLabelListener: // views::StyledLabelListener:
void StyledLabelLinkClicked(views::StyledLabel* label, void StyledLabelLinkClicked(views::StyledLabel* label,
const gfx::Range& range, const gfx::Range& range,
int event_flags) override; int event_flags) override;
// views::DialogDelegate:
int GetDialogButtons() const override;
std::unique_ptr<views::View> CreateFootnoteView() override;
// views::ButtonListener: // views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override; void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// views::View:
gfx::Size CalculatePreferredSize() const override;
void AddedToWidget() override;
void OnThemeChanged() override;
static views::BubbleDialogDelegateView* GetAsBubble(SharingDialog* dialog); static views::BubbleDialogDelegateView* GetAsBubble(SharingDialog* dialog);
std::unique_ptr<views::StyledLabel> CreateHelpText( std::unique_ptr<views::StyledLabel> CreateHelpText(
views::StyledLabelListener* listener); views::StyledLabelListener* listener);
...@@ -74,7 +70,7 @@ class SharingDialogView : public SharingDialog, ...@@ -74,7 +70,7 @@ class SharingDialogView : public SharingDialog,
SharingDialogType GetDialogType() const; SharingDialogType GetDialogType() const;
// views::BubbleDialogDelegateView: // LocationBarBubbleDelegateView:
void Init() override; void Init() override;
// Shows a header image in the dialog view. // Shows a header image in the dialog view.
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "base/test/simple_test_clock.h" #include "base/test/simple_test_clock.h"
#include "chrome/browser/sharing/click_to_call/click_to_call_ui_controller.h" #include "chrome/browser/sharing/click_to_call/click_to_call_ui_controller.h"
#include "chrome/browser/sharing/sharing_app.h"
#include "chrome/browser/sharing/sharing_metrics.h" #include "chrome/browser/sharing/sharing_metrics.h"
#include "chrome/browser/ui/views/hover_button.h" #include "chrome/browser/ui/views/hover_button.h"
#include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile.h"
...@@ -35,7 +36,7 @@ class ClickToCallUiControllerMock : public ClickToCallUiController { ...@@ -35,7 +36,7 @@ class ClickToCallUiControllerMock : public ClickToCallUiController {
~ClickToCallUiControllerMock() override = default; ~ClickToCallUiControllerMock() override = default;
MOCK_METHOD1(OnDeviceChosen, void(const syncer::DeviceInfo& device)); MOCK_METHOD1(OnDeviceChosen, void(const syncer::DeviceInfo& device));
MOCK_METHOD1(OnAppChosen, void(const App& app)); MOCK_METHOD1(OnAppChosen, void(const SharingApp& app));
MOCK_METHOD1(OnHelpTextClicked, void(SharingDialogType dialog_type)); MOCK_METHOD1(OnHelpTextClicked, void(SharingDialogType dialog_type));
}; };
...@@ -101,8 +102,8 @@ class SharingDialogViewTest : public ChromeViewsTestBase { ...@@ -101,8 +102,8 @@ class SharingDialogViewTest : public ChromeViewsTestBase {
return devices; return devices;
} }
std::vector<ClickToCallUiController::App> CreateApps(int count) { std::vector<SharingApp> CreateApps(int count) {
std::vector<ClickToCallUiController::App> apps; std::vector<SharingApp> apps;
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
apps.emplace_back( apps.emplace_back(
&vector_icons::kOpenInNewIcon, gfx::Image(), &vector_icons::kOpenInNewIcon, gfx::Image(),
...@@ -153,8 +154,8 @@ TEST_F(SharingDialogViewTest, DevicePressed) { ...@@ -153,8 +154,8 @@ TEST_F(SharingDialogViewTest, DevicePressed) {
} }
TEST_F(SharingDialogViewTest, AppPressed) { TEST_F(SharingDialogViewTest, AppPressed) {
ClickToCallUiController::App app(&vector_icons::kOpenInNewIcon, gfx::Image(), SharingApp app(&vector_icons::kOpenInNewIcon, gfx::Image(),
base::UTF8ToUTF16("app0"), std::string()); base::UTF8ToUTF16("app0"), std::string());
EXPECT_CALL(*controller_.get(), OnAppChosen(AppEquals(&app))); EXPECT_CALL(*controller_.get(), OnAppChosen(AppEquals(&app)));
auto dialog = CreateDialogView(/*devices=*/3, /*apps=*/2); auto dialog = CreateDialogView(/*devices=*/3, /*apps=*/2);
......
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