Commit 9c5a796a authored by David Black's avatar David Black Committed by Commit Bot

Stub in view for better Assistant onboarding.

Change is guarded behind a new feature flag.

Bug: b:157689497
Change-Id: I51e27a4aaf401d86c469a481dc021b97d1892c36
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2220664Reviewed-by: default avatarXiaohui Chen <xiaohuic@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Commit-Queue: David Black <dmblack@google.com>
Cr-Commit-Position: refs/heads/master@{#773207}
parent cb5e0496
......@@ -8,7 +8,9 @@
#include "ash/assistant/ui/main_stage/suggestion_chip_view.h"
#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/scoped_feature_list.h"
#include "chromeos/services/assistant/public/cpp/default_assistant_interaction_subscriber.h"
#include "chromeos/services/assistant/public/cpp/features.h"
#include "ui/compositor/scoped_animation_duration_scale_mode.h"
#include "ui/events/event.h"
#include "ui/views/controls/textfield/textfield.h"
......@@ -354,20 +356,58 @@ TEST_F(AssistantPageViewTest, ShouldFocusMicWhenOpeningWithHotword) {
}
TEST_F(AssistantPageViewTest, ShouldShowGreetingLabelWhenOpening) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndDisableFeature(
chromeos::assistant::features::kAssistantBetterOnboarding);
ShowAssistantUi();
EXPECT_TRUE(greeting_label()->IsDrawn());
EXPECT_EQ(nullptr, onboarding_view());
}
TEST_F(AssistantPageViewTest, ShouldShowOnboardingWhenOpening) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(
chromeos::assistant::features::kAssistantBetterOnboarding);
ShowAssistantUi();
EXPECT_TRUE(onboarding_view()->IsDrawn());
EXPECT_EQ(nullptr, greeting_label());
}
TEST_F(AssistantPageViewTest, ShouldDismissGreetingLabelAfterQuery) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndDisableFeature(
chromeos::assistant::features::kAssistantBetterOnboarding);
ShowAssistantUi();
MockTextInteraction().WithTextResponse("The response");
EXPECT_FALSE(greeting_label()->IsDrawn());
EXPECT_EQ(nullptr, onboarding_view());
}
TEST_F(AssistantPageViewTest, ShouldDismissOnboardingAfterQuery) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(
chromeos::assistant::features::kAssistantBetterOnboarding);
ShowAssistantUi();
MockTextInteraction().WithTextResponse("The response");
EXPECT_FALSE(onboarding_view()->IsDrawn());
EXPECT_EQ(nullptr, greeting_label());
}
TEST_F(AssistantPageViewTest, ShouldShowGreetingLabelAgainAfterReopening) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndDisableFeature(
chromeos::assistant::features::kAssistantBetterOnboarding);
ShowAssistantUi();
// Cause the label to be hidden.
......@@ -379,13 +419,50 @@ TEST_F(AssistantPageViewTest, ShouldShowGreetingLabelAgainAfterReopening) {
ShowAssistantUi();
EXPECT_TRUE(greeting_label()->IsDrawn());
EXPECT_EQ(nullptr, onboarding_view());
}
TEST_F(AssistantPageViewTest, ShouldShowOnboardingAgainAfterReopening) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(
chromeos::assistant::features::kAssistantBetterOnboarding);
ShowAssistantUi();
// Cause the label to be hidden.
MockTextInteraction().WithTextResponse("The response");
ASSERT_FALSE(onboarding_view()->IsDrawn());
// Close and reopen the Assistant UI.
CloseAssistantUi();
ShowAssistantUi();
EXPECT_TRUE(onboarding_view()->IsDrawn());
EXPECT_EQ(nullptr, greeting_label());
}
TEST_F(AssistantPageViewTest,
ShouldNotShowGreetingLabelWhenOpeningFromSearchResult) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndDisableFeature(
chromeos::assistant::features::kAssistantBetterOnboarding);
ShowAssistantUi(AssistantEntryPoint::kLauncherSearchResult);
EXPECT_FALSE(greeting_label()->IsDrawn());
EXPECT_EQ(nullptr, onboarding_view());
}
TEST_F(AssistantPageViewTest,
ShouldNotShowOnboardingWhenOpeningFromSearchResult) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(
chromeos::assistant::features::kAssistantBetterOnboarding);
ShowAssistantUi(AssistantEntryPoint::kLauncherSearchResult);
EXPECT_FALSE(onboarding_view()->IsDrawn());
EXPECT_EQ(nullptr, greeting_label());
}
TEST_F(AssistantPageViewTest, ShouldFocusMicViewWhenPressingVoiceInputToggle) {
......
......@@ -96,6 +96,10 @@ views::View* AssistantTestApiImpl::suggestion_chip_container() {
return page_view()->GetViewByID(AssistantViewID::kSuggestionContainer);
}
views::View* AssistantTestApiImpl::onboarding_view() {
return page_view()->GetViewByID(AssistantViewID::kOnboardingView);
}
views::View* AssistantTestApiImpl::opt_in_view() {
return page_view()->GetViewByID(AssistantViewID::kOptInView);
}
......
......@@ -46,6 +46,7 @@ class AssistantTestApiImpl : public AssistantTestApi {
views::View* voice_input_toggle() override;
views::View* keyboard_input_toggle() override;
views::View* suggestion_chip_container() override;
views::View* onboarding_view() override;
views::View* opt_in_view() override;
aura::Window* window() override;
views::View* app_list_view() override;
......
......@@ -283,6 +283,10 @@ views::View* AssistantAshTestBase::keyboard_input_toggle() {
return test_api_->keyboard_input_toggle();
}
views::View* AssistantAshTestBase::onboarding_view() {
return test_api_->onboarding_view();
}
views::View* AssistantAshTestBase::opt_in_view() {
return test_api_->opt_in_view();
}
......
......@@ -155,7 +155,10 @@ class AssistantAshTestBase : public AshTestBase {
// Return the button to enable text mode.
views::View* keyboard_input_toggle();
// Return the button to launch Assistant onboarding.
// Return the Assistant onboarding view.
views::View* onboarding_view();
// Return the button to launch Assistant setup.
views::View* opt_in_view();
// Return the container with all the suggestion chips.
......
......@@ -54,6 +54,8 @@ component("ui") {
"main_stage/assistant_card_element_view.h",
"main_stage/assistant_footer_view.cc",
"main_stage/assistant_footer_view.h",
"main_stage/assistant_onboarding_view.cc",
"main_stage/assistant_onboarding_view.h",
"main_stage/assistant_opt_in_view.cc",
"main_stage/assistant_opt_in_view.h",
"main_stage/assistant_progress_indicator.cc",
......
......@@ -33,6 +33,7 @@ enum AssistantViewID {
kSuggestionContainer,
kUiElementContainer,
kZeroStateView,
kOnboardingView,
};
} // namespace ash
......
// Copyright 2020 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/assistant/ui/main_stage/assistant_onboarding_view.h"
#include "ash/assistant/ui/assistant_view_ids.h"
#include "ui/gfx/color_palette.h"
#include "ui/views/background.h"
namespace ash {
AssistantOnboardingView::AssistantOnboardingView() {
SetID(AssistantViewID::kOnboardingView);
InitLayout();
}
AssistantOnboardingView::~AssistantOnboardingView() = default;
const char* AssistantOnboardingView::GetClassName() const {
return "AssistantOnboardingView";
}
gfx::Size AssistantOnboardingView::CalculatePreferredSize() const {
return gfx::Size(INT_MAX, GetHeightForWidth(INT_MAX));
}
// TODO(dmblack): Remove after implementing layout.
int AssistantOnboardingView::GetHeightForWidth(int width) const {
return 100;
}
// TODO(dmblack): Implement layout.
void AssistantOnboardingView::InitLayout() {
SetBackground(views::CreateSolidBackground(
SkColorSetA(gfx::kPlaceholderColor, 0.2 * 0xFF)));
}
} // namespace ash
// Copyright 2020 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.
#ifndef ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_ONBOARDING_VIEW_H_
#define ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_ONBOARDING_VIEW_H_
#include "base/component_export.h"
#include "ui/views/view.h"
namespace ash {
class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOnboardingView
: public views::View {
public:
AssistantOnboardingView();
AssistantOnboardingView(const AssistantOnboardingView&) = delete;
AssistantOnboardingView& operator=(const AssistantOnboardingView&) = delete;
~AssistantOnboardingView() override;
// views::View:
const char* GetClassName() const override;
gfx::Size CalculatePreferredSize() const override;
int GetHeightForWidth(int width) const override;
private:
void InitLayout();
};
} // namespace ash
#endif // ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_ONBOARDING_VIEW_H_
......@@ -8,7 +8,9 @@
#include "ash/assistant/ui/assistant_ui_constants.h"
#include "ash/assistant/ui/assistant_view_ids.h"
#include "ash/assistant/ui/main_stage/assistant_onboarding_view.h"
#include "ash/strings/grit/ash_strings.h"
#include "chromeos/services/assistant/public/cpp/features.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/views/background.h"
#include "ui/views/controls/label.h"
......@@ -35,9 +37,16 @@ void AssistantZeroStateView::ChildPreferredSizeChanged(views::View* child) {
PreferredSizeChanged();
}
// TODO(dmblack): Update conditions under which onboarding view is shown.
void AssistantZeroStateView::InitLayout() {
SetLayoutManager(std::make_unique<views::FillLayout>());
// Onboarding.
if (chromeos::assistant::features::IsBetterOnboardingEnabled()) {
AddChildView(std::make_unique<AssistantOnboardingView>());
return;
}
// Greeting label.
auto greeting_label = std::make_unique<views::Label>(
l10n_util::GetStringUTF16(IDS_ASH_ASSISTANT_PROMPT_DEFAULT));
......
......@@ -101,7 +101,11 @@ class ASH_EXPORT AssistantTestApi {
// Can only be used after the Assistant UI has been shown at least once.
virtual views::View* keyboard_input_toggle() = 0;
// Returns the button to launch Assistant onboarding.
// Returns the Assistant onboarding view.
// Can only be used after the Assistant UI has been shown at least once.
virtual views::View* onboarding_view() = 0;
// Returns the button to launch Assistant setup.
// Can only be used after the Assistant UI has been shown at least once.
virtual views::View* opt_in_view() = 0;
......
......@@ -16,6 +16,9 @@ const base::Feature kAssistantAudioEraser{"AssistantAudioEraser",
const base::Feature kAssistantAppSupport{"AssistantAppSupport",
base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kAssistantBetterOnboarding{
"AssistantBetterOnboarding", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kAssistantConversationStartersV2{
"AssistantConversationStartersV2", base::FEATURE_DISABLED_BY_DEFAULT};
......@@ -62,6 +65,10 @@ bool IsAudioEraserEnabled() {
return base::FeatureList::IsEnabled(kAssistantAudioEraser);
}
bool IsBetterOnboardingEnabled() {
return base::FeatureList::IsEnabled(kAssistantBetterOnboarding);
}
bool IsConversationStartersV2Enabled() {
return base::FeatureList::IsEnabled(kAssistantConversationStartersV2);
}
......
......@@ -24,6 +24,10 @@ extern const base::Feature kAssistantAudioEraser;
COMPONENT_EXPORT(ASSISTANT_SERVICE_PUBLIC)
extern const base::Feature kAssistantAppSupport;
// Enables better onboarding for Assistant.
COMPONENT_EXPORT(ASSISTANT_SERVICE_PUBLIC)
extern const base::Feature kAssistantBetterOnboarding;
// Enables Assistant launcher chip integration.
COMPONENT_EXPORT(ASSISTANT_SERVICE_PUBLIC)
extern const base::Feature kAssistantLauncherChipIntegration;
......@@ -75,6 +79,8 @@ COMPONENT_EXPORT(ASSISTANT_SERVICE_PUBLIC) bool IsAppSupportEnabled();
COMPONENT_EXPORT(ASSISTANT_SERVICE_PUBLIC) bool IsAudioEraserEnabled();
COMPONENT_EXPORT(ASSISTANT_SERVICE_PUBLIC) bool IsBetterOnboardingEnabled();
COMPONENT_EXPORT(ASSISTANT_SERVICE_PUBLIC)
bool IsConversationStartersV2Enabled();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment