diff options
Diffstat (limited to 'athena/content/content_app_model_builder.cc')
-rw-r--r-- | athena/content/content_app_model_builder.cc | 57 |
1 files changed, 52 insertions, 5 deletions
diff --git a/athena/content/content_app_model_builder.cc b/athena/content/content_app_model_builder.cc index 56bad71..7fcad45 100644 --- a/athena/content/content_app_model_builder.cc +++ b/athena/content/content_app_model_builder.cc @@ -4,17 +4,35 @@ #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/common/extension.h" #include "ui/app_list/app_list_item.h" #include "ui/app_list/app_list_model.h" +using extensions::ShellExtensionSystem; + namespace athena { namespace { const int kIconSize = 64; +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, kIconSize, kIconSize); + bitmap.allocPixels(); + bitmap.eraseColor(color); + return gfx::ImageSkia::CreateFrom1xBitmap(bitmap); +} + // Same dummy item. class DummyItem : public app_list::AppListItem { public: @@ -25,11 +43,7 @@ class DummyItem : public app_list::AppListItem { id_(id), browser_context_(browser_context) { - SkBitmap bitmap; - bitmap.setConfig(SkBitmap::kARGB_8888_Config, kIconSize, kIconSize); - bitmap.allocPixels(); - bitmap.eraseColor(color); - SetIcon(gfx::ImageSkia::CreateFrom1xBitmap(bitmap), false /* has_shadow */); + SetIcon(CreateFlatColorImage(color), false /* has_shadow */); SetName(id); } @@ -47,6 +61,32 @@ class DummyItem : public app_list::AppListItem { 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) { + // TODO(mukai): componentize extension_icon_image and use it. + SetIcon(CreateFlatColorImage(SK_ColorBLACK), 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_; + + DISALLOW_COPY_AND_ASSIGN(AppItem); +}; + } // namespace ContentAppModelBuilder::ContentAppModelBuilder( @@ -68,6 +108,13 @@ void ContentAppModelBuilder::PopulateApps(app_list::AppListModel* model) { new DummyItem("music", SK_ColorYELLOW, browser_context_))); model->AddItem(scoped_ptr<app_list::AppListItem>( new DummyItem("contact", 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 |