Commit 4f8891f5 authored by Tatsuhisa Yamaguchi's avatar Tatsuhisa Yamaguchi Committed by Commit Bot

Unified System Tray - Support date view click

Show date/time setting when the date view is clicked.

Bug: 850439
Test: manual (--enable-features=SystemTrayUnified)
Change-Id: I597776e79cf639cd2ce1a3890fc31064d21de8bd
Reviewed-on: https://chromium-review.googlesource.com/1092555Reviewed-by: default avatarYoshiki Iguchi <yoshiki@chromium.org>
Reviewed-by: default avatarTetsui Ohkubo <tetsui@chromium.org>
Commit-Queue: Tatsuhisa Yamaguchi <yamaguchi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#568756}
parent 4c1a9e32
......@@ -20,6 +20,7 @@
#include "ash/system/tray/system_tray_notifier.h"
#include "ash/system/tray/tray_constants.h"
#include "ash/system/tray/tray_popup_utils.h"
#include "ash/system/unified/unified_system_tray_controller.h"
#include "base/i18n/time_formatting.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
......@@ -49,26 +50,33 @@ base::string16 FormatDayOfWeek(const base::Time& time) {
// A view that shows current date in short format e.g. "Mon, Mar 12". It updates
// by observing ClockObserver.
class DateView : public views::View, public ClockObserver {
class DateView : public views::Button,
public views::ButtonListener,
public ClockObserver {
public:
DateView();
explicit DateView(UnifiedSystemTrayController* controller);
~DateView() override;
private:
void Update();
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// ClockObserver:
void OnDateFormatChanged() override;
void OnSystemClockTimeUpdated() override;
void OnSystemClockCanSetTimeChanged(bool can_set_time) override;
void Refresh() override;
UnifiedSystemTrayController* const controller_;
views::Label* label_;
DISALLOW_COPY_AND_ASSIGN(DateView);
};
DateView::DateView() : label_(new views::Label) {
DateView::DateView(UnifiedSystemTrayController* controller)
: Button(this), controller_(controller), label_(new views::Label) {
SetLayoutManager(std::make_unique<views::FillLayout>());
AddChildView(label_);
......@@ -78,16 +86,23 @@ DateView::DateView() : label_(new views::Label) {
Update();
Shell::Get()->system_tray_model()->clock()->AddObserver(this);
TrayPopupUtils::ConfigureTrayPopupButton(this);
}
DateView::~DateView() {
Shell::Get()->system_tray_model()->clock()->RemoveObserver(this);
}
void DateView::ButtonPressed(views::Button* sender, const ui::Event& event) {
controller_->HandleOpenDateTimeSettingsAction();
}
void DateView::Update() {
base::Time now = base::Time::Now();
label_->SetText(l10n_util::GetStringFUTF16(
IDS_ASH_STATUS_TRAY_DATE, FormatDayOfWeek(now), FormatDate(now)));
SetAccessibleName(TimeFormatFriendlyDateAndTime(now));
NotifyAccessibilityEvent(ax::mojom::Event::kTextChanged, true);
}
void DateView::OnDateFormatChanged() {}
......@@ -304,14 +319,15 @@ SupervisedUserView::SupervisedUserView()
} // namespace
UnifiedSystemInfoView::UnifiedSystemInfoView()
UnifiedSystemInfoView::UnifiedSystemInfoView(
UnifiedSystemTrayController* controller)
: enterprise_managed_(new EnterpriseManagedView()),
supervised_(new SupervisedUserView()) {
auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::kHorizontal, kUnifiedMenuItemPadding,
kUnifiedSystemInfoSpacing));
AddChildView(new DateView());
AddChildView(new DateView(controller));
if (PowerStatus::Get()->IsBatteryPresent()) {
auto* separator = new views::Separator();
......
......@@ -6,6 +6,7 @@
#define ASH_SYSTEM_UNIFIED_UNIFIED_SYSTEM_INFO_VIEW_H_
#include "ash/ash_export.h"
#include "ash/system/unified/unified_system_tray_controller.h"
#include "ui/views/view.h"
namespace ash {
......@@ -15,7 +16,7 @@ namespace ash {
// is enterprise managed or not.
class ASH_EXPORT UnifiedSystemInfoView : public views::View {
public:
UnifiedSystemInfoView();
explicit UnifiedSystemInfoView(UnifiedSystemTrayController* controller);
~UnifiedSystemInfoView() override;
// views::View:
......
......@@ -9,6 +9,8 @@
#include "ash/shell.h"
#include "ash/system/model/enterprise_domain_model.h"
#include "ash/system/model/system_tray_model.h"
#include "ash/system/unified/unified_system_tray_controller.h"
#include "ash/system/unified/unified_system_tray_model.h"
#include "ash/test/ash_test_base.h"
namespace ash {
......@@ -20,11 +22,15 @@ class UnifiedSystemInfoViewTest : public AshTestBase {
void SetUp() override {
AshTestBase::SetUp();
info_view_ = std::make_unique<UnifiedSystemInfoView>();
model_ = std::make_unique<UnifiedSystemTrayModel>();
controller_ = std::make_unique<UnifiedSystemTrayController>(model_.get());
info_view_ = std::make_unique<UnifiedSystemInfoView>(controller_.get());
}
void TearDown() override {
info_view_.reset();
controller_.reset();
model_.reset();
AshTestBase::TearDown();
}
......@@ -32,6 +38,8 @@ class UnifiedSystemInfoViewTest : public AshTestBase {
UnifiedSystemInfoView* info_view() { return info_view_.get(); }
private:
std::unique_ptr<UnifiedSystemTrayModel> model_;
std::unique_ptr<UnifiedSystemTrayController> controller_;
std::unique_ptr<UnifiedSystemInfoView> info_view_;
DISALLOW_COPY_AND_ASSIGN(UnifiedSystemInfoViewTest);
......@@ -68,13 +76,17 @@ TEST_F(UnifiedSystemInfoViewTest, EnterpriseManagedVisibleForActiveDirectory) {
using UnifiedSystemInfoViewNoSessionTest = NoSessionAshTestBase;
TEST_F(UnifiedSystemInfoViewNoSessionTest, SupervisedVisible) {
std::unique_ptr<UnifiedSystemInfoView> info_view_;
std::unique_ptr<UnifiedSystemTrayModel> model_ =
std::make_unique<UnifiedSystemTrayModel>();
std::unique_ptr<UnifiedSystemTrayController> controller_ =
std::make_unique<UnifiedSystemTrayController>(model_.get());
SessionController* session = Shell::Get()->session_controller();
ASSERT_FALSE(session->IsActiveUserSessionStarted());
// Before login the supervised user view is invisible.
info_view_ = std::make_unique<UnifiedSystemInfoView>();
std::unique_ptr<UnifiedSystemInfoView> info_view_;
info_view_ = std::make_unique<UnifiedSystemInfoView>(controller_.get());
EXPECT_FALSE(info_view_->supervised_->visible());
info_view_.reset();
......@@ -88,7 +100,7 @@ TEST_F(UnifiedSystemInfoViewNoSessionTest, SupervisedVisible) {
session->UpdateUserSession(std::move(user_session));
// Now the supervised user view is visible.
info_view_ = std::make_unique<UnifiedSystemInfoView>();
info_view_ = std::make_unique<UnifiedSystemInfoView>(controller_.get());
ASSERT_TRUE(info_view_->supervised_->visible());
}
......
......@@ -18,6 +18,8 @@
#include "ash/system/cast/unified_cast_detailed_view_controller.h"
#include "ash/system/ime/ime_feature_pod_controller.h"
#include "ash/system/ime/unified_ime_detailed_view_controller.h"
#include "ash/system/model/clock_model.h"
#include "ash/system/model/system_tray_model.h"
#include "ash/system/network/network_feature_pod_controller.h"
#include "ash/system/network/unified_network_detailed_view_controller.h"
#include "ash/system/network/unified_vpn_detailed_view_controller.h"
......@@ -129,6 +131,15 @@ void UnifiedSystemTrayController::HandlePowerAction() {
ShutdownReason::TRAY_SHUT_DOWN_BUTTON);
}
void UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction() {
if (Shell::Get()->system_tray_model()->clock()->can_set_time()) {
Shell::Get()->system_tray_model()->clock()->ShowSetTimeDialog();
} else {
Shell::Get()->system_tray_model()->clock()->ShowDateSettings();
}
CloseBubble();
}
void UnifiedSystemTrayController::ToggleExpanded() {
UMA_HISTOGRAM_ENUMERATION("ChromeOS.SystemTray.ToggleExpanded",
TOGGLE_EXPANDED_TYPE_BY_BUTTON,
......
......@@ -9,6 +9,7 @@
#include <vector>
#include "ash/ash_export.h"
#include "ash/system/unified/unified_system_tray_model.h"
#include "base/macros.h"
#include "ui/gfx/animation/animation_delegate.h"
#include "ui/gfx/geometry/point.h"
......@@ -47,6 +48,8 @@ class ASH_EXPORT UnifiedSystemTrayController : public gfx::AnimationDelegate {
void HandleSettingsAction();
// Shutdown the computer. Called from the view.
void HandlePowerAction();
// Show date and time settings. Called from the view.
void HandleOpenDateTimeSettingsAction();
// Toggle expanded state of UnifiedSystemTrayView. Called from the view.
void ToggleExpanded();
// Clear all notifications. It triggers animation, and does not remove
......
......@@ -127,7 +127,7 @@ UnifiedSystemTrayView::UnifiedSystemTrayView(
top_shortcuts_view_(new TopShortcutsView(controller_)),
feature_pods_container_(new FeaturePodsContainerView(initially_expanded)),
sliders_container_(new UnifiedSlidersContainerView(initially_expanded)),
system_info_view_(new UnifiedSystemInfoView()),
system_info_view_(new UnifiedSystemInfoView(controller_)),
system_tray_container_(new SystemTrayContainer()),
detailed_view_container_(new DetailedViewContainer()),
interacted_by_tap_recorder_(
......
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