| Index: ash/system/chromeos/audio/audio_detailed_view.cc
|
| diff --git a/ash/system/chromeos/audio/audio_detailed_view.cc b/ash/system/chromeos/audio/audio_detailed_view.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..803f4ddc6a8c4ee2ad9a57de056bbc8b76617252
|
| --- /dev/null
|
| +++ b/ash/system/chromeos/audio/audio_detailed_view.cc
|
| @@ -0,0 +1,177 @@
|
| +// Copyright 2014 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/chromeos/audio/audio_detailed_view.h"
|
| +
|
| +#include "ash/system/tray/fixed_sized_scroll_view.h"
|
| +#include "ash/system/tray/hover_highlight_view.h"
|
| +#include "ash/system/tray/tray_constants.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "chromeos/audio/cras_audio_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/views/border.h"
|
| +#include "ui/views/controls/label.h"
|
| +
|
| +namespace {
|
| +
|
| +base::string16 GetAudioDeviceName(const chromeos::AudioDevice& device) {
|
| + switch(device.type) {
|
| + case chromeos::AUDIO_TYPE_HEADPHONE:
|
| + return l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_AUDIO_HEADPHONE);
|
| + case chromeos::AUDIO_TYPE_INTERNAL_SPEAKER:
|
| + return l10n_util::GetStringUTF16(
|
| + IDS_ASH_STATUS_TRAY_AUDIO_INTERNAL_SPEAKER);
|
| + case chromeos::AUDIO_TYPE_INTERNAL_MIC:
|
| + return l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_AUDIO_INTERNAL_MIC);
|
| + case chromeos::AUDIO_TYPE_USB:
|
| + return l10n_util::GetStringFUTF16(
|
| + IDS_ASH_STATUS_TRAY_AUDIO_USB_DEVICE,
|
| + base::UTF8ToUTF16(device.display_name));
|
| + case chromeos::AUDIO_TYPE_BLUETOOTH:
|
| + return l10n_util::GetStringFUTF16(
|
| + IDS_ASH_STATUS_TRAY_AUDIO_BLUETOOTH_DEVICE,
|
| + base::UTF8ToUTF16(device.display_name));
|
| + case chromeos::AUDIO_TYPE_HDMI:
|
| + return l10n_util::GetStringFUTF16(
|
| + IDS_ASH_STATUS_TRAY_AUDIO_HDMI_DEVICE,
|
| + base::UTF8ToUTF16(device.display_name));
|
| + default:
|
| + return base::UTF8ToUTF16(device.display_name);
|
| + }
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +using chromeos::CrasAudioHandler;
|
| +
|
| +namespace ash {
|
| +namespace internal {
|
| +namespace tray {
|
| +
|
| +AudioDetailedView::AudioDetailedView(SystemTrayItem* owner,
|
| + user::LoginStatus login)
|
| + : TrayDetailsView(owner),
|
| + login_(login) {
|
| + CreateItems();
|
| + Update();
|
| +}
|
| +
|
| +AudioDetailedView::~AudioDetailedView() {
|
| +}
|
| +
|
| +void AudioDetailedView::Update() {
|
| + UpdateAudioDevices();
|
| + Layout();
|
| +}
|
| +
|
| +void AudioDetailedView::AddScrollListInfoItem(const base::string16& text) {
|
| + views::Label* label = new views::Label(
|
| + text,
|
| + ui::ResourceBundle::GetSharedInstance().GetFontList(
|
| + ui::ResourceBundle::BoldFont));
|
| +
|
| + // Align info item with checkbox items
|
| + int margin = kTrayPopupPaddingHorizontal +
|
| + kTrayPopupDetailsLabelExtraLeftMargin;
|
| + int left_margin = 0;
|
| + int right_margin = 0;
|
| + if (base::i18n::IsRTL())
|
| + right_margin = margin;
|
| + else
|
| + left_margin = margin;
|
| +
|
| + label->SetBorder(views::Border::CreateEmptyBorder(
|
| + ash::kTrayPopupPaddingBetweenItems,
|
| + left_margin,
|
| + ash::kTrayPopupPaddingBetweenItems,
|
| + right_margin));
|
| + label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| + label->SetEnabledColor(SkColorSetARGB(192, 0, 0, 0));
|
| +
|
| + scroll_content()->AddChildView(label);
|
| +}
|
| +
|
| +HoverHighlightView* AudioDetailedView::AddScrollListItem(
|
| + const base::string16& text,
|
| + gfx::Font::FontStyle style,
|
| + bool checked) {
|
| + HoverHighlightView* container = new HoverHighlightView(this);
|
| + container->AddCheckableLabel(text, style, checked);
|
| + scroll_content()->AddChildView(container);
|
| + return container;
|
| +}
|
| +
|
| +void AudioDetailedView::CreateHeaderEntry() {
|
| + CreateSpecialRow(IDS_ASH_STATUS_TRAY_AUDIO, this);
|
| +}
|
| +
|
| +void AudioDetailedView::CreateItems() {
|
| + CreateScrollableList();
|
| + CreateHeaderEntry();
|
| +}
|
| +
|
| +void AudioDetailedView::UpdateAudioDevices() {
|
| + output_devices_.clear();
|
| + input_devices_.clear();
|
| + chromeos::AudioDeviceList devices;
|
| + CrasAudioHandler::Get()->GetAudioDevices(&devices);
|
| + for (size_t i = 0; i < devices.size(); ++i) {
|
| + if (devices[i].is_input)
|
| + input_devices_.push_back(devices[i]);
|
| + else
|
| + output_devices_.push_back(devices[i]);
|
| + }
|
| + UpdateScrollableList();
|
| +}
|
| +
|
| +void AudioDetailedView::UpdateScrollableList() {
|
| + scroll_content()->RemoveAllChildViews(true);
|
| + device_map_.clear();
|
| +
|
| + // Add audio output devices.
|
| + AddScrollListInfoItem(
|
| + l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_AUDIO_OUTPUT));
|
| + for (size_t i = 0; i < output_devices_.size(); ++i) {
|
| + HoverHighlightView* container = AddScrollListItem(
|
| + GetAudioDeviceName(output_devices_[i]),
|
| + gfx::Font::NORMAL,
|
| + output_devices_[i].active); /* checkmark if active */
|
| + device_map_[container] = output_devices_[i];
|
| + }
|
| +
|
| + AddScrollSeparator();
|
| +
|
| + // Add audio input devices.
|
| + AddScrollListInfoItem(
|
| + l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_AUDIO_INPUT));
|
| + for (size_t i = 0; i < input_devices_.size(); ++i) {
|
| + HoverHighlightView* container = AddScrollListItem(
|
| + GetAudioDeviceName(input_devices_[i]),
|
| + gfx::Font::NORMAL,
|
| + input_devices_[i].active); /* checkmark if active */
|
| + device_map_[container] = input_devices_[i];
|
| + }
|
| +
|
| + scroll_content()->SizeToPreferredSize();
|
| + scroller()->Layout();
|
| +}
|
| +
|
| +void AudioDetailedView::OnViewClicked(views::View* sender) {
|
| + if (sender == footer()->content()) {
|
| + TransitionToDefaultView();
|
| + } else {
|
| + AudioDeviceMap::iterator iter = device_map_.find(sender);
|
| + if (iter == device_map_.end())
|
| + return;
|
| + chromeos::AudioDevice& device = iter->second;
|
| + CrasAudioHandler::Get()->SwitchToDevice(device);
|
| + }
|
| +}
|
| +
|
| +} // namespace tray
|
| +} // namespace internal
|
| +} // namespace ash
|
|
|