Commit 5557e278 authored by Weidong Guo's avatar Weidong Guo Committed by Commit Bot

Fix broken arc app icon for new style launcher

1. Request 48px arc icon instead of 64px because the latter is not
   supported.
2. Override OnMetadataChanged() in SearchResultSuggestionChipView to
   update suggestion chip icon when metadata is updated.

Bug: 865532
Change-Id: I24628a60fa93e4b434e9fcf70f703df0ec62785c
Reviewed-on: https://chromium-review.googlesource.com/1144649
Commit-Queue: Weidong Guo <weidongg@chromium.org>
Reviewed-by: default avatarYury Khmel <khmel@chromium.org>
Reviewed-by: default avatarMitsuru Oshima <oshima@chromium.org>
Cr-Commit-Position: refs/heads/master@{#577277}
parent dd25332f
......@@ -441,6 +441,8 @@ void AppsContainerView::SetShowState(ShowState show_state,
case SHOW_APPS:
folder_background_view_->SetVisible(false);
apps_grid_view_->ResetForShowApps();
if (is_new_style_launcher_enabled_)
UpdateSuggestionChips();
if (show_apps_with_animation)
app_list_folder_view_->ScheduleShowHideAnimation(false, false);
else
......
......@@ -31,24 +31,25 @@ SearchResultSuggestionChipView::SearchResultSuggestionChipView(
: view_delegate_(view_delegate), weak_ptr_factory_(this) {}
SearchResultSuggestionChipView::~SearchResultSuggestionChipView() {
DiscardItem();
SetSearchResult(nullptr);
}
void SearchResultSuggestionChipView::SetSearchResult(SearchResult* item) {
// Replace old item with new item.
DiscardItem();
if (!item)
if (item == item_)
return;
// Replace old item with new item.
if (item_)
item_->RemoveObserver(this);
item_ = item;
if (item_)
item_->AddObserver(this);
item_->AddObserver(this);
UpdateSuggestionChipView();
}
app_list::SuggestionChipView::Params params;
params.text = item->title();
params.icon = item->icon();
suggestion_chip_view_ = new SuggestionChipView(params, /* listener */ this);
AddChildView(suggestion_chip_view_);
void SearchResultSuggestionChipView::OnMetadataChanged() {
UpdateSuggestionChipView();
}
void SearchResultSuggestionChipView::OnResultDestroying() {
......@@ -83,14 +84,21 @@ gfx::Size SearchResultSuggestionChipView::CalculatePreferredSize() const {
return suggestion_chip_view_->GetPreferredSize();
}
void SearchResultSuggestionChipView::DiscardItem() {
delete suggestion_chip_view_;
suggestion_chip_view_ = nullptr;
void SearchResultSuggestionChipView::UpdateSuggestionChipView() {
if (!item_)
return;
if (item_)
item_->RemoveObserver(this);
if (suggestion_chip_view_) {
suggestion_chip_view_->SetIcon(item_->icon());
suggestion_chip_view_->SetText(item_->title());
return;
}
item_ = nullptr;
app_list::SuggestionChipView::Params params;
params.text = item_->title();
params.icon = item_->icon();
suggestion_chip_view_ = new SuggestionChipView(params, /* listener */ this);
AddChildView(suggestion_chip_view_);
}
} // namespace app_list
......@@ -28,6 +28,7 @@ class APP_LIST_EXPORT SearchResultSuggestionChipView
void SetSearchResult(SearchResult* item);
// SearchResultObserver:
void OnMetadataChanged() override;
void OnResultDestroying() override;
// views::ButtonListener:
......@@ -39,8 +40,8 @@ class APP_LIST_EXPORT SearchResultSuggestionChipView
gfx::Size CalculatePreferredSize() const override;
private:
// Remove the search result item.
void DiscardItem();
// Updates the suggestion chip view's title and icon.
void UpdateSuggestionChipView();
AppListViewDelegate* const view_delegate_; // Owned by AppListView.
......
......@@ -65,6 +65,7 @@ int SuggestionChipContainerView::DoUpdate() {
suggestion_chip_views.emplace_back(chip);
}
Layout();
return num_results();
}
......
......@@ -195,6 +195,10 @@ void SuggestionChipView::SetIcon(const gfx::ImageSkia& icon) {
icon_view_->SetVisible(true);
}
void SuggestionChipView::SetText(const base::string16& text) {
text_view_->SetText(text);
}
const base::string16& SuggestionChipView::GetText() const {
return text_view_->text();
}
......
......@@ -58,6 +58,7 @@ class APP_LIST_EXPORT SuggestionChipView : public views::Button {
void SetIcon(const gfx::ImageSkia& icon);
void SetText(const base::string16& text);
const base::string16& GetText() const;
private:
......
......@@ -34,7 +34,8 @@ AppListConfig::AppListConfig()
preferred_rows_(5),
page_spacing_(40),
expand_arrow_tile_height_(60),
folder_bubble_radius_(23) {
folder_bubble_radius_(23),
arc_icon_dimension_(48) {
if (features::IsNewStyleLauncherEnabled()) {
grid_tile_width_ = 120;
grid_tile_height_ = 112;
......
......@@ -63,6 +63,7 @@ class ASH_PUBLIC_EXPORT AppListConfig {
int page_spacing() const { return page_spacing_; }
int expand_arrow_tile_height() const { return expand_arrow_tile_height_; }
int folder_bubble_radius() const { return folder_bubble_radius_; }
int arc_icon_dimension() const { return arc_icon_dimension_; }
gfx::Size grid_icon_size() const {
return gfx::Size(grid_icon_dimension_, grid_icon_dimension_);
......@@ -90,6 +91,10 @@ class ASH_PUBLIC_EXPORT AppListConfig {
search_list_badge_icon_dimension_);
}
gfx::Size arc_icon_size() const {
return gfx::Size(arc_icon_dimension_, arc_icon_dimension_);
}
// Returns the dimension at which a result's icon should be displayed.
int GetPreferredIconDimension(
ash::SearchResultDisplayType display_type) const;
......@@ -166,6 +171,11 @@ class ASH_PUBLIC_EXPORT AppListConfig {
// The folder image bubble radius.
int folder_bubble_radius_;
// Original icon dimension of arc app, this will be resized to
// |grid_icon_dimension_| when being shown in the apps grid. (Original arc
// icon support 48px instead of 64px.)
int arc_icon_dimension_;
};
} // namespace app_list
......
......@@ -37,7 +37,7 @@ void ArcAppIconLoader::FetchImage(const std::string& app_id) {
// differs from this size, re-scale is required.
std::unique_ptr<ArcAppIcon> icon(new ArcAppIcon(
profile(), app_id,
app_list::AppListConfig::instance().grid_icon_dimension(), this));
app_list::AppListConfig::instance().arc_icon_dimension(), this));
icon->image_skia().EnsureRepsForSupportedScales();
icon_map_[app_id] = std::move(icon);
UpdateImage(app_id);
......
......@@ -32,7 +32,7 @@ void ArcAppModelBuilder::RemoveApp(const std::string& id,
void ArcAppModelBuilder::BuildModel() {
icon_loader_ = std::make_unique<ArcAppIconLoader>(
profile(), app_list::AppListConfig::instance().grid_icon_dimension(),
profile(), app_list::AppListConfig::instance().arc_icon_dimension(),
this);
prefs_ = ArcAppListPrefs::Get(profile());
......
......@@ -410,7 +410,7 @@ class ArcAppModelBuilderTest : public extensions::ExtensionServiceTestBase,
// Validates that provided image is acceptable as ARC app icon.
void ValidateIcon(const gfx::ImageSkia& image) {
const int icon_dimension =
app_list::AppListConfig::instance().grid_icon_dimension();
app_list::AppListConfig::instance().arc_icon_dimension();
EXPECT_EQ(icon_dimension, image.width());
EXPECT_EQ(icon_dimension, image.height());
......
......@@ -82,7 +82,7 @@ void ArcAppWindow::SetDefaultAppIcon() {
if (!app_icon_) {
app_icon_ = std::make_unique<ArcAppIcon>(
profile_, app_shelf_id_.ToString(),
app_list::AppListConfig::instance().grid_icon_dimension(), this);
app_list::AppListConfig::instance().arc_icon_dimension(), this);
}
// Apply default image now and in case icon is updated then OnIconUpdated()
// will be called additionally.
......
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