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() {
for (auto* window : GetTransientTreeIterator(window_)) {
// self-destructed when window transform animation is done.
new WindowTransformToHomeScreenAnimation(
window, window == window_ ? base::make_optional(original_backdrop_mode_)
: base::nullopt);
window,
window == window_ ? base::make_optional(original_backdrop_mode_)
: base::nullopt,
base::NullCallback());
}
}
......
......@@ -22,6 +22,7 @@
#include "ash/wm/tablet_mode/tablet_mode_controller.h"
#include "ash/wm/window_state.h"
#include "ash/wm/window_transient_descendant_iterator.h"
#include "base/barrier_closure.h"
#include "base/logging.h"
#include "base/stl_util.h"
#include "ui/aura/window.h"
......@@ -156,6 +157,9 @@ bool HomeScreenController::GoHome(int64_t display_id) {
return true;
}
delegate_->OnHomeLauncherTargetPositionChanged(true /* showing */,
display_id);
// First minimize all inactive windows.
const bool window_minimized =
MinimizeAllWindows(windows, active_windows /*windows_to_ignore*/);
......@@ -163,6 +167,14 @@ bool HomeScreenController::GoHome(int64_t display_id) {
// Animate currently active windows into the home screen - they will be
// minimized by WindowTransformToHomeScreenAnimation when the transition
// finishes.
if (!active_windows.empty()) {
base::RepeatingClosure window_transforms_callback = base::BarrierClosure(
active_windows.size(),
base::BindOnce(&HomeScreenController::NotifyHomeLauncherTransitionEnded,
weak_ptr_factory_.GetWeakPtr(), true /*shown*/,
display_id));
for (auto* active_window : active_windows) {
BackdropWindowMode original_backdrop_mode =
active_window->GetProperty(kBackdropWindowMode);
......@@ -173,14 +185,28 @@ bool HomeScreenController::GoHome(int64_t display_id) {
for (auto* window : GetTransientTreeIterator(active_window)) {
// Self-destructed when window transform animation is done.
new WindowTransformToHomeScreenAnimation(
window, window == active_window
window,
window == active_window
? base::make_optional(original_backdrop_mode)
: base::nullopt);
: base::nullopt,
window == active_window ? window_transforms_callback
: base::NullCallback());
}
}
} else {
delegate_->OnHomeLauncherAnimationComplete(true /*shown*/, display_id);
}
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) {
delegate_ = delegate;
}
......
......@@ -13,6 +13,7 @@
#include "ash/wm/overview/overview_observer.h"
#include "ash/wm/overview/overview_session.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h"
namespace ash {
......@@ -68,6 +69,11 @@ class ASH_EXPORT HomeScreenController : public OverviewObserver,
// in overview mode.
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
// during wallpaper preview.
bool in_wallpaper_preview_ = false;
......@@ -91,6 +97,8 @@ class ASH_EXPORT HomeScreenController : public OverviewObserver,
// available).
base::Optional<OverviewSession::EnterExitOverviewType> overview_exit_type_;
base::WeakPtrFactory<HomeScreenController> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(HomeScreenController);
};
......
......@@ -39,8 +39,11 @@ constexpr float kWindowScaleDownFactor = 0.001f;
WindowTransformToHomeScreenAnimation::WindowTransformToHomeScreenAnimation(
aura::Window* window,
base::Optional<BackdropWindowMode> original_backdrop_mode)
: window_(window), original_backdrop_mode_(original_backdrop_mode) {
base::Optional<BackdropWindowMode> 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);
ui::ScopedLayerAnimationSettings settings(window_->layer()->GetAnimator());
......@@ -55,8 +58,10 @@ WindowTransformToHomeScreenAnimation::WindowTransformToHomeScreenAnimation(
window_->layer()->SetOpacity(0.f);
}
WindowTransformToHomeScreenAnimation::~WindowTransformToHomeScreenAnimation() =
default;
WindowTransformToHomeScreenAnimation::~WindowTransformToHomeScreenAnimation() {
if (!opt_callback_.is_null())
std::move(opt_callback_).Run();
}
void WindowTransformToHomeScreenAnimation::OnImplicitAnimationsCompleted() {
// Minimize the dragged window after transform animation is completed.
......
......@@ -5,6 +5,7 @@
#ifndef 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/optional.h"
#include "base/scoped_observer.h"
......@@ -28,7 +29,8 @@ class WindowTransformToHomeScreenAnimation
public:
WindowTransformToHomeScreenAnimation(
aura::Window* window,
base::Optional<BackdropWindowMode> original_backdrop_mode);
base::Optional<BackdropWindowMode> original_backdrop_mode,
base::OnceClosure opt_callback);
~WindowTransformToHomeScreenAnimation() override;
// ui::ImplicitAnimationObserver:
......@@ -44,6 +46,8 @@ class WindowTransformToHomeScreenAnimation
aura::Window* window_;
base::Optional<BackdropWindowMode> original_backdrop_mode_;
base::OnceClosure opt_callback_;
ScopedObserver<aura::Window, aura::WindowObserver> window_observer_{this};
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