[go: nahoru, domu]

blob: f5b48174b3b21facd666255f0610dc43953ad537 [file] [log] [blame]
Avi Drissman3a215d1e2022-09-07 19:43:091// Copyright 2020 The Chromium Authors
Meilin Wang418ae712020-09-17 05:50:032// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ash/system/phonehub/onboarding_view.h"
6
7#include <algorithm>
8#include <memory>
Jan Wilken Dörriead587c32021-03-11 14:09:279#include <string>
Meilin Wang418ae712020-09-17 05:50:0310#include <vector>
11
12#include "ash/public/cpp/resources/grit/ash_public_unscaled_resources.h"
Meilin Wang98efd1be2020-10-01 22:25:3513#include "ash/public/cpp/system_tray_client.h"
Meilin Wangd626fde2020-10-23 17:53:3614#include "ash/root_window_controller.h"
Meilin Wang98efd1be2020-10-01 22:25:3515#include "ash/shell.h"
Meilin Wang418ae712020-09-17 05:50:0316#include "ash/strings/grit/ash_strings.h"
17#include "ash/style/ash_color_provider.h"
minch9cfa2b02021-11-12 20:42:4118#include "ash/style/pill_button.h"
Meilin Wang98efd1be2020-10-01 22:25:3519#include "ash/system/model/system_tray_model.h"
Meilin Wangd626fde2020-10-23 17:53:3620#include "ash/system/phonehub/phone_hub_content_view.h"
Meilin Wang418ae712020-09-17 05:50:0321#include "ash/system/phonehub/phone_hub_interstitial_view.h"
Tim Song85303702020-10-16 04:57:0022#include "ash/system/phonehub/phone_hub_metrics.h"
Meilin Wangd626fde2020-10-23 17:53:3623#include "ash/system/phonehub/phone_hub_tray.h"
Meilin Wang98efd1be2020-10-01 22:25:3524#include "ash/system/phonehub/phone_hub_view_ids.h"
Meilin Wangd626fde2020-10-23 17:53:3625#include "ash/system/status_area_widget.h"
26#include "ash/system/tray/tray_bubble_view.h"
Avi Drissman4de6dab2023-01-06 23:17:3527#include "base/functional/bind.h"
Arthur Sonzogni834e018f2023-04-22 10:20:0228#include "base/memory/raw_ptr.h"
Meilin Wangd626fde2020-10-23 17:53:3629#include "base/strings/strcat.h"
Henrique Ferreirofadda062022-12-01 16:27:1430#include "chromeos/ash/components/phonehub/onboarding_ui_tracker.h"
Meilin Wang418ae712020-09-17 05:50:0331#include "ui/base/l10n/l10n_util.h"
Allen Bauera66b3eed2021-05-05 02:42:1232#include "ui/base/metadata/metadata_impl_macros.h"
Meilin Wang418ae712020-09-17 05:50:0333#include "ui/base/resource/resource_bundle.h"
Andre Le09e38cd2020-11-05 19:49:1634#include "ui/chromeos/devicetype_utils.h"
Meilin Wang418ae712020-09-17 05:50:0335#include "ui/views/layout/fill_layout.h"
36
37namespace ash {
38
Tim Song85303702020-10-16 04:57:0039using phone_hub_metrics::InterstitialScreenEvent;
Tim Song947932a2020-10-31 00:38:4540using phone_hub_metrics::Screen;
Tim Song85303702020-10-16 04:57:0041
Meilin Wangd626fde2020-10-23 17:53:3642// OnboardingMainView ---------------------------------------------------------
43// Main onboarding screen with Phone Hub feature description and two buttons
44// (Get Started and Dismiss), where user can either choose to grant permission
45// to enable this feature or dismiss the screen.
Peter Kasting5aacfd492020-10-31 03:33:1446class OnboardingMainView : public PhoneHubInterstitialView {
David Yeungadb27442023-11-14 22:49:5147 METADATA_HEADER(OnboardingMainView, PhoneHubInterstitialView)
48
Meilin Wangd626fde2020-10-23 17:53:3649 public:
Henrique Ferreiro91fb61df2021-11-12 15:51:0350 OnboardingMainView(phonehub::OnboardingUiTracker* onboarding_ui_tracker,
51 OnboardingView* parent_view,
52 OnboardingView::OnboardingFlow onboarding_flow)
Meilin Wangd626fde2020-10-23 17:53:3653 : PhoneHubInterstitialView(/*show_progress=*/false),
54 onboarding_ui_tracker_(onboarding_ui_tracker),
Tim Song5a9883f52020-11-04 19:40:0355 parent_view_(parent_view),
56 onboarding_flow_(onboarding_flow) {
Meilin Wangd626fde2020-10-23 17:53:3657 SetID(PhoneHubViewID::kOnboardingMainView);
58 InitLayout();
59 }
60
Tim Song947932a2020-10-31 00:38:4561 // PhoneHubInterstitialView:
62 Screen GetScreenForMetrics() const override {
Tim Song5a9883f52020-11-04 19:40:0363 switch (onboarding_flow_) {
64 case OnboardingView::kExistingMultideviceUser:
65 return Screen::kOnboardingExistingMultideviceUser;
66 case OnboardingView::kNewMultideviceUser:
67 return Screen::kOnboardingNewMultideviceUser;
68 }
Tim Song947932a2020-10-31 00:38:4569 }
70
Meilin Wangd626fde2020-10-23 17:53:3671 private:
72 void InitLayout() {
Avery Musbach5ebb29fa2022-01-28 17:12:4873 SetImage(ui::ResourceBundle::GetSharedInstance().GetThemedLottieImageNamed(
74 IDR_PHONE_HUB_ONBOARDING_IMAGE));
Meilin Wangd626fde2020-10-23 17:53:3675 SetTitle(
76 l10n_util::GetStringUTF16(IDS_ASH_PHONE_HUB_ONBOARDING_DIALOG_TITLE));
Kyle Horimotofe7173b2021-01-14 22:32:4877 SetDescription(l10n_util::GetStringUTF16(
78 IDS_ASH_PHONE_HUB_ONBOARDING_DIALOG_DESCRIPTION));
Meilin Wangd626fde2020-10-23 17:53:3679
mincha0674932021-10-18 17:56:2180 auto get_started = std::make_unique<PillButton>(
Peter Kasting5aacfd492020-10-31 03:33:1481 base::BindRepeating(&OnboardingMainView::GetStartedButtonPressed,
82 base::Unretained(this)),
Meilin Wangd626fde2020-10-23 17:53:3683 l10n_util::GetStringUTF16(
84 IDS_ASH_PHONE_HUB_ONBOARDING_DIALOG_GET_STARTED_BUTTON),
Crisrael Luceroecff8b82024-01-29 21:20:3285 PillButton::Type::kPrimaryWithoutIcon,
Crisrael Lucerof1392ae2023-05-12 23:17:4586 /*icon=*/nullptr);
Meilin Wangd626fde2020-10-23 17:53:3687 get_started->SetID(PhoneHubViewID::kOnboardingGetStartedButton);
88 AddButton(std::move(get_started));
89 }
90
Peter Kasting5aacfd492020-10-31 03:33:1491 void GetStartedButtonPressed() {
Tim Songa6682b152020-11-03 21:24:2492 LogInterstitialScreenEvent(InterstitialScreenEvent::kConfirm);
Pu Shi0efed35f2023-08-07 19:21:2493 onboarding_ui_tracker_->HandleGetStarted(
94 parent_view_->IsOnboardingViewStartedFromNudge());
Peter Kasting5aacfd492020-10-31 03:33:1495 }
96
Bartek Nowierskideb75842023-12-27 02:32:4297 raw_ptr<phonehub::OnboardingUiTracker> onboarding_ui_tracker_ = nullptr;
98 raw_ptr<OnboardingView> parent_view_ = nullptr;
Tim Song5a9883f52020-11-04 19:40:0399 const OnboardingView::OnboardingFlow onboarding_flow_;
Meilin Wangd626fde2020-10-23 17:53:36100};
101
David Yeungadb27442023-11-14 22:49:51102BEGIN_METADATA(OnboardingMainView)
103END_METADATA
104
Meilin Wangd626fde2020-10-23 17:53:36105// OnboardingView -------------------------------------------------------------
Meilin Wang98efd1be2020-10-01 22:25:35106OnboardingView::OnboardingView(
Henrique Ferreiro91fb61df2021-11-12 15:51:03107 phonehub::OnboardingUiTracker* onboarding_ui_tracker,
Meilin Wang65319732020-11-06 20:03:18108 Delegate* delegate,
Tim Song5a9883f52020-11-04 19:40:03109 OnboardingFlow onboarding_flow)
Meilin Wang65319732020-11-06 20:03:18110 : onboarding_ui_tracker_(onboarding_ui_tracker), delegate_(delegate) {
Meilin Wang98efd1be2020-10-01 22:25:35111 SetID(PhoneHubViewID::kOnboardingView);
Meilin Wang418ae712020-09-17 05:50:03112
Meilin Wang418ae712020-09-17 05:50:03113 SetLayoutManager(std::make_unique<views::FillLayout>());
Tim Song5a9883f52020-11-04 19:40:03114 main_view_ = AddChildView(std::make_unique<OnboardingMainView>(
115 onboarding_ui_tracker_, this, onboarding_flow));
Tim Song85303702020-10-16 04:57:00116
Tim Songa6682b152020-11-03 21:24:24117 LogInterstitialScreenEvent(InterstitialScreenEvent::kShown);
Meilin Wang418ae712020-09-17 05:50:03118}
119
120OnboardingView::~OnboardingView() = default;
121
Meilin Wangd626fde2020-10-23 17:53:36122void OnboardingView::OnBubbleClose() {
123 main_view_->OnBubbleClose();
124}
125
Tim Song947932a2020-10-31 00:38:45126Screen OnboardingView::GetScreenForMetrics() const {
127 return main_view_->GetScreenForMetrics();
128}
129
Pu Shi0efed35f2023-08-07 19:21:24130bool OnboardingView::IsOnboardingViewStartedFromNudge() {
131 if (!delegate_) {
132 return false;
133 }
134
135 return delegate_->IsPhoneHubIconClickedWhenNudgeVisible();
136}
137
Allen Bauerb74ca112024-02-09 18:29:53138BEGIN_METADATA(OnboardingView)
Meilin Wang418ae712020-09-17 05:50:03139END_METADATA
140
141} // namespace ash