Home | History | Annotate | Download | only in home
      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/home/app_list_view_delegate.h"
      6 
      7 #include <string>
      8 #include <vector>
      9 
     10 #include "athena/home/public/app_model_builder.h"
     11 #include "athena/strings/grit/athena_strings.h"
     12 #include "base/basictypes.h"
     13 #include "base/bind.h"
     14 #include "base/callback.h"
     15 #include "base/files/file_path.h"
     16 #include "third_party/skia/include/core/SkBitmap.h"
     17 #include "ui/app_list/app_list_model.h"
     18 #include "ui/app_list/search_box_model.h"
     19 #include "ui/app_list/search_provider.h"
     20 #include "ui/app_list/search_result.h"
     21 #include "ui/app_list/speech_ui_model.h"
     22 #include "ui/base/l10n/l10n_util.h"
     23 #include "ui/base/resource/resource_bundle.h"
     24 #include "ui/gfx/image/image_skia.h"
     25 #include "ui/resources/grit/ui_resources.h"
     26 #include "ui/views/controls/image_view.h"
     27 
     28 namespace athena {
     29 
     30 AppListViewDelegate::AppListViewDelegate(AppModelBuilder* model_builder)
     31     : model_(new app_list::AppListModel),
     32       speech_ui_(new app_list::SpeechUIModel) {
     33   model_builder->PopulateApps(model_.get());
     34   model_->search_box()->SetHintText(
     35       l10n_util::GetStringUTF16(IDS_ATHENA_SEARCH_BOX_HINT));
     36 }
     37 
     38 AppListViewDelegate::~AppListViewDelegate() {
     39   for (size_t i = 0; i < search_providers_.size(); ++i)
     40     search_providers_[i]->set_result_changed_callback(base::Closure());
     41 }
     42 
     43 void AppListViewDelegate::RegisterSearchProvider(
     44     app_list::SearchProvider* search_provider) {
     45   // Right now we allow only one provider.
     46   // TODO(mukai): port app-list's mixer and remove this restriction.
     47   DCHECK(search_providers_.empty());
     48   search_provider->set_result_changed_callback(base::Bind(
     49       &AppListViewDelegate::SearchResultChanged, base::Unretained(this)));
     50   search_providers_.push_back(search_provider);
     51 }
     52 
     53 void AppListViewDelegate::SearchResultChanged() {
     54   // TODO(mukai): port app-list's Mixer to reorder the results properly.
     55   app_list::SearchProvider* search_provider = search_providers_[0];
     56   std::vector<app_list::SearchResult*> results;
     57   search_provider->ReleaseResult(&results);
     58   if (results.empty()) {
     59     model_->results()->DeleteAll();
     60   } else {
     61     for (size_t i = 0; i < results.size(); ++i)
     62       model_->results()->Add(results[i]);
     63   }
     64 }
     65 
     66 bool AppListViewDelegate::ForceNativeDesktop() const {
     67   return false;
     68 }
     69 
     70 void AppListViewDelegate::SetProfileByPath(const base::FilePath& profile_path) {
     71   // Nothing needs to be done.
     72 }
     73 
     74 app_list::AppListModel* AppListViewDelegate::GetModel() {
     75   return model_.get();
     76 }
     77 
     78 app_list::SpeechUIModel* AppListViewDelegate::GetSpeechUI() {
     79   return speech_ui_.get();
     80 }
     81 
     82 void AppListViewDelegate::GetShortcutPathForApp(
     83     const std::string& app_id,
     84     const base::Callback<void(const base::FilePath&)>& callback) {
     85   // Windows only, nothing is necessary.
     86 }
     87 
     88 void AppListViewDelegate::StartSearch() {
     89   for (size_t i = 0; i < search_providers_.size(); ++i)
     90     search_providers_[i]->Start(model_->search_box()->text());
     91 }
     92 
     93 void AppListViewDelegate::StopSearch() {
     94   for (size_t i = 0; i < search_providers_.size(); ++i)
     95     search_providers_[i]->Stop();
     96 }
     97 
     98 void AppListViewDelegate::OpenSearchResult(app_list::SearchResult* result,
     99                                            bool auto_launch,
    100                                            int event_flags) {
    101   result->Open(event_flags);
    102 }
    103 
    104 void AppListViewDelegate::InvokeSearchResultAction(
    105     app_list::SearchResult* result,
    106     int action_index,
    107     int event_flags) {
    108   // TODO(mukai): implement this.
    109 }
    110 
    111 base::TimeDelta AppListViewDelegate::GetAutoLaunchTimeout() {
    112   // Used by voice search, nothing needs to be done for now.
    113   return base::TimeDelta();
    114 }
    115 
    116 void AppListViewDelegate::AutoLaunchCanceled() {
    117   // Used by voice search, nothing needs to be done for now.
    118 }
    119 
    120 void AppListViewDelegate::ViewInitialized() {
    121   // Nothing needs to be done.
    122 }
    123 
    124 void AppListViewDelegate::Dismiss() {
    125   // Nothing needs to be done.
    126 }
    127 
    128 void AppListViewDelegate::ViewClosing() {
    129   // Nothing needs to be done.
    130 }
    131 
    132 gfx::ImageSkia AppListViewDelegate::GetWindowIcon() {
    133   return gfx::ImageSkia();
    134 }
    135 
    136 void AppListViewDelegate::OpenSettings() {
    137   // Nothing needs to be done for now.
    138   // TODO(mukai): should invoke the settings app.
    139 }
    140 
    141 void AppListViewDelegate::OpenHelp() {
    142   // Nothing needs to be done for now.
    143   // TODO(mukai): should invoke the help app.
    144 }
    145 
    146 void AppListViewDelegate::OpenFeedback() {
    147   // Nothing needs to be done for now.
    148   // TODO(mukai): should invoke the feedback app.
    149 }
    150 
    151 void AppListViewDelegate::ToggleSpeechRecognition() {
    152   // Nothing needs to be done.
    153 }
    154 
    155 void AppListViewDelegate::ShowForProfileByPath(
    156     const base::FilePath& profile_path) {
    157   // Nothing needs to be done.
    158 }
    159 
    160 views::View* AppListViewDelegate::CreateStartPageWebView(
    161     const gfx::Size& size) {
    162   // A static image of the logo. This needs to support dynamic Doodles
    163   // eventually.
    164   views::ImageView* logo_image = new views::ImageView();
    165   logo_image->SetImage(ui::ResourceBundle::GetSharedInstance().
    166                        GetImageSkiaNamed(IDR_LOCAL_NTP_IMAGES_LOGO_PNG));
    167   logo_image->SetHorizontalAlignment(views::ImageView::CENTER);
    168   logo_image->SetVerticalAlignment(views::ImageView::CENTER);
    169   return logo_image;
    170 }
    171 
    172 std::vector<views::View*> AppListViewDelegate::CreateCustomPageWebViews(
    173     const gfx::Size& size) {
    174   return std::vector<views::View*>();
    175 }
    176 
    177 bool AppListViewDelegate::IsSpeechRecognitionEnabled() {
    178   return false;
    179 }
    180 
    181 const app_list::AppListViewDelegate::Users&
    182 AppListViewDelegate::GetUsers() const {
    183   return users_;
    184 }
    185 
    186 bool AppListViewDelegate::ShouldCenterWindow() const {
    187   return true;
    188 }
    189 
    190 }  // namespace athena
    191