16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "athena/home/athena_start_page_view.h"
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/home/home_card_constants.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/system/public/system_ui.h"
903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/bind.h"
1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/strings/string_util.h"
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/skia/include/core/SkPaint.h"
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "third_party/skia/include/core/SkPath.h"
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/app_list_item.h"
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/app_list_item_list.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/app_list_model.h"
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/app_list_view_delegate.h"
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/app_list/search_box_model.h"
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/views/search_box_view.h"
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/app_list/views/search_result_list_view.h"
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/compositor/closure_animation_observer.h"
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/compositor/scoped_layer_animation_settings.h"
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/gfx/canvas.h"
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/background.h"
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/border.h"
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/views/controls/textfield/textfield.h"
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/layout/box_layout.h"
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/layout/fill_layout.h"
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/round_rect_painter.h"
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace {
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const size_t kMaxIconNum = 3;
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const int kIconSize = 50;
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const int kIconMargin = 25;
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const int kTopMargin = 100;
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copied from ui/app_list/views/start_page_view.cc
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const int kInstantContainerSpacing = 20;
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const int kWebViewWidth = 500;
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)const int kWebViewHeight = 105;
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const int kSearchBoxBorderWidth = 1;
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const int kSearchBoxCornerRadius = 2;
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Taken from the mock. The width is not specified by pixel but the search box
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// covers 6 icons with margin.
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int kSearchBoxWidth = kIconSize * 6 + kIconMargin * 7;
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const int kSearchBoxHeight = 40;
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccigfx::Size GetIconContainerSize() {
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return gfx::Size(kIconSize *  kMaxIconNum + kIconMargin * (kMaxIconNum - 1),
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                   kIconSize);
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class PlaceHolderButton : public views::ImageButton,
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                          public views::ButtonListener {
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  PlaceHolderButton()
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      : ImageButton(this) {
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    gfx::Canvas canvas(gfx::Size(kIconSize, kIconSize), 1.0f, true);
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    SkPaint paint;
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    paint.setStyle(SkPaint::kFill_Style);
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    paint.setColor(SkColorSetRGB(86, 119, 252));
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    paint.setFlags(SkPaint::kAntiAlias_Flag);
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    canvas.DrawCircle(
666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        gfx::Point(kIconSize / 2, kIconSize / 2), kIconSize / 2, paint);
676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    scoped_ptr<gfx::ImageSkia> image(
696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        new gfx::ImageSkia(canvas.ExtractImageRep()));
706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    SetImage(STATE_NORMAL, image.get());
716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private:
746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // views::ButtonListener:
756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void ButtonPressed(views::Button* sender,
766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                             const ui::Event& event) OVERRIDE {
776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // Do nothing: remove these place holders.
786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PlaceHolderButton);
816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class AppIconButton : public views::ImageButton,
846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                      public views::ButtonListener {
856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  explicit AppIconButton(app_list::AppListItem* item)
876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      : ImageButton(this),
886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        item_(item) {
896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // TODO(mukai): icon should be resized.
906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    SetImage(STATE_NORMAL, &item->icon());
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private:
946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // views::ButtonListener:
956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void ButtonPressed(views::Button* sender,
966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                             const ui::Event& event) OVERRIDE {
976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    DCHECK_EQ(sender, this);
986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    item_->Activate(event.flags());
996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  app_list::AppListItem* item_;
1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppIconButton);
1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// The background to paint the round rectangle of the view area.
1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class RoundRectBackground : public views::Background {
1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  RoundRectBackground(SkColor color, int corner_radius)
1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      : color_(color),
1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        corner_radius_(corner_radius) {}
1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~RoundRectBackground() {}
1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private:
1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // views::Background:
1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void Paint(gfx::Canvas* canvas, views::View* view) const OVERRIDE {
1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    SkPaint paint;
1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    paint.setStyle(SkPaint::kFill_Style);
1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    paint.setColor(color_);
1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    canvas->DrawRoundRect(view->GetContentsBounds(), corner_radius_, paint);
1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SkColor color_;
1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  int corner_radius_;
1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RoundRectBackground);
1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SearchBoxContainer : public views::View {
1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  explicit SearchBoxContainer(app_list::SearchBoxView* search_box)
1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      : search_box_(search_box) {
1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    search_box->set_background(
1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        new RoundRectBackground(SK_ColorWHITE, kSearchBoxCornerRadius));
1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    search_box->SetBorder(views::Border::CreateBorderPainter(
1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        new views::RoundRectPainter(SK_ColorGRAY, kSearchBoxCornerRadius),
1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        gfx::Insets(kSearchBoxBorderWidth, kSearchBoxBorderWidth,
1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                    kSearchBoxBorderWidth, kSearchBoxBorderWidth)));
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    SetLayoutManager(new views::FillLayout());
1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    AddChildView(search_box_);
1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~SearchBoxContainer() {}
1436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private:
1456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // views::View:
1466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual gfx::Size GetPreferredSize() const OVERRIDE {
1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return gfx::Size(kSearchBoxWidth, kSearchBoxHeight);
1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Owned by the views hierarchy.
1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  app_list::SearchBoxView* search_box_;
1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SearchBoxContainer);
1546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
1556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace
1576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace athena {
1596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char AthenaStartPageView::kViewClassName[] = "AthenaStartPageView";
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAthenaStartPageView::LayoutData::LayoutData()
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : system_info_opacity(1.0f),
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      logo_opacity(1.0f),
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      background_opacity(1.0f) {
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)AthenaStartPageView::AthenaStartPageView(
17003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    app_list::AppListViewDelegate* view_delegate)
17103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    : delegate_(view_delegate),
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      layout_state_(0.0f),
17303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      weak_factory_(this) {
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  background_ = new views::View();
1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  background_->set_background(
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      views::Background::CreateSolidBackground(SK_ColorWHITE));
1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  background_->SetPaintToLayer(true);
1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  background_->SetFillsBoundsOpaquely(false);
1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AddChildView(background_);
1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  system_info_view_ =
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      SystemUI::Get()->CreateSystemInfoView(SystemUI::COLOR_SCHEME_DARK);
1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  system_info_view_->SetPaintToLayer(true);
1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  system_info_view_->SetFillsBoundsOpaquely(false);
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AddChildView(system_info_view_);
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
18703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  logo_ = view_delegate->CreateStartPageWebView(
18803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      gfx::Size(kWebViewWidth, kWebViewHeight));
18903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  logo_->SetPaintToLayer(true);
1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  logo_->SetFillsBoundsOpaquely(false);
1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  logo_->SetSize(gfx::Size(kWebViewWidth, kWebViewHeight));
19203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  AddChildView(logo_);
19303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
19403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  search_results_view_ = new app_list::SearchResultListView(
19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      NULL, view_delegate);
19603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // search_results_view_'s size will shrink after settings results.
19703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  search_results_height_ = static_cast<views::View*>(
19803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_results_view_)->GetHeightForWidth(kSearchBoxWidth);
19903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  search_results_view_->SetResults(view_delegate->GetModel()->results());
20003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
20103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  search_results_view_->SetVisible(false);
20203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  search_results_view_->SetPaintToLayer(true);
20303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  search_results_view_->SetFillsBoundsOpaquely(false);
20403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  AddChildView(search_results_view_);
20503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
20603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  app_icon_container_ = new views::View();
20703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  AddChildView(app_icon_container_);
20803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  app_icon_container_->SetPaintToLayer(true);
20903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  app_icon_container_->layer()->SetFillsBoundsOpaquely(false);
21003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  app_icon_container_->SetLayoutManager(new views::BoxLayout(
21103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      views::BoxLayout::kHorizontal, 0, 0, kIconMargin));
2126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  app_list::AppListItemList* top_level =
2136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      view_delegate->GetModel()->top_level_item_list();
2146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  for (size_t i = 0; i < std::min(top_level->item_count(), kMaxIconNum); ++i)
21503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    app_icon_container_->AddChildView(new AppIconButton(top_level->item_at(i)));
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  app_icon_container_->SetSize(GetIconContainerSize());
21703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
21803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  control_icon_container_ = new views::View();
21903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  control_icon_container_->SetPaintToLayer(true);
22003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  control_icon_container_->SetFillsBoundsOpaquely(false);
22103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  AddChildView(control_icon_container_);
22203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  control_icon_container_->SetLayoutManager(new views::BoxLayout(
22303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      views::BoxLayout::kHorizontal, 0, 0, kIconMargin));
22403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  for (size_t i = 0; i < kMaxIconNum; ++i)
22503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    control_icon_container_->AddChildView(new PlaceHolderButton());
2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  control_icon_container_->SetSize(GetIconContainerSize());
2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  search_box_view_ = new app_list::SearchBoxView(this, view_delegate);
2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  search_box_view_->set_contents_view(this);
2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  search_box_view_->search_box()->set_id(kHomeCardSearchBoxId);
2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  search_box_container_ = new SearchBoxContainer(search_box_view_);
2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  search_box_container_->SetPaintToLayer(true);
2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  search_box_container_->SetFillsBoundsOpaquely(false);
2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  search_box_container_->SetSize(search_box_container_->GetPreferredSize());
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AddChildView(search_box_container_);
23603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
2376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
23803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)AthenaStartPageView::~AthenaStartPageView() {}
2396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
24003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void AthenaStartPageView::RequestFocusOnSearchBox() {
24103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  search_box_view_->search_box()->RequestFocus();
24203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
24303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid AthenaStartPageView::SetLayoutState(float layout_state) {
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  layout_state_ = layout_state;
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Layout();
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid AthenaStartPageView::SetLayoutStateWithAnimation(
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    float layout_state,
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    gfx::Tween::Type tween_type) {
2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ui::ScopedLayerAnimationSettings system_info(
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      system_info_view_->layer()->GetAnimator());
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ui::ScopedLayerAnimationSettings logo(logo_->layer()->GetAnimator());
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ui::ScopedLayerAnimationSettings search_box(
2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      search_box_container_->layer()->GetAnimator());
2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ui::ScopedLayerAnimationSettings icons(
2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      app_icon_container_->layer()->GetAnimator());
2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ui::ScopedLayerAnimationSettings controls(
2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      control_icon_container_->layer()->GetAnimator());
2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  system_info.SetTweenType(tween_type);
2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  logo.SetTweenType(tween_type);
2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  search_box.SetTweenType(tween_type);
2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  icons.SetTweenType(tween_type);
2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  controls.SetTweenType(tween_type);
2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SetLayoutState(layout_state);
2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAthenaStartPageView::LayoutData AthenaStartPageView::CreateBottomBounds(
2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    int width) {
2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  LayoutData state;
2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.icons.set_size(app_icon_container_->size());
2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.icons.set_x(kIconMargin);
2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.icons.set_y(kIconMargin);
2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.controls.set_size(control_icon_container_->size());
2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.controls.set_x(width - kIconMargin - state.controls.width());
2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.controls.set_y(kIconMargin);
2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int search_box_max_width =
2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      state.controls.x() - state.icons.right() - kIconMargin * 2;
2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.search_box.set_width(std::min(search_box_max_width, kSearchBoxWidth));
2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.search_box.set_height(search_box_container_->height());
2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.search_box.set_x((width - state.search_box.width()) / 2);
2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.search_box.set_y((kHomeCardHeight - state.search_box.height()) / 2);
2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.system_info_opacity = 0.0f;
2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.logo_opacity = 0.0f;
2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.background_opacity = 0.9f;
2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return state;
2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAthenaStartPageView::LayoutData AthenaStartPageView::CreateCenteredBounds(
2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    int width) {
2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  LayoutData state;
2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.search_box.set_size(search_box_container_->GetPreferredSize());
3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.search_box.set_x((width - state.search_box.width()) / 2);
3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.search_box.set_y(logo_->bounds().bottom() + kInstantContainerSpacing);
3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.icons.set_size(app_icon_container_->size());
3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.icons.set_x(width / 2 - state.icons.width() - kIconMargin / 2);
3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.icons.set_y(state.search_box.bottom() + kInstantContainerSpacing);
3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.controls.set_size(control_icon_container_->size());
3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.controls.set_x(width / 2 + kIconMargin / 2 + kIconMargin % 2);
3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.controls.set_y(state.icons.y());
3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.system_info_opacity = 1.0f;
3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.logo_opacity = 1.0f;
3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state.background_opacity = 1.0f;
3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return state;
3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
31703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void AthenaStartPageView::LayoutSearchResults(bool should_show_search_results) {
31803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (should_show_search_results ==
31903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_results_view_->layer()->GetTargetVisibility()) {
32003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return;
32103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if (GetContentsBounds().height() <= kHomeCardHeight) {
32303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    search_results_view_->SetVisible(false);
32403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    Layout();
32503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return;
32603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
3276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
32803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  gfx::Rect search_box_bounds = search_box_container_->bounds();
32903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (!search_results_view_->visible()) {
33003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    search_results_view_->SetVisible(true);
33103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    search_results_view_->SetBounds(
33203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        search_box_bounds.x(), search_box_bounds.bottom(),
33303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        search_box_bounds.width(), 0);
33403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
33503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  logo_->SetVisible(true);
33603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
33703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  {
33803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    ui::ScopedLayerAnimationSettings logo_settings(
33903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        logo_->layer()->GetAnimator());
34003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    logo_settings.SetTweenType(gfx::Tween::EASE_IN_OUT);
34103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    logo_settings.AddObserver(new ui::ClosureAnimationObserver(
34203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        base::Bind(&AthenaStartPageView::OnSearchResultLayoutAnimationCompleted,
34303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   weak_factory_.GetWeakPtr(),
34403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   should_show_search_results)));
34503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
34603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    ui::ScopedLayerAnimationSettings search_box_settings(
34703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        search_box_container_->layer()->GetAnimator());
34803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    search_box_settings.SetTweenType(gfx::Tween::EASE_IN_OUT);
34903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
35003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    ui::ScopedLayerAnimationSettings search_results_settings(
35103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        search_results_view_->layer()->GetAnimator());
35203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    search_results_settings.SetTweenType(gfx::Tween::EASE_IN_OUT);
35303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
35403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    if (should_show_search_results) {
35503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      logo_->layer()->SetOpacity(0.0f);
35603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_box_bounds.set_y(
35703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)          search_box_bounds.y() - search_results_height_ -
35803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)          kInstantContainerSpacing);
35903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_box_container_->SetBoundsRect(search_box_bounds);
36003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_results_view_->SetBounds(
36103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)          search_box_bounds.x(),
36203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)          search_box_bounds.bottom() + kInstantContainerSpacing,
36303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)          search_box_bounds.width(),
36403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)          search_results_height_);
36503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    } else {
36603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      logo_->layer()->SetOpacity(1.0f);
36703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_box_bounds.set_y(
36803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)          logo_->bounds().bottom() + kInstantContainerSpacing);
36903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_box_container_->SetBoundsRect(search_box_bounds);
37003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
37103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      gfx::Rect search_results_bounds = search_results_view_->bounds();
37203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_results_bounds.set_y(search_results_bounds.bottom());
37303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_results_bounds.set_height(0);
37403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_results_view_->SetBoundsRect(search_results_bounds);
37503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    }
37603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
3776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
3786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
37903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)void AthenaStartPageView::OnSearchResultLayoutAnimationCompleted(
38003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    bool should_show_search_results) {
38103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  logo_->SetVisible(!should_show_search_results);
38203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  search_results_view_->SetVisible(should_show_search_results);
38303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
3846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
3856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void AthenaStartPageView::Layout() {
38603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  search_results_view_->SetVisible(false);
38703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  system_info_view_->SetBounds(
3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      0, 0, width(), system_info_view_->GetPreferredSize().height());
3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gfx::Rect logo_bounds(x() + width() / 2 - kWebViewWidth / 2, y() + kTopMargin,
3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                        kWebViewWidth, kWebViewHeight);
3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  logo_->SetBoundsRect(logo_bounds);
3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  LayoutData bottom_bounds = CreateBottomBounds(width());
3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  LayoutData centered_bounds = CreateCenteredBounds(width());
3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  system_info_view_->layer()->SetOpacity(gfx::Tween::FloatValueBetween(
3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      gfx::Tween::CalculateValue(gfx::Tween::EASE_IN_2, layout_state_),
4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      bottom_bounds.system_info_opacity, centered_bounds.system_info_opacity));
4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  system_info_view_->SetVisible(
4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      system_info_view_->layer()->GetTargetOpacity() != 0.0f);
4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  logo_->layer()->SetOpacity(gfx::Tween::FloatValueBetween(
4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      gfx::Tween::CalculateValue(gfx::Tween::EASE_IN_2, layout_state_),
4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      bottom_bounds.logo_opacity, centered_bounds.logo_opacity));
4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  logo_->SetVisible(logo_->layer()->GetTargetOpacity() != 0.0f);
4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  app_icon_container_->SetBoundsRect(gfx::Tween::RectValueBetween(
4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      layout_state_, bottom_bounds.icons, centered_bounds.icons));
4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  control_icon_container_->SetBoundsRect(gfx::Tween::RectValueBetween(
4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      layout_state_, bottom_bounds.controls, centered_bounds.controls));
4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  search_box_container_->SetBoundsRect(gfx::Tween::RectValueBetween(
4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      layout_state_, bottom_bounds.search_box, centered_bounds.search_box));
4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  background_->SetBoundsRect(bounds());
4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  background_->layer()->SetOpacity(gfx::Tween::FloatValueBetween(
4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      layout_state_,
4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      bottom_bounds.background_opacity,
4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      centered_bounds.background_opacity));
42103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
42203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
42303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)bool AthenaStartPageView::OnKeyPressed(const ui::KeyEvent& key_event) {
42403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return search_results_view_->visible() &&
42503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      search_results_view_->OnKeyPressed(key_event);
4266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)void AthenaStartPageView::QueryChanged(app_list::SearchBoxView* sender) {
42903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  delegate_->StartSearch();
43003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
43103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  base::string16 query;
43203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  base::TrimWhitespace(
43303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      delegate_->GetModel()->search_box()->text(), base::TRIM_ALL, &query);
43403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
43503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (!query.empty())
43603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    search_results_view_->SetSelectedIndex(0);
43703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
43803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  LayoutSearchResults(!query.empty());
4396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
4406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace athena
442