Show device connection and paired status in chooser on non-Mac
This CL added code to show an icon for connected device in the
chooser, and added "- Paired" text after the device name if the
device is paired.
I uploaded some screenshots from ChromeOS in the issue page.
BUG=543466
Review-Url: https://codereview.chromium.org/2330593002
Cr-Commit-Position: refs/heads/master@{#418916}
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 38f2a64..753419d 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -15113,6 +15113,9 @@
<message name="IDS_DEVICE_CHOOSER_PAIRED_STATUS_TEXT" desc="The label that is used to inform the user that the device is paired.">
Paired
</message>
+ <message name="IDS_DEVICE_CHOOSER_DEVICE_NAME_AND_PAIRED_STATUS_TEXT" desc="Text of the device name and paired status.">
+ <ph name="DEVICE_NAME">$1<ex>device name</ex></ph> - Paired
+ </message>
</if>
<if expr="is_android">
diff --git a/chrome/browser/ui/views/chooser_content_view.cc b/chrome/browser/ui/views/chooser_content_view.cc
index dc712284..c4b1ab03 100644
--- a/chrome/browser/ui/views/chooser_content_view.cc
+++ b/chrome/browser/ui/views/chooser_content_view.cc
@@ -8,7 +8,10 @@
#include "chrome/grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/color_palette.h"
#include "ui/gfx/image/image_skia.h"
+#include "ui/gfx/paint_vector_icon.h"
+#include "ui/gfx/vector_icons_public.h"
#include "ui/resources/grit/ui_resources.h"
#include "ui/views/controls/link.h"
#include "ui/views/controls/styled_label.h"
@@ -88,7 +91,12 @@
DCHECK_GE(row, 0);
DCHECK_LT(row, num_options);
- return chooser_controller_->GetOption(static_cast<size_t>(row));
+ base::string16 text =
+ chooser_controller_->GetOption(static_cast<size_t>(row));
+ return chooser_controller_->IsPaired(row)
+ ? l10n_util::GetStringFUTF16(
+ IDS_DEVICE_CHOOSER_DEVICE_NAME_AND_PAIRED_STATUS_TEXT, text)
+ : text;
}
void ChooserContentView::SetObserver(ui::TableModelObserver* observer) {}
@@ -105,6 +113,11 @@
DCHECK_GE(row, 0);
DCHECK_LT(row, base::checked_cast<int>(num_options));
+ if (chooser_controller_->IsConnected(row)) {
+ return gfx::CreateVectorIcon(gfx::VectorIconId::BLUETOOTH_CONNECTED,
+ gfx::kChromeIconGrey);
+ }
+
int level = chooser_controller_->GetSignalStrengthLevel(row);
if (level == -1)
diff --git a/chrome/browser/ui/views/chooser_content_view_unittest.cc b/chrome/browser/ui/views/chooser_content_view_unittest.cc
index 7bc30af2..2314cd7 100644
--- a/chrome/browser/ui/views/chooser_content_view_unittest.cc
+++ b/chrome/browser/ui/views/chooser_content_view_unittest.cc
@@ -28,6 +28,12 @@
MOCK_METHOD0(OnSelectionChanged, void());
};
+base::string16 GetPairedText(const std::string& device_name) {
+ return l10n_util::GetStringFUTF16(
+ IDS_DEVICE_CHOOSER_DEVICE_NAME_AND_PAIRED_STATUS_TEXT,
+ base::ASCIIToUTF16(device_name));
+}
+
} // namespace
class ChooserContentViewTest : public views::ViewsTestBase {
@@ -100,7 +106,7 @@
MockChooserController::ConnectedPairedStatus::CONNECTED |
MockChooserController::ConnectedPairedStatus::PAIRED);
EXPECT_EQ(1, table_view_->RowCount());
- EXPECT_EQ(base::ASCIIToUTF16("a"), table_model_->GetText(0, 0));
+ EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0));
// |table_view_| should be enabled since there is an option.
EXPECT_TRUE(table_view_->enabled());
// No option selected.
@@ -144,7 +150,7 @@
mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("b"));
EXPECT_EQ(2, table_view_->RowCount());
- EXPECT_EQ(base::ASCIIToUTF16("a"), table_model_->GetText(0, 0));
+ EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0));
EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(1, 0));
EXPECT_TRUE(table_view_->enabled());
EXPECT_EQ(0, table_view_->SelectedRowCount());
@@ -153,7 +159,7 @@
// Remove a non-existent option, the number of rows should not change.
mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("non-existent"));
EXPECT_EQ(2, table_view_->RowCount());
- EXPECT_EQ(base::ASCIIToUTF16("a"), table_model_->GetText(0, 0));
+ EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0));
EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(1, 0));
EXPECT_TRUE(table_view_->enabled());
EXPECT_EQ(0, table_view_->SelectedRowCount());
@@ -161,7 +167,7 @@
mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("c"));
EXPECT_EQ(1, table_view_->RowCount());
- EXPECT_EQ(base::ASCIIToUTF16("a"), table_model_->GetText(0, 0));
+ EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0));
EXPECT_TRUE(table_view_->enabled());
EXPECT_EQ(0, table_view_->SelectedRowCount());
EXPECT_EQ(-1, table_view_->FirstSelectedRow());
@@ -200,8 +206,8 @@
MockChooserController::ConnectedPairedStatus::CONNECTED |
MockChooserController::ConnectedPairedStatus::PAIRED);
EXPECT_EQ(3, table_view_->RowCount());
- EXPECT_EQ(base::ASCIIToUTF16("a"), table_model_->GetText(0, 0));
- EXPECT_EQ(base::ASCIIToUTF16("d"), table_model_->GetText(1, 0));
+ EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0));
+ EXPECT_EQ(GetPairedText("d"), table_model_->GetText(1, 0));
EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(2, 0));
EXPECT_TRUE(table_view_->enabled());
EXPECT_EQ(0, table_view_->SelectedRowCount());
@@ -263,7 +269,7 @@
mock_chooser_controller_->OptionRemoved(base::ASCIIToUTF16("d"));
EXPECT_EQ(2, table_view_->RowCount());
- EXPECT_EQ(base::ASCIIToUTF16("a"), table_model_->GetText(0, 0));
+ EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0));
EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(1, 0));
EXPECT_TRUE(table_view_->enabled());
EXPECT_EQ(0, table_view_->SelectedRowCount());
@@ -429,8 +435,8 @@
EXPECT_EQ(1, table_view_->SelectedRowCount());
EXPECT_EQ(1, table_view_->FirstSelectedRow());
- EXPECT_EQ(base::ASCIIToUTF16("a"), table_model_->GetText(0, 0));
- EXPECT_EQ(base::ASCIIToUTF16("d"), table_model_->GetText(1, 0));
+ EXPECT_EQ(GetPairedText("a"), table_model_->GetText(0, 0));
+ EXPECT_EQ(GetPairedText("d"), table_model_->GetText(1, 0));
EXPECT_EQ(base::ASCIIToUTF16("c"), table_model_->GetText(2, 0));
}