Commit d6ac9ad7 authored by David Black's avatar David Black Committed by Commit Bot

Handle finalization in holding space tray icon.

Previously finalization was not being handled.

Bug: 1142572
Change-Id: I73b4ee49ab22a0326e877d71a0627fad046d8d8a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2522682Reviewed-by: default avatarToni Baržić <tbarzic@chromium.org>
Commit-Queue: David Black <dmblack@google.com>
Cr-Commit-Position: refs/heads/master@{#824964}
parent a3622174
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include "ash/public/cpp/ash_features.h" #include "ash/public/cpp/ash_features.h"
#include "ash/public/cpp/holding_space/holding_space_constants.h" #include "ash/public/cpp/holding_space/holding_space_constants.h"
#include "ash/public/cpp/holding_space/holding_space_item.h"
#include "ash/public/cpp/shelf_config.h" #include "ash/public/cpp/shelf_config.h"
#include "ash/resources/vector_icons/vector_icons.h" #include "ash/resources/vector_icons/vector_icons.h"
#include "ash/shelf/shelf.h" #include "ash/shelf/shelf.h"
...@@ -91,16 +92,18 @@ void HoldingSpaceTrayIcon::OnHoldingSpaceModelDetached( ...@@ -91,16 +92,18 @@ void HoldingSpaceTrayIcon::OnHoldingSpaceModelDetached(
OnHoldingSpaceItemRemoved(item.get()); OnHoldingSpaceItemRemoved(item.get());
} }
// TODO(crbug.com/1142572): Handle only finalized items.
void HoldingSpaceTrayIcon::OnHoldingSpaceItemAdded( void HoldingSpaceTrayIcon::OnHoldingSpaceItemAdded(
const HoldingSpaceItem* item) { const HoldingSpaceItem* item) {
DCHECK(features::IsTemporaryHoldingSpaceContentForwardEntryPointEnabled()); DCHECK(features::IsTemporaryHoldingSpaceContentForwardEntryPointEnabled());
if (!item->IsFinalized())
return;
for (std::unique_ptr<HoldingSpaceTrayIconItem>& icon_item : icon_items_) for (std::unique_ptr<HoldingSpaceTrayIconItem>& icon_item : icon_items_)
icon_item->AnimateShift(); icon_item->AnimateShift();
icon_items_.push_back(std::make_unique<HoldingSpaceTrayIconItem>(this, item)); icon_items_.push_back(std::make_unique<HoldingSpaceTrayIconItem>(this, item));
icon_items_.back()->AnimateIn(); icon_items_.back()->AnimateIn(/*index=*/0u);
UpdatePreferredSize(); UpdatePreferredSize();
} }
...@@ -133,10 +136,34 @@ void HoldingSpaceTrayIcon::OnHoldingSpaceItemRemoved( ...@@ -133,10 +136,34 @@ void HoldingSpaceTrayIcon::OnHoldingSpaceItemRemoved(
UpdatePreferredSize(); UpdatePreferredSize();
} }
// TODO(crbug.com/1142572): Implement.
void HoldingSpaceTrayIcon::OnHoldingSpaceItemFinalized( void HoldingSpaceTrayIcon::OnHoldingSpaceItemFinalized(
const HoldingSpaceItem* item) { const HoldingSpaceItem* item) {
NOTIMPLEMENTED(); DCHECK(features::IsTemporaryHoldingSpaceContentForwardEntryPointEnabled());
if (icon_items_.empty()) {
OnHoldingSpaceItemAdded(item);
return;
}
size_t index = 0;
for (const auto& candidate :
HoldingSpaceController::Get()->model()->items()) {
if (candidate->id() == item->id())
break;
if (candidate->IsFinalized())
++index;
}
for (size_t i = 0; i < index; ++i)
icon_items_[i]->AnimateShift();
auto icon_item = std::make_unique<HoldingSpaceTrayIconItem>(this, item);
icon_items_.insert(icon_items_.begin() + index, std::move(icon_item));
// NOTE: UI ordering is inverse of model ordering so take `index` from end.
icon_items_[index]->AnimateIn(icon_items_.size() - index - 1);
UpdatePreferredSize();
} }
void HoldingSpaceTrayIcon::OnShelfAlignmentChanged( void HoldingSpaceTrayIcon::OnShelfAlignmentChanged(
......
...@@ -164,7 +164,18 @@ HoldingSpaceTrayIconItem::HoldingSpaceTrayIconItem(HoldingSpaceTrayIcon* icon, ...@@ -164,7 +164,18 @@ HoldingSpaceTrayIconItem::HoldingSpaceTrayIconItem(HoldingSpaceTrayIcon* icon,
HoldingSpaceTrayIconItem::~HoldingSpaceTrayIconItem() = default; HoldingSpaceTrayIconItem::~HoldingSpaceTrayIconItem() = default;
void HoldingSpaceTrayIconItem::AnimateIn() { void HoldingSpaceTrayIconItem::AnimateIn(size_t index) {
DCHECK(transform_.IsIdentity());
if (index > 0u) {
gfx::Vector2dF translation(index * kTrayItemSize / 2, 0);
AdjustForShelfAlignmentAndTextDirection(&translation);
transform_.Translate(translation);
}
if (!NeedsLayer())
return;
CreateLayer(); CreateLayer();
gfx::Transform pre_transform(transform_); gfx::Transform pre_transform(transform_);
...@@ -173,6 +184,12 @@ void HoldingSpaceTrayIconItem::AnimateIn() { ...@@ -173,6 +184,12 @@ void HoldingSpaceTrayIconItem::AnimateIn() {
icon_->layer()->Add(layer_.get()); icon_->layer()->Add(layer_.get());
if (index > 0u) {
ui::Layer* const parent = layer_->parent();
const std::vector<ui::Layer*> children = parent->children();
parent->StackBelow(layer_.get(), children[children.size() - index - 1]);
}
ui::ScopedLayerAnimationSettings animation_settings(layer_->GetAnimator()); ui::ScopedLayerAnimationSettings animation_settings(layer_->GetAnimator());
SetUpAnimation(&animation_settings); SetUpAnimation(&animation_settings);
......
...@@ -43,8 +43,8 @@ class ASH_EXPORT HoldingSpaceTrayIconItem ...@@ -43,8 +43,8 @@ class ASH_EXPORT HoldingSpaceTrayIconItem
HoldingSpaceTrayIconItem& operator=(const HoldingSpaceTrayIconItem&) = delete; HoldingSpaceTrayIconItem& operator=(const HoldingSpaceTrayIconItem&) = delete;
~HoldingSpaceTrayIconItem() override; ~HoldingSpaceTrayIconItem() override;
// Animates this item in. // Animates this item in at the specified `index`.
void AnimateIn(); void AnimateIn(size_t index);
// Animates this item out, invoking the specified closure on completion. // Animates this item out, invoking the specified closure on completion.
void AnimateOut(base::OnceClosure animate_out_closure); void AnimateOut(base::OnceClosure animate_out_closure);
......
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