| Index: chrome/browser/chromeos/login/existing_user_controller.cc
|
| diff --git a/chrome/browser/chromeos/login/existing_user_controller.cc b/chrome/browser/chromeos/login/existing_user_controller.cc
|
| index 83aa156bac4aee5508e2c35cf60175818475b67d..7387a9148032cb77942e44479ab750394b9e9d73 100644
|
| --- a/chrome/browser/chromeos/login/existing_user_controller.cc
|
| +++ b/chrome/browser/chromeos/login/existing_user_controller.cc
|
| @@ -48,7 +48,10 @@ namespace {
|
|
|
| // Max number of users we'll show. The true max is the min of this and the
|
| // number of windows that fit on the screen.
|
| -const size_t kMaxUsers = 5;
|
| +const size_t kMaxUsers = 6;
|
| +
|
| +// Minimum number of users we'll show (including Guest and New User pods).
|
| +const size_t kMinUsers = 3;
|
|
|
| // Used to indicate no user has been selected.
|
| const size_t kNotSelected = -1;
|
| @@ -131,36 +134,39 @@ ExistingUserController::ExistingUserController(
|
| if (delete_scheduled_instance_)
|
| delete_scheduled_instance_->Delete();
|
|
|
| - // Caclulate the max number of users from available screen size.
|
| + // Calculate the max number of users from available screen size.
|
| + bool show_guest = UserCrosSettingsProvider::cached_allow_guest();
|
| + bool show_new_user = true;
|
| if (UserCrosSettingsProvider::cached_show_users_on_signin()) {
|
| size_t max_users = kMaxUsers;
|
| int screen_width = background_bounds.width();
|
| if (screen_width > 0) {
|
| - max_users = std::max(static_cast<size_t>(2), std::min(kMaxUsers,
|
| - static_cast<size_t>((screen_width - login::kUserImageSize)
|
| - / (UserController::kUnselectedSize +
|
| - UserController::kPadding))));
|
| + size_t users_per_screen = (screen_width - login::kUserImageSize)
|
| + / (UserController::kUnselectedSize + UserController::kPadding);
|
| + max_users = std::max(kMinUsers, std::min(kMaxUsers, users_per_screen));
|
| }
|
|
|
| - size_t visible_users_count = std::min(users.size(), max_users - 1);
|
| + size_t visible_users_count = std::min(users.size(), max_users -
|
| + static_cast<int>(show_guest) - static_cast<int>(show_new_user));
|
| for (size_t i = 0; i < users.size(); ++i) {
|
| - if (controllers_.size() == visible_users_count)
|
| - break;
|
| -
|
| // TODO(xiyuan): Clean user profile whose email is not in whitelist.
|
| if (UserCrosSettingsProvider::cached_allow_new_user() ||
|
| UserCrosSettingsProvider::IsEmailInCachedWhitelist(
|
| users[i].email())) {
|
| - controllers_.push_back(new UserController(this, users[i]));
|
| + UserController* user_controller = new UserController(this, users[i]);
|
| + if (controllers_.size() < visible_users_count)
|
| + controllers_.push_back(user_controller);
|
| + else
|
| + invisible_controllers_.push_back(user_controller);
|
| }
|
| }
|
| }
|
|
|
| - if (!controllers_.empty() && UserCrosSettingsProvider::cached_allow_guest())
|
| + if (!controllers_.empty() && show_guest)
|
| controllers_.push_back(new UserController(this, true));
|
|
|
| - // Add the view representing the new user.
|
| - controllers_.push_back(new UserController(this, false));
|
| + if (show_new_user)
|
| + controllers_.push_back(new UserController(this, false));
|
| }
|
|
|
| void ExistingUserController::Init() {
|
| @@ -240,6 +246,7 @@ ExistingUserController::~ExistingUserController() {
|
| WmMessageListener::GetInstance()->RemoveObserver(this);
|
|
|
| STLDeleteElements(&controllers_);
|
| + STLDeleteElements(&invisible_controllers_);
|
| }
|
|
|
| void ExistingUserController::Delete() {
|
| @@ -387,6 +394,33 @@ void ExistingUserController::RemoveUser(UserController* source) {
|
| new RemoveAttempt(source->user().email());
|
| // We need to unmap entry windows, the windows will be unmapped in destructor.
|
| delete source;
|
| +
|
| + // Nothing to insert.
|
| + if (invisible_controllers_.empty())
|
| + return;
|
| +
|
| + // Insert just before guest or add new user pods if any.
|
| + int insert_position = new_size;
|
| + while (insert_position > 0 &&
|
| + (controllers_[insert_position - 1]->is_new_user() ||
|
| + controllers_[insert_position - 1]->is_guest()))
|
| + --insert_position;
|
| +
|
| + controllers_.insert(controllers_.begin() + insert_position,
|
| + invisible_controllers_[0]);
|
| + invisible_controllers_.erase(invisible_controllers_.begin());
|
| +
|
| + // Update counts for exiting pods.
|
| + new_size = static_cast<int>(controllers_.size());
|
| + for (int i = 0; i < new_size; ++i) {
|
| + if (i != insert_position)
|
| + controllers_[i]->UpdateUserCount(i, new_size);
|
| + }
|
| +
|
| + // And initialize new one that was invisible.
|
| + controllers_[insert_position]->Init(insert_position, new_size, false);
|
| +
|
| + EnableTooltipsIfNeeded(controllers_);
|
| }
|
|
|
| void ExistingUserController::SelectUser(int index) {
|
|
|