Index: ash/system/bluetooth/tray_bluetooth.cc |
diff --git a/ash/system/bluetooth/tray_bluetooth.cc b/ash/system/bluetooth/tray_bluetooth.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2f371e67b2c90e190fe45ba0c3dce5e46528bb3a |
--- /dev/null |
+++ b/ash/system/bluetooth/tray_bluetooth.cc |
@@ -0,0 +1,209 @@ |
+// 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/system/bluetooth/tray_bluetooth.h" |
+ |
+#include "ash/shell.h" |
+#include "ash/system/tray/system_tray.h" |
+#include "ash/system/tray/system_tray_delegate.h" |
+#include "ash/system/tray/tray_constants.h" |
+#include "ash/system/tray/tray_item_more.h" |
+#include "ash/system/tray/tray_utils.h" |
+#include "grit/ash_strings.h" |
+#include "grit/ui_resources.h" |
+#include "ui/base/resource/resource_bundle.h" |
+#include "ui/gfx/image/image.h" |
+#include "ui/views/controls/image_view.h" |
+#include "ui/views/controls/label.h" |
+#include "ui/views/layout/box_layout.h" |
+ |
+namespace ash { |
+namespace internal { |
+ |
+namespace tray { |
+ |
+class BluetoothDefaultView : public TrayItemMore { |
+ public: |
+ explicit BluetoothDefaultView(SystemTrayItem* owner) |
+ : TrayItemMore(owner) { |
+ SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
+ kTrayPopupPaddingHorizontal, 0, kTrayPopupPaddingBetweenItems)); |
+ ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); |
+ |
+ views::ImageView* icon = new views::ImageView; |
+ icon->SetImage(bundle.GetImageNamed( |
+ IDR_AURA_UBER_TRAY_BLUETOOTH_LARGE).ToSkBitmap()); |
+ AddChildView(icon); |
+ |
+ // TODO(sad): Use the correct label depending on the status. |
+ label_ = new views::Label; |
+ AddChildView(label_); |
+ UpdateLabel(); |
+ |
+ AddMore(); |
+ } |
+ |
+ virtual ~BluetoothDefaultView() {} |
+ |
+ void UpdateLabel() { |
+ ash::SystemTrayDelegate* delegate = |
+ ash::Shell::GetInstance()->tray_delegate(); |
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
+ label_->SetText(rb.GetLocalizedString(delegate->GetBluetoothEnabled() ? |
+ IDS_ASH_STATUS_TRAY_BLUETOOTH_CONNECTED : |
+ IDS_ASH_STATUS_TRAY_BLUETOOTH_DISABLED)); |
+ } |
+ |
+ private: |
+ views::Label* label_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BluetoothDefaultView); |
+}; |
+ |
+class BluetoothDetailedView : public views::View, |
+ public ViewClickListener { |
+ public: |
+ BluetoothDetailedView() |
+ : header_(NULL), |
+ add_device_(NULL), |
+ toggle_bluetooth_(NULL) { |
+ SetLayoutManager(new views::BoxLayout( |
+ views::BoxLayout::kVertical, 1, 1, 1)); |
+ set_background(views::Background::CreateSolidBackground(kBackgroundColor)); |
+ Update(); |
+ } |
+ |
+ virtual ~BluetoothDetailedView() {} |
+ |
+ void Update() { |
+ RemoveAllChildViews(true); |
+ |
+ header_ = NULL; |
+ add_device_ = NULL; |
+ toggle_bluetooth_ = NULL; |
+ |
+ AppendHeaderEntry(); |
+ AppendDeviceList(); |
+ AppendSettingsEntries(); |
+ |
+ Layout(); |
+ } |
+ |
+ private: |
+ void AppendHeaderEntry() { |
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
+ HoverHighlightView* container = new HoverHighlightView(this); |
+ container->SetLayoutManager(new |
+ views::BoxLayout(views::BoxLayout::kHorizontal, 0, 3, 5)); |
+ views::ImageView* back = new FixedWidthImageView; |
+ back->SetImage(rb.GetImageNamed(IDR_AURA_UBER_TRAY_LESS).ToSkBitmap()); |
+ container->AddChildView(back); |
+ views::Label* header = new views::Label(rb.GetLocalizedString( |
+ IDS_ASH_STATUS_TRAY_BLUETOOTH)); |
+ header->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
+ header->SetFont(header->font().DeriveFont(4)); |
+ container->AddChildView(header); |
+ AddChildView(container); |
+ header_ = container; |
+ } |
+ |
+ void AppendDeviceList() { |
+ } |
+ |
+ void AppendSettingsEntries() { |
+ ash::SystemTrayDelegate* delegate = |
+ ash::Shell::GetInstance()->tray_delegate(); |
+ HoverHighlightView* container = new HoverHighlightView(this); |
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
+ container->AddLabel(rb.GetLocalizedString( |
+ delegate->GetBluetoothEnabled() ? |
+ IDS_ASH_STATUS_TRAY_DISABLE_BLUETOOTH : |
+ IDS_ASH_STATUS_TRAY_ENABLE_BLUETOOTH)); |
+ AddChildView(container); |
+ toggle_bluetooth_ = container; |
+ |
+ container = new HoverHighlightView(this); |
+ container->AddLabel(rb.GetLocalizedString( |
+ IDS_ASH_STATUS_TRAY_BLUETOOTH_ADD_DEVICE)); |
+ AddChildView(container); |
+ add_device_ = container; |
+ } |
+ |
+ // Overridden from ViewClickListener. |
+ virtual void ClickedOn(views::View* sender) OVERRIDE { |
+ ash::SystemTrayDelegate* delegate = |
+ ash::Shell::GetInstance()->tray_delegate(); |
+ if (sender == header_) { |
Ben Goodger (Google)
2012/03/21 15:52:14
nit no braces
|
+ Shell::GetInstance()->tray()->ShowDefaultView(); |
+ } else if (sender == toggle_bluetooth_) { |
+ delegate->ToggleBluetooth(); |
+ } else if (sender == add_device_) { |
+ delegate->AddBluetoothDevice(); |
+ } else { |
Ben Goodger (Google)
2012/03/21 15:52:14
que?
sadrul
2012/03/21 16:16:42
Added a TODO here. This will be a block of code. S
|
+ } |
+ } |
+ |
+ views::View* header_; |
+ views::View* add_device_; |
+ views::View* toggle_bluetooth_; |
+ views::View* settings_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BluetoothDetailedView); |
+}; |
+ |
+} // namespace tray |
+ |
+TrayBluetooth::TrayBluetooth() |
+ : TrayImageItem(IDR_AURA_UBER_TRAY_BLUETOOTH_SMALL) { |
+} |
+ |
+TrayBluetooth::~TrayBluetooth() { |
+} |
+ |
+bool TrayBluetooth::InitialVisibility() { |
+ // Hide at startup. If bluetooth is enabled, the tray-delegate will send a |
+ // notification, and this will be made visible again. |
+ return false; |
+} |
+ |
+views::View* TrayBluetooth::CreateDefaultView(user::LoginStatus status) { |
+ if (!Shell::GetInstance()->tray_delegate()->GetBluetoothAvailable()) |
+ return NULL; |
+ default_.reset(new tray::BluetoothDefaultView(this)); |
+ return default_.get(); |
+} |
+ |
+views::View* TrayBluetooth::CreateDetailedView(user::LoginStatus status) { |
+ if (!Shell::GetInstance()->tray_delegate()->GetBluetoothAvailable()) |
+ return NULL; |
+ detailed_.reset(new tray::BluetoothDetailedView); |
+ return detailed_.get(); |
+} |
+ |
+void TrayBluetooth::DestroyDefaultView() { |
+ default_.reset(); |
+} |
+ |
+void TrayBluetooth::DestroyDetailedView() { |
+ detailed_.reset(); |
+} |
+ |
+void TrayBluetooth::OnBluetoothRefresh() { |
+ BluetoothDeviceList list = |
+ Shell::GetInstance()->tray_delegate()->GetAvailableBluetoothDevices(); |
+ for (size_t i = 0; i < list.size(); ++i) { |
+ LOG(ERROR) << "Bluetooth device: \n" |
+ << " address: " << list[i].address << "\n" |
+ << " name: " << list[i].display_name << "\n" |
+ << " connected: " << list[i].connected; |
+ } |
+ image_view()->SetVisible(list.size()); |
+ if (default_.get()) |
+ default_->UpdateLabel(); |
+ if (detailed_.get()) |
+ detailed_->Update(); |
+} |
+ |
+} // namespace internal |
+} // namespace ash |