Commit 18ff4d3e authored by Toni Barzic's avatar Toni Barzic Committed by Commit Bot

app_list: Flex tile results when all results do not fit in results list

Minimal search results page width can be less than the max total
search results tile items width - this cl makes search result tile item
list view flex tile item views, and margins between items when required
(with minimal in-between margins, all possible items should fit neatly
into the search result tile item list).

BUG=None

Change-Id: I3ba6882b88d2a695f25caf2bfef38eec5e96109b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1851231Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Toni Baržić <tbarzic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#704688}
parent 76c7e52b
...@@ -81,33 +81,33 @@ SearchResultTileItemListView::SearchResultTileItemListView( ...@@ -81,33 +81,33 @@ SearchResultTileItemListView::SearchResultTileItemListView(
app_list_features::IsAppReinstallZeroStateEnabled()), app_list_features::IsAppReinstallZeroStateEnabled()),
max_search_result_tiles_( max_search_result_tiles_(
AppListConfig::instance().max_search_result_tiles()) { AppListConfig::instance().max_search_result_tiles()) {
SetLayoutManager(std::make_unique<views::BoxLayout>( layout_ = SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal, views::BoxLayout::Orientation::kHorizontal,
gfx::Insets(kItemListVerticalSpacing, kItemListHorizontalSpacing), gfx::Insets(kItemListVerticalSpacing, kItemListHorizontalSpacing),
kBetweenItemSpacing)); kBetweenItemSpacing));
for (size_t i = 0; i < max_search_result_tiles_; ++i) { for (size_t i = 0; i < max_search_result_tiles_; ++i) {
if (is_app_reinstall_recommendation_enabled_ || if (is_app_reinstall_recommendation_enabled_ ||
is_play_store_app_search_enabled_) { is_play_store_app_search_enabled_) {
views::Separator* separator = new views::Separator; views::Separator* separator =
AddChildView(std::make_unique<views::Separator>());
separator->SetVisible(false); separator->SetVisible(false);
separator->SetBorder(views::CreateEmptyBorder( separator->SetBorder(views::CreateEmptyBorder(
kSeparatorTopPadding, kSeparatorLeftRightPadding, kSeparatorTopPadding, kSeparatorLeftRightPadding,
AppListConfig::instance().search_tile_height() - kSeparatorHeight, AppListConfig::instance().search_tile_height() - kSeparatorHeight,
kSeparatorLeftRightPadding)); kSeparatorLeftRightPadding));
separator->SetColor(kSeparatorColor); separator->SetColor(kSeparatorColor);
separator_views_.push_back(separator); separator_views_.push_back(separator);
AddChildView(separator); layout_->SetFlexForView(separator, 0);
} }
SearchResultTileItemView* tile_item = new SearchResultTileItemView( SearchResultTileItemView* tile_item =
view_delegate, nullptr /* pagination model */, AddChildView(std::make_unique<SearchResultTileItemView>(
false /* show_in_apps_page */); view_delegate, nullptr /* pagination model */,
false /* show_in_apps_page */));
tile_item->set_index_in_container(i); tile_item->set_index_in_container(i);
tile_item->SetParentBackgroundColor( tile_item->SetParentBackgroundColor(
AppListConfig::instance().card_background_color()); AppListConfig::instance().card_background_color());
tile_views_.push_back(tile_item); tile_views_.push_back(tile_item);
AddChildView(tile_item);
AddObservedResultView(tile_item); AddObservedResultView(tile_item);
} }
...@@ -390,6 +390,14 @@ const char* SearchResultTileItemListView::GetClassName() const { ...@@ -390,6 +390,14 @@ const char* SearchResultTileItemListView::GetClassName() const {
return "SearchResultTileItemListView"; return "SearchResultTileItemListView";
} }
void SearchResultTileItemListView::Layout() {
const bool flex = GetContentsBounds().width() < GetPreferredSize().width();
layout_->SetDefaultFlex(flex ? 1 : 0);
layout_->set_between_child_spacing(flex ? 1 : kBetweenItemSpacing);
views::View::Layout();
}
void SearchResultTileItemListView::OnShownChanged() { void SearchResultTileItemListView::OnShownChanged() {
SearchResultContainerView::OnShownChanged(); SearchResultContainerView::OnShownChanged();
for (const auto* tile_view : tile_views_) { for (const auto* tile_view : tile_views_) {
......
...@@ -13,8 +13,9 @@ ...@@ -13,8 +13,9 @@
#include "base/timer/timer.h" #include "base/timer/timer.h"
namespace views { namespace views {
class Textfield; class BoxLayout;
class Separator; class Separator;
class Textfield;
} // namespace views } // namespace views
namespace ash { namespace ash {
...@@ -40,6 +41,7 @@ class APP_LIST_EXPORT SearchResultTileItemListView ...@@ -40,6 +41,7 @@ class APP_LIST_EXPORT SearchResultTileItemListView
// Overridden from views::View: // Overridden from views::View:
bool OnKeyPressed(const ui::KeyEvent& event) override; bool OnKeyPressed(const ui::KeyEvent& event) override;
const char* GetClassName() const override; const char* GetClassName() const override;
void Layout() override;
const std::vector<SearchResultTileItemView*>& tile_views_for_test() const { const std::vector<SearchResultTileItemView*>& tile_views_for_test() const {
return tile_views_; return tile_views_;
...@@ -71,8 +73,9 @@ class APP_LIST_EXPORT SearchResultTileItemListView ...@@ -71,8 +73,9 @@ class APP_LIST_EXPORT SearchResultTileItemListView
std::vector<views::Separator*> separator_views_; std::vector<views::Separator*> separator_views_;
// Owned by the views hierarchy. // Owned by the views hierarchy.
SearchResultPageView* const search_result_page_view_; SearchResultPageView* const search_result_page_view_ = nullptr;
views::Textfield* search_box_; views::Textfield* search_box_ = nullptr;
views::BoxLayout* layout_ = nullptr;
base::string16 recent_playstore_query_; base::string16 recent_playstore_query_;
......
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