Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(424)

Unified Diff: chrome/browser/ui/app_list/launcher_page_event_dispatcher_views.cc

Issue 683703002: Notify launcher page with onTransitionChanged event (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@launcher_page_api_show_state_notify
Patch Set: nullptr like it's 1999 Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/app_list/launcher_page_event_dispatcher_views.cc
diff --git a/chrome/browser/ui/app_list/launcher_page_event_dispatcher_views.cc b/chrome/browser/ui/app_list/launcher_page_event_dispatcher_views.cc
new file mode 100644
index 0000000000000000000000000000000000000000..94815cb6e66ba464a3a50e9d84662bd6de005528
--- /dev/null
+++ b/chrome/browser/ui/app_list/launcher_page_event_dispatcher_views.cc
@@ -0,0 +1,104 @@
+// Copyright 2014 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 "chrome/browser/ui/app_list/launcher_page_event_dispatcher_views.h"
+
+#include "ash/shell.h"
+#include "base/basictypes.h"
+#include "base/values.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/app_list/app_list_service.h"
+#include "chrome/browser/ui/app_list/app_list_service_views.h"
+#include "chrome/common/extensions/api/launcher_page_private.h"
+#include "extensions/browser/event_router.h"
+#include "ui/app_list/app_list_model.h"
+#include "ui/app_list/pagination_model.h"
+#include "ui/app_list/views/app_list_view.h"
+#include "ui/app_list/views/contents_view.h"
+
+namespace OnTransitionChanged =
+ extensions::api::launcher_page_private::OnTransitionChanged;
+
+namespace app_list {
+
+LauncherPageEventDispatcherViews::LauncherPageEventDispatcherViews(
+ chrome::HostDesktopType host_desktop,
+ Profile* profile,
+ const std::string& extension_id)
+ : profile_(profile), extension_id_(extension_id), main_view_(nullptr) {
+ AppListView* app_list_view = nullptr;
+ if (host_desktop == chrome::HOST_DESKTOP_TYPE_ASH) {
+ app_list_view = ash::Shell::GetInstance()->GetAppListView();
tapted 2014/11/03 00:31:20 ash::Shell shouldn't be used here - Mac will need
calamity 2014/11/06 02:36:31 Done.
+ } else {
+ AppListServiceViews* service =
+ static_cast<AppListServiceViews*>(AppListService::Get(host_desktop));
+ app_list_view = service->shower().app_list();
+ }
+ CHECK(app_list_view);
+ main_view_ = app_list_view->app_list_main_view();
+ main_view_->AddObserver(this);
+ main_view_->contents_view()->pagination_model()->AddObserver(this);
Matt Giuca 2014/11/03 00:57:41 It might be worth adding a note here about why all
calamity 2014/11/06 02:36:31 Code is gone.
+}
+
+LauncherPageEventDispatcherViews::~LauncherPageEventDispatcherViews() {
+ main_view_->RemoveObserver(this);
+ main_view_->contents_view()->pagination_model()->RemoveObserver(this);
Matt Giuca 2014/11/03 00:57:41 Should there be null checks on contents_view() eve
calamity 2014/11/06 02:36:31 Code is gone.
+}
+
+void LauncherPageEventDispatcherViews::SendEventToLauncherPage(
+ const std::string& event_name,
+ scoped_ptr<base::ListValue> args) {
+ scoped_ptr<extensions::Event> event(
+ new extensions::Event(event_name, args.Pass()));
+ extensions::EventRouter::Get(profile_)
+ ->DispatchEventToExtension(extension_id_, event.Pass());
+}
+
+void LauncherPageEventDispatcherViews::SelectedPageChanged(int old_selected,
+ int new_selected) {
+ ContentsView* contents_view = main_view_->contents_view();
+ if (contents_view->GetStateForPageIndex(old_selected) ==
+ AppListModel::STATE_CUSTOM_LAUNCHER_PAGE) {
+ SendEventToLauncherPage(OnTransitionChanged::kEventName,
+ OnTransitionChanged::Create(0));
+ } else if (contents_view->GetStateForPageIndex(new_selected) ==
+ AppListModel::STATE_CUSTOM_LAUNCHER_PAGE) {
+ SendEventToLauncherPage(OnTransitionChanged::kEventName,
+ OnTransitionChanged::Create(1));
+ }
+}
+
+void LauncherPageEventDispatcherViews::TransitionStarted() {
+}
+
+void LauncherPageEventDispatcherViews::TransitionChanged() {
+ ContentsView* contents_view = main_view_->contents_view();
Matt Giuca 2014/11/03 00:57:42 Null check here? (Maybe not necessary as in the de
calamity 2014/11/06 02:36:31 Code is gone.
+ PaginationModel* pagination_model = contents_view->pagination_model();
+ const PaginationModel::Transition& transition =
+ pagination_model->transition();
+ app_list::AppListModel::State old_state =
+ contents_view->GetStateForPageIndex(pagination_model->selected_page());
+ app_list::AppListModel::State new_state =
+ contents_view->GetStateForPageIndex(transition.target_page);
+ double progress = 0;
+ if (old_state == AppListModel::STATE_CUSTOM_LAUNCHER_PAGE)
+ progress = 1 - transition.progress;
+ else if (new_state == AppListModel::STATE_CUSTOM_LAUNCHER_PAGE)
+ progress = transition.progress;
+ else
+ return;
+
+ SendEventToLauncherPage(OnTransitionChanged::kEventName,
+ OnTransitionChanged::Create(progress));
+}
+
+void LauncherPageEventDispatcherViews::OnContentsViewCreated() {
+ main_view_->contents_view()->pagination_model()->AddObserver(this);
+}
+
+void LauncherPageEventDispatcherViews::OnContentsViewDestroying() {
+ main_view_->contents_view()->pagination_model()->RemoveObserver(this);
+}
+
+} // namespace app_list

Powered by Google App Engine
This is Rietveld 408576698