Commit ff80b841 authored by Toni Barzic's avatar Toni Barzic Committed by Commit Bot

Notify home screen delegate about transition to home screen

Adds logic to notify the home screen delegate of transition to home
screen from app (when home button is tapped) for homerview transition.
This reflects what's done by HomeLauncherGestureHandler when
kHomerviewGesture feature is not enabled. Some perf tests rely on this
notification being sent (for example LauncherDragTest.Close/1).

BUG=1005366

Change-Id: I0a12ddb1289c8e5d1d093f438bdaa9a354deba29
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1897011Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Toni Baržić <tbarzic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#712650}
parent 4bd7e9e8
...@@ -496,8 +496,10 @@ void DragWindowFromShelfController::ScaleDownWindowAfterDrag() { ...@@ -496,8 +496,10 @@ void DragWindowFromShelfController::ScaleDownWindowAfterDrag() {
for (auto* window : GetTransientTreeIterator(window_)) { for (auto* window : GetTransientTreeIterator(window_)) {
// self-destructed when window transform animation is done. // self-destructed when window transform animation is done.
new WindowTransformToHomeScreenAnimation( new WindowTransformToHomeScreenAnimation(
window, window == window_ ? base::make_optional(original_backdrop_mode_) window,
: base::nullopt); window == window_ ? base::make_optional(original_backdrop_mode_)
: base::nullopt,
base::NullCallback());
} }
} }
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h"
#include "ash/wm/window_state.h" #include "ash/wm/window_state.h"
#include "ash/wm/window_transient_descendant_iterator.h" #include "ash/wm/window_transient_descendant_iterator.h"
#include "base/barrier_closure.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "ui/aura/window.h" #include "ui/aura/window.h"
...@@ -156,6 +157,9 @@ bool HomeScreenController::GoHome(int64_t display_id) { ...@@ -156,6 +157,9 @@ bool HomeScreenController::GoHome(int64_t display_id) {
return true; return true;
} }
delegate_->OnHomeLauncherTargetPositionChanged(true /* showing */,
display_id);
// First minimize all inactive windows. // First minimize all inactive windows.
const bool window_minimized = const bool window_minimized =
MinimizeAllWindows(windows, active_windows /*windows_to_ignore*/); MinimizeAllWindows(windows, active_windows /*windows_to_ignore*/);
...@@ -163,24 +167,46 @@ bool HomeScreenController::GoHome(int64_t display_id) { ...@@ -163,24 +167,46 @@ bool HomeScreenController::GoHome(int64_t display_id) {
// Animate currently active windows into the home screen - they will be // Animate currently active windows into the home screen - they will be
// minimized by WindowTransformToHomeScreenAnimation when the transition // minimized by WindowTransformToHomeScreenAnimation when the transition
// finishes. // finishes.
for (auto* active_window : active_windows) {
BackdropWindowMode original_backdrop_mode = if (!active_windows.empty()) {
active_window->GetProperty(kBackdropWindowMode); base::RepeatingClosure window_transforms_callback = base::BarrierClosure(
active_window->SetProperty(kBackdropWindowMode, active_windows.size(),
BackdropWindowMode::kDisabled); base::BindOnce(&HomeScreenController::NotifyHomeLauncherTransitionEnded,
weak_ptr_factory_.GetWeakPtr(), true /*shown*/,
// Do the scale-down transform for the entire transient tree. display_id));
for (auto* window : GetTransientTreeIterator(active_window)) {
// Self-destructed when window transform animation is done. for (auto* active_window : active_windows) {
new WindowTransformToHomeScreenAnimation( BackdropWindowMode original_backdrop_mode =
window, window == active_window active_window->GetProperty(kBackdropWindowMode);
? base::make_optional(original_backdrop_mode) active_window->SetProperty(kBackdropWindowMode,
: base::nullopt); BackdropWindowMode::kDisabled);
// Do the scale-down transform for the entire transient tree.
for (auto* window : GetTransientTreeIterator(active_window)) {
// Self-destructed when window transform animation is done.
new WindowTransformToHomeScreenAnimation(
window,
window == active_window
? base::make_optional(original_backdrop_mode)
: base::nullopt,
window == active_window ? window_transforms_callback
: base::NullCallback());
}
} }
} else {
delegate_->OnHomeLauncherAnimationComplete(true /*shown*/, display_id);
} }
return window_minimized || !active_windows.empty(); return window_minimized || !active_windows.empty();
} }
void HomeScreenController::NotifyHomeLauncherTransitionEnded(
bool shown,
int64_t display_id) {
if (delegate_)
delegate_->OnHomeLauncherAnimationComplete(shown, display_id);
}
void HomeScreenController::SetDelegate(HomeScreenDelegate* delegate) { void HomeScreenController::SetDelegate(HomeScreenDelegate* delegate) {
delegate_ = delegate; delegate_ = delegate;
} }
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "ash/wm/overview/overview_observer.h" #include "ash/wm/overview/overview_observer.h"
#include "ash/wm/overview/overview_session.h" #include "ash/wm/overview/overview_session.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h" #include "base/optional.h"
namespace ash { namespace ash {
...@@ -68,6 +69,11 @@ class ASH_EXPORT HomeScreenController : public OverviewObserver, ...@@ -68,6 +69,11 @@ class ASH_EXPORT HomeScreenController : public OverviewObserver,
// in overview mode. // in overview mode.
void UpdateVisibility(); void UpdateVisibility();
// Notifies home screen delegate that a home launcher transition has ended.
// |shown| - whether the final home state was shown.
// |display_id| - the home screen display ID.
void NotifyHomeLauncherTransitionEnded(bool shown, int64_t display_id);
// Whether the wallpaper is being previewed. The home screen should be hidden // Whether the wallpaper is being previewed. The home screen should be hidden
// during wallpaper preview. // during wallpaper preview.
bool in_wallpaper_preview_ = false; bool in_wallpaper_preview_ = false;
...@@ -91,6 +97,8 @@ class ASH_EXPORT HomeScreenController : public OverviewObserver, ...@@ -91,6 +97,8 @@ class ASH_EXPORT HomeScreenController : public OverviewObserver,
// available). // available).
base::Optional<OverviewSession::EnterExitOverviewType> overview_exit_type_; base::Optional<OverviewSession::EnterExitOverviewType> overview_exit_type_;
base::WeakPtrFactory<HomeScreenController> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(HomeScreenController); DISALLOW_COPY_AND_ASSIGN(HomeScreenController);
}; };
......
...@@ -39,8 +39,11 @@ constexpr float kWindowScaleDownFactor = 0.001f; ...@@ -39,8 +39,11 @@ constexpr float kWindowScaleDownFactor = 0.001f;
WindowTransformToHomeScreenAnimation::WindowTransformToHomeScreenAnimation( WindowTransformToHomeScreenAnimation::WindowTransformToHomeScreenAnimation(
aura::Window* window, aura::Window* window,
base::Optional<BackdropWindowMode> original_backdrop_mode) base::Optional<BackdropWindowMode> original_backdrop_mode,
: window_(window), original_backdrop_mode_(original_backdrop_mode) { base::OnceClosure opt_callback)
: window_(window),
original_backdrop_mode_(original_backdrop_mode),
opt_callback_(std::move(opt_callback)) {
window_observer_.Add(window); window_observer_.Add(window);
ui::ScopedLayerAnimationSettings settings(window_->layer()->GetAnimator()); ui::ScopedLayerAnimationSettings settings(window_->layer()->GetAnimator());
...@@ -55,8 +58,10 @@ WindowTransformToHomeScreenAnimation::WindowTransformToHomeScreenAnimation( ...@@ -55,8 +58,10 @@ WindowTransformToHomeScreenAnimation::WindowTransformToHomeScreenAnimation(
window_->layer()->SetOpacity(0.f); window_->layer()->SetOpacity(0.f);
} }
WindowTransformToHomeScreenAnimation::~WindowTransformToHomeScreenAnimation() = WindowTransformToHomeScreenAnimation::~WindowTransformToHomeScreenAnimation() {
default; if (!opt_callback_.is_null())
std::move(opt_callback_).Run();
}
void WindowTransformToHomeScreenAnimation::OnImplicitAnimationsCompleted() { void WindowTransformToHomeScreenAnimation::OnImplicitAnimationsCompleted() {
// Minimize the dragged window after transform animation is completed. // Minimize the dragged window after transform animation is completed.
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef ASH_HOME_SCREEN_WINDOW_TRANSFORM_TO_HOME_SCREEN_ANIMATION_H_ #ifndef ASH_HOME_SCREEN_WINDOW_TRANSFORM_TO_HOME_SCREEN_ANIMATION_H_
#define ASH_HOME_SCREEN_WINDOW_TRANSFORM_TO_HOME_SCREEN_ANIMATION_H_ #define ASH_HOME_SCREEN_WINDOW_TRANSFORM_TO_HOME_SCREEN_ANIMATION_H_
#include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/scoped_observer.h" #include "base/scoped_observer.h"
...@@ -28,7 +29,8 @@ class WindowTransformToHomeScreenAnimation ...@@ -28,7 +29,8 @@ class WindowTransformToHomeScreenAnimation
public: public:
WindowTransformToHomeScreenAnimation( WindowTransformToHomeScreenAnimation(
aura::Window* window, aura::Window* window,
base::Optional<BackdropWindowMode> original_backdrop_mode); base::Optional<BackdropWindowMode> original_backdrop_mode,
base::OnceClosure opt_callback);
~WindowTransformToHomeScreenAnimation() override; ~WindowTransformToHomeScreenAnimation() override;
// ui::ImplicitAnimationObserver: // ui::ImplicitAnimationObserver:
...@@ -44,6 +46,8 @@ class WindowTransformToHomeScreenAnimation ...@@ -44,6 +46,8 @@ class WindowTransformToHomeScreenAnimation
aura::Window* window_; aura::Window* window_;
base::Optional<BackdropWindowMode> original_backdrop_mode_; base::Optional<BackdropWindowMode> original_backdrop_mode_;
base::OnceClosure opt_callback_;
ScopedObserver<aura::Window, aura::WindowObserver> window_observer_{this}; ScopedObserver<aura::Window, aura::WindowObserver> window_observer_{this};
DISALLOW_COPY_AND_ASSIGN(WindowTransformToHomeScreenAnimation); DISALLOW_COPY_AND_ASSIGN(WindowTransformToHomeScreenAnimation);
......
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