123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- // Copyright 2016 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 <memory>
- #include "ash/app_list/app_list_bubble_presenter.h"
- #include "ash/app_list/app_list_controller_impl.h"
- #include "ash/app_list/app_list_presenter_impl.h"
- #include "ash/constants/ash_features.h"
- #include "ash/public/cpp/shell_window_ids.h"
- #include "ash/shelf/home_button.h"
- #include "ash/shelf/shelf.h"
- #include "ash/shelf/shelf_navigation_widget.h"
- #include "ash/shelf/shelf_view.h"
- #include "ash/shelf/shelf_view_test_api.h"
- #include "ash/shelf/shelf_widget.h"
- #include "ash/shell.h"
- #include "ash/test/ash_test_base.h"
- #include "base/test/scoped_feature_list.h"
- #include "testing/gtest/include/gtest/gtest.h"
- #include "ui/aura/window.h"
- namespace ash {
- namespace {
- // Returns visibility from the presenter's perspective.
- bool GetPresenterVisibility() {
- auto* controller = Shell::Get()->app_list_controller();
- if (features::IsProductivityLauncherEnabled())
- return controller->bubble_presenter_for_test()->IsShowing();
- return controller->fullscreen_presenter()->GetTargetVisibility();
- }
- } // namespace
- class AppListTest : public AshTestBase,
- public testing::WithParamInterface<bool> {
- public:
- AppListTest() {
- feature_list_.InitWithFeatureState(features::kProductivityLauncher,
- GetParam());
- }
- base::test::ScopedFeatureList feature_list_;
- };
- INSTANTIATE_TEST_SUITE_P(ProductivityLauncher, AppListTest, testing::Bool());
- // An integration test to toggle the app list by pressing the shelf button.
- TEST_P(AppListTest, PressHomeButtonToShowAndDismiss) {
- aura::Window* root_window = Shell::GetPrimaryRootWindow();
- Shelf* shelf = Shelf::ForWindow(root_window);
- ShelfWidget* shelf_widget = shelf->shelf_widget();
- ShelfView* shelf_view = shelf->GetShelfViewForTesting();
- ShelfViewTestAPI(shelf_view).RunMessageLoopUntilAnimationsDone();
- HomeButton* home_button = shelf_widget->navigation_widget()->GetHomeButton();
- // Ensure animations progressed to give the home button a non-empty size.
- ASSERT_GT(home_button->GetBoundsInScreen().height(), 0);
- aura::Window* app_list_container =
- root_window->GetChildById(kShellWindowId_AppListContainer);
- // Click the home button to show the app list.
- auto* controller = Shell::Get()->app_list_controller();
- EXPECT_FALSE(controller->GetTargetVisibility(GetPrimaryDisplay().id()));
- EXPECT_FALSE(GetPresenterVisibility());
- EXPECT_EQ(0u, app_list_container->children().size());
- EXPECT_FALSE(home_button->IsShowingAppList());
- LeftClickOn(home_button);
- EXPECT_TRUE(GetPresenterVisibility());
- EXPECT_EQ(1u, app_list_container->children().size());
- EXPECT_TRUE(home_button->IsShowingAppList());
- // Click the button again to dismiss the app list; it will animate to close.
- LeftClickOn(home_button);
- EXPECT_FALSE(controller->GetTargetVisibility(GetPrimaryDisplay().id()));
- EXPECT_EQ(1u, app_list_container->children().size());
- EXPECT_FALSE(home_button->IsShowingAppList());
- }
- // Tests that the app list gets toggled by pressing the shelf button on
- // secondary display.
- TEST_P(AppListTest, PressHomeButtonToShowAndDismissOnSecondDisplay) {
- UpdateDisplay("1024x768,1024x768");
- aura::Window* root_window =
- Shell::GetRootWindowForDisplayId(GetSecondaryDisplay().id());
- Shelf* shelf = Shelf::ForWindow(root_window);
- ShelfWidget* shelf_widget = shelf->shelf_widget();
- ShelfView* shelf_view = shelf->GetShelfViewForTesting();
- ShelfViewTestAPI(shelf_view).RunMessageLoopUntilAnimationsDone();
- HomeButton* home_button = shelf_widget->navigation_widget()->GetHomeButton();
- // Ensure animations progressed to give the home button a non-empty size.
- ASSERT_GT(home_button->GetBoundsInScreen().height(), 0);
- aura::Window* app_list_container =
- root_window->GetChildById(kShellWindowId_AppListContainer);
- // Click the home button to show the app list.
- auto* controller = Shell::Get()->app_list_controller();
- EXPECT_FALSE(controller->GetTargetVisibility(GetPrimaryDisplay().id()));
- EXPECT_FALSE(controller->GetTargetVisibility(GetSecondaryDisplay().id()));
- EXPECT_FALSE(GetPresenterVisibility());
- EXPECT_EQ(0u, app_list_container->children().size());
- EXPECT_FALSE(home_button->IsShowingAppList());
- LeftClickOn(home_button);
- EXPECT_FALSE(controller->GetTargetVisibility(GetPrimaryDisplay().id()));
- EXPECT_TRUE(controller->GetTargetVisibility(GetSecondaryDisplay().id()));
- EXPECT_TRUE(GetPresenterVisibility());
- EXPECT_EQ(1u, app_list_container->children().size());
- EXPECT_TRUE(home_button->IsShowingAppList());
- // Click the button again to dismiss the app list; it will animate to close.
- LeftClickOn(home_button);
- EXPECT_FALSE(controller->GetTargetVisibility(GetPrimaryDisplay().id()));
- EXPECT_FALSE(controller->GetTargetVisibility(GetSecondaryDisplay().id()));
- EXPECT_EQ(1u, app_list_container->children().size());
- EXPECT_FALSE(home_button->IsShowingAppList());
- }
- } // namespace ash
|