blob: 34f24f5b9801de3c78b9311ce70bfba0f66b7aa9 [file] [log] [blame]
// Copyright 2020 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/sharesheet/sharesheet_service_delegate.h"
#include <utility>
#include "base/bind.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sharesheet/sharesheet_service.h"
#include "chrome/browser/sharesheet/sharesheet_service_factory.h"
#include "chrome/browser/ui/ash/sharesheet/sharesheet_bubble_view.h"
#include "ui/views/view.h"
namespace sharesheet {
SharesheetServiceDelegate::SharesheetServiceDelegate(
gfx::NativeWindow native_window,
SharesheetService* sharesheet_service)
: native_window_(native_window),
sharesheet_bubble_view_(
std::make_unique<ash::sharesheet::SharesheetBubbleView>(native_window,
this)),
sharesheet_service_(sharesheet_service) {}
SharesheetServiceDelegate::~SharesheetServiceDelegate() = default;
void SharesheetServiceDelegate::ShowBubble(
std::vector<TargetInfo> targets,
apps::mojom::IntentPtr intent,
sharesheet::DeliveredCallback delivered_callback) {
if (is_bubble_open_) {
if (delivered_callback) {
std::move(delivered_callback)
.Run(sharesheet::SharesheetResult::kErrorAlreadyOpen);
}
return;
}
sharesheet_bubble_view_->ShowBubble(std::move(targets), std::move(intent),
std::move(delivered_callback));
is_bubble_open_ = true;
}
#if BUILDFLAG(IS_CHROMEOS_ASH)
void SharesheetServiceDelegate::ShowNearbyShareBubble(
apps::mojom::IntentPtr intent,
sharesheet::DeliveredCallback delivered_callback) {
if (is_bubble_open_) {
if (delivered_callback) {
std::move(delivered_callback)
.Run(sharesheet::SharesheetResult::kErrorAlreadyOpen);
}
return;
}
sharesheet_bubble_view_->ShowNearbyShareBubble(std::move(intent),
std::move(delivered_callback));
is_bubble_open_ = true;
}
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
void SharesheetServiceDelegate::OnBubbleClosed(
const std::u16string& active_action) {
sharesheet_bubble_view_.release();
sharesheet_service_->OnBubbleClosed(native_window_, active_action);
// This object is now deleted and nothing can be accessed any more.
// Therefore there is no need to set is_bubble_open_ to false.
}
void SharesheetServiceDelegate::OnTargetSelected(
const std::u16string& target_name,
const TargetType type,
apps::mojom::IntentPtr intent,
views::View* share_action_view) {
sharesheet_service_->OnTargetSelected(native_window_, target_name, type,
std::move(intent), share_action_view);
}
bool SharesheetServiceDelegate::OnAcceleratorPressed(
const ui::Accelerator& accelerator,
const std::u16string& active_action) {
return sharesheet_service_->OnAcceleratorPressed(accelerator, active_action);
}
void SharesheetServiceDelegate::OnActionLaunched() {
sharesheet_bubble_view_->ShowActionView();
}
const gfx::VectorIcon* SharesheetServiceDelegate::GetVectorIcon(
const std::u16string& display_name) {
return sharesheet_service_->GetVectorIcon(display_name);
}
gfx::NativeWindow SharesheetServiceDelegate::GetNativeWindow() {
return native_window_;
}
Profile* SharesheetServiceDelegate::GetProfile() {
return sharesheet_service_->GetProfile();
}
void SharesheetServiceDelegate::SetSharesheetSize(const int& width,
const int& height) {
DCHECK_GT(width, 0);
DCHECK_GT(height, 0);
sharesheet_bubble_view_->ResizeBubble(width, height);
}
void SharesheetServiceDelegate::CloseSharesheet() {
sharesheet_bubble_view_->CloseBubble();
}
} // namespace sharesheet