0

Add Game Dashboard Tiles to Menu

Creates a row of tiles to the main menu whose functionality will be
implemented in a future CL.

Bug: b:275424971
Test: Ran GameDashboard* ash_unittests
Change-Id: I4a92b594f052439d7f85984f0197f7fd7a10f79e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4569940
Commit-Queue: Gina Domergue <gdomergue@google.com>
Reviewed-by: Ahmed Fakhry <afakhry@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1155599}
This commit is contained in:
Gina Domergue
2023-06-09 17:28:42 +00:00
committed by Chromium LUCI CQ
parent 3b1c97daf7
commit 48e5f82dbd
8 changed files with 115 additions and 12 deletions

@ -6743,10 +6743,23 @@ To shut down the device, press and hold the power button on the device again.
[i18n] Frequently used controls like Wi-Fi, Bluetooth and volume controls are in Quick Settings. You can also go here to take screenshots.
</message>
<!-- TODO(b/286455407): Update strings once finalized with UX Writing -->
<!-- Game Dashboard strings -->
<message name="IDS_ASH_GAME_DASHBOARD_CONTROLS_TILE_BUTTON_TITLE" translateable="false" desc="The display name for the Game Dashboard game controls tile.">
Controls
</message>
<message name="IDS_ASH_GAME_DASHBOARD_MAIN_MENU_BUTTON_TITLE" desc="The title of the Game Dashboard main menu button.">
Game Dashboard
</message>
<message name="IDS_ASH_GAME_DASHBOARD_RECORD_GAME_TILE_BUTTON_TITLE" translateable="false" desc="The display name for the Game Dashboard record game tile.">
Record game
</message>
<message name="IDS_ASH_GAME_DASHBOARD_SCREENSHOT_TILE_BUTTON_TITLE" translateable="false" desc="The display name for the Game Dashboard screenshot tile.">
Take screenshot
</message>
<message name="IDS_ASH_GAME_DASHBOARD_TOOLBAR_TILE_BUTTON_TITLE" translateable="false" desc="The display name for the Game Dashboard toolbar tile.">
Toolbar
</message>
</messages>
</release>
</grit>

@ -0,0 +1 @@
5e5b18224581ab5e95c7c60a0569215d7c517d03

@ -0,0 +1 @@
a2bbb87cc5826ca13dd1c349f08485b09607a38a

@ -0,0 +1 @@
b96eb0c8a42b7322cd25830f270ed2c81fa4c2e2

@ -0,0 +1 @@
a73f270b85623a86ad712e33a145a22239953426

