Add Utility Cluster Row to Menu
Creates the utility cluster row, which contains a feedback, settings, and help button. The functionality for these buttons will be implemented in a future CL. Bug: b:275424971 Test: Ran GameDashboard* ash_unittests Change-Id: I0f0ed997e04b57e42d84b378920b42e49e871236 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4569652 Commit-Queue: Gina Domergue <gdomergue@google.com> Reviewed-by: Ahmed Fakhry <afakhry@chromium.org> Cr-Commit-Position: refs/heads/main@{#1158921}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
dca83def85
commit
66f9dc4417
@@ -6759,6 +6759,9 @@ To shut down the device, press and hold the power button on the device again.
|
|||||||
<message name="IDS_ASH_GAME_DASHBOARD_CONTROLS_TILE_BUTTON_TITLE" translateable="false" desc="The display name for the Game Dashboard game controls tile.">
|
<message name="IDS_ASH_GAME_DASHBOARD_CONTROLS_TILE_BUTTON_TITLE" translateable="false" desc="The display name for the Game Dashboard game controls tile.">
|
||||||
Controls
|
Controls
|
||||||
</message>
|
</message>
|
||||||
|
<message name="IDS_ASH_GAME_DASHBOARD_HELP_TOOLTIP" translateable="false" desc="Tooltip for the Game Dashboard help icon button.">
|
||||||
|
Help center
|
||||||
|
</message>
|
||||||
<message name="IDS_ASH_GAME_DASHBOARD_MAIN_MENU_BUTTON_TITLE" desc="The title of the Game Dashboard main menu button.">
|
<message name="IDS_ASH_GAME_DASHBOARD_MAIN_MENU_BUTTON_TITLE" desc="The title of the Game Dashboard main menu button.">
|
||||||
Game Dashboard
|
Game Dashboard
|
||||||
</message>
|
</message>
|
||||||
@@ -6771,6 +6774,12 @@ To shut down the device, press and hold the power button on the device again.
|
|||||||
<message name="IDS_ASH_GAME_DASHBOARD_SCREEN_SIZE_SETTINGS_TITLE" translateable="false" desc="The display name for the Game Dashboard screen size settings.">
|
<message name="IDS_ASH_GAME_DASHBOARD_SCREEN_SIZE_SETTINGS_TITLE" translateable="false" desc="The display name for the Game Dashboard screen size settings.">
|
||||||
Screen size
|
Screen size
|
||||||
</message>
|
</message>
|
||||||
|
<message name="IDS_ASH_GAME_DASHBOARD_SEND_FEEDBACK_TITLE" translateable="false" desc="The display name for the Game Dashboard send feedback button.">
|
||||||
|
Send feedback
|
||||||
|
</message>
|
||||||
|
<message name="IDS_ASH_GAME_DASHBOARD_SETTINGS_TOOLTIP" translateable="false" desc="Tooltip for the Game Dashboard settings icon button.">
|
||||||
|
Dashboard settings
|
||||||
|
</message>
|
||||||
<message name="IDS_ASH_GAME_DASHBOARD_TOOLBAR_TILE_BUTTON_TITLE" translateable="false" desc="The display name for the Game Dashboard toolbar tile.">
|
<message name="IDS_ASH_GAME_DASHBOARD_TOOLBAR_TILE_BUTTON_TITLE" translateable="false" desc="The display name for the Game Dashboard toolbar tile.">
|
||||||
Toolbar
|
Toolbar
|
||||||
</message>
|
</message>
|
||||||
|
@@ -0,0 +1 @@
|
|||||||
|
6bd821d57e43cddd54301863dbe2e9861ba809a6
|
@@ -0,0 +1 @@
|
|||||||
|
c2544472af9221944d377fd4242add495cc6f05a
|
@@ -0,0 +1 @@
|
|||||||
|
dea3a882021afadd69a56b689084f67d059659ec
|
@@ -11,11 +11,14 @@
|
|||||||
#include "ash/game_dashboard/game_dashboard_test_base.h"
|
#include "ash/game_dashboard/game_dashboard_test_base.h"
|
||||||
#include "ash/game_dashboard/test_game_dashboard_delegate.h"
|
#include "ash/game_dashboard/test_game_dashboard_delegate.h"
|
||||||
#include "ash/public/cpp/ash_view_ids.h"
|
#include "ash/public/cpp/ash_view_ids.h"
|
||||||
|
#include "ash/public/cpp/window_properties.h"
|
||||||
#include "ash/system/unified/feature_tile.h"
|
#include "ash/system/unified/feature_tile.h"
|
||||||
#include "base/check.h"
|
#include "base/check.h"
|
||||||
#include "chromeos/ui/base/window_properties.h"
|
#include "chromeos/ui/base/window_properties.h"
|
||||||
#include "chromeos/ui/frame/frame_header.h"
|
#include "chromeos/ui/frame/frame_header.h"
|
||||||
#include "chromeos/ui/wm/window_util.h"
|
#include "chromeos/ui/wm/window_util.h"
|
||||||
|
#include "extensions/common/constants.h"
|
||||||
|
#include "ui/aura/client/aura_constants.h"
|
||||||
#include "ui/aura/window.h"
|
#include "ui/aura/window.h"
|
||||||
#include "ui/events/test/event_generator.h"
|
#include "ui/events/test/event_generator.h"
|
||||||
#include "ui/gfx/geometry/vector2d.h"
|
#include "ui/gfx/geometry/vector2d.h"
|
||||||
@@ -33,12 +36,19 @@ class GameDashboardContextTest : public GameDashboardTestBase {
|
|||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
GameDashboardTestBase::SetUp();
|
GameDashboardTestBase::SetUp();
|
||||||
game_window_ = CreateAppWindow(TestGameDashboardDelegate::kGameAppId,
|
game_window_ = CreateAppWindow(TestGameDashboardDelegate::kGameAppId,
|
||||||
AppType::ARC_APP, game_window_bounds_);
|
AppType::ARC_APP, gfx::Rect(0, 0, 400, 200));
|
||||||
game_context_ = GameDashboardController::Get()->GetGameDashboardContext(
|
game_context_ = GameDashboardController::Get()->GetGameDashboardContext(
|
||||||
game_window_.get());
|
game_window_.get());
|
||||||
DCHECK(game_context_);
|
DCHECK(game_context_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetUpGeForceNowApp() {
|
||||||
|
game_window_->SetProperty(
|
||||||
|
kAppIDKey, static_cast<std::string>(extension_misc::kGeForceNowAppId));
|
||||||
|
game_window_->SetProperty(aura::client::kAppType,
|
||||||
|
static_cast<int>(AppType::NON_APP));
|
||||||
|
}
|
||||||
|
|
||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
game_window_.reset();
|
game_window_.reset();
|
||||||
GameDashboardTestBase::TearDown();
|
GameDashboardTestBase::TearDown();
|
||||||
@@ -63,7 +73,6 @@ class GameDashboardContextTest : public GameDashboardTestBase {
|
|||||||
protected:
|
protected:
|
||||||
std::unique_ptr<aura::Window> game_window_;
|
std::unique_ptr<aura::Window> game_window_;
|
||||||
const GameDashboardContext* game_context_;
|
const GameDashboardContext* game_context_;
|
||||||
const gfx::Rect game_window_bounds_ = gfx::Rect(0, 0, 400, 200);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Tests
|
// Tests
|
||||||
@@ -121,6 +130,46 @@ TEST_F(GameDashboardContextTest, CloseMainMenuButtonWidget) {
|
|||||||
EXPECT_FALSE(GetMainMenuDialogWidget());
|
EXPECT_FALSE(GetMainMenuDialogWidget());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Verifies the main menu shows all items allowed for ARC games.
|
||||||
|
TEST_F(GameDashboardContextTest, MainMenuDialogWidget_ARCGame) {
|
||||||
|
// Open the main menu.
|
||||||
|
LeftClickOn(GetMainMenuButtonWidget()->GetContentsView());
|
||||||
|
ASSERT_TRUE(GetMainMenuDialogWidget());
|
||||||
|
|
||||||
|
// Verify whether each element available in the main menu is available as
|
||||||
|
// expected.
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_TOOLBAR_TILE));
|
||||||
|
// TODO(b/273641402): Update Game Controls visibility once implemented.
|
||||||
|
EXPECT_FALSE(GetMainMenuViewById(VIEW_ID_GD_CONTROLS_TILE));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_RECORD_TILE));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_SCREENSHOT_TILE));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_SCREEN_SIZE_TILE));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_FEEDBACK_BUTTON));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_HELP_BUTTON));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_GENERAL_SETTINGS_BUTTON));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verifies the main menu doesn't show items only allowed for ARC games on
|
||||||
|
// non-ARC apps.
|
||||||
|
TEST_F(GameDashboardContextTest, MainMenuDialogWidget_NonARCGame) {
|
||||||
|
// Override the default `game_window_` to reflect GeForce Now and open the
|
||||||
|
// main menu.
|
||||||
|
SetUpGeForceNowApp();
|
||||||
|
LeftClickOn(GetMainMenuButtonWidget()->GetContentsView());
|
||||||
|
ASSERT_TRUE(GetMainMenuDialogWidget());
|
||||||
|
|
||||||
|
// Verify whether each element available in the main menu is available as
|
||||||
|
// expected.
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_TOOLBAR_TILE));
|
||||||
|
EXPECT_FALSE(GetMainMenuViewById(VIEW_ID_GD_CONTROLS_TILE));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_RECORD_TILE));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_SCREENSHOT_TILE));
|
||||||
|
EXPECT_FALSE(GetMainMenuViewById(VIEW_ID_GD_SCREEN_SIZE_TILE));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_FEEDBACK_BUTTON));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_HELP_BUTTON));
|
||||||
|
EXPECT_TRUE(GetMainMenuViewById(VIEW_ID_GD_GENERAL_SETTINGS_BUTTON));
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(GameDashboardContextTest, TakeScreenshot) {
|
TEST_F(GameDashboardContextTest, TakeScreenshot) {
|
||||||
// Retrieve the screenshot button and verify the initial state.
|
// Retrieve the screenshot button and verify the initial state.
|
||||||
LeftClickOn(GetMainMenuButtonWidget()->GetContentsView());
|
LeftClickOn(GetMainMenuButtonWidget()->GetContentsView());
|
||||||
@@ -133,7 +182,7 @@ TEST_F(GameDashboardContextTest, TakeScreenshot) {
|
|||||||
// Verify that a screenshot is taken of the game window.
|
// Verify that a screenshot is taken of the game window.
|
||||||
const auto file_path = WaitForCaptureFileToBeSaved();
|
const auto file_path = WaitForCaptureFileToBeSaved();
|
||||||
const gfx::Image image = ReadAndDecodeImageFile(file_path);
|
const gfx::Image image = ReadAndDecodeImageFile(file_path);
|
||||||
EXPECT_EQ(image.Size(), game_window_bounds_.size());
|
EXPECT_EQ(image.Size(), game_window_->bounds().size());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace ash
|
} // namespace ash
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
#include "ash/public/cpp/app_types_util.h"
|
#include "ash/public/cpp/app_types_util.h"
|
||||||
#include "ash/public/cpp/ash_view_ids.h"
|
#include "ash/public/cpp/ash_view_ids.h"
|
||||||
#include "ash/strings/grit/ash_strings.h"
|
#include "ash/strings/grit/ash_strings.h"
|
||||||
|
#include "ash/system/unified/feature_pod_button.h"
|
||||||
#include "ash/system/unified/feature_tile.h"
|
#include "ash/system/unified/feature_tile.h"
|
||||||
#include "components/vector_icons/vector_icons.h"
|
#include "components/vector_icons/vector_icons.h"
|
||||||
#include "ui/base/l10n/l10n_util.h"
|
#include "ui/base/l10n/l10n_util.h"
|
||||||
@@ -47,6 +48,19 @@ std::unique_ptr<FeatureTile> CreateTile(base::RepeatingClosure callback,
|
|||||||
return tile;
|
return tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<ash::FeaturePodIconButton> CreateIconButton(
|
||||||
|
base::RepeatingClosure callback,
|
||||||
|
int id,
|
||||||
|
const gfx::VectorIcon& icon,
|
||||||
|
const std::u16string& text) {
|
||||||
|
auto icon_button = std::make_unique<FeaturePodIconButton>(
|
||||||
|
std::move(callback), /*is_togglable=*/false);
|
||||||
|
icon_button->SetID(id);
|
||||||
|
icon_button->SetVectorIcon(icon);
|
||||||
|
icon_button->SetTooltipText(text);
|
||||||
|
return icon_button;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
GameDashboardMainMenuView::GameDashboardMainMenuView(
|
GameDashboardMainMenuView::GameDashboardMainMenuView(
|
||||||
@@ -74,6 +88,8 @@ GameDashboardMainMenuView::GameDashboardMainMenuView(
|
|||||||
|
|
||||||
MaybeAddScreenSizeSettingsRow();
|
MaybeAddScreenSizeSettingsRow();
|
||||||
|
|
||||||
|
AddUtilityClusterRow();
|
||||||
|
|
||||||
SizeToPreferredSize();
|
SizeToPreferredSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,6 +112,18 @@ void GameDashboardMainMenuView::OnScreenSizeSettingsButtonPressed() {
|
|||||||
// TODO(b/283988495): Add support when screen size setting is pressed.
|
// TODO(b/283988495): Add support when screen size setting is pressed.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameDashboardMainMenuView::OnFeedbackButtonPressed() {
|
||||||
|
// TODO(b/273641035): Add support when feedback button is pressed.
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameDashboardMainMenuView::OnHelpButtonPressed() {
|
||||||
|
// TODO(b/273640773): Add support when help button is pressed.
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameDashboardMainMenuView::OnSettingsButtonPressed() {
|
||||||
|
// TODO(b/281773221): Add support when settings button is pressed.
|
||||||
|
}
|
||||||
|
|
||||||
void GameDashboardMainMenuView::AddShortcutTilesRow() {
|
void GameDashboardMainMenuView::AddShortcutTilesRow() {
|
||||||
views::BoxLayoutView* container =
|
views::BoxLayoutView* container =
|
||||||
AddChildView(std::make_unique<views::BoxLayoutView>());
|
AddChildView(std::make_unique<views::BoxLayoutView>());
|
||||||
@@ -139,6 +167,34 @@ void GameDashboardMainMenuView::MaybeAddScreenSizeSettingsRow() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameDashboardMainMenuView::AddUtilityClusterRow() {
|
||||||
|
views::BoxLayoutView* container =
|
||||||
|
AddChildView(std::make_unique<views::BoxLayoutView>());
|
||||||
|
container->SetOrientation(views::BoxLayout::Orientation::kHorizontal);
|
||||||
|
container->SetBetweenChildSpacing(kCenterPadding);
|
||||||
|
|
||||||
|
auto* feedback_button =
|
||||||
|
container->AddChildView(std::make_unique<views::LabelButton>(
|
||||||
|
base::BindRepeating(
|
||||||
|
&GameDashboardMainMenuView::OnFeedbackButtonPressed,
|
||||||
|
base::Unretained(this)),
|
||||||
|
l10n_util::GetStringUTF16(
|
||||||
|
IDS_ASH_GAME_DASHBOARD_SEND_FEEDBACK_TITLE)));
|
||||||
|
feedback_button->SetID(VIEW_ID_GD_FEEDBACK_BUTTON);
|
||||||
|
feedback_button->SetImageLabelSpacing(kCenterPadding);
|
||||||
|
feedback_button->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
|
||||||
|
container->AddChildView(CreateIconButton(
|
||||||
|
base::BindRepeating(&GameDashboardMainMenuView::OnHelpButtonPressed,
|
||||||
|
base::Unretained(this)),
|
||||||
|
VIEW_ID_GD_HELP_BUTTON, vector_icons::kHelpIcon,
|
||||||
|
l10n_util::GetStringUTF16(IDS_ASH_GAME_DASHBOARD_HELP_TOOLTIP)));
|
||||||
|
container->AddChildView(CreateIconButton(
|
||||||
|
base::BindRepeating(&GameDashboardMainMenuView::OnSettingsButtonPressed,
|
||||||
|
base::Unretained(this)),
|
||||||
|
VIEW_ID_GD_GENERAL_SETTINGS_BUTTON, vector_icons::kSettingsIcon,
|
||||||
|
l10n_util::GetStringUTF16(IDS_ASH_GAME_DASHBOARD_SETTINGS_TOOLTIP)));
|
||||||
|
}
|
||||||
|
|
||||||
BEGIN_METADATA(GameDashboardMainMenuView, views::BubbleDialogDelegateView)
|
BEGIN_METADATA(GameDashboardMainMenuView, views::BubbleDialogDelegateView)
|
||||||
END_METADATA
|
END_METADATA
|
||||||
|
|
||||||
|
@@ -33,6 +33,12 @@ class GameDashboardMainMenuView : public views::BubbleDialogDelegateView {
|
|||||||
void OnScreenshotTilePressed();
|
void OnScreenshotTilePressed();
|
||||||
// Handles when the Screen Size Settings is pressed.
|
// Handles when the Screen Size Settings is pressed.
|
||||||
void OnScreenSizeSettingsButtonPressed();
|
void OnScreenSizeSettingsButtonPressed();
|
||||||
|
// Opens the feedback form with preset information.
|
||||||
|
void OnFeedbackButtonPressed();
|
||||||
|
// Opens the help center for more info about Game Dashboard.
|
||||||
|
void OnHelpButtonPressed();
|
||||||
|
// Opens up the Game Dashboard Settings.
|
||||||
|
void OnSettingsButtonPressed();
|
||||||
|
|
||||||
// Adds a row of shortcut tiles to the main menu view for users to quickly
|
// Adds a row of shortcut tiles to the main menu view for users to quickly
|
||||||
// access common functionality.
|
// access common functionality.
|
||||||
@@ -42,6 +48,10 @@ class GameDashboardMainMenuView : public views::BubbleDialogDelegateView {
|
|||||||
// given game window is an ARC app.
|
// given game window is an ARC app.
|
||||||
void MaybeAddScreenSizeSettingsRow();
|
void MaybeAddScreenSizeSettingsRow();
|
||||||
|
|
||||||
|
// Adds the dashboard cluster (containing feedback, settings, and help
|
||||||
|
// buttons) to the Game Controls tile view.
|
||||||
|
void AddUtilityClusterRow();
|
||||||
|
|
||||||
const raw_ptr<aura::Window, ExperimentalAsh> game_window_;
|
const raw_ptr<aura::Window, ExperimentalAsh> game_window_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -37,6 +37,9 @@ enum ViewID {
|
|||||||
|
|
||||||
// Game Dashboard elements
|
// Game Dashboard elements
|
||||||
VIEW_ID_GD_CONTROLS_TILE,
|
VIEW_ID_GD_CONTROLS_TILE,
|
||||||
|
VIEW_ID_GD_FEEDBACK_BUTTON,
|
||||||
|
VIEW_ID_GD_GENERAL_SETTINGS_BUTTON,
|
||||||
|
VIEW_ID_GD_HELP_BUTTON,
|
||||||
VIEW_ID_GD_RECORD_TILE,
|
VIEW_ID_GD_RECORD_TILE,
|
||||||
VIEW_ID_GD_SCREEN_SIZE_TILE,
|
VIEW_ID_GD_SCREEN_SIZE_TILE,
|
||||||
VIEW_ID_GD_SCREENSHOT_TILE,
|
VIEW_ID_GD_SCREENSHOT_TILE,
|
||||||
|
Reference in New Issue
Block a user