1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/send_tab_to_self/target_device_info.h"
#include "base/feature_list.h"
#include "base/strings/strcat.h"
#include "base/trace_event/trace_event.h"
#include "components/send_tab_to_self/features.h"
#include "components/strings/grit/components_strings.h"
#include "components/sync_device_info/device_info.h"
#include "third_party/abseil-cpp/absl/strings/ascii.h"
#include "ui/base/l10n/l10n_util.h"
namespace {
std::string GetDeviceType(syncer::DeviceInfo::FormFactor form_factor) {
int device_type_message_id = -1;
switch (form_factor) {
case syncer::DeviceInfo::FormFactor::kDesktop:
device_type_message_id = IDS_SHARING_DEVICE_TYPE_COMPUTER;
break;
case syncer::DeviceInfo::FormFactor::kAutomotive:
case syncer::DeviceInfo::FormFactor::kWearable:
case syncer::DeviceInfo::FormFactor::kTv:
case syncer::DeviceInfo::FormFactor::kUnknown:
device_type_message_id = IDS_SHARING_DEVICE_TYPE_DEVICE;
break;
case syncer::DeviceInfo::FormFactor::kPhone:
device_type_message_id = IDS_SHARING_DEVICE_TYPE_PHONE;
break;
case syncer::DeviceInfo::FormFactor::kTablet:
device_type_message_id = IDS_SHARING_DEVICE_TYPE_TABLET;
break;
}
return l10n_util::GetStringUTF8(device_type_message_id);
}
std::string CapitalizeWords(const std::string& sentence) {
std::string capitalized_sentence;
bool use_upper_case = true;
for (char ch : sentence) {
capitalized_sentence +=
(use_upper_case ? absl::ascii_toupper(static_cast<unsigned char>(ch))
: ch);
use_upper_case = !absl::ascii_isalpha(static_cast<unsigned char>(ch));
}
return capitalized_sentence;
}
} // namespace
namespace send_tab_to_self {
TargetDeviceInfo::TargetDeviceInfo(
const std::string& full_name,
const std::string& short_name,
const std::string& cache_guid,
const syncer::DeviceInfo::FormFactor form_factor,
base::Time last_updated_timestamp)
: full_name(full_name),
short_name(short_name),
device_name(short_name),
cache_guid(cache_guid),
form_factor(form_factor),
last_updated_timestamp(last_updated_timestamp) {}
TargetDeviceInfo::TargetDeviceInfo(const TargetDeviceInfo& other) = default;
TargetDeviceInfo::~TargetDeviceInfo() = default;
bool TargetDeviceInfo::operator==(const TargetDeviceInfo& rhs) const {
return this->full_name == rhs.full_name &&
this->short_name == rhs.short_name &&
this->device_name == rhs.device_name &&
this->cache_guid == rhs.cache_guid &&
this->form_factor == rhs.form_factor &&
this->last_updated_timestamp == rhs.last_updated_timestamp;
}
SharingDeviceNames GetSharingDeviceNames(const syncer::DeviceInfo* device) {
TRACE_EVENT0("ui", "send_tab_to_self::GetSharingDeviceNames");
DCHECK(device);
std::string model = device->model_name();
// 1. Skip renaming for M78- devices where HardwareInfo is not available.
// 2. Skip renaming if client_name is high quality i.e. not equals to model.
if (model.empty() || model != device->client_name()) {
return {device->client_name(), device->client_name()};
}
std::string manufacturer = CapitalizeWords(device->manufacturer_name());
// For chromeOS, return manufacturer + model.
if (device->os_type() == syncer::DeviceInfo::OsType::kChromeOsAsh) {
std::string name = base::StrCat({manufacturer, " ", model});
return {name, name};
}
// Internal names of Apple devices are formatted as MacbookPro2,3 or
// iPhone2,1 or Ipad4,1.
if (manufacturer == "Apple Inc.") {
return {model, model.substr(0, model.find_first_of("0123456789,"))};
}
std::string short_name =
base::StrCat({manufacturer, " ", GetDeviceType(device->form_factor())});
std::string full_name = base::StrCat({short_name, " ", model});
return {full_name, short_name};
}
} // namespace send_tab_to_self
|