@ -6,24 +6,52 @@
#include <memory>
#include "ash/public/cpp/app_types_util.h"
#include "ash/public/cpp/ash_view_ids.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/system/unified/feature_tile.h"
#include "components/vector_icons/vector_icons.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/metadata/metadata_impl_macros.h"
#include "ui/views/layout/table_layout.h"
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
#include "ui/wm/core/window_util.h"
namespace ash {
namespace {
constexpr int kBubbleCornerRadius = 8;
// Padding between the edges of the menu and the elements.
// Horizontal padding for the border around the main menu.
constexpr int kPaddingWidth = 12;
// Vertical padding for the border around the main menu.
constexpr int kPaddingHeight = 15;
// Padding between children in a row or column.
constexpr int kCenterPadding = 8;
// Creates an individual Game Dashboard Tile.
std::unique_ptr<FeatureTile> CreateTile(base::RepeatingClosure callback,
bool is_togglable,
FeatureTile::TileType type,
int id,
const gfx::VectorIcon& icon,
const std::u16string& text) {
auto tile =
std::make_unique<FeatureTile>(std::move(callback), is_togglable, type);
tile->SetID(id);
tile->SetVisible(true);
tile->SetVectorIcon(icon);
tile->SetLabel(text);
tile->SetTooltipText(text);
return tile;
}
} // namespace
GameDashboardMainMenuView::GameDashboardMainMenuView(
views::Widget* main_menu_button_widget) {
DCHECK(main_menu_button_widget);
set_corner_radius(kBubbleCornerRadius);
set_close_on_deactivate(false);
set_internal_name("GameDashboardMainMenuView");
@ -32,21 +60,59 @@ GameDashboardMainMenuView::GameDashboardMainMenuView(
SetAnchorView(main_menu_button_widget->GetContentsView());
SetArrow(views::BubbleBorder::Arrow::NONE);
SetButtons(ui::DIALOG_BUTTON_NONE);
SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kVertical,
gfx::Insets::VH(kPaddingHeight, kPaddingWidth), kCenterPadding));
auto* layout = SetLayoutManager(std::make_unique<views::TableLayout>());
layout->AddPaddingColumn(views::TableLayout::kFixedSize, kPaddingWidth)
.AddColumn(views::LayoutAlignment::kStart,
views::LayoutAlignment::kCenter,
views::TableLayout::kFixedSize,
views::TableLayout::ColumnSize::kUsePreferred, 0, 0)
.AddPaddingColumn(views::TableLayout::kFixedSize, kPaddingWidth)
.AddPaddingRow(views::TableLayout::kFixedSize, kPaddingWidth)
.AddRows(1, views::TableLayout::kFixedSize)
.AddPaddingRow(views::TableLayout::kFixedSize, kPaddingWidth);
AddShortcutTilesRow();
SizeToPreferredSize();
}
GameDashboardMainMenuView::~GameDashboardMainMenuView() = default;
void GameDashboardMainMenuView::OnToolbarTilePressed() {
// TODO(b/273641426): Add support when toolbar tile is pressed.
}
void GameDashboardMainMenuView::OnRecordGameTilePressed() {
// TODO(b/273641250): Add support when record game tile is pressed.
}
void GameDashboardMainMenuView::OnScreenshotTilePressed() {
// TODO(b/273641464): Add support when screenshot tile is pressed.
}
void GameDashboardMainMenuView::AddShortcutTilesRow() {
views::BoxLayoutView* container =
AddChildView(std::make_unique<views::BoxLayoutView>());
container->SetOrientation(views::BoxLayout::Orientation::kHorizontal);
container->SetBetweenChildSpacing(kCenterPadding);
container->AddChildView(CreateTile(
base::BindRepeating(&GameDashboardMainMenuView::OnToolbarTilePressed,
base::Unretained(this)),
/*is_togglable=*/false, FeatureTile::TileType::kCompact,
VIEW_ID_GD_TOOLBAR_TILE, vector_icons::kVideogameAssetOutlineIcon,
l10n_util::GetStringUTF16(
IDS_ASH_GAME_DASHBOARD_TOOLBAR_TILE_BUTTON_TITLE)));
// TODO(b/273641132): Filter out record game button based on device info.
container->AddChildView(CreateTile(
base::BindRepeating(&GameDashboardMainMenuView::OnRecordGameTilePressed,
base::Unretained(this)),
/*is_togglable=*/false, FeatureTile::TileType::kCompact,
VIEW_ID_GD_RECORD_TILE, vector_icons::kVideocamIcon,
l10n_util::GetStringUTF16(
IDS_ASH_GAME_DASHBOARD_RECORD_GAME_TILE_BUTTON_TITLE)));
container->AddChildView(CreateTile(
base::BindRepeating(&GameDashboardMainMenuView::OnScreenshotTilePressed,
base::Unretained(this)),
/*is_togglable=*/true, FeatureTile::TileType::kCompact,
VIEW_ID_GD_SCREENSHOT_TILE, vector_icons::kVideocamIcon,
l10n_util::GetStringUTF16(
IDS_ASH_GAME_DASHBOARD_SCREENSHOT_TILE_BUTTON_TITLE)));
}
BEGIN_METADATA(GameDashboardMainMenuView, views::BubbleDialogDelegateView)
END_METADATA

@ -21,6 +21,19 @@ class GameDashboardMainMenuView : public views::BubbleDialogDelegateView {
GameDashboardMainMenuView& operator=(const GameDashboardMainMenuView) =
delete;
~GameDashboardMainMenuView() override;
private:
// Callbacks for the tiles and buttons in the main menu view.
// Handles showing and hiding the toolbar.
void OnToolbarTilePressed();
// Handles toggling the game recording.
void OnRecordGameTilePressed();
// Handles taking a screenshot of the game window when pressed.
void OnScreenshotTilePressed();
// Adds a row of shortcut tiles to the main menu view for users to quickly
// access common functionality.
void AddShortcutTilesRow();
};
} // namespace ash

@ -34,6 +34,13 @@ enum ViewID {
VIEW_ID_CAST_CAST_VIEW_LABEL,
VIEW_ID_CAST_MAIN_VIEW,
VIEW_ID_CAST_SELECT_VIEW,
// Game Dashboard elements
VIEW_ID_GD_CONTROLS_TILE,
VIEW_ID_GD_RECORD_TILE,
VIEW_ID_GD_SCREENSHOT_TILE,
VIEW_ID_GD_TOOLBAR_TILE,
// The entry to add wifi network in the quick settings network subpage.
VIEW_ID_JOIN_NETWORK_ENTRY,