1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "athena/content/public/content_app_model_builder.h" 6 7 #include "apps/shell/browser/shell_extension_system.h" 8 #include "athena/activity/public/activity_factory.h" 9 #include "athena/activity/public/activity_manager.h" 10 #include "extensions/browser/extension_icon_image.h" 11 #include "extensions/common/constants.h" 12 #include "extensions/common/extension.h" 13 #include "extensions/common/manifest_handlers/icons_handler.h" 14 #include "ui/app_list/app_list_item.h" 15 #include "ui/app_list/app_list_model.h" 16 17 using extensions::ShellExtensionSystem; 18 19 namespace athena { 20 21 namespace { 22 23 ShellExtensionSystem* GetShellExtensionSystem( 24 content::BrowserContext* context) { 25 return static_cast<ShellExtensionSystem*>( 26 extensions::ExtensionSystem::Get(context)); 27 } 28 29 gfx::ImageSkia CreateFlatColorImage(SkColor color) { 30 SkBitmap bitmap; 31 bitmap.setConfig( 32 SkBitmap::kARGB_8888_Config, 33 extension_misc::EXTENSION_ICON_MEDIUM, 34 extension_misc::EXTENSION_ICON_MEDIUM); 35 bitmap.allocPixels(); 36 bitmap.eraseColor(color); 37 return gfx::ImageSkia::CreateFrom1xBitmap(bitmap); 38 } 39 40 // Same dummy item. 41 class DummyItem : public app_list::AppListItem { 42 public: 43 DummyItem(const std::string& id, 44 const GURL& url, 45 SkColor color, 46 content::BrowserContext* browser_context) 47 : app_list::AppListItem(id), 48 url_(url), 49 browser_context_(browser_context) { 50 51 SetIcon(CreateFlatColorImage(color), false /* has_shadow */); 52 SetName(id); 53 } 54 55 private: 56 // Overridden from app_list::AppListItem: 57 virtual void Activate(int event_flags) OVERRIDE { 58 ActivityManager::Get()->AddActivity( 59 ActivityFactory::Get()->CreateWebActivity(browser_context_, url_)); 60 } 61 62 GURL url_; 63 content::BrowserContext* browser_context_; 64 65 DISALLOW_COPY_AND_ASSIGN(DummyItem); 66 }; 67 68 class AppItem : public app_list::AppListItem { 69 public: 70 AppItem(scoped_refptr<extensions::Extension> extension, 71 content::BrowserContext* browser_context) 72 : app_list::AppListItem(extension->id()), 73 extension_(extension), 74 browser_context_(browser_context), 75 icon_image_(browser_context_, 76 extension.get(), 77 extensions::IconsInfo::GetIcons(extension.get()), 78 extension_misc::EXTENSION_ICON_MEDIUM, 79 // TODO(mukai): better default icon 80 CreateFlatColorImage(SK_ColorBLACK), 81 NULL) { 82 icon_image_.image_skia().EnsureRepsForSupportedScales(); 83 SetIcon(icon_image_.image_skia(), false); 84 SetName(extension->name()); 85 } 86 87 private: 88 // Overridden from app_list::AppListItem: 89 virtual void Activate(int event_flags) OVERRIDE { 90 // TODO(mukai): Pass |extension_| when the extension system supports 91 // multiple extensions. 92 GetShellExtensionSystem(browser_context_)->LaunchApp(); 93 } 94 95 scoped_refptr<extensions::Extension> extension_; 96 content::BrowserContext* browser_context_; 97 extensions::IconImage icon_image_; 98 99 DISALLOW_COPY_AND_ASSIGN(AppItem); 100 }; 101 102 } // namespace 103 104 ContentAppModelBuilder::ContentAppModelBuilder( 105 content::BrowserContext* browser_context) 106 : browser_context_(browser_context) { 107 } 108 109 ContentAppModelBuilder::~ContentAppModelBuilder() { 110 } 111 112 void ContentAppModelBuilder::PopulateApps(app_list::AppListModel* model) { 113 model->AddItem(scoped_ptr<app_list::AppListItem>(new DummyItem( 114 "mail", GURL("http://gmail.com/"), SK_ColorRED, browser_context_))); 115 model->AddItem(scoped_ptr<app_list::AppListItem>(new DummyItem( 116 "calendar", GURL("https://calendar.google.com/"), 117 SK_ColorBLUE, browser_context_))); 118 model->AddItem(scoped_ptr<app_list::AppListItem>(new DummyItem( 119 "video", GURL("http://youtube.com/"), SK_ColorGREEN, browser_context_))); 120 model->AddItem(scoped_ptr<app_list::AppListItem>(new DummyItem( 121 "music", GURL("http://play.google.com/music"), 122 SK_ColorYELLOW, browser_context_))); 123 model->AddItem(scoped_ptr<app_list::AppListItem>(new DummyItem( 124 "contact", GURL("https://www.google.com/contacts"), 125 SK_ColorCYAN, browser_context_))); 126 127 ShellExtensionSystem* extension_system = 128 GetShellExtensionSystem(browser_context_); 129 if (extension_system && extension_system->extension()) { 130 model->AddItem(scoped_ptr<app_list::AppListItem>( 131 new AppItem(extension_system->extension(), browser_context_))); 132 } 133 } 134 135 } // namespace athena 136