blob: ea7796beb0505b4b04b5297296e2bc8746270052 [file] [log] [blame]
// Copyright 2013 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.
cr.define('extensions', function() {
/**
* Encapsulated handling of ChromeOS kiosk apps options page.
* @constructor
*/
function KioskAppsOverlay() {
}
cr.addSingletonGetter(KioskAppsOverlay);
KioskAppsOverlay.prototype = {
/**
* Clear error timer id.
* @type {?number}
*/
clearErrorTimer_: null,
/**
* Initialize the page.
*/
initialize: function() {
chrome.send('initializeKioskAppSettings');
extensions.KioskAppList.decorate($('kiosk-app-list'));
var overlay = $('kiosk-apps-page');
cr.ui.overlay.setupOverlay(overlay);
cr.ui.overlay.globalInitialization();
overlay.addEventListener('cancelOverlay', this.handleDismiss_.bind(this));
$('kiosk-options-overlay-confirm').onclick =
this.handleDismiss_.bind(this);
$('kiosk-app-id-edit').addEventListener('keypress',
this.handleAppIdInputKeyPressed_.bind(this));
$('kiosk-app-add').onclick = this.handleAddButtonClick_.bind(this);
},
/*
* Invoked when the page is shown.
*/
didShowPage: function() {
chrome.send('getKioskAppSettings');
$('kiosk-app-id-edit').focus();
},
/**
* Shows error for given app name/id and schedules it to cleared.
* @param {!string} appName App name/id to show in error banner.
*/
showError: function(appName) {
var errorBanner = $('kiosk-apps-error-banner');
var appNameElement = errorBanner.querySelector('.kiosk-app-name');
appNameElement.textContent = appName;
errorBanner.classList.add('visible');
if (this.clearErrorTimer_)
window.clearTimeout(this.clearErrorTimer_);
// Sets a timer to clear out error banner after 5 seconds.
this.clearErrorTimer_ = window.setTimeout(function() {
errorBanner.classList.remove('visible');
this.clearErrorTimer_ = null;
}.bind(this), 5000);
},
/**
* Handles keypressed event in the app id input element.
* @private
*/
handleAppIdInputKeyPressed_: function(e) {
if (e.key == 'Enter' && e.target.value)
this.handleAddButtonClick_();
},
/**
* Handles click event on the add button.
* @private
*/
handleAddButtonClick_: function() {
var appId = $('kiosk-app-id-edit').value;
if (!appId)
return;
chrome.send('addKioskApp', [appId]);
$('kiosk-app-id-edit').value = '';
},
/**
* Handles the overlay being dismissed.
* @private
*/
handleDismiss_: function() {
this.handleAddButtonClick_();
extensions.ExtensionSettings.showOverlay(null);
}
};
/**
* Sets apps to be displayed in kiosk-app-list.
* @param {!Object<{apps: !Array<AppDict>, disableBailout: boolean,
* hasAutoLaunchApp: boolean}>} settings An object containing an array of
* app info objects and disable bailout shortcut flag.
*/
KioskAppsOverlay.setSettings = function(settings) {
$('kiosk-app-list').setApps(settings.apps);
$('kiosk-disable-bailout-shortcut').checked = settings.disableBailout;
$('kiosk-disable-bailout-shortcut').disabled = !settings.hasAutoLaunchApp;
};
/**
* Update an app in kiosk-app-list.
* @param {!Object} app App info to be updated.
*/
KioskAppsOverlay.updateApp = function(app) {
$('kiosk-app-list').updateApp(app);
};
/**
* Shows error for given app name/id.
* @param {!string} appName App name/id to show in error banner.
*/
KioskAppsOverlay.showError = function(appName) {
KioskAppsOverlay.getInstance().showError(appName);
};
/**
* Enables consumer kiosk.
* @param {!{kioskEnabled: boolean, autoLaunchEnabled: boolean}} params
*/
KioskAppsOverlay.enableKiosk = function(params) {
$('add-kiosk-app').hidden = !params.kioskEnabled;
$('kiosk-disable-bailout-shortcut').parentNode.hidden =
!params.autoLaunchEnabled;
$('kiosk-app-list').setAutoLaunchEnabled(params.autoLaunchEnabled);
};
// Export
return {
KioskAppsOverlay: KioskAppsOverlay
};
});
<include src="kiosk_app_list.js">
<include src="kiosk_app_disable_bailout_confirm.js">