• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
GetShellExtensionSystem(content::BrowserContext * context)23 ShellExtensionSystem* GetShellExtensionSystem(
24     content::BrowserContext* context) {
25   return static_cast<ShellExtensionSystem*>(
26       extensions::ExtensionSystem::Get(context));
27 }
28 
CreateFlatColorImage(SkColor color)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:
DummyItem(const std::string & id,const GURL & url,SkColor color,content::BrowserContext * browser_context)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:
Activate(int event_flags)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:
AppItem(scoped_refptr<extensions::Extension> extension,content::BrowserContext * browser_context)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:
Activate(int event_flags)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 
ContentAppModelBuilder(content::BrowserContext * browser_context)104 ContentAppModelBuilder::ContentAppModelBuilder(
105     content::BrowserContext* browser_context)
106     : browser_context_(browser_context) {
107 }
108 
~ContentAppModelBuilder()109 ContentAppModelBuilder::~ContentAppModelBuilder() {
110 }
111 
PopulateApps(app_list::AppListModel * model)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