| // 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 |