Commit 6777c636 authored by Toshiki Kikuchi's avatar Toshiki Kikuchi Committed by Commit Bot

Hide inactive buttons in login and lock screen.

In the login or lock screen, the settings and lock buttons are inactive so that
we made them invisible to improve UX. In the previous implementation,
these buttons are just disabled instead of invisible.

TEST=TopShortcutsViewTest
BUG=864233

Change-Id: I44b633187b475386732bfa9df5b78e740529d1e7
Reviewed-on: https://chromium-review.googlesource.com/1157666Reviewed-by: default avatarYoshiki Iguchi <yoshiki@chromium.org>
Reviewed-by: default avatarTetsui Ohkubo <tetsui@chromium.org>
Commit-Queue: Toshiki Kikuchi <toshikikikuchi@google.com>
Cr-Commit-Position: refs/heads/master@{#580092}
parent 90ed3e55
......@@ -68,10 +68,14 @@ void TopShortcutButtonContainer::Layout() {
total_horizontal_size += child_horizontal_size;
num_visible++;
}
int spacing = std::max(kUnifiedTopShortcutButtonMinSpacing,
int spacing = 0;
if (num_visible > 1) {
spacing = std::max(kUnifiedTopShortcutButtonMinSpacing,
std::min(kUnifiedTopShortcutButtonDefaultSpacing,
(child_area.width() - total_horizontal_size) /
(num_visible - 1)));
}
int sign_out_button_width = 0;
if (sign_out_button_ && sign_out_button_->visible()) {
......@@ -155,13 +159,13 @@ TopShortcutsView::TopShortcutsView(UnifiedSystemTrayController* controller)
lock_button_ = new TopShortcutButton(this, kUnifiedMenuLockIcon,
IDS_ASH_STATUS_TRAY_LOCK);
lock_button_->SetEnabled(can_show_web_ui &&
lock_button_->SetVisible(can_show_web_ui &&
Shell::Get()->session_controller()->CanLockScreen());
container_->AddChildView(lock_button_);
settings_button_ = new TopShortcutButton(this, kUnifiedMenuSettingsIcon,
IDS_ASH_STATUS_TRAY_SETTINGS);
settings_button_->SetEnabled(can_show_web_ui);
settings_button_->SetVisible(can_show_web_ui);
container_->AddChildView(settings_button_);
bool reboot = Shell::Get()->shutdown_controller()->reboot_on_shutdown();
......
......@@ -16,7 +16,7 @@ using views::Button;
namespace ash {
// Tests manually control their session state.
// Tests manually control their session visibility.
class TopShortcutsViewTest : public NoSessionAshTestBase {
public:
TopShortcutsViewTest() = default;
......@@ -41,7 +41,7 @@ class TopShortcutsViewTest : public NoSessionAshTestBase {
top_shortcuts_view_ = std::make_unique<TopShortcutsView>(controller_.get());
}
views::View* GetUserAvatar() {
views::View* GetUserAvatar() {
return top_shortcuts_view_->user_avatar_button_;
}
......@@ -61,6 +61,9 @@ class TopShortcutsViewTest : public NoSessionAshTestBase {
return top_shortcuts_view_->collapse_button_;
}
void Layout() {
top_shortcuts_view_->Layout();
}
private:
std::unique_ptr<UnifiedSystemTrayModel> model_;
std::unique_ptr<UnifiedSystemTrayController> controller_;
......@@ -69,55 +72,56 @@ class TopShortcutsViewTest : public NoSessionAshTestBase {
DISALLOW_COPY_AND_ASSIGN(TopShortcutsViewTest);
};
// Settings buttons are disabled before login.
// Settings button and lock button are hidden before login.
TEST_F(TopShortcutsViewTest, ButtonStatesNotLoggedIn) {
SetUpView();
EXPECT_EQ(nullptr, GetUserAvatar());
EXPECT_FALSE(GetSignOutButton()->visible());
EXPECT_EQ(Button::STATE_DISABLED, GetLockButton()->state());
EXPECT_EQ(Button::STATE_DISABLED, GetSettingsButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetPowerButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetCollapseButton()->state());
EXPECT_FALSE(GetLockButton()->visible());
EXPECT_FALSE(GetSettingsButton()->visible());
EXPECT_TRUE(GetPowerButton()->visible());
EXPECT_TRUE(GetCollapseButton()->visible());
}
// All buttons are enabled after login.
// All buttons are shown after login.
TEST_F(TopShortcutsViewTest, ButtonStatesLoggedIn) {
CreateUserSessions(1);
SetUpView();
EXPECT_NE(nullptr, GetUserAvatar());
EXPECT_TRUE(GetSignOutButton()->visible());
EXPECT_EQ(Button::STATE_NORMAL, GetLockButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetSettingsButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetPowerButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetCollapseButton()->state());
EXPECT_TRUE(GetLockButton()->visible());
EXPECT_TRUE(GetSettingsButton()->visible());
EXPECT_TRUE(GetPowerButton()->visible());
EXPECT_TRUE(GetCollapseButton()->visible());
}
// Settings buttons are disabled at the lock screen.
// Settings button and lock button are hidden at the lock screen.
TEST_F(TopShortcutsViewTest, ButtonStatesLockScreen) {
BlockUserSession(BLOCKED_BY_LOCK_SCREEN);
SetUpView();
EXPECT_NE(nullptr, GetUserAvatar());
EXPECT_TRUE(GetSignOutButton()->visible());
EXPECT_EQ(Button::STATE_DISABLED, GetLockButton()->state());
EXPECT_EQ(Button::STATE_DISABLED, GetSettingsButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetPowerButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetCollapseButton()->state());
EXPECT_FALSE(GetLockButton()->visible());
EXPECT_FALSE(GetSettingsButton()->visible());
EXPECT_TRUE(GetPowerButton()->visible());
EXPECT_TRUE(GetCollapseButton()->visible());
}
// Settings buttons are disabled when adding a second multiprofile user.
// Settings button and lock button are hidden when adding a second
// multiprofile user.
TEST_F(TopShortcutsViewTest, ButtonStatesAddingUser) {
CreateUserSessions(1);
SetUserAddingScreenRunning(true);
SetUpView();
EXPECT_NE(nullptr, GetUserAvatar());
EXPECT_TRUE(GetSignOutButton()->visible());
EXPECT_EQ(Button::STATE_DISABLED, GetLockButton()->state());
EXPECT_EQ(Button::STATE_DISABLED, GetSettingsButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetPowerButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetCollapseButton()->state());
EXPECT_FALSE(GetLockButton()->visible());
EXPECT_FALSE(GetSettingsButton()->visible());
EXPECT_TRUE(GetPowerButton()->visible());
EXPECT_TRUE(GetCollapseButton()->visible());
}
// Settings buttons are disabled when adding a supervised user.
// Settings button and lock button are hidden when adding a supervised user.
TEST_F(TopShortcutsViewTest, ButtonStatesSupervisedUserFlow) {
// Simulate the add supervised user flow, which is a regular user session but
// with web UI settings disabled.
......@@ -127,10 +131,46 @@ TEST_F(TopShortcutsViewTest, ButtonStatesSupervisedUserFlow) {
SetUpView();
EXPECT_EQ(nullptr, GetUserAvatar());
EXPECT_FALSE(GetSignOutButton()->visible());
EXPECT_EQ(Button::STATE_DISABLED, GetLockButton()->state());
EXPECT_EQ(Button::STATE_DISABLED, GetSettingsButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetPowerButton()->state());
EXPECT_EQ(Button::STATE_NORMAL, GetCollapseButton()->state());
EXPECT_FALSE(GetLockButton()->visible());
EXPECT_FALSE(GetSettingsButton()->visible());
EXPECT_TRUE(GetPowerButton()->visible());
EXPECT_TRUE(GetCollapseButton()->visible());
}
// Try to layout buttons before login.
TEST_F(TopShortcutsViewTest, ButtonLayoutNotLoggedIn) {
SetUpView();
Layout();
}
// Try to layout buttons after login.
TEST_F(TopShortcutsViewTest, ButtonLayoutLoggedIn) {
CreateUserSessions(1);
SetUpView();
Layout();
}
// Try to layout buttons at the lock screen.
TEST_F(TopShortcutsViewTest, ButtonLayoutLockScreen) {
BlockUserSession(BLOCKED_BY_LOCK_SCREEN);
SetUpView();
Layout();
}
// Try to layout buttons when adding a second multiprofile user.
TEST_F(TopShortcutsViewTest, ButtonLayoutAddingUser) {
CreateUserSessions(1);
SetUserAddingScreenRunning(true);
SetUpView();
Layout();
}
// Try to layout buttons when adding a supervised user.
TEST_F(TopShortcutsViewTest, ButtonLayoutSupervisedUserFlow) {
const bool enable_settings = false;
GetSessionControllerClient()->AddUserSession(
"foo@example.com", user_manager::USER_TYPE_REGULAR, enable_settings);
SetUpView();
Layout();
}
} // namespace ash
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment