14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)/**
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) * @fileoverview App launcher start page implementation.
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) */
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci<include src="recommended_apps.js">
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci<include src="speech_manager.js">
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)cr.define('appList.startPage', function() {
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  'use strict';
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  var speechManager = null;
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  /**
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)   * Creates a StartPage object.
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)   * @constructor
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)   * @extends {HTMLDivElement}
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)   */
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  var StartPage = cr.ui.define('div');
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  StartPage.prototype = {
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    __proto__: HTMLDivElement.prototype,
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    /**
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * Instance of the recommended apps card.
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * @type {appsList.startPage.RecommendedApps}
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * @private
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     */
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    recommendedApps_: null,
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    /** @override */
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    decorate: function() {
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      this.recommendedApps_ = new appList.startPage.RecommendedApps();
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      this.appendChild(this.recommendedApps_);
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    },
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    /**
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * Sets the recommended apps.
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     * @param {!Array.<!{appId: string,
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     *                   iconUrl: string,
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     *                   textTitle: string}>} apps An array of app info
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     *     dictionary to be displayed in the AppItemView.
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)     */
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    setRecommendedApps: function(apps) {
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      this.recommendedApps_.setApps(apps);
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  };
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  /**
534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)   * Initialize the page.
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)   */
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  function initialize() {
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    StartPage.decorate($('start-page'));
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    speechManager = new speech.SpeechManager();
584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    chrome.send('initialize');
594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  /**
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)   * Sets the recommended apps.
634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)   * @param {Array.<Object>} apps An array of app info dictionary.
644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)   */
654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  function setRecommendedApps(apps) {
664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    $('start-page').setRecommendedApps(apps);
674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  /**
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * Invoked when the hotword plugin availability is changed.
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   *
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   * @param {boolean} enabled Whether the plugin is enabled or not.
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)   */
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  function setHotwordEnabled(enabled) {
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    speechManager.setHotwordEnabled(enabled);
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  /**
79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch   * Sets the architecture of NaCl module to be loaded for hotword.
80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch   * @param {string} arch The architecture.
81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)   */
82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  function setNaclArch(arch) {
83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    speechManager.setNaclArch(arch);
84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  /**
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   * Invoked when the app-list bubble is shown.
88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch   *
89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch   * @param {boolean} hotwordEnabled Whether the hotword is enabled or not.
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   */
91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  function onAppListShown(hotwordEnabled) {
92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    speechManager.onShown(hotwordEnabled);
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  /**
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   * Invoked when the app-list bubble is hidden.
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   */
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  function onAppListHidden() {
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    speechManager.onHidden();
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  /**
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   * Invoked when the user explicitly wants to toggle the speech recognition
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   * state.
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)   */
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  function toggleSpeechRecognition() {
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    speechManager.toggleSpeechRecognition();
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return {
1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    initialize: initialize,
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    setRecommendedApps: setRecommendedApps,
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    setHotwordEnabled: setHotwordEnabled,
114c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    setNaclArch: setNaclArch,
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    onAppListShown: onAppListShown,
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    onAppListHidden: onAppListHidden,
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    toggleSpeechRecognition: toggleSpeechRecognition
1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  };
1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)});
1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)document.addEventListener('contextmenu', function(e) { e.preventDefault(); });
1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)document.addEventListener('DOMContentLoaded', appList.startPage.initialize);
123