Commit b043a5fc authored by Jazz Xu's avatar Jazz Xu Committed by Commit Bot

CrOS GMC: Don't show media controls when in sub-menu.

This CL makes |media_controls_container_| only show when user is in
main system menu. This prevents menu from expanding when in sub-menu.

Bug: 1135717
Change-Id: I11d93b61ddc67a3183d18e70b5e64a9b731f61e3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2453923
Commit-Queue: Jazz Xu <jazzhsu@chromium.org>
Reviewed-by: default avatarTetsui Ohkubo <tetsui@chromium.org>
Reviewed-by: default avatarTommy Steimel <steimel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#814844}
parent fb9da8a0
...@@ -2116,6 +2116,7 @@ test("ash_unittests") { ...@@ -2116,6 +2116,7 @@ test("ash_unittests") {
"system/locale/locale_feature_pod_controller_unittest.cc", "system/locale/locale_feature_pod_controller_unittest.cc",
"system/machine_learning/user_settings_event_logger_unittest.cc", "system/machine_learning/user_settings_event_logger_unittest.cc",
"system/media/media_tray_unittest.cc", "system/media/media_tray_unittest.cc",
"system/media/unified_media_controls_container_unittest.cc",
"system/media/unified_media_controls_controller_unittest.cc", "system/media/unified_media_controls_controller_unittest.cc",
"system/media/unified_media_controls_detailed_view_controller_unittest.cc", "system/media/unified_media_controls_detailed_view_controller_unittest.cc",
"system/message_center/ash_message_popup_collection_unittest.cc", "system/message_center/ash_message_popup_collection_unittest.cc",
......
...@@ -22,8 +22,15 @@ UnifiedMediaControlsContainer::UnifiedMediaControlsContainer() ...@@ -22,8 +22,15 @@ UnifiedMediaControlsContainer::UnifiedMediaControlsContainer()
void UnifiedMediaControlsContainer::SetShouldShowMediaControls( void UnifiedMediaControlsContainer::SetShouldShowMediaControls(
bool should_show) { bool should_show) {
should_show_media_controls_ = should_show; should_show_media_controls_ = should_show;
SetVisible(expanded_amount_ > 0 && should_show_media_controls_); }
bool UnifiedMediaControlsContainer::MaybeShowMediaControls() {
if (expanded_amount_ == 0 || !should_show_media_controls_ || GetVisible())
return false;
SetVisible(true);
InvalidateLayout(); InvalidateLayout();
return true;
} }
void UnifiedMediaControlsContainer::SetExpandedAmount(double expanded_amount) { void UnifiedMediaControlsContainer::SetExpandedAmount(double expanded_amount) {
......
...@@ -16,8 +16,16 @@ class UnifiedMediaControlsContainer : public views::View { ...@@ -16,8 +16,16 @@ class UnifiedMediaControlsContainer : public views::View {
UnifiedMediaControlsContainer(); UnifiedMediaControlsContainer();
~UnifiedMediaControlsContainer() override = default; ~UnifiedMediaControlsContainer() override = default;
// Set |should_show_media_controls_|.
void SetShouldShowMediaControls(bool should_show); void SetShouldShowMediaControls(bool should_show);
// Show media controls if necessary. Returns true if media controls
// will be shown.
bool MaybeShowMediaControls();
// Set |expanded_amount_| and hide/show media controls correspondingly.
void SetExpandedAmount(double expanded_amount); void SetExpandedAmount(double expanded_amount);
int GetExpandedHeight() const; int GetExpandedHeight() const;
// views::View // views::View
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/system/media/unified_media_controls_container.h"
#include "ash/system/media/media_tray.h"
#include "ash/system/status_area_widget.h"
#include "ash/system/status_area_widget_test_helper.h"
#include "ash/system/unified/unified_system_tray.h"
#include "ash/system/unified/unified_system_tray_bubble.h"
#include "ash/system/unified/unified_system_tray_view.h"
#include "ash/test/ash_test_base.h"
#include "base/test/scoped_feature_list.h"
#include "media/base/media_switches.h"
namespace ash {
class UnifiedMediaControlsContainerTest : public AshTestBase {
public:
UnifiedMediaControlsContainerTest() = default;
~UnifiedMediaControlsContainerTest() override = default;
void SetUp() override {
feature_list_.InitAndEnableFeature(media::kGlobalMediaControlsForChromeOS);
AshTestBase::SetUp();
// Ensure media tray is not pinned to shelf so that media controls
// show up in quick settings.
MediaTray::SetPinnedToShelf(false);
StatusAreaWidgetTestHelper::GetStatusAreaWidget()
->unified_system_tray()
->ShowBubble(false /* show_by_click */);
}
UnifiedSystemTrayView* system_tray_view() {
return StatusAreaWidgetTestHelper::GetStatusAreaWidget()
->unified_system_tray()
->bubble()
->unified_view();
}
UnifiedMediaControlsContainer* media_controls_container() {
return system_tray_view()->media_controls_container_for_testing();
}
private:
base::test::ScopedFeatureList feature_list_;
};
TEST_F(UnifiedMediaControlsContainerTest, DoNotShowControlsWhenInDetailedView) {
// Navigate to a dummy detailed view.
system_tray_view()->SetDetailedView(new views::View());
// Simulate media playing, container should still be hidden.
system_tray_view()->ShowMediaControls();
EXPECT_FALSE(media_controls_container()->GetVisible());
// Return back to main menu, now media controls should show.
system_tray_view()->ResetDetailedView();
EXPECT_TRUE(media_controls_container()->GetVisible());
}
TEST_F(UnifiedMediaControlsContainerTest, HideControlsWhenSystemMenuCollapse) {
EXPECT_FALSE(media_controls_container()->GetVisible());
system_tray_view()->SetExpandedAmount(0.0f);
// Simulate media playing, container should be hidden since menu is collapsed.
system_tray_view()->ShowMediaControls();
EXPECT_FALSE(media_controls_container()->GetVisible());
// Controls should be shown as the menu is expanding back to normal state.
system_tray_view()->SetExpandedAmount(0.1f);
EXPECT_TRUE(media_controls_container()->GetVisible());
}
TEST_F(UnifiedMediaControlsContainerTest, ShowMediaControls) {
// Simulate media playing and media controls should show.
system_tray_view()->ShowMediaControls();
EXPECT_TRUE(media_controls_container()->GetVisible());
}
} // namespace ash
...@@ -289,7 +289,12 @@ void UnifiedSystemTrayView::AddMediaControlsView(views::View* media_controls) { ...@@ -289,7 +289,12 @@ void UnifiedSystemTrayView::AddMediaControlsView(views::View* media_controls) {
void UnifiedSystemTrayView::ShowMediaControls() { void UnifiedSystemTrayView::ShowMediaControls() {
media_controls_container_->SetShouldShowMediaControls(true); media_controls_container_->SetShouldShowMediaControls(true);
PreferredSizeChanged();
if (detailed_view_container_->GetVisible())
return;
if (media_controls_container_->MaybeShowMediaControls())
PreferredSizeChanged();
} }
void UnifiedSystemTrayView::SetDetailedView(views::View* detailed_view) { void UnifiedSystemTrayView::SetDetailedView(views::View* detailed_view) {
...@@ -307,6 +312,8 @@ void UnifiedSystemTrayView::SetDetailedView(views::View* detailed_view) { ...@@ -307,6 +312,8 @@ void UnifiedSystemTrayView::SetDetailedView(views::View* detailed_view) {
void UnifiedSystemTrayView::ResetDetailedView() { void UnifiedSystemTrayView::ResetDetailedView() {
detailed_view_container_->RemoveAllChildViews(true /* delete_children */); detailed_view_container_->RemoveAllChildViews(true /* delete_children */);
detailed_view_container_->SetVisible(false); detailed_view_container_->SetVisible(false);
if (media_controls_container_)
media_controls_container_->MaybeShowMediaControls();
system_tray_container_->SetVisible(true); system_tray_container_->SetVisible(true);
sliders_container_->UpdateOpacity(); sliders_container_->UpdateOpacity();
PreferredSizeChanged(); PreferredSizeChanged();
......
...@@ -165,6 +165,9 @@ class ASH_EXPORT UnifiedSystemTrayView : public views::View, ...@@ -165,6 +165,9 @@ class ASH_EXPORT UnifiedSystemTrayView : public views::View,
PageIndicatorView* page_indicator_view_for_test() { PageIndicatorView* page_indicator_view_for_test() {
return page_indicator_view_; return page_indicator_view_;
} }
UnifiedMediaControlsContainer* media_controls_container_for_testing() {
return media_controls_container_;
}
private: private:
class SystemTrayContainer; class SystemTrayContainer;
......
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