blob: ea0791b9ce5043a1d281baa6dfa2a1f595e6cceb [file] [log] [blame]
// Copyright 2015 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
* 'settings-manage-profile' is the settings subpage containing controls to
* edit a profile's name, icon, and desktop shortcut.
*/
Polymer({
is: 'settings-manage-profile',
behaviors: [WebUIListenerBehavior, settings.RouteObserverBehavior],
properties: {
/**
* The newly selected avatar. Populated only if the user manually changes
* the avatar selection. The observer ensures that the changes are
* propagated to the C++.
* @private
*/
profileAvatar_: {
type: Object,
observer: 'profileAvatarChanged_',
},
/**
* The current profile name.
*/
profileName: String,
/**
* True if the current profile has a shortcut.
*/
hasProfileShortcut_: Boolean,
/**
* The available icons for selection.
* @type {!Array<string>}
*/
availableIcons: {
type: Array,
value: function() {
return [];
},
},
/**
* The current sync status.
* @type {?settings.SyncStatus}
*/
syncStatus: Object,
/**
* True if the profile shortcuts feature is enabled.
*/
isProfileShortcutSettingVisible_: Boolean,
},
/** @private {?settings.ManageProfileBrowserProxy} */
browserProxy_: null,
/** @override */
created: function() {
this.browserProxy_ = settings.ManageProfileBrowserProxyImpl.getInstance();
},
/** @override */
attached: function() {
const setIcons = icons => {
this.availableIcons = icons;
};
this.addWebUIListener('available-icons-changed', setIcons);
this.browserProxy_.getAvailableIcons().then(setIcons);
},
/** @protected */
currentRouteChanged: function() {
if (settings.getCurrentRoute() == settings.routes.MANAGE_PROFILE) {
this.$.name.value = this.profileName;
if (loadTimeData.getBoolean('profileShortcutsEnabled')) {
this.browserProxy_.getProfileShortcutStatus().then(status => {
if (status == ProfileShortcutStatus.PROFILE_SHORTCUT_SETTING_HIDDEN) {
this.isProfileShortcutSettingVisible_ = false;
return;
}
this.isProfileShortcutSettingVisible_ = true;
this.hasProfileShortcut_ =
status == ProfileShortcutStatus.PROFILE_SHORTCUT_FOUND;
});
}
}
},
/**
* Handler for when the profile name field is changed, then blurred.
* @param {!Event} event
* @private
*/
onProfileNameChanged_: function(event) {
if (event.target.invalid)
return;
this.browserProxy_.setProfileName(event.target.value);
},
/**
* Handler for profile name keydowns.
* @param {!Event} event
* @private
*/
onProfileNameKeydown_: function(event) {
if (event.key == 'Escape') {
event.target.value = this.profileName;
event.target.blur();
}
},
/**
* Handler for when the profile avatar is changed by the user.
* @private
*/
profileAvatarChanged_: function() {
if (this.profileAvatar_.isGaiaAvatar)
this.browserProxy_.setProfileIconToGaiaAvatar();
else
this.browserProxy_.setProfileIconToDefaultAvatar(this.profileAvatar_.url);
},
/**
* @param {?settings.SyncStatus} syncStatus
* @return {boolean} Whether the profile name field is disabled.
* @private
*/
isProfileNameDisabled_: function(syncStatus) {
return !!syncStatus.supervisedUser && !syncStatus.childUser;
},
/**
* Handler for when the profile shortcut toggle is changed.
* @param {!Event} event
* @private
*/
onHasProfileShortcutChange_: function(event) {
if (this.hasProfileShortcut_) {
this.browserProxy_.addProfileShortcut();
} else {
this.browserProxy_.removeProfileShortcut();
}
}
});