blob: 82a04c4867269e5071101a5b717f63586ee1defb [file] [log] [blame]
// Copyright (c) 2012 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.
/**
* @fileoverview Login UI header bar implementation.
*/
cr.define('login', function() {
/**
* Creates a header bar element.
* @constructor
* @extends {HTMLDivElement}
*/
var HeaderBar = cr.ui.define('div');
HeaderBar.prototype = {
__proto__: HTMLDivElement.prototype,
// Whether guest button should be shown when header bar is in normal mode.
showGuest_: false,
// Current UI state of the sign-in screen.
signinUIState_: SIGNIN_UI_STATE.HIDDEN,
// Whether to show kiosk apps menu.
hasApps_: false,
/** @override */
decorate: function() {
$('shutdown-header-bar-item').addEventListener('click',
this.handleShutdownClick_);
$('shutdown-button').addEventListener('click',
this.handleShutdownClick_);
$('add-user-button').addEventListener('click',
this.handleAddUserClick_);
$('cancel-add-user-button').addEventListener('click',
this.handleCancelAddUserClick_);
$('guest-user-header-bar-item').addEventListener('click',
this.handleGuestClick_);
$('guest-user-button').addEventListener('click',
this.handleGuestClick_);
$('sign-out-user-button').addEventListener('click',
this.handleSignoutClick_);
$('cancel-multiple-sign-in-button').addEventListener('click',
this.handleCancelMultipleSignInClick_);
if (Oobe.getInstance().displayType == DISPLAY_TYPE.LOGIN ||
Oobe.getInstance().displayType == DISPLAY_TYPE.OOBE)
login.AppsMenuButton.decorate($('show-apps-button'));
},
/**
* Tab index value for all button elements.
* @type {number}
*/
set buttonsTabIndex(tabIndex) {
var buttons = this.getElementsByTagName('button');
for (var i = 0, button; button = buttons[i]; ++i) {
button.tabIndex = tabIndex;
}
},
/**
* Disables the header bar and all of its elements.
* @type {boolean}
*/
set disabled(value) {
var buttons = this.getElementsByTagName('button');
for (var i = 0, button; button = buttons[i]; ++i)
if (!button.classList.contains('button-restricted'))
button.disabled = value;
},
/**
* Add user button click handler.
* @private
*/
handleAddUserClick_: function(e) {
Oobe.showSigninUI();
// Prevent further propagation of click event. Otherwise, the click event
// handler of document object will set wallpaper to user's wallpaper when
// there is only one existing user. See http://crbug.com/166477
e.stopPropagation();
},
/**
* Cancel add user button click handler.
* @private
*/
handleCancelAddUserClick_: function(e) {
// Let screen handle cancel itself if that is capable of doing so.
if (Oobe.getInstance().currentScreen &&
Oobe.getInstance().currentScreen.cancel) {
Oobe.getInstance().currentScreen.cancel();
return;
}
$('pod-row').loadLastWallpaper();
Oobe.showScreen({id: SCREEN_ACCOUNT_PICKER});
Oobe.resetSigninUI(true);
},
/**
* Guest button click handler.
* @private
*/
handleGuestClick_: function(e) {
Oobe.disableSigninUI();
chrome.send('launchIncognito');
e.stopPropagation();
},
/**
* Sign out button click handler.
* @private
*/
handleSignoutClick_: function(e) {
this.disabled = true;
chrome.send('signOutUser');
e.stopPropagation();
},
/**
* Shutdown button click handler.
* @private
*/
handleShutdownClick_: function(e) {
chrome.send('shutdownSystem');
e.stopPropagation();
},
/**
* Cancel user adding button handler.
* @private
*/
handleCancelMultipleSignInClick_: function(e) {
chrome.send('cancelUserAdding');
e.stopPropagation();
},
/**
* If true then "Browse as Guest" button is shown.
* @type {boolean}
*/
set showGuestButton(value) {
this.showGuest_ = value;
this.updateUI_();
},
/**
* Update current header bar UI.
* @type {number} state Current state of the sign-in screen
* (see SIGNIN_UI_STATE).
*/
set signinUIState(state) {
this.signinUIState_ = state;
this.updateUI_();
},
/**
* Whether the Cancel button is enabled during Gaia sign-in.
* @type {boolean}
*/
set allowCancel(value) {
this.allowCancel_ = value;
this.updateUI_();
},
/**
* Update whether there are kiosk apps.
* @type {boolean}
*/
set hasApps(value) {
this.hasApps_ = value;
this.updateUI_();
},
/**
* Updates visibility state of action buttons.
* @private
*/
updateUI_: function() {
var gaiaIsActive = (this.signinUIState_ == SIGNIN_UI_STATE.GAIA_SIGNIN);
var accountPickerIsActive =
(this.signinUIState_ == SIGNIN_UI_STATE.ACCOUNT_PICKER);
var managedUserCreationDialogIsActive =
(this.signinUIState_ == SIGNIN_UI_STATE.MANAGED_USER_CREATION_FLOW);
var wrongHWIDWarningIsActive =
(this.signinUIState_ == SIGNIN_UI_STATE.WRONG_HWID_WARNING);
var isMultiProfilesUI =
(Oobe.getInstance().displayType == DISPLAY_TYPE.USER_ADDING);
$('add-user-button').hidden = !accountPickerIsActive || isMultiProfilesUI;
$('cancel-add-user-button').hidden = accountPickerIsActive ||
!this.allowCancel_ ||
wrongHWIDWarningIsActive ||
isMultiProfilesUI;
$('guest-user-header-bar-item').hidden = gaiaIsActive ||
managedUserCreationDialogIsActive ||
!this.showGuest_ ||
wrongHWIDWarningIsActive ||
isMultiProfilesUI;
$('add-user-header-bar-item').hidden =
$('add-user-button').hidden && $('cancel-add-user-button').hidden;
$('apps-header-bar-item').hidden = !this.hasApps_ ||
(!gaiaIsActive && !accountPickerIsActive);
$('cancel-multiple-sign-in-item').hidden = !isMultiProfilesUI;
if (!$('apps-header-bar-item').hidden)
$('show-apps-button').didShow();
},
/**
* Animates Header bar to hide from the screen.
* @param {function()} callback will be called once animation is finished.
*/
animateOut: function(callback) {
var launcher = this;
launcher.addEventListener(
'webkitTransitionEnd', function f(e) {
launcher.removeEventListener('webkitTransitionEnd', f);
callback();
});
this.classList.remove('login-header-bar-animate-slow');
this.classList.add('login-header-bar-animate-fast');
this.classList.add('login-header-bar-hidden');
},
/**
* Animates Header bar to slowly appear on the screen.
*/
animateIn: function() {
this.classList.remove('login-header-bar-animate-fast');
this.classList.add('login-header-bar-animate-slow');
this.classList.remove('login-header-bar-hidden');
},
};
/**
* Convenience wrapper of animateOut.
*/
HeaderBar.animateOut = function(callback) {
$('login-header-bar').animateOut(callback);
};
/**
* Convenience wrapper of animateIn.
*/
HeaderBar.animateIn = function() {
$('login-header-bar').animateIn();
}
return {
HeaderBar: HeaderBar
};
});