1// Copyright 2013 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/**
6 * @fileoverview App launcher start page implementation.
7 */
8
9<include src="recommended_apps.js">
10<include src="speech_manager.js">
11
12cr.define('appList.startPage', function() {
13  'use strict';
14
15  var speechManager = null;
16
17  /**
18   * Creates a StartPage object.
19   * @constructor
20   * @extends {HTMLDivElement}
21   */
22  var StartPage = cr.ui.define('div');
23
24  StartPage.prototype = {
25    __proto__: HTMLDivElement.prototype,
26
27    /**
28     * Instance of the recommended apps card.
29     * @type {appsList.startPage.RecommendedApps}
30     * @private
31     */
32    recommendedApps_: null,
33
34    /** @override */
35    decorate: function() {
36      this.recommendedApps_ = new appList.startPage.RecommendedApps();
37      this.appendChild(this.recommendedApps_);
38    },
39
40    /**
41     * Sets the recommended apps.
42     * @param {!Array.<!{appId: string,
43     *                   iconUrl: string,
44     *                   textTitle: string}>} apps An array of app info
45     *     dictionary to be displayed in the AppItemView.
46     */
47    setRecommendedApps: function(apps) {
48      this.recommendedApps_.setApps(apps);
49    }
50  };
51
52  /**
53   * Initialize the page.
54   */
55  function initialize() {
56    StartPage.decorate($('start-page'));
57    speechManager = new speech.SpeechManager();
58    chrome.send('initialize');
59  }
60
61  /**
62   * Sets the recommended apps.
63   * @param {Array.<Object>} apps An array of app info dictionary.
64   */
65  function setRecommendedApps(apps) {
66    $('start-page').setRecommendedApps(apps);
67  }
68
69  /**
70   * Invoked when the hotword plugin availability is changed.
71   *
72   * @param {boolean} enabled Whether the plugin is enabled or not.
73   */
74  function setHotwordEnabled(enabled) {
75    speechManager.setHotwordEnabled(enabled);
76  }
77
78  /**
79   * Sets the architecture of NaCl module to be loaded for hotword.
80   * @param {string} arch The architecture.
81   */
82  function setNaclArch(arch) {
83    speechManager.setNaclArch(arch);
84  }
85
86  /**
87   * Invoked when the app-list bubble is shown.
88   *
89   * @param {boolean} hotwordEnabled Whether the hotword is enabled or not.
90   */
91  function onAppListShown(hotwordEnabled) {
92    speechManager.onShown(hotwordEnabled);
93  }
94
95  /**
96   * Invoked when the app-list bubble is hidden.
97   */
98  function onAppListHidden() {
99    speechManager.onHidden();
100  }
101
102  /**
103   * Invoked when the user explicitly wants to toggle the speech recognition
104   * state.
105   */
106  function toggleSpeechRecognition() {
107    speechManager.toggleSpeechRecognition();
108  }
109
110  return {
111    initialize: initialize,
112    setRecommendedApps: setRecommendedApps,
113    setHotwordEnabled: setHotwordEnabled,
114    setNaclArch: setNaclArch,
115    onAppListShown: onAppListShown,
116    onAppListHidden: onAppListHidden,
117    toggleSpeechRecognition: toggleSpeechRecognition
118  };
119});
120
121document.addEventListener('contextmenu', function(e) { e.preventDefault(); });
122document.addEventListener('DOMContentLoaded', appList.startPage.initialize);
123