blob: 59a358f5e50b8a68e0b7c01d6c7d8449a0bbf972 [file] [log] [blame]
// 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.
#include "components/user_education/common/tutorial_description.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "ui/base/interaction/element_identifier.h"
#include "ui/base/interaction/interaction_sequence.h"
namespace user_education {
TutorialDescription::TutorialDescription() = default;
TutorialDescription::~TutorialDescription() = default;
TutorialDescription::TutorialDescription(TutorialDescription&&) = default;
TutorialDescription& TutorialDescription::operator=(TutorialDescription&&) =
default;
TutorialDescription::Step::Step()
: step_type(ui::InteractionSequence::StepType::kShown),
arrow(HelpBubbleArrow::kNone) {}
TutorialDescription::Step::~Step() = default;
TutorialDescription::Step::Step(ElementSpecifier element_specifier,
ui::InteractionSequence::StepType step_type_,
ui::CustomElementEventType event_type_)
: step_type(step_type_), event_type(event_type_) {
if (auto* id = absl::get_if<ui::ElementIdentifier>(&element_specifier)) {
element_id = *id;
} else {
CHECK(absl::holds_alternative<std::string>(element_specifier));
element_name = absl::get<std::string>(element_specifier);
}
}
TutorialDescription::Step::Step(
int title_text_id_,
int body_text_id_,
ui::InteractionSequence::StepType step_type_,
ui::ElementIdentifier element_id_,
std::string element_name_,
HelpBubbleArrow arrow_,
ui::CustomElementEventType event_type_,
absl::optional<bool> must_remain_visible_,
bool transition_only_on_event_,
TutorialDescription::NameElementsCallback name_elements_callback_,
ContextMode context_mode_)
: element_id(element_id_),
element_name(element_name_),
step_type(step_type_),
event_type(event_type_),
title_text_id(title_text_id_),
body_text_id(body_text_id_),
arrow(arrow_),
must_remain_visible(must_remain_visible_),
transition_only_on_event(transition_only_on_event_),
name_elements_callback(name_elements_callback_),
context_mode(context_mode_) {
DCHECK(!title_text_id || body_text_id)
<< "Tutorial bubble should not have a title without body text.";
}
TutorialDescription::Step::Step(const TutorialDescription::Step&) = default;
TutorialDescription::Step& TutorialDescription::Step::operator=(
const TutorialDescription::Step&) = default;
bool TutorialDescription::Step::Step::ShouldShowBubble() const {
// Hide steps and steps with no body text are "hidden" steps.
return body_text_id &&
step_type != ui::InteractionSequence::StepType::kHidden;
}
} // namespace user_education