chromium/chromeos/ash/services/libassistant/public/cpp/assistant_timer.h

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

#ifndef CHROMEOS_ASH_SERVICES_LIBASSISTANT_PUBLIC_CPP_ASSISTANT_TIMER_H_
#define CHROMEOS_ASH_SERVICES_LIBASSISTANT_PUBLIC_CPP_ASSISTANT_TIMER_H_

#include <memory>
#include <optional>
#include <string>

#include "base/component_export.h"
#include "base/time/time.h"

namespace ash::assistant {

// Represents the current state of an Assistant timer.
enum class AssistantTimerState {
  kUnknown,

  // The timer is scheduled to fire at some future date.
  kScheduled,

  // The timer will not fire but is kept in the queue of scheduled events;
  // it can be resumed after which it will fire in |remaining_time|.
  kPaused,

  // The timer has fired. In the simplest case this means the timer has
  // begun ringing.
  kFired,
};

// Models an Assistant timer.
struct COMPONENT_EXPORT(LIBASSISTANT_PUBLIC_STRUCTS) AssistantTimer {
  AssistantTimer();
  AssistantTimer(const AssistantTimer&);
  AssistantTimer& operator=(const AssistantTimer&);
  ~AssistantTimer();

  // Returns whether |this| is considered equal in LibAssistant to |other|.
  // NOTE: this *only* checks against fields which are set by LibAssistant.
  bool IsEqualInLibAssistantTo(const AssistantTimer& other) const;

  // These fields are set *only* by LibAssistant.
  std::string id;
  std::string label;
  base::Time fire_time;
  base::TimeDelta original_duration;

  // These fields are set *only* by Chrome.
  std::optional<base::Time> creation_time;
  base::TimeDelta remaining_time;

  // This field is set *only* by LibAssistant *except* in timers v2 where we may
  // update a timer from |kScheduled| to |kFired| state in Chrome in order to
  // reduce UI jank that would otherwise occur if we waited for LibAssistant to
  // notify us of the state change.
  AssistantTimerState state{AssistantTimerState::kUnknown};
};

}  // namespace ash::assistant

#endif  // CHROMEOS_ASH_SERVICES_LIBASSISTANT_PUBLIC_CPP_ASSISTANT_TIMER_H_