Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(900)

Unified Diff: ash/common/system/date/date_view.cc

Issue 2734653002: chromeos: Move files in //ash/common to //ash (Closed)
Patch Set: fix a11y tests, fix docs Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/common/system/date/date_view.h ('k') | ash/common/system/date/date_view_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/common/system/date/date_view.cc
diff --git a/ash/common/system/date/date_view.cc b/ash/common/system/date/date_view.cc
deleted file mode 100644
index 9aa1eb51bb9ceffacd98372a96b3727d7f40a5c7..0000000000000000000000000000000000000000
--- a/ash/common/system/date/date_view.cc
+++ /dev/null
@@ -1,408 +0,0 @@
-// 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.
-
-#include "ash/common/system/date/date_view.h"
-
-#include "ash/common/material_design/material_design_controller.h"
-#include "ash/common/system/tray/system_tray_controller.h"
-#include "ash/common/system/tray/tray_constants.h"
-#include "ash/common/system/tray/tray_popup_item_style.h"
-#include "ash/common/system/tray/tray_popup_utils.h"
-#include "ash/common/system/tray/tray_utils.h"
-#include "ash/common/wm_shell.h"
-#include "ash/strings/grit/ash_strings.h"
-#include "base/i18n/rtl.h"
-#include "base/i18n/time_formatting.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/time/time.h"
-#include "third_party/icu/source/i18n/unicode/datefmt.h"
-#include "third_party/icu/source/i18n/unicode/dtptngen.h"
-#include "third_party/icu/source/i18n/unicode/smpdtfmt.h"
-#include "ui/accessibility/ax_node_data.h"
-#include "ui/base/l10n/l10n_util.h"
-#include "ui/views/border.h"
-#include "ui/views/controls/button/button.h"
-#include "ui/views/controls/label.h"
-#include "ui/views/layout/box_layout.h"
-#include "ui/views/layout/fill_layout.h"
-#include "ui/views/layout/grid_layout.h"
-#include "ui/views/widget/widget.h"
-
-namespace ash {
-namespace tray {
-namespace {
-
-// Amount of slop to add into the timer to make sure we're into the next minute
-// when the timer goes off.
-const int kTimerSlopSeconds = 1;
-
-// Text color of the vertical clock minutes.
-const SkColor kVerticalClockMinuteColor = SkColorSetRGB(0xBA, 0xBA, 0xBA);
-
-// Padding between the left edge of the shelf and the left edge of the vertical
-// clock.
-const int kVerticalClockLeftPadding = 9;
-
-// Offset used to bring the minutes line closer to the hours line in the
-// vertical clock.
-const int kVerticalClockMinutesTopOffset = -4;
-const int kVerticalClockMinutesTopOffsetMD = -2;
-
-// Leading padding used to draw the tray background to the left of the clock
-// when the shelf is vertically aligned.
-const int kClockLeadingPadding = 8;
-
-bool UseMd() {
- return MaterialDesignController::IsSystemTrayMenuMaterial();
-}
-
-base::string16 FormatDateWithPattern(const base::Time& time,
- const char* pattern) {
- UErrorCode status = U_ZERO_ERROR;
- std::unique_ptr<icu::DateTimePatternGenerator> generator(
- icu::DateTimePatternGenerator::createInstance(status));
- DCHECK(U_SUCCESS(status));
- icu::UnicodeString generated_pattern =
- generator->getBestPattern(icu::UnicodeString(pattern), status);
- DCHECK(U_SUCCESS(status));
- icu::SimpleDateFormat simple_formatter(generated_pattern, status);
- DCHECK(U_SUCCESS(status));
- icu::UnicodeString date_string;
- simple_formatter.format(static_cast<UDate>(time.ToDoubleT() * 1000),
- date_string, status);
- DCHECK(U_SUCCESS(status));
- return base::string16(date_string.getBuffer(),
- static_cast<size_t>(date_string.length()));
-}
-
-base::string16 FormatDate(const base::Time& time) {
- if (UseMd()) {
- // Use 'short' month format (e.g., "Oct") followed by non-padded day of
- // month (e.g., "2", "10").
- return FormatDateWithPattern(time, "LLLd");
- } else {
- icu::UnicodeString date_string;
- std::unique_ptr<icu::DateFormat> formatter(
- icu::DateFormat::createDateInstance(icu::DateFormat::kMedium));
- formatter->format(static_cast<UDate>(time.ToDoubleT() * 1000), date_string);
- return base::string16(date_string.getBuffer(),
- static_cast<size_t>(date_string.length()));
- }
-}
-
-base::string16 FormatDayOfWeek(const base::Time& time) {
- // Use 'short' day of week format (e.g., "Wed").
- return FormatDateWithPattern(time, "EEE");
-}
-
-} // namespace
-
-BaseDateTimeView::~BaseDateTimeView() {
- timer_.Stop();
-}
-
-void BaseDateTimeView::UpdateText() {
- base::Time now = base::Time::Now();
- UpdateTextInternal(now);
- SchedulePaint();
- SetTimer(now);
-}
-
-void BaseDateTimeView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
- ActionableView::GetAccessibleNodeData(node_data);
- node_data->role = ui::AX_ROLE_TIME;
-}
-
-BaseDateTimeView::BaseDateTimeView(SystemTrayItem* owner)
- : ActionableView(owner, TrayPopupInkDropStyle::INSET_BOUNDS),
- hour_type_(WmShell::Get()->system_tray_controller()->hour_clock_type()) {
- SetTimer(base::Time::Now());
- SetFocusBehavior(FocusBehavior::NEVER);
-}
-
-void BaseDateTimeView::SetTimer(const base::Time& now) {
- // Try to set the timer to go off at the next change of the minute. We don't
- // want to have the timer go off more than necessary since that will cause
- // the CPU to wake up and consume power.
- base::Time::Exploded exploded;
- now.LocalExplode(&exploded);
-
- // Often this will be called at minute boundaries, and we'll actually want
- // 60 seconds from now.
- int seconds_left = 60 - exploded.second;
- if (seconds_left == 0)
- seconds_left = 60;
-
- // Make sure that the timer fires on the next minute. Without this, if it is
- // called just a teeny bit early, then it will skip the next minute.
- seconds_left += kTimerSlopSeconds;
-
- timer_.Stop();
- timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(seconds_left), this,
- &BaseDateTimeView::UpdateText);
-}
-
-void BaseDateTimeView::UpdateTextInternal(const base::Time& now) {
- SetAccessibleName(base::TimeFormatTimeOfDayWithHourClockType(
- now, hour_type_, base::kKeepAmPm) +
- base::ASCIIToUTF16(", ") +
- base::TimeFormatFriendlyDate(now));
-
- NotifyAccessibilityEvent(ui::AX_EVENT_TEXT_CHANGED, true);
-}
-
-void BaseDateTimeView::ChildPreferredSizeChanged(views::View* child) {
- PreferredSizeChanged();
-}
-
-void BaseDateTimeView::OnLocaleChanged() {
- UpdateText();
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-DateView::DateView(SystemTrayItem* owner)
- : BaseDateTimeView(owner), action_(DateAction::NONE) {
- if (UseMd()) {
- // TODO(tdanderson): Tweak spacing and layout for material design.
- views::BoxLayout* box_layout =
- new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0);
- box_layout->set_inside_border_insets(gfx::Insets(0, 12, 0, 0));
- box_layout->set_main_axis_alignment(
- views::BoxLayout::MAIN_AXIS_ALIGNMENT_START);
- box_layout->set_cross_axis_alignment(
- views::BoxLayout::CROSS_AXIS_ALIGNMENT_CENTER);
- SetLayoutManager(box_layout);
- } else {
- SetLayoutManager(
- new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
- }
- date_label_ = TrayPopupUtils::CreateDefaultLabel();
- date_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
- if (!UseMd())
- date_label_->SetEnabledColor(kHeaderTextColorNormal);
- UpdateTextInternal(base::Time::Now());
- TrayPopupItemStyle style(TrayPopupItemStyle::FontStyle::SYSTEM_INFO);
- style.SetupLabel(date_label_);
- AddChildView(date_label_);
-}
-
-DateView::~DateView() {}
-
-void DateView::SetAction(DateAction action) {
- if (action == action_)
- return;
- if (IsMouseHovered() && !UseMd()) {
- date_label_->SetEnabledColor(action == DateAction::NONE
- ? kHeaderTextColorNormal
- : kHeaderTextColorHover);
- SchedulePaint();
- }
- action_ = action;
- SetFocusBehavior(action_ != DateAction::NONE ? FocusBehavior::ALWAYS
- : FocusBehavior::NEVER);
-
- // Disable |this| when not clickable so that the material design ripple is
- // not shown.
- if (UseMd()) {
- SetEnabled(action_ != DateAction::NONE);
- if (action_ != DateAction::NONE)
- SetInkDropMode(views::InkDropHostView::InkDropMode::ON);
- }
-}
-
-void DateView::UpdateTimeFormat() {
- hour_type_ = WmShell::Get()->system_tray_controller()->hour_clock_type();
- UpdateText();
-}
-
-base::HourClockType DateView::GetHourTypeForTesting() const {
- return hour_type_;
-}
-
-void DateView::SetActive(bool active) {
- if (UseMd())
- return;
-
- date_label_->SetEnabledColor(active ? kHeaderTextColorHover
- : kHeaderTextColorNormal);
- SchedulePaint();
-}
-
-void DateView::UpdateTextInternal(const base::Time& now) {
- BaseDateTimeView::UpdateTextInternal(now);
- date_label_->SetText(l10n_util::GetStringFUTF16(
- IDS_ASH_STATUS_TRAY_DATE, FormatDayOfWeek(now), FormatDate(now)));
-}
-
-bool DateView::PerformAction(const ui::Event& event) {
- if (action_ == DateAction::NONE)
- return false;
- if (action_ == DateAction::SHOW_DATE_SETTINGS)
- WmShell::Get()->system_tray_controller()->ShowDateSettings();
- else if (action_ == DateAction::SET_SYSTEM_TIME)
- WmShell::Get()->system_tray_controller()->ShowSetTimeDialog();
- else
- return false;
- CloseSystemBubble();
- return true;
-}
-
-void DateView::OnMouseEntered(const ui::MouseEvent& event) {
- if (action_ == DateAction::NONE)
- return;
- SetActive(true);
-}
-
-void DateView::OnMouseExited(const ui::MouseEvent& event) {
- if (action_ == DateAction::NONE)
- return;
- SetActive(false);
-}
-
-void DateView::OnGestureEvent(ui::GestureEvent* event) {
- if (event->type() == ui::ET_GESTURE_TAP_DOWN) {
- SetActive(true);
- } else if (event->type() == ui::ET_GESTURE_TAP_CANCEL ||
- event->type() == ui::ET_GESTURE_END) {
- SetActive(false);
- }
- BaseDateTimeView::OnGestureEvent(event);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-TimeView::TimeView(ClockLayout clock_layout) : BaseDateTimeView(nullptr) {
- SetupLabels();
- UpdateTextInternal(base::Time::Now());
- UpdateClockLayout(clock_layout);
-}
-
-TimeView::~TimeView() {}
-
-void TimeView::UpdateTimeFormat() {
- hour_type_ = WmShell::Get()->system_tray_controller()->hour_clock_type();
- UpdateText();
-}
-
-base::HourClockType TimeView::GetHourTypeForTesting() const {
- return hour_type_;
-}
-
-void TimeView::UpdateTextInternal(const base::Time& now) {
- // Just in case |now| is null, do NOT update time; otherwise, it will
- // crash icu code by calling into base::TimeFormatTimeOfDayWithHourClockType,
- // see details in crbug.com/147570.
- if (now.is_null()) {
- LOG(ERROR) << "Received null value from base::Time |now| in argument";
- return;
- }
-
- BaseDateTimeView::UpdateTextInternal(now);
- base::string16 current_time = base::TimeFormatTimeOfDayWithHourClockType(
- now, hour_type_, base::kDropAmPm);
- horizontal_label_->SetText(current_time);
- horizontal_label_->SetTooltipText(base::TimeFormatFriendlyDate(now));
-
- // Calculate vertical clock layout labels.
- size_t colon_pos = current_time.find(base::ASCIIToUTF16(":"));
- base::string16 hour = current_time.substr(0, colon_pos);
- base::string16 minute = current_time.substr(colon_pos + 1);
-
- // Sometimes pad single-digit hours with a zero for aesthetic reasons.
- if (hour.length() == 1 && hour_type_ == base::k24HourClock &&
- !base::i18n::IsRTL())
- hour = base::ASCIIToUTF16("0") + hour;
-
- vertical_label_hours_->SetText(hour);
- vertical_label_minutes_->SetText(minute);
- Layout();
-}
-
-bool TimeView::PerformAction(const ui::Event& event) {
- return false;
-}
-
-bool TimeView::OnMousePressed(const ui::MouseEvent& event) {
- // Let the event fall through.
- return false;
-}
-
-void TimeView::OnGestureEvent(ui::GestureEvent* event) {
- // Skip gesture handling happening in CustomButton so that the container views
- // receive and handle them properly.
- // TODO(mohsen): Refactor TimeView/DateView classes so that they are not
- // ActionableView anymore. Create an ActionableView as a container for when
- // needed.
-}
-
-void TimeView::UpdateClockLayout(ClockLayout clock_layout) {
- SetBorderFromLayout(clock_layout);
- if (clock_layout == ClockLayout::HORIZONTAL_CLOCK) {
- RemoveChildView(vertical_label_hours_.get());
- RemoveChildView(vertical_label_minutes_.get());
- SetLayoutManager(new views::FillLayout());
- AddChildView(horizontal_label_.get());
- } else {
- const bool is_material_design = MaterialDesignController::IsShelfMaterial();
- RemoveChildView(horizontal_label_.get());
- views::GridLayout* layout = new views::GridLayout(this);
- SetLayoutManager(layout);
- const int kColumnId = 0;
- views::ColumnSet* columns = layout->AddColumnSet(kColumnId);
- columns->AddPaddingColumn(0, kVerticalClockLeftPadding);
- columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER,
- 0, views::GridLayout::USE_PREF, 0, 0);
- layout->AddPaddingRow(
- 0, is_material_design ? kClockLeadingPadding
- : kTrayLabelItemVerticalPaddingVerticalAlignment);
- layout->StartRow(0, kColumnId);
- layout->AddView(vertical_label_hours_.get());
- layout->StartRow(0, kColumnId);
- layout->AddView(vertical_label_minutes_.get());
- layout->AddPaddingRow(
- 0,
- is_material_design
- ? kTrayImageItemPadding + kVerticalClockMinutesTopOffsetMD
- : kTrayLabelItemVerticalPaddingVerticalAlignment);
- }
- Layout();
-}
-
-void TimeView::SetBorderFromLayout(ClockLayout clock_layout) {
- if (clock_layout == ClockLayout::HORIZONTAL_CLOCK) {
- SetBorder(views::CreateEmptyBorder(
- gfx::Insets(0,
- UseMd() ? kTrayImageItemPadding
- : kTrayLabelItemHorizontalPaddingBottomAlignment)));
- } else {
- SetBorder(views::NullBorder());
- }
-}
-
-void TimeView::SetupLabels() {
- horizontal_label_.reset(new views::Label());
- SetupLabel(horizontal_label_.get());
- vertical_label_hours_.reset(new views::Label());
- SetupLabel(vertical_label_hours_.get());
- vertical_label_minutes_.reset(new views::Label());
- SetupLabel(vertical_label_minutes_.get());
- // TODO(estade): this should use the NativeTheme's secondary text color.
- vertical_label_minutes_->SetEnabledColor(kVerticalClockMinuteColor);
- // Pull the minutes up closer to the hours by using a negative top border.
- vertical_label_minutes_->SetBorder(
- views::CreateEmptyBorder(MaterialDesignController::IsShelfMaterial()
- ? kVerticalClockMinutesTopOffsetMD
- : kVerticalClockMinutesTopOffset,
- 0, 0, 0));
-}
-
-void TimeView::SetupLabel(views::Label* label) {
- label->set_owned_by_client();
- SetupLabelForTray(label);
- label->SetElideBehavior(gfx::NO_ELIDE);
-}
-
-} // namespace tray
-} // namespace ash
« no previous file with comments | « ash/common/system/date/date_view.h ('k') | ash/common/system/date/date_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698