// 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