// Copyright 2017 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/ui/views/location_bar/find_bar_icon.h"

#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/find_bar/find_bar.h"
#include "chrome/browser/ui/find_bar/find_bar_controller.h"
#include "chrome/grit/generated_resources.h"
#include "components/omnibox/browser/vector_icons.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/views/animation/ink_drop.h"

FindBarIcon::FindBarIcon(Browser* browser,
                         PageActionIconView::Delegate* delegate)
    : PageActionIconView(nullptr, 0, delegate), browser_(browser) {
  DCHECK(browser_);
}

FindBarIcon::~FindBarIcon() {}

void FindBarIcon::SetActive(bool activate, bool should_animate) {
  if (activate ==
      (GetInkDrop()->GetTargetInkDropState() == views::InkDropState::ACTIVATED))
    return;
  if (activate) {
    if (should_animate) {
      AnimateInkDrop(views::InkDropState::ACTIVATED, nullptr);
    } else {
      GetInkDrop()->SnapToActivated();
    }
  } else {
    AnimateInkDrop(views::InkDropState::HIDDEN, nullptr);
  }
}

base::string16 FindBarIcon::GetTextForTooltipAndAccessibleName() const {
  return l10n_util::GetStringUTF16(IDS_TOOLTIP_FIND);
}

void FindBarIcon::OnExecuting(ExecuteSource execute_source) {}

views::BubbleDialogDelegateView* FindBarIcon::GetBubble() const {
  return nullptr;
}

const gfx::VectorIcon& FindBarIcon::GetVectorIcon() const {
  return omnibox::kFindInPageIcon;
}

bool FindBarIcon::Update() {
  // |browser_->window()| may return nullptr because Update() is called while
  // BrowserWindow is being constructed.
  if (!browser_->window() || !browser_->HasFindBarController())
    return false;

  const bool was_visible = visible();
  SetVisible(browser_->GetFindBarController()->find_bar()->IsFindBarVisible());
  const bool visibility_changed = was_visible != visible();
  SetActive(visible(), visibility_changed);
  return visibility_changed;
}
