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

Side by Side Diff: ui/message_center/views/message_center_view.cc

Issue 1986493002: Show message center on lock screen (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 4 years, 6 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 (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/message_center/views/message_center_view.h" 5 #include "ui/message_center/views/message_center_view.h"
6 6
7 #include <list> 7 #include <list>
8 #include <map> 8 #include <map>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 23 matching lines...) Expand all
34 #include "ui/views/border.h" 34 #include "ui/views/border.h"
35 #include "ui/views/controls/button/button.h" 35 #include "ui/views/controls/button/button.h"
36 #include "ui/views/controls/label.h" 36 #include "ui/views/controls/label.h"
37 #include "ui/views/controls/scroll_view.h" 37 #include "ui/views/controls/scroll_view.h"
38 #include "ui/views/controls/scrollbar/overlay_scroll_bar.h" 38 #include "ui/views/controls/scrollbar/overlay_scroll_bar.h"
39 #include "ui/views/layout/fill_layout.h" 39 #include "ui/views/layout/fill_layout.h"
40 #include "ui/views/widget/widget.h" 40 #include "ui/views/widget/widget.h"
41 41
42 namespace message_center { 42 namespace message_center {
43 43
44 // static
45 bool MessageCenterView::disable_animation_for_testing = false;
46
44 namespace { 47 namespace {
45 48
46 const int kDefaultAnimationDurationMs = 120; 49 const int kDefaultAnimationDurationMs = 120;
47 const int kDefaultFrameRateHz = 60; 50 const int kDefaultFrameRateHz = 60;
48 51
49 void SetViewHierarchyEnabled(views::View* view, bool enabled) { 52 void SetViewHierarchyEnabled(views::View* view, bool enabled) {
50 for (int i = 0; i < view->child_count(); i++) 53 for (int i = 0; i < view->child_count(); i++)
51 SetViewHierarchyEnabled(view->child_at(i), enabled); 54 SetViewHierarchyEnabled(view->child_at(i), enabled);
52 view->SetEnabled(enabled); 55 view->SetEnabled(enabled);
53 } 56 }
(...skipping 12 matching lines...) Expand all
66 scroller_(NULL), 69 scroller_(NULL),
67 settings_view_(NULL), 70 settings_view_(NULL),
68 button_bar_(NULL), 71 button_bar_(NULL),
69 top_down_(top_down), 72 top_down_(top_down),
70 settings_visible_(initially_settings_visible), 73 settings_visible_(initially_settings_visible),
71 source_view_(NULL), 74 source_view_(NULL),
72 source_height_(0), 75 source_height_(0),
73 target_view_(NULL), 76 target_view_(NULL),
74 target_height_(0), 77 target_height_(0),
75 is_closing_(false), 78 is_closing_(false),
76 mode_((!initially_settings_visible) ? Mode::BUTTONS_ONLY 79 is_locked_(message_center_->IsLockedState()),
77 : Mode::SETTINGS), 80 mode_((!initially_settings_visible || is_locked_) ? Mode::BUTTONS_ONLY
81 : Mode::SETTINGS),
78 context_menu_controller_(new MessageViewContextMenuController(this)) { 82 context_menu_controller_(new MessageViewContextMenuController(this)) {
79 message_center_->AddObserver(this); 83 message_center_->AddObserver(this);
80 set_notify_enter_exit_on_child(true); 84 set_notify_enter_exit_on_child(true);
81 set_background(views::Background::CreateSolidBackground( 85 set_background(views::Background::CreateSolidBackground(
82 kMessageCenterBackgroundColor)); 86 kMessageCenterBackgroundColor));
83 87
84 NotifierSettingsProvider* notifier_settings_provider = 88 NotifierSettingsProvider* notifier_settings_provider =
85 message_center_->GetNotifierSettingsProvider(); 89 message_center_->GetNotifierSettingsProvider();
86 button_bar_ = new MessageCenterButtonBar( 90 button_bar_ = new MessageCenterButtonBar(
87 this, message_center, notifier_settings_provider, 91 this, message_center, notifier_settings_provider,
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 int old_width = view->width(); 399 int old_width = view->width();
396 int old_height = view->GetHeightForWidth(old_width); 400 int old_height = view->GetHeightForWidth(old_width);
397 message_list_view_->UpdateNotification(view, **iter); 401 message_list_view_->UpdateNotification(view, **iter);
398 if (view->GetHeightForWidth(old_width) != old_height) 402 if (view->GetHeightForWidth(old_width) != old_height)
399 Update(true /* animate */); 403 Update(true /* animate */);
400 break; 404 break;
401 } 405 }
402 } 406 }
403 } 407 }
404 408
409 void MessageCenterView::OnLockedStateChanged(bool locked) {
410 is_locked_ = locked;
411 UpdateButtonBarStatus();
412 Update(true /* animate */);
413 }
414
405 void MessageCenterView::ClickOnNotification( 415 void MessageCenterView::ClickOnNotification(
406 const std::string& notification_id) { 416 const std::string& notification_id) {
407 message_center_->ClickOnNotification(notification_id); 417 message_center_->ClickOnNotification(notification_id);
408 } 418 }
409 419
410 void MessageCenterView::RemoveNotification(const std::string& notification_id, 420 void MessageCenterView::RemoveNotification(const std::string& notification_id,
411 bool by_user) { 421 bool by_user) {
412 message_center_->RemoveNotification(notification_id, by_user); 422 message_center_->RemoveNotification(notification_id, by_user);
413 } 423 }
414 424
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 int index) { 491 int index) {
482 MessageView* view = 492 MessageView* view =
483 NotificationView::Create(this, notification, false); // Not top-level. 493 NotificationView::Create(this, notification, false); // Not top-level.
484 view->set_context_menu_controller(context_menu_controller_.get()); 494 view->set_context_menu_controller(context_menu_controller_.get());
485 notification_views_[notification.id()] = view; 495 notification_views_[notification.id()] = view;
486 view->set_scroller(scroller_); 496 view->set_scroller(scroller_);
487 message_list_view_->AddNotificationAt(view, index); 497 message_list_view_->AddNotificationAt(view, index);
488 } 498 }
489 499
490 base::string16 MessageCenterView::GetButtonBarTitle() const { 500 base::string16 MessageCenterView::GetButtonBarTitle() const {
491 bool no_message_views = notification_views_.empty(); 501 if (is_locked_)
492 if (no_message_views && !settings_visible_) 502 return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_FOOTER_LOCKSCREEN);
503
504 if (mode_ == Mode::BUTTONS_ONLY)
493 return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_NO_MESSAGES); 505 return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_NO_MESSAGES);
494 506
495 return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_FOOTER_TITLE); 507 return l10n_util::GetStringUTF16(IDS_MESSAGE_CENTER_FOOTER_TITLE);
496 } 508 }
497 509
498 void MessageCenterView::Update(bool animate) { 510 void MessageCenterView::Update(bool animate) {
499 bool no_message_views = notification_views_.empty(); 511 bool no_message_views = notification_views_.empty();
500 512
501 // When the child view is removed from the hierarchy, its focus is cleared. 513 // When the child view is removed from the hierarchy, its focus is cleared.
502 // In this case we want to save which view has focus so that the user can 514 // In this case we want to save which view has focus so that the user can
503 // continue to interact with notifications in the order they were expecting. 515 // continue to interact with notifications in the order they were expecting.
504 views::FocusManager* focus_manager = scroller_->GetFocusManager(); 516 views::FocusManager* focus_manager = scroller_->GetFocusManager();
505 View* focused_view = NULL; 517 View* focused_view = NULL;
506 // |focus_manager| can be NULL in tests. 518 // |focus_manager| can be NULL in tests.
507 if (focus_manager) 519 if (focus_manager)
508 focused_view = focus_manager->GetFocusedView(); 520 focused_view = focus_manager->GetFocusedView();
509 521
510 if (settings_visible_) 522 if (is_locked_)
523 SetVisibilityMode(Mode::BUTTONS_ONLY, animate);
524 else if (settings_visible_)
511 SetVisibilityMode(Mode::SETTINGS, animate); 525 SetVisibilityMode(Mode::SETTINGS, animate);
512 else if (no_message_views) 526 else if (no_message_views)
513 SetVisibilityMode(Mode::BUTTONS_ONLY, animate); 527 SetVisibilityMode(Mode::BUTTONS_ONLY, animate);
514 else 528 else
515 SetVisibilityMode(Mode::NOTIFICATIONS, animate); 529 SetVisibilityMode(Mode::NOTIFICATIONS, animate);
516 530
517 if (no_message_views) { 531 if (no_message_views) {
518 scroller_->SetFocusBehavior(FocusBehavior::NEVER); 532 scroller_->SetFocusBehavior(FocusBehavior::NEVER);
519 } else { 533 } else {
520 #if defined(OS_MACOSX) 534 #if defined(OS_MACOSX)
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 else if (mode == Mode::SETTINGS) 568 else if (mode == Mode::SETTINGS)
555 target_view_ = settings_view_; 569 target_view_ = settings_view_;
556 else 570 else
557 target_view_ = NULL; 571 target_view_ = NULL;
558 572
559 mode_ = mode; 573 mode_ = mode;
560 574
561 source_height_ = source_view_ ? source_view_->GetHeightForWidth(width()) : 0; 575 source_height_ = source_view_ ? source_view_->GetHeightForWidth(width()) : 0;
562 target_height_ = target_view_ ? target_view_->GetHeightForWidth(width()) : 0; 576 target_height_ = target_view_ ? target_view_->GetHeightForWidth(width()) : 0;
563 577
564 if (!animate) { 578 if (!animate || disable_animation_for_testing) {
565 AnimationEnded(NULL); 579 AnimationEnded(NULL);
566 return; 580 return;
567 } 581 }
568 582
569 gfx::MultiAnimation::Parts parts; 583 gfx::MultiAnimation::Parts parts;
570 // First part: slide resize animation. 584 // First part: slide resize animation.
571 parts.push_back(gfx::MultiAnimation::Part( 585 parts.push_back(gfx::MultiAnimation::Part(
572 (source_height_ == target_height_) ? 0 : kDefaultAnimationDurationMs, 586 (source_height_ == target_height_) ? 0 : kDefaultAnimationDurationMs,
573 gfx::Tween::EASE_OUT)); 587 gfx::Tween::EASE_OUT));
574 // Second part: fade-out the source_view. 588 // Second part: fade-out the source_view.
(...skipping 21 matching lines...) Expand all
596 610
597 void MessageCenterView::UpdateButtonBarStatus() { 611 void MessageCenterView::UpdateButtonBarStatus() {
598 // Disables all buttons during animation of cleaning of all notifications. 612 // Disables all buttons during animation of cleaning of all notifications.
599 if (is_clearing_) { 613 if (is_clearing_) {
600 button_bar_->SetSettingsAndQuietModeButtonsEnabled(false); 614 button_bar_->SetSettingsAndQuietModeButtonsEnabled(false);
601 button_bar_->SetCloseAllButtonEnabled(false); 615 button_bar_->SetCloseAllButtonEnabled(false);
602 return; 616 return;
603 } 617 }
604 618
605 button_bar_->SetBackArrowVisible(mode_ == Mode::SETTINGS); 619 button_bar_->SetBackArrowVisible(mode_ == Mode::SETTINGS);
606 button_bar_->SetSettingsAndQuietModeButtonsEnabled(true); 620 button_bar_->SetSettingsAndQuietModeButtonsEnabled(!is_locked_);
607 button_bar_->SetTitle(GetButtonBarTitle()); 621 button_bar_->SetTitle(GetButtonBarTitle());
608 622
609 if (mode_ == Mode::NOTIFICATIONS) { 623 if (mode_ == Mode::NOTIFICATIONS) {
610 bool no_closable_views = true; 624 bool no_closable_views = true;
611 for (const auto& view : notification_views_) { 625 for (const auto& view : notification_views_) {
612 if (!view.second->IsPinned()) { 626 if (!view.second->IsPinned()) {
613 no_closable_views = false; 627 no_closable_views = false;
614 break; 628 break;
615 } 629 }
616 } 630 }
617 button_bar_->SetCloseAllButtonEnabled(!no_closable_views); 631 button_bar_->SetCloseAllButtonEnabled(!no_closable_views);
618 } else { 632 } else {
619 // Disable the close-all button since no notification is visible. 633 // Disable the close-all button since no notification is visible.
620 button_bar_->SetCloseAllButtonEnabled(false); 634 button_bar_->SetCloseAllButtonEnabled(false);
621 } 635 }
622 } 636 }
623 637
624 void MessageCenterView::SetNotificationViewForTest(MessageView* view) { 638 void MessageCenterView::SetNotificationViewForTest(MessageView* view) {
625 message_list_view_->AddNotificationAt(view, 0); 639 message_list_view_->AddNotificationAt(view, 0);
626 } 640 }
627 641
628 } // namespace message_center 642 } // namespace message_center
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698