Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(377)

Side by Side Diff: ui/app_list/views/apps_container_view.cc

Issue 2341113003: Remove deprecation warning banner from App Launcher code. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/app_list/views/apps_container_view.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/app_list/views/apps_container_view.h" 5 #include "ui/app_list/views/apps_container_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "third_party/skia/include/core/SkColor.h"
13 #include "third_party/skia/include/core/SkPaint.h"
14 #include "ui/app_list/app_list_constants.h" 11 #include "ui/app_list/app_list_constants.h"
15 #include "ui/app_list/app_list_folder_item.h" 12 #include "ui/app_list/app_list_folder_item.h"
16 #include "ui/app_list/app_list_switches.h" 13 #include "ui/app_list/app_list_switches.h"
17 #include "ui/app_list/app_list_view_delegate.h"
18 #include "ui/app_list/views/app_list_folder_view.h" 14 #include "ui/app_list/views/app_list_folder_view.h"
19 #include "ui/app_list/views/app_list_item_view.h" 15 #include "ui/app_list/views/app_list_item_view.h"
20 #include "ui/app_list/views/app_list_main_view.h" 16 #include "ui/app_list/views/app_list_main_view.h"
21 #include "ui/app_list/views/apps_grid_view.h" 17 #include "ui/app_list/views/apps_grid_view.h"
22 #include "ui/app_list/views/folder_background_view.h" 18 #include "ui/app_list/views/folder_background_view.h"
23 #include "ui/base/resource/resource_bundle.h"
24 #include "ui/events/event.h" 19 #include "ui/events/event.h"
25 #include "ui/gfx/canvas.h"
26 #include "ui/views/background.h"
27 #include "ui/views/border.h"
28 #include "ui/views/controls/label.h"
29 #include "ui/views/controls/styled_label.h"
30 #include "ui/views/layout/box_layout.h"
31 #include "ui/views/view.h"
32 20
33 namespace app_list { 21 namespace app_list {
34 22
35 namespace {
36
37 #if !defined(OS_CHROMEOS)
38 // Deprecation notice dimensions.
39 const int kDeprecationBannerLabelSpacingPx = 6;
40 const int kDeprecationBannerPaddingPx = 16;
41 const int kDeprecationBannerMarginPx = 12;
42 const SkColor kDeprecationBannerBackgroundColor =
43 SkColorSetRGB(0xff, 0xfd, 0xe7);
44 const SkColor kDeprecationBannerBorderColor = SkColorSetRGB(0xc1, 0xc1, 0xc1);
45 const int kDeprecationBannerBorderThickness = 1;
46 const int kDeprecationBannerBorderCornerRadius = 2;
47 // Relative to the platform-default font size.
48 const int kDeprecationBannerTitleSize = 2;
49 const int kDeprecationBannerTextSize = 0;
50 const SkColor kLinkColor = SkColorSetRGB(0x33, 0x67, 0xd6);
51
52 // A background that paints a filled rounded rectangle.
53 class RoundedRectBackground : public views::Background {
54 public:
55 RoundedRectBackground(SkColor color, int corner_radius)
56 : color_(color), corner_radius_(corner_radius) {}
57 ~RoundedRectBackground() override {}
58
59 // views::Background overrides:
60 void Paint(gfx::Canvas* canvas, views::View* view) const override {
61 gfx::Rect bounds = view->GetContentsBounds();
62
63 SkPaint paint;
64 paint.setFlags(SkPaint::kAntiAlias_Flag);
65 paint.setColor(color_);
66 canvas->DrawRoundRect(bounds, corner_radius_, paint);
67 }
68
69 private:
70 SkColor color_;
71 int corner_radius_;
72
73 DISALLOW_COPY_AND_ASSIGN(RoundedRectBackground);
74 };
75
76 base::string16 GetDeprecationText(const AppListViewDelegate& delegate) {
77 size_t message_break;
78 base::string16 text = delegate.GetMessageText(&message_break);
79 base::string16 apps_shortcut_name = delegate.GetAppsShortcutName();
80
81 // TODO(mgiuca): Insert the Apps shortcut with an image, rather than just
82 // concatenating it into the string.
83 text.insert(message_break, apps_shortcut_name);
84 return text;
85 }
86
87 views::View* BuildDeprecationNotice(const AppListViewDelegate& delegate,
88 views::StyledLabelListener* listener) {
89 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
90 const gfx::FontList& title_font =
91 rb.GetFontListWithDelta(kDeprecationBannerTitleSize);
92 const gfx::FontList& text_font =
93 rb.GetFontListWithDelta(kDeprecationBannerTextSize);
94
95 base::string16 title = delegate.GetMessageTitle();
96 views::Label* title_label = new views::Label(title);
97 title_label->SetMultiLine(true);
98 title_label->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
99 title_label->SetFontList(title_font);
100 title_label->SetBackgroundColor(kDeprecationBannerBackgroundColor);
101
102 base::string16 text = GetDeprecationText(delegate);
103 base::string16 learn_more = delegate.GetLearnMoreText();
104 base::string16 message = text + base::ASCIIToUTF16(" ") + learn_more;
105 size_t learn_more_start = text.size() + 1;
106 size_t learn_more_end = learn_more_start + learn_more.size();
107 views::StyledLabel* text_label = new views::StyledLabel(message, listener);
108 auto learn_more_style = views::StyledLabel::RangeStyleInfo::CreateForLink();
109 learn_more_style.color = kLinkColor;
110 if (learn_more.size()) {
111 text_label->AddStyleRange(gfx::Range(learn_more_start, learn_more_end),
112 learn_more_style);
113 }
114 text_label->SetDisplayedOnBackgroundColor(kDeprecationBannerBackgroundColor);
115 text_label->SetBaseFontList(text_font);
116
117 views::View* deprecation_banner_box = new views::View;
118 deprecation_banner_box->SetLayoutManager(new views::BoxLayout(
119 views::BoxLayout::kVertical, kDeprecationBannerPaddingPx,
120 kDeprecationBannerPaddingPx, kDeprecationBannerLabelSpacingPx));
121 deprecation_banner_box->AddChildView(title_label);
122 deprecation_banner_box->AddChildView(text_label);
123 deprecation_banner_box->set_background(new RoundedRectBackground(
124 kDeprecationBannerBackgroundColor, kDeprecationBannerBorderCornerRadius));
125 deprecation_banner_box->SetBorder(views::Border::CreateRoundedRectBorder(
126 kDeprecationBannerBorderThickness, kDeprecationBannerBorderCornerRadius,
127 kDeprecationBannerBorderColor));
128
129 views::View* deprecation_banner_view = new views::View;
130 deprecation_banner_view->AddChildView(deprecation_banner_box);
131 deprecation_banner_view->SetLayoutManager(new views::BoxLayout(
132 views::BoxLayout::kVertical, kDeprecationBannerMarginPx,
133 kDeprecationBannerMarginPx, 0));
134
135 return deprecation_banner_view;
136 }
137 #endif // !defined(OS_CHROMEOS)
138
139 } // namespace
140
141 AppsContainerView::AppsContainerView(AppListMainView* app_list_main_view, 23 AppsContainerView::AppsContainerView(AppListMainView* app_list_main_view,
142 AppListModel* model) 24 AppListModel* model)
143 : show_state_(SHOW_NONE), 25 : show_state_(SHOW_NONE), top_icon_animation_pending_count_(0) {
144 view_delegate_(app_list_main_view->view_delegate()),
145 top_icon_animation_pending_count_(0) {
146 #if !defined(OS_CHROMEOS)
147 deprecation_banner_view_ = BuildDeprecationNotice(*view_delegate_, this);
148 AddChildView(deprecation_banner_view_);
149 #endif // !defined(OS_CHROMEOS)
150
151 apps_grid_view_ = new AppsGridView(app_list_main_view); 26 apps_grid_view_ = new AppsGridView(app_list_main_view);
152 int cols; 27 int cols;
153 int rows; 28 int rows;
154 if (switches::IsExperimentalAppListEnabled()) { 29 if (switches::IsExperimentalAppListEnabled()) {
155 cols = kExperimentalPreferredCols; 30 cols = kExperimentalPreferredCols;
156 rows = kExperimentalPreferredRows; 31 rows = kExperimentalPreferredRows;
157 } else if (app_list_main_view->ShouldCenterWindow()) { 32 } else if (app_list_main_view->ShouldCenterWindow()) {
158 cols = kCenteredPreferredCols; 33 cols = kCenteredPreferredCols;
159 rows = kCenteredPreferredRows; 34 rows = kCenteredPreferredRows;
160 } else { 35 } else {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 bool AppsContainerView::IsInFolderView() const { 103 bool AppsContainerView::IsInFolderView() const {
229 return show_state_ == SHOW_ACTIVE_FOLDER; 104 return show_state_ == SHOW_ACTIVE_FOLDER;
230 } 105 }
231 106
232 void AppsContainerView::ReparentDragEnded() { 107 void AppsContainerView::ReparentDragEnded() {
233 DCHECK_EQ(SHOW_ITEM_REPARENT, show_state_); 108 DCHECK_EQ(SHOW_ITEM_REPARENT, show_state_);
234 show_state_ = AppsContainerView::SHOW_APPS; 109 show_state_ = AppsContainerView::SHOW_APPS;
235 } 110 }
236 111
237 gfx::Size AppsContainerView::GetPreferredSize() const { 112 gfx::Size AppsContainerView::GetPreferredSize() const {
238 const int deprecation_banner_height =
239 deprecation_banner_view_
240 ? deprecation_banner_view_->GetPreferredSize().height()
241 : 0;
242 const gfx::Size grid_size = apps_grid_view_->GetPreferredSize(); 113 const gfx::Size grid_size = apps_grid_view_->GetPreferredSize();
243 const gfx::Size folder_view_size = app_list_folder_view_->GetPreferredSize(); 114 const gfx::Size folder_view_size = app_list_folder_view_->GetPreferredSize();
244 115
245 int width = std::max(grid_size.width(), folder_view_size.width()); 116 int width = std::max(grid_size.width(), folder_view_size.width());
246 int height = std::max(grid_size.height() + deprecation_banner_height, 117 int height = std::max(grid_size.height(), folder_view_size.height());
247 folder_view_size.height());
248 return gfx::Size(width, height); 118 return gfx::Size(width, height);
249 } 119 }
250 120
251 void AppsContainerView::Layout() { 121 void AppsContainerView::Layout() {
252 gfx::Rect rect(GetContentsBounds()); 122 gfx::Rect rect(GetContentsBounds());
253 if (rect.IsEmpty()) 123 if (rect.IsEmpty())
254 return; 124 return;
255 125
256 int deprecation_banner_height = 0;
257 if (deprecation_banner_view_) {
258 deprecation_banner_height =
259 deprecation_banner_view_->GetPreferredSize().height();
260 gfx::Size deprecation_banner_size(rect.width(), deprecation_banner_height);
261 deprecation_banner_view_->SetBoundsRect(
262 gfx::Rect(rect.origin(), deprecation_banner_size));
263 }
264
265 switch (show_state_) { 126 switch (show_state_) {
266 case SHOW_APPS: 127 case SHOW_APPS:
267 rect.Inset(0, deprecation_banner_height, 0, 0);
268 apps_grid_view_->SetBoundsRect(rect); 128 apps_grid_view_->SetBoundsRect(rect);
269 break; 129 break;
270 case SHOW_ACTIVE_FOLDER: 130 case SHOW_ACTIVE_FOLDER:
271 folder_background_view_->SetBoundsRect(rect); 131 folder_background_view_->SetBoundsRect(rect);
272 app_list_folder_view_->SetBoundsRect(rect); 132 app_list_folder_view_->SetBoundsRect(rect);
273 break; 133 break;
274 case SHOW_ITEM_REPARENT: 134 case SHOW_ITEM_REPARENT:
275 break; 135 break;
276 default: 136 default:
277 NOTREACHED(); 137 NOTREACHED();
(...skipping 29 matching lines...) Expand all
307 top_icon_views_.clear(); 167 top_icon_views_.clear();
308 168
309 // Show the folder icon when closing the folder. 169 // Show the folder icon when closing the folder.
310 if ((show_state_ == SHOW_APPS || show_state_ == SHOW_ITEM_REPARENT) && 170 if ((show_state_ == SHOW_APPS || show_state_ == SHOW_ITEM_REPARENT) &&
311 apps_grid_view_->activated_folder_item_view()) { 171 apps_grid_view_->activated_folder_item_view()) {
312 apps_grid_view_->activated_folder_item_view()->SetVisible(true); 172 apps_grid_view_->activated_folder_item_view()->SetVisible(true);
313 } 173 }
314 } 174 }
315 } 175 }
316 176
317 void AppsContainerView::StyledLabelLinkClicked(views::StyledLabel* label,
318 const gfx::Range& range,
319 int event_flags) {
320 #if !defined(OS_CHROMEOS)
321 // The only style label is the "Learn more" link in the deprecation banner, so
322 // assume that that's what was clicked.
323 view_delegate_->OpenLearnMoreLink();
324 #endif // !defined(OS_CHROMEOS)
325 }
326
327 void AppsContainerView::SetShowState(ShowState show_state, 177 void AppsContainerView::SetShowState(ShowState show_state,
328 bool show_apps_with_animation) { 178 bool show_apps_with_animation) {
329 if (show_state_ == show_state) 179 if (show_state_ == show_state)
330 return; 180 return;
331 181
332 show_state_ = show_state; 182 show_state_ = show_state;
333 183
334 switch (show_state_) { 184 switch (show_state_) {
335 case SHOW_APPS: 185 case SHOW_APPS:
336 if (deprecation_banner_view_)
337 deprecation_banner_view_->SetVisible(true);
338 folder_background_view_->SetVisible(false); 186 folder_background_view_->SetVisible(false);
339 if (show_apps_with_animation) { 187 if (show_apps_with_animation) {
340 app_list_folder_view_->ScheduleShowHideAnimation(false, false); 188 app_list_folder_view_->ScheduleShowHideAnimation(false, false);
341 apps_grid_view_->ScheduleShowHideAnimation(true); 189 apps_grid_view_->ScheduleShowHideAnimation(true);
342 } else { 190 } else {
343 app_list_folder_view_->HideViewImmediately(); 191 app_list_folder_view_->HideViewImmediately();
344 apps_grid_view_->ResetForShowApps(); 192 apps_grid_view_->ResetForShowApps();
345 } 193 }
346 break; 194 break;
347 case SHOW_ACTIVE_FOLDER: 195 case SHOW_ACTIVE_FOLDER:
348 if (deprecation_banner_view_)
349 deprecation_banner_view_->SetVisible(false);
350 folder_background_view_->SetVisible(true); 196 folder_background_view_->SetVisible(true);
351 apps_grid_view_->ScheduleShowHideAnimation(false); 197 apps_grid_view_->ScheduleShowHideAnimation(false);
352 app_list_folder_view_->ScheduleShowHideAnimation(true, false); 198 app_list_folder_view_->ScheduleShowHideAnimation(true, false);
353 break; 199 break;
354 case SHOW_ITEM_REPARENT: 200 case SHOW_ITEM_REPARENT:
355 if (deprecation_banner_view_)
356 deprecation_banner_view_->SetVisible(true);
357 folder_background_view_->SetVisible(false); 201 folder_background_view_->SetVisible(false);
358 folder_background_view_->UpdateFolderContainerBubble( 202 folder_background_view_->UpdateFolderContainerBubble(
359 FolderBackgroundView::NO_BUBBLE); 203 FolderBackgroundView::NO_BUBBLE);
360 app_list_folder_view_->ScheduleShowHideAnimation(false, true); 204 app_list_folder_view_->ScheduleShowHideAnimation(false, true);
361 apps_grid_view_->ScheduleShowHideAnimation(true); 205 apps_grid_view_->ScheduleShowHideAnimation(true);
362 break; 206 break;
363 default: 207 default:
364 NOTREACHED(); 208 NOTREACHED();
365 } 209 }
366 210
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 void AppsContainerView::PrepareToShowApps(AppListFolderItem* folder_item) { 253 void AppsContainerView::PrepareToShowApps(AppListFolderItem* folder_item) {
410 if (folder_item) 254 if (folder_item)
411 CreateViewsForFolderTopItemsAnimation(folder_item, false); 255 CreateViewsForFolderTopItemsAnimation(folder_item, false);
412 256
413 // Hide the active folder item until the animation completes. 257 // Hide the active folder item until the animation completes.
414 if (apps_grid_view_->activated_folder_item_view()) 258 if (apps_grid_view_->activated_folder_item_view())
415 apps_grid_view_->activated_folder_item_view()->SetVisible(false); 259 apps_grid_view_->activated_folder_item_view()->SetVisible(false);
416 } 260 }
417 261
418 } // namespace app_list 262 } // namespace app_list
OLDNEW
« no previous file with comments | « ui/app_list/views/apps_container_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698