| // 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/callback.h" |
| #include "chrome/browser/sharesheet/sharesheet_service.h" |
| #include "chrome/browser/ui/ash/sharesheet/sharesheet_bubble_view_delegate.h" |
| #include "chrome/browser/ui/ash/sharesheet/sharesheet_header_view.h" |
| #include "ui/base/accelerators/accelerator.h" |
| #include "ui/views/view.h" |
| |
| namespace sharesheet { |
| |
| SharesheetServiceDelegate::SharesheetServiceDelegate( |
| gfx::NativeWindow native_window, |
| SharesheetService* sharesheet_service) |
| : native_window_(native_window), sharesheet_service_(sharesheet_service) { |
| #if BUILDFLAG(IS_CHROMEOS_ASH) |
| sharesheet_controller_ = |
| std::make_unique<ash::sharesheet::SharesheetBubbleViewDelegate>( |
| native_window_, this); |
| #else |
| NOTIMPLEMENTED(); |
| #endif // BUILDFLAG(IS_CHROMEOS_ASH) |
| } |
| |
| SharesheetServiceDelegate::~SharesheetServiceDelegate() = default; |
| |
| gfx::NativeWindow SharesheetServiceDelegate::GetNativeWindow() { |
| DCHECK(native_window_); |
| return native_window_; |
| } |
| |
| SharesheetController* SharesheetServiceDelegate::GetSharesheetController() { |
| DCHECK(sharesheet_controller_); |
| return sharesheet_controller_.get(); |
| } |
| |
| Profile* SharesheetServiceDelegate::GetProfile() { |
| DCHECK(sharesheet_service_); |
| return sharesheet_service_->GetProfile(); |
| } |
| |
| SharesheetUiDelegate* SharesheetServiceDelegate::GetUiDelegateForTesting() { |
| return sharesheet_controller_.get(); |
| } |
| |
| void SharesheetServiceDelegate::ShowBubble(std::vector<TargetInfo> targets, |
| apps::mojom::IntentPtr intent, |
| DeliveredCallback delivered_callback, |
| CloseCallback close_callback) { |
| if (sharesheet_controller_) { |
| sharesheet_controller_->ShowBubble(std::move(targets), std::move(intent), |
| std::move(delivered_callback), |
| std::move(close_callback)); |
| return; |
| } |
| NOTREACHED(); |
| } |
| |
| #if BUILDFLAG(IS_CHROMEOS_ASH) |
| // Skips the generic Sharesheet bubble and directly displays the |
| // NearbyShare bubble dialog. |
| void SharesheetServiceDelegate::ShowNearbyShareBubbleForArc( |
| apps::mojom::IntentPtr intent, |
| DeliveredCallback delivered_callback, |
| CloseCallback close_callback) { |
| DCHECK(sharesheet_controller_); |
| sharesheet_controller_->ShowNearbyShareBubbleForArc( |
| std::move(intent), std::move(delivered_callback), |
| std::move(close_callback)); |
| } |
| #endif // BUILDFLAG(IS_CHROMEOS_ASH) |
| |
| // Invoked immediately after an action has launched in the event that UI |
| // changes need to occur at this point. |
| void SharesheetServiceDelegate::OnActionLaunched() { |
| if (sharesheet_controller_) { |
| sharesheet_controller_->OnActionLaunched(); |
| return; |
| } |
| NOTREACHED(); |
| } |
| |
| void SharesheetServiceDelegate::CloseBubble(SharesheetResult result) { |
| if (sharesheet_controller_) { |
| sharesheet_controller_->CloseBubble(result); |
| return; |
| } |
| NOTREACHED(); |
| } |
| |
| void SharesheetServiceDelegate::OnBubbleClosed( |
| const std::u16string& active_action) { |
| DCHECK(sharesheet_service_); |
| sharesheet_service_->OnBubbleClosed(native_window_, active_action); |
| // This object is now deleted and nothing can be accessed any more. |
| } |
| |
| void SharesheetServiceDelegate::OnTargetSelected( |
| const std::u16string& target_name, |
| const TargetType type, |
| apps::mojom::IntentPtr intent, |
| views::View* share_action_view) { |
| DCHECK(sharesheet_service_); |
| 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) { |
| DCHECK(sharesheet_service_); |
| return sharesheet_service_->OnAcceleratorPressed(accelerator, active_action); |
| } |
| |
| const gfx::VectorIcon* SharesheetServiceDelegate::GetVectorIcon( |
| const std::u16string& display_name) { |
| DCHECK(sharesheet_service_); |
| return sharesheet_service_->GetVectorIcon(display_name); |
| } |
| |
| } // namespace sharesheet |