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

Side by Side Diff: ui/arc/notification/arc_custom_notification_view.cc

Issue 2845003002: Merge ArcNotificationItem and ArcCustomNotificationItem (Closed)
Patch Set: Created 3 years, 7 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/arc/notification/arc_custom_notification_view.h" 5 #include "ui/arc/notification/arc_custom_notification_view.h"
6 6
7 #include "ash/wm/window_util.h" 7 #include "ash/wm/window_util.h"
8 #include "base/auto_reset.h" 8 #include "base/auto_reset.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "components/exo/notification_surface.h" 10 #include "components/exo/notification_surface.h"
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 186
187 void RequestFocusOnCloseButton() override { 187 void RequestFocusOnCloseButton() override {
188 if (owner_->close_button_) 188 if (owner_->close_button_)
189 owner_->close_button_->RequestFocus(); 189 owner_->close_button_->RequestFocus();
190 owner_->UpdateControlButtonsVisibility(); 190 owner_->UpdateControlButtonsVisibility();
191 } 191 }
192 192
193 bool IsPinned() const override { 193 bool IsPinned() const override {
194 if (!owner_->item_) 194 if (!owner_->item_)
195 return false; 195 return false;
196 return owner_->item_->pinned(); 196 return owner_->item_->GetPinned();
197 } 197 }
198 198
199 void UpdateControlButtonsVisibility() override { 199 void UpdateControlButtonsVisibility() override {
200 owner_->UpdateControlButtonsVisibility(); 200 owner_->UpdateControlButtonsVisibility();
201 } 201 }
202 202
203 private: 203 private:
204 ArcCustomNotificationView* const owner_; 204 ArcCustomNotificationView* const owner_;
205 205
206 DISALLOW_COPY_AND_ASSIGN(ContentViewDelegate); 206 DISALLOW_COPY_AND_ASSIGN(ContentViewDelegate);
207 }; 207 };
208 208
209 ArcCustomNotificationView::ControlButton::ControlButton( 209 ArcCustomNotificationView::ControlButton::ControlButton(
210 ArcCustomNotificationView* owner) 210 ArcCustomNotificationView* owner)
211 : message_center::PaddedButton(owner), owner_(owner) { 211 : message_center::PaddedButton(owner), owner_(owner) {
212 if (owner_->item_) { 212 if (owner_->item_) {
213 set_background(views::Background::CreateSolidBackground( 213 set_background(views::Background::CreateSolidBackground(
214 GetControlButtonBackgroundColor(owner_->item_->shown_contents()))); 214 GetControlButtonBackgroundColor(owner_->item_->GetShownContents())));
215 } else { 215 } else {
216 set_background(views::Background::CreateSolidBackground( 216 set_background(views::Background::CreateSolidBackground(
217 message_center::kControlButtonBackgroundColor)); 217 message_center::kControlButtonBackgroundColor));
218 } 218 }
219 } 219 }
220 220
221 void ArcCustomNotificationView::ControlButton::OnFocus() { 221 void ArcCustomNotificationView::ControlButton::OnFocus() {
222 message_center::PaddedButton::OnFocus(); 222 message_center::PaddedButton::OnFocus();
223 owner_->UpdateControlButtonsVisibility(); 223 owner_->UpdateControlButtonsVisibility();
224 } 224 }
225 225
226 void ArcCustomNotificationView::ControlButton::OnBlur() { 226 void ArcCustomNotificationView::ControlButton::OnBlur() {
227 message_center::PaddedButton::OnBlur(); 227 message_center::PaddedButton::OnBlur();
228 owner_->UpdateControlButtonsVisibility(); 228 owner_->UpdateControlButtonsVisibility();
229 } 229 }
230 230
231 ArcCustomNotificationView::ArcCustomNotificationView( 231 ArcCustomNotificationView::ArcCustomNotificationView(ArcNotificationItem* item)
232 ArcCustomNotificationItem* item)
233 : item_(item), 232 : item_(item),
234 notification_key_(item->notification_key()), 233 notification_key_(item->GetNotificationKey()),
235 event_forwarder_(new EventForwarder(this)) { 234 event_forwarder_(new EventForwarder(this)) {
236 SetFocusBehavior(FocusBehavior::ALWAYS); 235 SetFocusBehavior(FocusBehavior::ALWAYS);
237 236
238 item_->IncrementWindowRefCount(); 237 item_->IncrementWindowRefCount();
239 item_->AddObserver(this); 238 item_->AddObserver(this);
240 239
241 ArcNotificationSurfaceManager::Get()->AddObserver(this); 240 if (ArcNotificationSurfaceManager::Get()) {
hidehiko 2017/05/01 12:29:17 Optional/nit: auto* surface_manager = ArcNotifica
yoshiki 2017/05/08 06:24:52 Done.
242 exo::NotificationSurface* surface = 241 ArcNotificationSurfaceManager::Get()->AddObserver(this);
243 ArcNotificationSurfaceManager::Get()->GetSurface(notification_key_); 242 exo::NotificationSurface* surface =
244 if (surface) 243 ArcNotificationSurfaceManager::Get()->GetSurface(notification_key_);
245 OnNotificationSurfaceAdded(surface); 244 if (surface)
245 OnNotificationSurfaceAdded(surface);
246 }
246 247
247 // Create a layer as an anchor to insert surface copy during a slide. 248 // Create a layer as an anchor to insert surface copy during a slide.
248 SetPaintToLayer(); 249 SetPaintToLayer();
249 UpdatePreferredSize(); 250 UpdatePreferredSize();
250 } 251 }
251 252
252 ArcCustomNotificationView::~ArcCustomNotificationView() { 253 ArcCustomNotificationView::~ArcCustomNotificationView() {
253 SetSurface(nullptr); 254 SetSurface(nullptr);
254 if (item_) { 255 if (item_) {
255 item_->DecrementWindowRefCount(); 256 item_->DecrementWindowRefCount();
hidehiko 2017/05/01 12:29:17 Please call clean up functions in the reverse orde
yoshiki 2017/05/08 06:24:52 Done.
256 item_->RemoveObserver(this); 257 item_->RemoveObserver(this);
257 } 258 }
258 259
259 if (ArcNotificationSurfaceManager::Get()) 260 if (ArcNotificationSurfaceManager::Get())
260 ArcNotificationSurfaceManager::Get()->RemoveObserver(this); 261 ArcNotificationSurfaceManager::Get()->RemoveObserver(this);
261 } 262 }
262 263
263 std::unique_ptr<message_center::CustomNotificationContentViewDelegate> 264 std::unique_ptr<message_center::CustomNotificationContentViewDelegate>
264 ArcCustomNotificationView::CreateContentViewDelegate() { 265 ArcCustomNotificationView::CreateContentViewDelegate() {
265 return base::MakeUnique<ArcCustomNotificationView::ContentViewDelegate>(this); 266 return base::MakeUnique<ArcCustomNotificationView::ContentViewDelegate>(this);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 return; 304 return;
304 305
305 // Creates the control_buttons_view_, which collects all control buttons into 306 // Creates the control_buttons_view_, which collects all control buttons into
306 // a horizontal box. 307 // a horizontal box.
307 control_buttons_view_ = new views::View(); 308 control_buttons_view_ = new views::View();
308 control_buttons_view_->SetLayoutManager( 309 control_buttons_view_->SetLayoutManager(
309 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); 310 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0));
310 311
311 if (item_->IsOpeningSettingsSupported()) 312 if (item_->IsOpeningSettingsSupported())
312 CreateSettingsButton(); 313 CreateSettingsButton();
313 if (!item_->pinned()) 314 if (!item_->GetPinned())
314 CreateCloseButton(); 315 CreateCloseButton();
315 316
316 views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL); 317 views::Widget::InitParams params(views::Widget::InitParams::TYPE_CONTROL);
317 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; 318 params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
318 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 319 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
319 params.parent = surface_->window(); 320 params.parent = surface_->window();
320 321
321 floating_control_buttons_widget_.reset(new views::Widget); 322 floating_control_buttons_widget_.reset(new views::Widget);
322 floating_control_buttons_widget_->Init(params); 323 floating_control_buttons_widget_->Init(params);
323 floating_control_buttons_widget_->SetContentsView(control_buttons_view_); 324 floating_control_buttons_widget_->SetContentsView(control_buttons_view_);
(...skipping 29 matching lines...) Expand all
353 354
354 MaybeCreateFloatingControlButtons(); 355 MaybeCreateFloatingControlButtons();
355 356
356 if (GetWidget()) 357 if (GetWidget())
357 AttachSurface(); 358 AttachSurface();
358 } 359 }
359 } 360 }
360 361
361 void ArcCustomNotificationView::UpdatePreferredSize() { 362 void ArcCustomNotificationView::UpdatePreferredSize() {
362 gfx::Size preferred_size = 363 gfx::Size preferred_size =
363 surface_ ? surface_->GetSize() : item_ ? item_->snapshot().size() 364 surface_ ? surface_->GetSize()
hidehiko 2017/05/01 12:29:17 Optional/nit: Maybe better to avoid nested "?:" o
yoshiki 2017/05/08 06:24:52 Done.
364 : gfx::Size(); 365 : item_ ? item_->GetSnapshot().size() : gfx::Size();
365 if (preferred_size.IsEmpty()) 366 if (preferred_size.IsEmpty())
366 return; 367 return;
367 368
368 if (preferred_size.width() != message_center::kNotificationWidth) { 369 if (preferred_size.width() != message_center::kNotificationWidth) {
369 const float scale = static_cast<float>(message_center::kNotificationWidth) / 370 const float scale = static_cast<float>(message_center::kNotificationWidth) /
370 preferred_size.width(); 371 preferred_size.width();
371 preferred_size.SetSize(message_center::kNotificationWidth, 372 preferred_size.SetSize(message_center::kNotificationWidth,
372 preferred_size.height() * scale); 373 preferred_size.height() * scale);
373 } 374 }
374 375
(...skipping 26 matching lines...) Expand all
401 if (target_visiblity) 402 if (target_visiblity)
402 floating_control_buttons_widget_->Show(); 403 floating_control_buttons_widget_->Show();
403 else 404 else
404 floating_control_buttons_widget_->Hide(); 405 floating_control_buttons_widget_->Hide();
405 } 406 }
406 407
407 void ArcCustomNotificationView::UpdatePinnedState() { 408 void ArcCustomNotificationView::UpdatePinnedState() {
408 if (!item_) 409 if (!item_)
409 return; 410 return;
410 411
411 if (item_->pinned() && close_button_) { 412 if (item_->GetPinned() && close_button_) {
412 control_buttons_view_->RemoveChildView(close_button_.get()); 413 control_buttons_view_->RemoveChildView(close_button_.get());
413 close_button_.reset(); 414 close_button_.reset();
414 Layout(); 415 Layout();
415 } else if (!item_->pinned() && !close_button_) { 416 } else if (!item_->GetPinned() && !close_button_) {
416 CreateCloseButton(); 417 CreateCloseButton();
417 Layout(); 418 Layout();
418 } 419 }
419 } 420 }
420 421
421 void ArcCustomNotificationView::UpdateSnapshot() { 422 void ArcCustomNotificationView::UpdateSnapshot() {
422 // Bail if we have a |surface_| because it controls the sizes and paints UI. 423 // Bail if we have a |surface_| because it controls the sizes and paints UI.
423 if (surface_) 424 if (surface_)
424 return; 425 return;
425 426
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 control_button_color_animation_->Start(); 460 control_button_color_animation_->Start();
460 } 461 }
461 462
462 bool ArcCustomNotificationView::ShouldUpdateControlButtonsColor() const { 463 bool ArcCustomNotificationView::ShouldUpdateControlButtonsColor() const {
463 // Don't update the control button color when we are about to be destroyed. 464 // Don't update the control button color when we are about to be destroyed.
464 if (!item_) 465 if (!item_)
465 return false; 466 return false;
466 467
467 if (settings_button_ && 468 if (settings_button_ &&
468 settings_button_->background()->get_color() != 469 settings_button_->background()->get_color() !=
469 GetControlButtonBackgroundColor(item_->shown_contents())) 470 GetControlButtonBackgroundColor(item_->GetShownContents()))
470 return true; 471 return true;
471 if (close_button_ && 472 if (close_button_ &&
472 close_button_->background()->get_color() != 473 close_button_->background()->get_color() !=
473 GetControlButtonBackgroundColor(item_->shown_contents())) 474 GetControlButtonBackgroundColor(item_->GetShownContents()))
474 return true; 475 return true;
475 return false; 476 return false;
476 } 477 }
477 478
478 void ArcCustomNotificationView::ViewHierarchyChanged( 479 void ArcCustomNotificationView::ViewHierarchyChanged(
479 const views::View::ViewHierarchyChangedDetails& details) { 480 const views::View::ViewHierarchyChangedDetails& details) {
480 views::Widget* widget = GetWidget(); 481 views::Widget* widget = GetWidget();
481 482
482 if (!details.is_add) { 483 if (!details.is_add) {
483 // Resets slide helper when this view is removed from its parent. 484 // Resets slide helper when this view is removed from its parent.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 549
549 UpdateControlButtonsVisibility(); 550 UpdateControlButtonsVisibility();
550 551
551 ash::wm::SnapWindowToPixelBoundary(surface_->window()); 552 ash::wm::SnapWindowToPixelBoundary(surface_->window());
552 } 553 }
553 554
554 void ArcCustomNotificationView::OnPaint(gfx::Canvas* canvas) { 555 void ArcCustomNotificationView::OnPaint(gfx::Canvas* canvas) {
555 views::NativeViewHost::OnPaint(canvas); 556 views::NativeViewHost::OnPaint(canvas);
556 557
557 // Bail if there is a |surface_| or no item or no snapshot image. 558 // Bail if there is a |surface_| or no item or no snapshot image.
558 if (surface_ || !item_ || item_->snapshot().isNull()) 559 if (surface_ || !item_ || item_->GetSnapshot().isNull())
559 return; 560 return;
560 const gfx::Rect contents_bounds = GetContentsBounds(); 561 const gfx::Rect contents_bounds = GetContentsBounds();
561 canvas->DrawImageInt(item_->snapshot(), 0, 0, item_->snapshot().width(), 562 canvas->DrawImageInt(item_->GetSnapshot(), 0, 0, item_->GetSnapshot().width(),
562 item_->snapshot().height(), contents_bounds.x(), 563 item_->GetSnapshot().height(), contents_bounds.x(),
563 contents_bounds.y(), contents_bounds.width(), 564 contents_bounds.y(), contents_bounds.width(),
564 contents_bounds.height(), false); 565 contents_bounds.height(), false);
565 } 566 }
566 567
567 void ArcCustomNotificationView::OnKeyEvent(ui::KeyEvent* event) { 568 void ArcCustomNotificationView::OnKeyEvent(ui::KeyEvent* event) {
568 // Forward to parent CustomNotificationView to handle keyboard dismissal. 569 // Forward to parent CustomNotificationView to handle keyboard dismissal.
569 parent()->OnKeyEvent(event); 570 parent()->OnKeyEvent(event);
570 } 571 }
571 572
572 void ArcCustomNotificationView::OnGestureEvent(ui::GestureEvent* event) { 573 void ArcCustomNotificationView::OnGestureEvent(ui::GestureEvent* event) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 bool ArcCustomNotificationView::OnMousePressed(const ui::MouseEvent& event) { 628 bool ArcCustomNotificationView::OnMousePressed(const ui::MouseEvent& event) {
628 // TODO(yhanada): Remove this hack as soon as possible after letting 629 // TODO(yhanada): Remove this hack as soon as possible after letting
629 // accessible actions be delivered to this view. 630 // accessible actions be delivered to this view.
630 // All mouse clicks or touches should be sent to corresponding Android view 631 // All mouse clicks or touches should be sent to corresponding Android view
631 // because the surface is on this view, so receiving a mouse pressed event 632 // because the surface is on this view, so receiving a mouse pressed event
632 // means the event is generated by automation API. 633 // means the event is generated by automation API.
633 // We can distinguish events from automation API by checking the target of the 634 // We can distinguish events from automation API by checking the target of the
634 // event because the target of all events generated by automation API is set 635 // event because the target of all events generated by automation API is set
635 // to nullptr. 636 // to nullptr.
636 if (event.IsOnlyLeftMouseButton() && item_ && 637 if (event.IsOnlyLeftMouseButton() && item_ &&
637 item_->expand_state() != mojom::ArcNotificationExpandState::FIXED_SIZE && 638 item_->GetExpandState() !=
639 mojom::ArcNotificationExpandState::FIXED_SIZE &&
638 event.target() == nullptr) { 640 event.target() == nullptr) {
639 item_->ToggleExpansion(); 641 item_->ToggleExpansion();
640 return true; 642 return true;
641 } 643 }
642 return false; 644 return false;
643 } 645 }
644 646
645 void ArcCustomNotificationView::ButtonPressed(views::Button* sender, 647 void ArcCustomNotificationView::ButtonPressed(views::Button* sender,
646 const ui::Event& event) { 648 const ui::Event& event) {
647 if (item_ && !item_->pinned() && sender == close_button_.get()) { 649 if (item_ && !item_->GetPinned() && sender == close_button_.get()) {
648 CHECK_EQ(message_center::CustomNotificationView::kViewClassName, 650 CHECK_EQ(message_center::CustomNotificationView::kViewClassName,
649 parent()->GetClassName()); 651 parent()->GetClassName());
650 static_cast<message_center::CustomNotificationView*>(parent()) 652 static_cast<message_center::CustomNotificationView*>(parent())
651 ->OnCloseButtonPressed(); 653 ->OnCloseButtonPressed();
652 } 654 }
653 if (item_ && settings_button_ && sender == settings_button_) { 655 if (item_ && settings_button_ && sender == settings_button_) {
654 item_->OpenSettings(); 656 item_->OpenSettings();
655 } 657 }
656 } 658 }
657 659
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
707 DCHECK_EQ(animation, control_button_color_animation_.get()); 709 DCHECK_EQ(animation, control_button_color_animation_.get());
708 control_button_color_animation_.reset(); 710 control_button_color_animation_.reset();
709 } 711 }
710 712
711 void ArcCustomNotificationView::AnimationProgressed( 713 void ArcCustomNotificationView::AnimationProgressed(
712 const gfx::Animation* animation) { 714 const gfx::Animation* animation) {
713 DCHECK_EQ(animation, control_button_color_animation_.get()); 715 DCHECK_EQ(animation, control_button_color_animation_.get());
714 716
715 if (item_) { 717 if (item_) {
716 const SkColor target = 718 const SkColor target =
717 GetControlButtonBackgroundColor(item_->shown_contents()); 719 GetControlButtonBackgroundColor(item_->GetShownContents());
718 const SkColor start = 720 const SkColor start =
719 target == message_center::kControlButtonBackgroundColor 721 target == message_center::kControlButtonBackgroundColor
720 ? SK_ColorTRANSPARENT 722 ? SK_ColorTRANSPARENT
721 : message_center::kControlButtonBackgroundColor; 723 : message_center::kControlButtonBackgroundColor;
722 const SkColor current_color = gfx::Tween::ColorValueBetween( 724 const SkColor current_color = gfx::Tween::ColorValueBetween(
723 animation->GetCurrentValue(), start, target); 725 animation->GetCurrentValue(), start, target);
724 if (settings_button_) { 726 if (settings_button_) {
725 settings_button_->set_background( 727 settings_button_->set_background(
726 views::Background::CreateSolidBackground(current_color)); 728 views::Background::CreateSolidBackground(current_color));
727 settings_button_->SchedulePaint(); 729 settings_button_->SchedulePaint();
728 } 730 }
729 if (close_button_) { 731 if (close_button_) {
730 close_button_->set_background( 732 close_button_->set_background(
731 views::Background::CreateSolidBackground(current_color)); 733 views::Background::CreateSolidBackground(current_color));
732 close_button_->SchedulePaint(); 734 close_button_->SchedulePaint();
733 } 735 }
734 } 736 }
735 } 737 }
736 738
737 } // namespace arc 739 } // namespace arc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698