blob: 5d134a93c9db569a3bea4132e78ad1490b5db9b0 [file] [log] [blame]
// Copyright 2017 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 "chromeos/components/tether/device_status_util.h"
namespace chromeos {
namespace tether {
namespace {
const char kDefaultCellCarrierName[] = "unknown-carrier";
// Android signal strength is measured between 0 and 4 (inclusive), but Chrome
// OS signal strength is measured between 0 and 100 (inclusive). In order to
// convert between Android signal strength to Chrome OS signal strength, the
// value must be multiplied by the below value.
const int32_t kAndroidTetherHostToChromeOSSignalStrengthMultiplier = 25;
int32_t ForceBetweenZeroAndOneHundred(int32_t value) {
return std::min(std::max(value, 0), 100);
}
} // namespace
void NormalizeDeviceStatus(const DeviceStatus& status,
std::string* carrier_out,
int32_t* battery_percentage_out,
int32_t* signal_strength_out) {
// Use a sentinel value if carrier information is not available. This value is
// special-cased and replaced with a localized string in the settings UI.
if (carrier_out) {
*carrier_out =
(!status.has_cell_provider() || status.cell_provider().empty())
? kDefaultCellCarrierName
: status.cell_provider();
}
// If battery or signal strength are missing, assume they are 100. For
// battery percentage, force the value to be between 0 and 100. For signal
// strength, convert from Android signal strength to Chrome OS signal
// strength and force the value to be between 0 and 100.
if (battery_percentage_out) {
*battery_percentage_out =
status.has_battery_percentage()
? ForceBetweenZeroAndOneHundred(status.battery_percentage())
: 100;
}
if (signal_strength_out) {
*signal_strength_out =
status.has_connection_strength()
? ForceBetweenZeroAndOneHundred(
kAndroidTetherHostToChromeOSSignalStrengthMultiplier *
status.connection_strength())
: 100;
}
}
} // namespace tether
} // namespace chromeos