Chromium Code Reviews| Index: ash/common/system/chromeos/network/tray_sms.cc |
| diff --git a/ash/common/system/chromeos/network/tray_sms.cc b/ash/common/system/chromeos/network/tray_sms.cc |
| deleted file mode 100644 |
| index a66886308ce283668e8021676646bbf9dab10b54..0000000000000000000000000000000000000000 |
| --- a/ash/common/system/chromeos/network/tray_sms.cc |
| +++ /dev/null |
| @@ -1,428 +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/chromeos/network/tray_sms.h" |
| - |
| -#include <utility> |
| - |
| -#include "ash/common/material_design/material_design_controller.h" |
| -#include "ash/common/metrics/user_metrics_action.h" |
| -#include "ash/common/system/tray/fixed_sized_scroll_view.h" |
| -#include "ash/common/system/tray/system_tray.h" |
| -#include "ash/common/system/tray/system_tray_bubble.h" |
| -#include "ash/common/system/tray/tray_constants.h" |
| -#include "ash/common/system/tray/tray_details_view.h" |
| -#include "ash/common/system/tray/tray_item_more.h" |
| -#include "ash/common/system/tray/tray_item_view.h" |
| -#include "ash/common/system/tray/tray_notification_view.h" |
| -#include "ash/common/wm_shell.h" |
| -#include "ash/resources/vector_icons/vector_icons.h" |
| -#include "base/memory/ptr_util.h" |
| -#include "base/strings/string_number_conversions.h" |
| -#include "base/strings/utf_string_conversions.h" |
| -#include "chromeos/network/network_event_log.h" |
| -#include "chromeos/network/network_handler.h" |
| -#include "grit/ash_resources.h" |
| -#include "grit/ash_strings.h" |
| -#include "ui/base/l10n/l10n_util.h" |
| -#include "ui/base/resource/resource_bundle.h" |
| -#include "ui/gfx/paint_vector_icon.h" |
| -#include "ui/views/bubble/tray_bubble_view.h" |
| -#include "ui/views/controls/image_view.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/view.h" |
| - |
| -namespace { |
| - |
| -// Min height of the list of messages in the popup. |
| -const int kMessageListMinHeight = 200; |
| -// Top/bottom padding of the text items. |
| -const int kPaddingVertical = 10; |
| - |
| -const char kSmsNumberKey[] = "number"; |
| -const char kSmsTextKey[] = "text"; |
| - |
| -bool GetMessageFromDictionary(const base::DictionaryValue* message, |
| - std::string* number, |
| - std::string* text) { |
| - if (!message->GetStringWithoutPathExpansion(kSmsNumberKey, number)) |
| - return false; |
| - if (!message->GetStringWithoutPathExpansion(kSmsTextKey, text)) |
| - return false; |
| - return true; |
| -} |
| - |
| -} // namespace |
| - |
| -namespace ash { |
| - |
| -class TraySms::SmsDefaultView : public TrayItemMore { |
| - public: |
| - explicit SmsDefaultView(TraySms* owner) : TrayItemMore(owner, true) { |
| - if (MaterialDesignController::UseMaterialDesignSystemIcons()) { |
| - SetImage(gfx::CreateVectorIcon(kSystemMenuSmsIcon, kMenuIconSize, |
| - kMenuIconColor)); |
| - } else { |
| - SetImage(*ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| - IDR_AURA_UBER_TRAY_SMS)); |
| - } |
| - Update(); |
| - } |
| - |
| - ~SmsDefaultView() override {} |
| - |
| - void Update() { |
| - int message_count = static_cast<TraySms*>(owner())->messages().GetSize(); |
| - // TODO(jshin): Currently, a tabular format is used ("SMS Messages: |
| - // <count>"). Check with UX if '<count> SMS messages' with a proper plural |
| - // support is desired. |
| - base::string16 label = l10n_util::GetStringFUTF16Int( |
| - IDS_ASH_STATUS_TRAY_SMS_MESSAGES, message_count); |
| - SetLabel(label); |
| - SetAccessibleName(label); |
| - } |
| - |
| - private: |
| - DISALLOW_COPY_AND_ASSIGN(SmsDefaultView); |
| -}; |
| - |
| -// An entry (row) in SmsDetailedView or NotificationView. |
| -class TraySms::SmsMessageView : public views::View, |
| - public views::ButtonListener { |
| - public: |
| - enum ViewType { VIEW_DETAILED, VIEW_NOTIFICATION }; |
| - |
| - SmsMessageView(TraySms* owner, |
| - ViewType view_type, |
| - size_t index, |
| - const std::string& number, |
| - const std::string& message) |
| - : owner_(owner), index_(index) { |
| - // TODO(jshin): Convert ASCII digits in |number| (phone number) to native |
| - // digits if necessary. |number| can contain non-digit characters and may |
| - // have to be converted one-by-one or use libphonenumber's formating API. |
| - number_label_ = new views::Label( |
| - l10n_util::GetStringFUTF16(IDS_ASH_STATUS_TRAY_SMS_NUMBER, |
| - base::UTF8ToUTF16(number)), |
| - ui::ResourceBundle::GetSharedInstance().GetFontList( |
| - ui::ResourceBundle::BoldFont)); |
| - number_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| - |
| - message_label_ = new views::Label(base::UTF8ToUTF16(message)); |
| - message_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| - message_label_->SetMultiLine(true); |
| - |
| - if (view_type == VIEW_DETAILED) |
| - LayoutDetailedView(); |
| - else |
| - LayoutNotificationView(); |
| - } |
| - |
| - ~SmsMessageView() override {} |
| - |
| - // Overridden from ButtonListener. |
| - void ButtonPressed(views::Button* sender, const ui::Event& event) override { |
| - if (owner_->RemoveMessage(index_)) { |
| - WmShell::Get()->RecordUserMetricsAction( |
| - UMA_STATUS_AREA_SMS_DETAILED_DISMISS_MSG); |
| - } |
| - owner_->Update(false); |
| - } |
| - |
| - private: |
| - void LayoutDetailedView() { |
| - views::ImageButton* close_button = new views::ImageButton(this); |
| - close_button->SetImage( |
| - views::CustomButton::STATE_NORMAL, |
| - ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| - IDR_AURA_UBER_TRAY_SMS_DISMISS)); |
|
tdanderson
2017/01/26 22:19:05
This resource is no longer used anywhere, so as pa
yiyix
2017/02/02 20:43:55
Done.
|
| - const int msg_width = |
| - owner_->system_tray() |
| - ->GetSystemBubble() |
| - ->bubble_view() |
| - ->GetPreferredSize() |
| - .width() - |
| - (kNotificationIconWidth + kTrayPopupPaddingHorizontal * 2); |
| - message_label_->SizeToFit(msg_width); |
| - |
| - views::GridLayout* layout = new views::GridLayout(this); |
| - SetLayoutManager(layout); |
| - |
| - views::ColumnSet* columns = layout->AddColumnSet(0); |
| - |
| - // Message |
| - columns->AddPaddingColumn(0, kTrayPopupPaddingHorizontal); |
| - columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, |
| - 0 /* resize percent */, views::GridLayout::FIXED, |
| - msg_width, msg_width); |
| - |
| - // Close button |
| - columns->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, |
| - 0, /* resize percent */ |
| - views::GridLayout::FIXED, kNotificationIconWidth, |
| - kNotificationIconWidth); |
| - |
| - layout->AddPaddingRow(0, kPaddingVertical); |
| - layout->StartRow(0, 0); |
| - layout->AddView(number_label_); |
| - layout->AddView(close_button, 1, 2); // 2 rows for icon |
| - layout->StartRow(0, 0); |
| - layout->AddView(message_label_); |
| - |
| - layout->AddPaddingRow(0, kPaddingVertical); |
| - } |
| - |
| - void LayoutNotificationView() { |
| - SetLayoutManager( |
| - new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1)); |
| - AddChildView(number_label_); |
| - message_label_->SizeToFit(kTrayNotificationContentsWidth); |
| - AddChildView(message_label_); |
| - } |
| - |
| - TraySms* owner_; |
| - size_t index_; |
| - views::Label* number_label_; |
| - views::Label* message_label_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(SmsMessageView); |
| -}; |
| - |
| -class TraySms::SmsDetailedView : public TrayDetailsView { |
| - public: |
| - explicit SmsDetailedView(TraySms* owner) : TrayDetailsView(owner) { |
| - Init(); |
| - Update(); |
| - } |
| - |
| - ~SmsDetailedView() override {} |
| - |
| - void Init() { |
| - CreateScrollableList(); |
| - CreateTitleRow(IDS_ASH_STATUS_TRAY_SMS); |
| - } |
| - |
| - void Update() { |
| - UpdateMessageList(); |
| - Layout(); |
| - SchedulePaint(); |
| - } |
| - |
| - // Overridden from views::View. |
| - gfx::Size GetPreferredSize() const override { |
| - gfx::Size preferred_size = TrayDetailsView::GetPreferredSize(); |
| - if (preferred_size.height() < kMessageListMinHeight) |
| - preferred_size.set_height(kMessageListMinHeight); |
| - return preferred_size; |
| - } |
| - |
| - private: |
| - void UpdateMessageList() { |
| - const base::ListValue& messages = |
| - static_cast<TraySms*>(owner())->messages(); |
| - scroll_content()->RemoveAllChildViews(true); |
| - for (size_t index = 0; index < messages.GetSize(); ++index) { |
| - const base::DictionaryValue* message = nullptr; |
| - if (!messages.GetDictionary(index, &message)) { |
| - LOG(ERROR) << "SMS message not a dictionary at: " << index; |
| - continue; |
| - } |
| - std::string number, text; |
| - if (!GetMessageFromDictionary(message, &number, &text)) { |
| - LOG(ERROR) << "Error parsing SMS message"; |
| - continue; |
| - } |
| - SmsMessageView* msgview = new SmsMessageView( |
| - static_cast<TraySms*>(owner()), SmsMessageView::VIEW_DETAILED, index, |
| - number, text); |
| - scroll_content()->AddChildView(msgview); |
| - } |
| - scroller()->Layout(); |
| - } |
| - |
| - DISALLOW_COPY_AND_ASSIGN(SmsDetailedView); |
| -}; |
| - |
| -class TraySms::SmsNotificationView : public TrayNotificationView { |
| - public: |
| - SmsNotificationView(TraySms* owner, |
| - size_t message_index, |
| - const std::string& number, |
| - const std::string& text) |
| - : TrayNotificationView(owner, IDR_AURA_UBER_TRAY_SMS), |
| - message_index_(message_index) { |
| - SmsMessageView* message_view = new SmsMessageView( |
| - owner, SmsMessageView::VIEW_NOTIFICATION, message_index_, number, text); |
| - InitView(message_view); |
| - } |
| - |
| - void Update(size_t message_index, |
| - const std::string& number, |
| - const std::string& text) { |
| - SmsMessageView* message_view = |
| - new SmsMessageView(tray_sms(), SmsMessageView::VIEW_NOTIFICATION, |
| - message_index_, number, text); |
| - UpdateView(message_view); |
| - } |
| - |
| - // Overridden from TrayNotificationView: |
| - void OnClose() override { |
| - if (tray_sms()->RemoveMessage(message_index_)) { |
| - WmShell::Get()->RecordUserMetricsAction( |
| - UMA_STATUS_AREA_SMS_NOTIFICATION_DISMISS_MSG); |
| - } |
| - } |
| - |
| - void OnClickAction() override { owner()->PopupDetailedView(0, true); } |
| - |
| - private: |
| - TraySms* tray_sms() { return static_cast<TraySms*>(owner()); } |
| - |
| - size_t message_index_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(SmsNotificationView); |
| -}; |
| - |
| -TraySms::TraySms(SystemTray* system_tray) |
| - : SystemTrayItem(system_tray, UMA_SMS), |
| - default_(nullptr), |
| - detailed_(nullptr), |
| - notification_(nullptr) { |
| - // TODO(armansito): SMS could be a special case for cellular that requires a |
| - // user (perhaps the owner) to be logged in. If that is the case, then an |
| - // additional check should be done before subscribing for SMS notifications. |
| - if (chromeos::NetworkHandler::IsInitialized()) |
| - chromeos::NetworkHandler::Get()->network_sms_handler()->AddObserver(this); |
| -} |
| - |
| -TraySms::~TraySms() { |
| - if (chromeos::NetworkHandler::IsInitialized()) { |
| - chromeos::NetworkHandler::Get()->network_sms_handler()->RemoveObserver( |
| - this); |
| - } |
| -} |
| - |
| -views::View* TraySms::CreateDefaultView(LoginStatus status) { |
| - CHECK(default_ == nullptr); |
| - default_ = new SmsDefaultView(this); |
| - default_->SetVisible(!messages_.empty()); |
| - return default_; |
| -} |
| - |
| -views::View* TraySms::CreateDetailedView(LoginStatus status) { |
| - CHECK(detailed_ == nullptr); |
| - HideNotificationView(); |
| - if (messages_.empty()) |
| - return nullptr; |
| - detailed_ = new SmsDetailedView(this); |
| - WmShell::Get()->RecordUserMetricsAction(UMA_STATUS_AREA_DETAILED_SMS_VIEW); |
| - return detailed_; |
| -} |
| - |
| -views::View* TraySms::CreateNotificationView(LoginStatus status) { |
| - CHECK(notification_ == nullptr); |
| - if (detailed_) |
| - return nullptr; |
| - size_t index; |
| - std::string number, text; |
| - if (GetLatestMessage(&index, &number, &text)) |
| - notification_ = new SmsNotificationView(this, index, number, text); |
| - return notification_; |
| -} |
| - |
| -void TraySms::DestroyDefaultView() { |
| - default_ = nullptr; |
| -} |
| - |
| -void TraySms::DestroyDetailedView() { |
| - detailed_ = nullptr; |
| -} |
| - |
| -void TraySms::DestroyNotificationView() { |
| - notification_ = nullptr; |
| -} |
| - |
| -void TraySms::MessageReceived(const base::DictionaryValue& message) { |
| - std::string message_text; |
| - if (!message.GetStringWithoutPathExpansion( |
| - chromeos::NetworkSmsHandler::kTextKey, &message_text)) { |
| - NET_LOG_ERROR("SMS message contains no content.", ""); |
| - return; |
| - } |
| - // TODO(armansito): A message might be due to a special "Message Waiting" |
| - // state that the message is in. Once SMS handling moves to shill, such |
| - // messages should be filtered there so that this check becomes unnecessary. |
| - if (message_text.empty()) { |
| - NET_LOG_DEBUG("SMS has empty content text. Ignoring.", ""); |
| - return; |
| - } |
| - std::string message_number; |
| - if (!message.GetStringWithoutPathExpansion( |
| - chromeos::NetworkSmsHandler::kNumberKey, &message_number)) { |
| - NET_LOG_DEBUG("SMS contains no number. Ignoring.", ""); |
| - return; |
| - } |
| - |
| - NET_LOG_DEBUG( |
| - "Received SMS from: " + message_number + " with text: " + message_text, |
| - ""); |
| - |
| - auto dict = base::MakeUnique<base::DictionaryValue>(); |
| - dict->SetString(kSmsNumberKey, message_number); |
| - dict->SetString(kSmsTextKey, message_text); |
| - messages_.Append(std::move(dict)); |
| - Update(true); |
| -} |
| - |
| -bool TraySms::GetLatestMessage(size_t* index, |
| - std::string* number, |
| - std::string* text) { |
| - if (messages_.empty()) |
| - return false; |
| - base::DictionaryValue* message; |
| - size_t message_index = messages_.GetSize() - 1; |
| - if (!messages_.GetDictionary(message_index, &message)) |
| - return false; |
| - if (!GetMessageFromDictionary(message, number, text)) |
| - return false; |
| - *index = message_index; |
| - return true; |
| -} |
| - |
| -bool TraySms::RemoveMessage(size_t index) { |
| - if (index >= messages_.GetSize()) |
| - return false; |
| - messages_.Remove(index, nullptr); |
| - return true; |
| -} |
| - |
| -void TraySms::Update(bool notify) { |
| - if (messages_.empty()) { |
| - if (default_) |
| - default_->SetVisible(false); |
| - if (detailed_) |
| - HideDetailedView(true /* animate */); |
| - HideNotificationView(); |
| - } else { |
| - if (default_) { |
| - default_->SetVisible(true); |
| - default_->Update(); |
| - } |
| - if (detailed_) |
| - detailed_->Update(); |
| - if (notification_) { |
| - size_t index; |
| - std::string number, text; |
| - if (GetLatestMessage(&index, &number, &text)) |
| - notification_->Update(index, number, text); |
| - } else if (notify) { |
| - ShowNotificationView(); |
| - } |
| - } |
| -} |
| - |
| -} // namespace ash |