chromium/ash/system/camera/autozoom_toast_view.cc

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ash/system/camera/autozoom_toast_view.h"

#include "ash/resources/vector_icons/vector_icons.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/camera/autozoom_toast_controller.h"
#include "ash/system/tray/tray_constants.h"
#include "ash/system/unified/feature_pod_button.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/metadata/metadata_impl_macros.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/controls/label.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/style/typography.h"
#include "ui/views/style/typography_provider.h"

namespace ash {

AutozoomToastView::AutozoomToastView(AutozoomToastController* controller)
    : controller_(controller) {
  auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
      views::BoxLayout::Orientation::kHorizontal, kAutozoomToastInsets,
      kAutozoomToastSpacing));
  layout->set_cross_axis_alignment(
      views::BoxLayout::CrossAxisAlignment::kCenter);

  button_ = AddChildView(std::make_unique<FeaturePodIconButton>(
      FeaturePodIconButton::PressedCallback(),
      /*is_togglable=*/true));
  button_->SetVectorIcon(kUnifiedMenuAutozoomIcon);
  button_->SetToggled(false);
  button_->AddObserver(this);

  label_ = AddChildView(std::make_unique<views::Label>());
  label_->SetText(
      l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_AUTOZOOM_TOAST_ON_STATE));
  label_->SetFontList(views::TypographyProvider::Get().GetFont(
      views::style::TextContext::CONTEXT_DIALOG_TITLE,
      views::style::TextStyle::STYLE_PRIMARY));
}

AutozoomToastView::~AutozoomToastView() {
  button_->RemoveObserver(this);
}

void AutozoomToastView::SetAutozoomEnabled(bool enabled) {
  button_->SetToggled(enabled);
  button_->SetTooltipText(
      l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_AUTOZOOM_TOAST_ON_STATE));

  InvalidateLayout();
}

bool AutozoomToastView::IsButtonFocused() const {
  return button_->HasFocus();
}

std::u16string AutozoomToastView::accessible_name() const {
  return l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_AUTOZOOM_TOAST_ON_STATE);
}

void AutozoomToastView::OnViewFocused(views::View* observed_view) {
  DCHECK(observed_view == button_);
  controller_->StopAutocloseTimer();
}

void AutozoomToastView::OnViewBlurred(views::View* observed_view) {
  DCHECK(observed_view == button_);
  controller_->StartAutoCloseTimer();
}

BEGIN_METADATA(AutozoomToastView)
END_METADATA

}  // namespace ash