// 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 "ash/lock_screen_action/lock_screen_note_launcher.h"

#include "ash/public/interfaces/tray_action.mojom.h"
#include "ash/shell.h"
#include "ash/tray_action/tray_action.h"
#include "base/bind.h"

namespace ash {

LockScreenNoteLauncher::LockScreenNoteLauncher()
    : tray_action_observer_(this) {}

LockScreenNoteLauncher::~LockScreenNoteLauncher() = default;

// static
bool LockScreenNoteLauncher::CanAttemptLaunch() {
  return Shell::Get()->tray_action()->GetLockScreenNoteState() ==
         mojom::TrayActionState::kAvailable;
}

bool LockScreenNoteLauncher::Run(mojom::LockScreenNoteOrigin action_origin,
                                 LaunchCallback callback) {
  DCHECK(callback_.is_null());

  if (!CanAttemptLaunch())
    return false;

  callback_ = std::move(callback);
  tray_action_observer_.Add(Shell::Get()->tray_action());

  Shell::Get()->tray_action()->RequestNewLockScreenNote(action_origin);
  return true;
}

void LockScreenNoteLauncher::OnLockScreenNoteStateChanged(
    mojom::TrayActionState state) {
  if (state == mojom::TrayActionState::kLaunching)
    return;

  OnLaunchDone(state == mojom::TrayActionState::kActive);
}

void LockScreenNoteLauncher::OnLaunchDone(bool success) {
  tray_action_observer_.RemoveAll();
  if (!callback_.is_null())
    std::move(callback_).Run(success);
}

}  // namespace ash
