| // 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 "athena/content/public/content_app_model_builder.h" |
| |
| #include "apps/shell/browser/shell_extension_system.h" |
| #include "athena/activity/public/activity_factory.h" |
| #include "athena/activity/public/activity_manager.h" |
| #include "extensions/browser/extension_icon_image.h" |
| #include "extensions/common/constants.h" |
| #include "extensions/common/extension.h" |
| #include "extensions/common/manifest_handlers/icons_handler.h" |
| #include "ui/app_list/app_list_item.h" |
| #include "ui/app_list/app_list_model.h" |
| |
| using extensions::ShellExtensionSystem; |
| |
| namespace athena { |
| |
| namespace { |
| |
| ShellExtensionSystem* GetShellExtensionSystem( |
| content::BrowserContext* context) { |
| return static_cast<ShellExtensionSystem*>( |
| extensions::ExtensionSystem::Get(context)); |
| } |
| |
| gfx::ImageSkia CreateFlatColorImage(SkColor color) { |
| SkBitmap bitmap; |
| bitmap.setConfig( |
| SkBitmap::kARGB_8888_Config, |
| extension_misc::EXTENSION_ICON_MEDIUM, |
| extension_misc::EXTENSION_ICON_MEDIUM); |
| bitmap.allocPixels(); |
| bitmap.eraseColor(color); |
| return gfx::ImageSkia::CreateFrom1xBitmap(bitmap); |
| } |
| |
| // Same dummy item. |
| class DummyItem : public app_list::AppListItem { |
| public: |
| DummyItem(const std::string& id, |
| const GURL& url, |
| SkColor color, |
| content::BrowserContext* browser_context) |
| : app_list::AppListItem(id), |
| url_(url), |
| browser_context_(browser_context) { |
| |
| SetIcon(CreateFlatColorImage(color), false /* has_shadow */); |
| SetName(id); |
| } |
| |
| private: |
| // Overridden from app_list::AppListItem: |
| virtual void Activate(int event_flags) OVERRIDE { |
| ActivityManager::Get()->AddActivity( |
| ActivityFactory::Get()->CreateWebActivity(browser_context_, url_)); |
| } |
| |
| GURL url_; |
| content::BrowserContext* browser_context_; |
| |
| DISALLOW_COPY_AND_ASSIGN(DummyItem); |
| }; |
| |
| class AppItem : public app_list::AppListItem { |
| public: |
| AppItem(scoped_refptr<extensions::Extension> extension, |
| content::BrowserContext* browser_context) |
| : app_list::AppListItem(extension->id()), |
| extension_(extension), |
| browser_context_(browser_context), |
| icon_image_(browser_context_, |
| extension.get(), |
| extensions::IconsInfo::GetIcons(extension.get()), |
| extension_misc::EXTENSION_ICON_MEDIUM, |
| // TODO(mukai): better default icon |
| CreateFlatColorImage(SK_ColorBLACK), |
| NULL) { |
| icon_image_.image_skia().EnsureRepsForSupportedScales(); |
| SetIcon(icon_image_.image_skia(), false); |
| SetName(extension->name()); |
| } |
| |
| private: |
| // Overridden from app_list::AppListItem: |
| virtual void Activate(int event_flags) OVERRIDE { |
| // TODO(mukai): Pass |extension_| when the extension system supports |
| // multiple extensions. |
| GetShellExtensionSystem(browser_context_)->LaunchApp(); |
| } |
| |
| scoped_refptr<extensions::Extension> extension_; |
| content::BrowserContext* browser_context_; |
| extensions::IconImage icon_image_; |
| |
| DISALLOW_COPY_AND_ASSIGN(AppItem); |
| }; |
| |
| } // namespace |
| |
| ContentAppModelBuilder::ContentAppModelBuilder( |
| content::BrowserContext* browser_context) |
| : browser_context_(browser_context) { |
| } |
| |
| ContentAppModelBuilder::~ContentAppModelBuilder() { |
| } |
| |
| void ContentAppModelBuilder::PopulateApps(app_list::AppListModel* model) { |
| model->AddItem(scoped_ptr<app_list::AppListItem>(new DummyItem( |
| "mail", GURL("http://gmail.com/"), SK_ColorRED, browser_context_))); |
| model->AddItem(scoped_ptr<app_list::AppListItem>(new DummyItem( |
| "calendar", GURL("https://calendar.google.com/"), |
| SK_ColorBLUE, browser_context_))); |
| model->AddItem(scoped_ptr<app_list::AppListItem>(new DummyItem( |
| "video", GURL("http://youtube.com/"), SK_ColorGREEN, browser_context_))); |
| model->AddItem(scoped_ptr<app_list::AppListItem>(new DummyItem( |
| "music", GURL("http://play.google.com/music"), |
| SK_ColorYELLOW, browser_context_))); |
| model->AddItem(scoped_ptr<app_list::AppListItem>(new DummyItem( |
| "contact", GURL("https://www.google.com/contacts"), |
| SK_ColorCYAN, browser_context_))); |
| |
| ShellExtensionSystem* extension_system = |
| GetShellExtensionSystem(browser_context_); |
| if (extension_system && extension_system->extension()) { |
| model->AddItem(scoped_ptr<app_list::AppListItem>( |
| new AppItem(extension_system->extension(), browser_context_))); |
| } |
| } |
| |
| } // namespace athena |