123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // Copyright 2021 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 "ash/capture_mode/capture_mode_ash_notification_view.h"
- #include "ash/capture_mode/capture_mode_util.h"
- #include "ash/public/cpp/assistant/assistant_state.h"
- #include "ash/shell.h"
- #include "ui/base/l10n/l10n_util.h"
- #include "ui/views/background.h"
- #include "ui/views/view.h"
- namespace ash {
- CaptureModeAshNotificationView::CaptureModeAshNotificationView(
- const message_center::Notification& notification,
- CaptureModeType capture_type,
- bool shown_in_popup)
- : AshNotificationView(notification, shown_in_popup),
- capture_type_(capture_type) {
- UpdateWithNotification(notification);
- }
- CaptureModeAshNotificationView::~CaptureModeAshNotificationView() = default;
- // static
- std::unique_ptr<message_center::MessageView>
- CaptureModeAshNotificationView::CreateForImage(
- const message_center::Notification& notification,
- bool shown_in_popup) {
- return std::make_unique<CaptureModeAshNotificationView>(
- notification, CaptureModeType::kImage, shown_in_popup);
- }
- // static
- std::unique_ptr<message_center::MessageView>
- CaptureModeAshNotificationView::CreateForVideo(
- const message_center::Notification& notification,
- bool shown_in_popup) {
- return std::make_unique<CaptureModeAshNotificationView>(
- notification, CaptureModeType::kVideo, shown_in_popup);
- }
- void CaptureModeAshNotificationView::UpdateWithNotification(
- const message_center::Notification& notification) {
- // Re-create a new extra view in all circumstances to make sure that the view
- // is the last child of image container.
- delete extra_view_;
- extra_view_ = nullptr;
- NotificationViewBase::UpdateWithNotification(notification);
- if (!notification.image().IsEmpty())
- CreateExtraView();
- }
- void CaptureModeAshNotificationView::Layout() {
- AshNotificationView::Layout();
- if (!extra_view_)
- return;
- gfx::Rect extra_view_bounds = image_container_view()->GetContentsBounds();
- if (capture_type_ == CaptureModeType::kImage) {
- // The extra view in this case is a banner laid out at the bottom of the
- // image container.
- extra_view_bounds.set_y(extra_view_bounds.bottom() -
- capture_mode_util::kBannerHeightDip);
- extra_view_bounds.set_height(capture_mode_util::kBannerHeightDip);
- } else {
- DCHECK_EQ(capture_type_, CaptureModeType::kVideo);
- // The extra view in this case is a play icon centered in the view.
- extra_view_bounds.ClampToCenteredSize(capture_mode_util::kPlayIconViewSize);
- }
- extra_view_->SetBoundsRect(extra_view_bounds);
- }
- void CaptureModeAshNotificationView::CreateExtraView() {
- DCHECK(image_container_view());
- DCHECK(!image_container_view()->children().empty());
- DCHECK(!extra_view_);
- extra_view_ = image_container_view()->AddChildView(
- capture_type_ == CaptureModeType::kImage
- ? capture_mode_util::CreateBannerView()
- : capture_mode_util::CreatePlayIconView());
- }
- } // namespace ash
|