Index: athena/system/system_ui_impl.cc |
diff --git a/athena/system/system_ui_impl.cc b/athena/system/system_ui_impl.cc |
index aa65e5e7fe8666ecdcba500f0a8b6260547dde02..293bc9e9775e2e137231503c217fa9c905a25c7f 100644 |
--- a/athena/system/system_ui_impl.cc |
+++ b/athena/system/system_ui_impl.cc |
@@ -10,13 +10,23 @@ |
#include "athena/system/shutdown_dialog.h" |
#include "athena/system/status_icon_container_view.h" |
#include "athena/system/time_view.h" |
+#include "athena/util/athena_constants.h" |
#include "athena/util/container_priorities.h" |
#include "athena/util/fill_layout_manager.h" |
+#include "athena/wm/public/window_manager.h" |
+#include "athena/wm/public/window_manager_observer.h" |
#include "base/logging.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
#include "ui/aura/window.h" |
+#include "ui/compositor/scoped_layer_animation_settings.h" |
+#include "ui/gfx/animation/tween.h" |
+#include "ui/gfx/transform.h" |
#include "ui/views/view.h" |
+#include "ui/views/widget/widget.h" |
+#include "ui/views/widget/widget_observer.h" |
+#include "ui/wm/core/visibility_controller.h" |
+#include "ui/wm/core/window_animations.h" |
oshima
2014/11/12 22:38:10
nit: can you cleanup includes?
Jun Mukai
2014/11/13 01:15:49
Done.
|
namespace athena { |
namespace { |
@@ -69,15 +79,19 @@ class SystemInfoView : public views::View { |
DISALLOW_COPY_AND_ASSIGN(SystemInfoView); |
}; |
-class SystemUIImpl : public SystemUI { |
+class SystemUIImpl : public SystemUI, public WindowManagerObserver { |
public: |
SystemUIImpl(scoped_refptr<base::TaskRunner> blocking_task_runner) |
: orientation_controller_(new OrientationController()), |
- background_container_(nullptr) { |
+ background_container_(nullptr), |
+ system_info_widget_(nullptr) { |
orientation_controller_->InitWith(blocking_task_runner); |
+ WindowManager::Get()->AddObserver(this); |
} |
~SystemUIImpl() override { |
+ WindowManager::Get()->RemoveObserver(this); |
+ |
// Stops file watching now if exists. Waiting until message loop shutdon |
// leads to FilePathWatcher crash. |
orientation_controller_->Shutdown(); |
@@ -97,14 +111,50 @@ class SystemUIImpl : public SystemUI { |
private: |
// SystemUI: |
- virtual void SetBackgroundImage(const gfx::ImageSkia& image) override { |
+ void SetBackgroundImage(const gfx::ImageSkia& image) override { |
background_controller_->SetImage(image); |
} |
- virtual views::View* CreateSystemInfoView(ColorScheme color_scheme) override { |
- return new SystemInfoView(color_scheme); |
+ // WindowManagerObserver: |
+ void OnOverviewModeEnter() override { |
+ DCHECK(!system_info_widget_); |
+ |
+ ScreenManager* screen_manager = ScreenManager::Get(); |
+ aura::Window* container = screen_manager->CreateContainer( |
+ ScreenManager::ContainerParams("SystemInfo", CP_SYSTEM_INFO)); |
+ wm::SetChildWindowVisibilityChangesAnimated(container); |
+ |
+ system_info_widget_ = new views::Widget(); |
+ views::Widget::InitParams widget_params( |
+ views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
+ widget_params.parent = container; |
+ widget_params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW; |
+ widget_params.bounds = |
+ gfx::Rect(0, 0, container->bounds().width(), kSystemUIHeight); |
+ system_info_widget_->Init(widget_params); |
+ system_info_widget_->SetContentsView( |
+ new SystemInfoView(SystemUI::COLOR_SCHEME_LIGHT)); |
+ |
+ wm::SetWindowVisibilityAnimationType( |
+ system_info_widget_->GetNativeWindow(), |
+ wm::WINDOW_VISIBILITY_ANIMATION_TYPE_VERTICAL); |
+ wm::SetWindowVisibilityAnimationVerticalPosition( |
+ system_info_widget_->GetNativeWindow(), -kSystemUIHeight); |
+ |
+ system_info_widget_->Show(); |
+ } |
+ |
+ void OnOverviewModeExit() override { |
+ // Deleting the container deletes its child windows which deletes |
+ // |system_info_widget_|. |
+ delete system_info_widget_->GetNativeWindow()->parent(); |
+ system_info_widget_ = nullptr; |
} |
+ void OnSplitViewModeEnter() override {} |
+ |
+ void OnSplitViewModeExit() override {} |
+ |
scoped_ptr<OrientationController> orientation_controller_; |
scoped_ptr<ShutdownDialog> shutdown_dialog_; |
scoped_ptr<BackgroundController> background_controller_; |
@@ -112,12 +162,7 @@ class SystemUIImpl : public SystemUI { |
// The parent container for the background. |
aura::Window* background_container_; |
- // The parent container used by system modal dialogs. |
- aura::Window* system_modal_container_; |
- |
- // The parent container used by system modal dialogs when the login screen is |
- // visible. |
- aura::Window* login_screen_system_modal_container_; |
+ views::Widget* system_info_widget_; |
DISALLOW_COPY_AND_ASSIGN(SystemUIImpl); |
}; |