// 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 "ash/capture_mode/stop_recording_button_tray.h"

#include "ash/capture_mode/capture_mode_controller.h"
#include "ash/capture_mode/capture_mode_metrics.h"
#include "ash/public/cpp/shelf_config.h"
#include "ash/resources/vector_icons/vector_icons.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_container.h"
#include "base/metrics/user_metrics.h"
#include "base/metrics/user_metrics_action.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/views/controls/image_view.h"

namespace ash {

StopRecordingButtonTray::StopRecordingButtonTray(Shelf* shelf)
    : TrayBackgroundView(shelf) {
  auto image_view = std::make_unique<views::ImageView>();
  image_view->SetImage(gfx::CreateVectorIcon(
      kCaptureModeCircleStopIcon,
      AshColorProvider::Get()->GetContentLayerColor(
          AshColorProvider::ContentLayerType::kIconColorPrimary)));
  image_view->SetTooltipText(GetAccessibleNameForTray());
  image_view->SetHorizontalAlignment(views::ImageView::Alignment::kCenter);
  image_view->SetVerticalAlignment(views::ImageView::Alignment::kCenter);
  image_view->SetPreferredSize(gfx::Size(kTrayItemSize, kTrayItemSize));
  tray_container()->AddChildView(std::move(image_view));

  set_use_bounce_in_animation(true);
}

StopRecordingButtonTray::~StopRecordingButtonTray() = default;

bool StopRecordingButtonTray::PerformAction(const ui::Event& event) {
  DCHECK(event.type() == ui::ET_MOUSE_RELEASED ||
         event.type() == ui::ET_GESTURE_TAP);

  base::RecordAction(base::UserMetricsAction("Tray_StopRecording"));
  CaptureModeController::Get()->EndVideoRecording(
      EndRecordingReason::kStopRecordingButton);
  return true;
}

base::string16 StopRecordingButtonTray::GetAccessibleNameForTray() {
  return l10n_util::GetStringUTF16(
      IDS_ASH_STATUS_AREA_STOP_RECORDING_BUTTON_ACCESSIBLE_NAME);
}

}  // namespace ash
