0

Add in accessibility strings for System Info Answer Cards

Based on accessibility greenlines here: go/sys-ans-cards

Bug: b/263994165
Change-Id: I1cbf0c9931009705b2fb6ff5dc6ce735dd417771
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4744824
Commit-Queue: Lauren Commeignes <laurencom@chromium.org>
Reviewed-by: Dmitry Grebenyuk <dgrebenyuk@google.com>
Cr-Commit-Position: refs/heads/main@{#1179375}
This commit is contained in:
Lauren Commeignes
2023-08-04 01:02:20 +00:00
committed by Chromium LUCI CQ
parent d4890fb830
commit 9953a477e5
32 changed files with 257 additions and 70 deletions

@@ -2071,15 +2071,24 @@ Style notes:
<message name="IDS_ASH_VERSION_IN_LAUNCHER_DESCRIPTION" desc="Message content for the description of the answer card with the current version in the launcher."> <message name="IDS_ASH_VERSION_IN_LAUNCHER_DESCRIPTION" desc="Message content for the description of the answer card with the current version in the launcher.">
Click to check for details Click to check for details
</message> </message>
<message name="IDS_ASH_VERSION_IN_LAUNCHER_ACCESSIBILITY_LABEL" desc="Message content for the accessibility label of the answer card with the current version in the launcher.">
Current version <ph name="VERSION_NAME">$1<ex>109.0.5414.125</ex></ph> (<ph name="OFFICIAL_STATUS">$2<ex>Official Build</ex></ph>) <ph name="CHANNEL_NAME">$3<ex>Beta</ex></ph> <ph name="PROCESSOR_VARIATION">$4<ex>(64-bit)</ex></ph>
</message>
<message name="IDS_ASH_CPU_IN_LAUNCHER_TITLE" desc="Message content for the title of the answer card with the current CPU system information in the launcher."> <message name="IDS_ASH_CPU_IN_LAUNCHER_TITLE" desc="Message content for the title of the answer card with the current CPU system information in the launcher.">
CPU usage snapshot: <ph name="CPU_USEAGE">$1<ex>89</ex></ph>% CPU usage snapshot: <ph name="CPU_USEAGE">$1<ex>89</ex></ph>%
</message> </message>
<message name="IDS_ASH_CPU_IN_LAUNCHER_DESCRIPTION" desc="Message content for the description of the answer card with the current CPU system information in the launcher."> <message name="IDS_ASH_CPU_IN_LAUNCHER_DESCRIPTION" desc="Message content for the description of the answer card with the current CPU system information in the launcher.">
Temperature: <ph name="TEMPERATURE">$1<ex>34</ex></ph>°C - Current speed: <ph name="CPU_AVERAGE_CURRENT_FREQUENCY_GHZ">$2<ex>1.52</ex></ph>GHz Temperature: <ph name="TEMPERATURE">$1<ex>34</ex></ph>°C - Current speed: <ph name="CPU_AVERAGE_CURRENT_FREQUENCY_GHZ">$2<ex>1.52</ex></ph>GHz
</message> </message>
<message name="IDS_ASH_CPU_IN_LAUNCHER_ACCESSIBILITY_LABEL" desc="Message content for the accessibility label of the answer card with the current CPU system information in the launcher.">
CPU usage snapshot, <ph name="CPU_USEAGE">$1<ex>89</ex></ph>%. Temperature <ph name="TEMPERATURE">$2<ex>34</ex></ph> degrees celsius, current speed: <ph name="CPU_AVERAGE_CURRENT_FREQUENCY_GHZ">$3<ex>1.52</ex></ph>GHz
</message>
<message name="IDS_ASH_MEMORY_USAGE_IN_LAUNCHER_DESCRIPTION" desc="Message content for the description of the answer card with the current memory usage information in the launcher."> <message name="IDS_ASH_MEMORY_USAGE_IN_LAUNCHER_DESCRIPTION" desc="Message content for the description of the answer card with the current memory usage information in the launcher.">
Memory <ph name="USED_MEMORY">$1<ex>2.4 GB</ex></ph> | <ph name="TOTAL_MEMORY">$2<ex>7.6 GB</ex></ph> total Memory <ph name="USED_MEMORY">$1<ex>2.4 GB</ex></ph> | <ph name="TOTAL_MEMORY">$2<ex>7.6 GB</ex></ph> total
</message> </message>
<message name="IDS_ASH_MEMORY_USAGE_IN_LAUNCHER_ACCESSIBILITY_LABEL" desc="Message content for the accessibility label of the answer card with the current memory usage information in the launcher.">
Memory <ph name="USED_MEMORY">$1<ex>2.4 GB</ex></ph> available out of <ph name="TOTAL_MEMORY">$2<ex>7.6 GB</ex></ph> total
</message>
<message name="IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_DESCRIPTION_LEFT_SHORT" desc="Message content for the short description on the left of the battery answer card."> <message name="IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_DESCRIPTION_LEFT_SHORT" desc="Message content for the short description on the left of the battery answer card.">
Battery <ph name="BATTERY_PERCENTAGE">$1<ex>56</ex></ph>% Battery <ph name="BATTERY_PERCENTAGE">$1<ex>56</ex></ph>%
</message> </message>
@@ -2092,9 +2101,51 @@ Style notes:
<message name="IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_DESCRIPTION_RIGHT" desc="Message content for the description on the right of the battery answer card, showing the battery health percentage and the cycle count."> <message name="IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_DESCRIPTION_RIGHT" desc="Message content for the description on the right of the battery answer card, showing the battery health percentage and the cycle count.">
Battery health <ph name="BATTERY_HEALTH_PERCENTAGE">$1<ex>97</ex></ph>% | Cycle count <ph name="CYCLE_COUNT">$2<ex>15</ex></ph> Battery health <ph name="BATTERY_HEALTH_PERCENTAGE">$1<ex>97</ex></ph>% | Cycle count <ph name="CYCLE_COUNT">$2<ex>15</ex></ph>
</message> </message>
<message name="IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_ACCESSIBILITY_LABEL_SHORT" desc="Message content for the accessbility label of the battery answer card while the battery is discharging, showing the battery power as a percentage and the time left until the battery is empty.">
Current battery level <ph name="BATTERY_PERCENTAGE">$1<ex>56</ex></ph>%
</message>
<message name="IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_ACCESSIBILITY_LABEL" desc="Message content for the accessbility label of the battery answer card while the battery is discharging, showing the battery power as a percentage and the time left until the battery is empty.">
Current battery level <ph name="BATTERY_PERCENTAGE">$1<ex>56</ex></ph>%, <ph name="TIME">$2<ex>2 hours and 20 minutes</ex></ph> left
</message>
<message name="IDS_ASH_BATTERY_STATUS_CHARGING_IN_LAUNCHER_ACCESSIBILITY_LABEL" desc="Message content for the accessbility label of the battery answer card while the battery is discharging, showing the battery power as a percentage and the time left until the battery is empty.">
Current battery level <ph name="BATTERY_PERCENTAGE">$1<ex>56</ex></ph>%, <ph name="TIME">$2<ex>2 hours and 20 minutes</ex></ph> until full
</message>
<message name="IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_EXTRA_DETAILS_ACCESSIBILITY_LABEL" desc="Message content for the accessbility label of the battery answer card while the battery is discharging, showing the battery power as a percentage and the time left until the battery is empty.">
Battery health <ph name="BATTERY_HEALTH_PERCENTAGE">$1<ex>97</ex></ph>%, cycle count <ph name="CYCLE_COUNT">$2<ex>15</ex></ph>
</message>
<message name="IDS_ASH_STORAGE_STATUS_IN_LAUNCHER_DESCRIPTION" desc="Message content for the description of the storage answer card, showing the amount of storage currently in use and the total storage size."> <message name="IDS_ASH_STORAGE_STATUS_IN_LAUNCHER_DESCRIPTION" desc="Message content for the description of the storage answer card, showing the amount of storage currently in use and the total storage size.">
Storage <ph name="STORAGE_IN_USE_SIZE">$1<ex>65 GB</ex></ph> in use | <ph name="STORAGE_TOTAL_SIZE">$2<ex>124 GB</ex></ph> total Storage <ph name="STORAGE_IN_USE_SIZE">$1<ex>65 GB</ex></ph> in use | <ph name="STORAGE_TOTAL_SIZE">$2<ex>124 GB</ex></ph> total
</message> </message>
<message name="IDS_ASH_STORAGE_STATUS_IN_LAUNCHER_ACCESSIBILITY_LABEL" desc="Message content for the accessibility label of the storage answer card, showing the amount of storage currently in use and the total storage size.">
Storage <ph name="STORAGE_IN_USE_SIZE">$1<ex>65 GB</ex></ph> in use out of <ph name="STORAGE_TOTAL_SIZE">$2<ex>124 GB</ex></ph> total
</message>
<message name="IDS_ASH_ACCESSIBILITY_ANSWER_TYPE_IN_LAUNCHER" desc="Beginning of accessibility label for System Info Answer cards.">
Showing <ph name="ANSWER_TYPE">$1<ex>Battery</ex></ph> information
</message>
<message name="IDS_ASH_ACCESSIBILITY_OPEN_LABEL_IN_LAUNCHER" desc="Section to specify which app opens in the accessibility label for System Info Answer cards.">
Select to open <ph name="APP_TO_OPEN">$1<ex>Settings page</ex></ph>.
</message>
<message name="IDS_ASH_ACCESSIBILITY_OS_VERSION_LABEL_IN_LAUNCHER" desc="Accessibility string for OS version in System Info Answer cards.">
OS version
</message>
<message name="IDS_ASH_ACCESSIBILITY_BATTERY_LABEL_IN_LAUNCHER" desc="Accessibility string for battery in System Info Answer cards.">
battery
</message>
<message name="IDS_ASH_ACCESSIBILITY_MEMORY_LABEL_IN_LAUNCHER" desc="Accessibility string for memory in System Info Answer cards.">
memory
</message>
<message name="IDS_ASH_ACCESSIBILITY_STORAGE_LABEL_IN_LAUNCHER" desc="Accessibility string for storage in System Info Answer cards.">
storage space
</message>
<message name="IDS_ASH_ACCESSIBILITY_CPU_LABEL_IN_LAUNCHER" desc="Accessibility string for CPU in System Info Answer cards.">
CPU
</message>
<message name="IDS_ASH_ACCESSIBILITY_LABEL_DIAGNOSTICS_APP_IN_LAUNCHER" desc="Accessibility string for diagnostics app in System Info Answer cards.">
Diagnostics app
</message>
<message name="IDS_ASH_ACCESSIBILITY_LABEL_SETTINGS_PAGE_IN_LAUNCHER" desc="Accessibility string for settings page in System Info Answer cards.">
Settings page
</message>
<message name="IDS_ASH_STORAGE_MANAGEMENT_KEYWORD_FOR_LAUNCHER" desc="Keyword of storage management in launcher search that should trigger a storage answer card result."> <message name="IDS_ASH_STORAGE_MANAGEMENT_KEYWORD_FOR_LAUNCHER" desc="Keyword of storage management in launcher search that should trigger a storage answer card result.">
storage management storage management
</message> </message>

@@ -0,0 +1 @@
18855491afd0aec2c4fc966ba71632d7841495a2

@@ -0,0 +1 @@
afdd9b7e680cd154c57386990c36868ff4781136

@@ -0,0 +1 @@
f9396e3bf686de19f06ba39b047cffb15f4fab02

@@ -0,0 +1 @@
afcb5fa195e2ed9bd50e048578a4048064d08fe5

@@ -0,0 +1 @@
be0e204a959fa1c371eb7717fd3b9ef1196b7bf7

@@ -0,0 +1 @@
afcb5fa195e2ed9bd50e048578a4048064d08fe5

@@ -0,0 +1 @@
18855491afd0aec2c4fc966ba71632d7841495a2

@@ -0,0 +1 @@
18855491afd0aec2c4fc966ba71632d7841495a2

@@ -0,0 +1 @@
be0e204a959fa1c371eb7717fd3b9ef1196b7bf7

@@ -0,0 +1 @@
c2e69c0982372d9890b0a56e1a8ae346d5c81523

@@ -0,0 +1 @@
afdd9b7e680cd154c57386990c36868ff4781136

@@ -0,0 +1 @@
ece7dcee93dc0d04c0265e938b547039017a58dd

@@ -0,0 +1 @@
ece7dcee93dc0d04c0265e938b547039017a58dd

@@ -0,0 +1 @@
f9396e3bf686de19f06ba39b047cffb15f4fab02

@@ -0,0 +1 @@
afcb5fa195e2ed9bd50e048578a4048064d08fe5

@@ -0,0 +1 @@
be0e204a959fa1c371eb7717fd3b9ef1196b7bf7

@@ -0,0 +1 @@
18855491afd0aec2c4fc966ba71632d7841495a2

@@ -5,7 +5,6 @@
#include "chrome/browser/ash/app_list/search/system_info/battery_answer_result.h" #include "chrome/browser/ash/app_list/search/system_info/battery_answer_result.h"
#include "ash/public/cpp/app_list/app_list_types.h" #include "ash/public/cpp/app_list/app_list_types.h"
#include "ash/public/cpp/power_utils.h"
#include "chrome/browser/ash/app_list/search/system_info/system_info_answer_result.h" #include "chrome/browser/ash/app_list/search/system_info/system_info_answer_result.h"
#include "chrome/browser/ash/app_list/search/system_info/system_info_util.h" #include "chrome/browser/ash/app_list/search/system_info/system_info_util.h"
@@ -24,7 +23,9 @@ BatteryAnswerResult::BatteryAnswerResult(
double relevance_score, double relevance_score,
const std::u16string& title, const std::u16string& title,
const std::u16string& description, const std::u16string& description,
const std::u16string& accessibility_label,
SystemInfoCategory system_info_category, SystemInfoCategory system_info_category,
SystemInfoCardType system_info_card_type,
const AnswerCardInfo& answer_card_info) const AnswerCardInfo& answer_card_info)
: SystemInfoAnswerResult(profile, : SystemInfoAnswerResult(profile,
query, query,
@@ -33,7 +34,9 @@ BatteryAnswerResult::BatteryAnswerResult(
relevance_score, relevance_score,
title, title,
description, description,
accessibility_label,
system_info_category, system_info_category,
system_info_card_type,
answer_card_info) { answer_card_info) {
chromeos::PowerManagerClient::Get()->AddObserver(this); chromeos::PowerManagerClient::Get()->AddObserver(this);
} }
@@ -51,11 +54,12 @@ void BatteryAnswerResult::PowerChanged(
if (calculating) { if (calculating) {
return; return;
} }
std::u16string power_time = CalculatePowerTime(power_supply_properties); std::unique_ptr<BatteryHealth> new_battery_health =
int percent = ash::power_utils::GetRoundedBatteryPercent( std::make_unique<BatteryHealth>();
power_supply_properties.battery_percent()); PopulatePowerStatus(power_supply_properties, *new_battery_health.get());
DCHECK(percent <= 100 && percent >= 0); UpdateTitleAndDetails(/*title=*/base::EmptyString16(),
UpdateTitleAndDetails(/*title=*/base::EmptyString16(), power_time); new_battery_health->GetPowerTime(),
UpdateBarChartPercentage(percent); new_battery_health->GetAccessibilityLabel());
UpdateBarChartPercentage(new_battery_health->GetBatteryPercentage());
} }
} // namespace app_list } // namespace app_list

@@ -21,7 +21,9 @@ class BatteryAnswerResult : public SystemInfoAnswerResult,
double relevance_score, double relevance_score,
const std::u16string& title, const std::u16string& title,
const std::u16string& description, const std::u16string& description,
const std::u16string& accessibility_label,
SystemInfoCategory system_info_category, SystemInfoCategory system_info_category,
SystemInfoCardType system_info_card_type,
const ash::SystemInfoAnswerCardData& answer_card_info); const ash::SystemInfoAnswerCardData& answer_card_info);
~BatteryAnswerResult() override; ~BatteryAnswerResult() override;

@@ -22,6 +22,10 @@ class BatteryHealth {
void SetPowerTime(const std::u16string& power_time) { void SetPowerTime(const std::u16string& power_time) {
power_time_ = power_time; power_time_ = power_time;
} }
void SetAccessibilityLabel(const std::u16string& accessibility_label) {
accessibility_label_ = accessibility_label;
}
void SetBatteryPercentage(int battery_percentage) { void SetBatteryPercentage(int battery_percentage) {
battery_percentage_ = battery_percentage; battery_percentage_ = battery_percentage;
} }
@@ -29,12 +33,14 @@ class BatteryHealth {
int GetCycleCount() const { return cycle_count_; } int GetCycleCount() const { return cycle_count_; }
int GetBatteryWearPercentage() const { return battery_wear_percentage_; } int GetBatteryWearPercentage() const { return battery_wear_percentage_; }
std::u16string GetPowerTime() const { return power_time_; } std::u16string GetPowerTime() const { return power_time_; }
std::u16string GetAccessibilityLabel() const { return accessibility_label_; }
int GetBatteryPercentage() const { return battery_percentage_; } int GetBatteryPercentage() const { return battery_percentage_; }
private: private:
int cycle_count_ = 0; int cycle_count_ = 0;
int battery_wear_percentage_ = 0; int battery_wear_percentage_ = 0;
std::u16string power_time_ = u""; std::u16string power_time_ = u"";
std::u16string accessibility_label_ = u"";
int battery_percentage_ = 0; int battery_percentage_ = 0;
}; };

@@ -5,11 +5,7 @@
#include "chrome/browser/ash/app_list/search/system_info/cpu_answer_result.h" #include "chrome/browser/ash/app_list/search/system_info/cpu_answer_result.h"
#include "ash/public/cpp/app_list/app_list_types.h" #include "ash/public/cpp/app_list/app_list_types.h"
#include "ash/public/cpp/power_utils.h"
#include "base/functional/callback.h"
#include "chrome/browser/ash/app_list/search/system_info/cpu_data.h"
#include "chrome/browser/ash/app_list/search/system_info/system_info_answer_result.h" #include "chrome/browser/ash/app_list/search/system_info/system_info_answer_result.h"
#include "chrome/browser/ash/app_list/search/system_info/system_info_util.h"
namespace app_list { namespace app_list {
namespace { namespace {
@@ -27,7 +23,9 @@ CpuAnswerResult::CpuAnswerResult(
double relevance_score, double relevance_score,
const std::u16string& title, const std::u16string& title,
const std::u16string& description, const std::u16string& description,
const std::u16string& accessibility_label,
SystemInfoCategory system_info_category, SystemInfoCategory system_info_category,
SystemInfoCardType system_info_card_type,
const AnswerCardInfo& answer_card_info, const AnswerCardInfo& answer_card_info,
SystemInfoCardProvider::UpdateCpuResultCallback callback, SystemInfoCardProvider::UpdateCpuResultCallback callback,
std::unique_ptr<base::RepeatingTimer> timer, std::unique_ptr<base::RepeatingTimer> timer,
@@ -39,7 +37,9 @@ CpuAnswerResult::CpuAnswerResult(
relevance_score, relevance_score,
title, title,
description, description,
accessibility_label,
system_info_category, system_info_category,
system_info_card_type,
answer_card_info), answer_card_info),
callback_(std::move(callback)), callback_(std::move(callback)),
timer_(std::move(timer)), timer_(std::move(timer)),
@@ -57,9 +57,11 @@ CpuAnswerResult::~CpuAnswerResult() {
} }
} }
void CpuAnswerResult::OnCpuDataUpdated(const std::u16string& title, void CpuAnswerResult::OnCpuDataUpdated(
const std::u16string& description) { const std::u16string& title,
UpdateTitleAndDetails(title, description); const std::u16string& description,
const std::u16string& accessibility_label) {
UpdateTitleAndDetails(title, description, accessibility_label);
} }
void CpuAnswerResult::UpdateResult() { void CpuAnswerResult::UpdateResult() {

@@ -6,10 +6,8 @@
#define CHROME_BROWSER_ASH_APP_LIST_SEARCH_SYSTEM_INFO_CPU_ANSWER_RESULT_H_ #define CHROME_BROWSER_ASH_APP_LIST_SEARCH_SYSTEM_INFO_CPU_ANSWER_RESULT_H_
#include "ash/public/cpp/app_list/app_list_types.h" #include "ash/public/cpp/app_list/app_list_types.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "chrome/browser/ash/app_list/search/system_info/cpu_data.h"
#include "chrome/browser/ash/app_list/search/system_info/system_info_answer_result.h" #include "chrome/browser/ash/app_list/search/system_info/system_info_answer_result.h"
#include "chrome/browser/ash/app_list/search/system_info/system_info_card_provider.h" #include "chrome/browser/ash/app_list/search/system_info/system_info_card_provider.h"
@@ -25,7 +23,9 @@ class CpuAnswerResult : public SystemInfoAnswerResult,
double relevance_score, double relevance_score,
const std::u16string& title, const std::u16string& title,
const std::u16string& description, const std::u16string& description,
const std::u16string& accessibility_label,
SystemInfoCategory system_info_category, SystemInfoCategory system_info_category,
SystemInfoCardType system_info_card_type,
const ash::SystemInfoAnswerCardData& answer_card_info, const ash::SystemInfoAnswerCardData& answer_card_info,
SystemInfoCardProvider::UpdateCpuResultCallback callback, SystemInfoCardProvider::UpdateCpuResultCallback callback,
std::unique_ptr<base::RepeatingTimer> timer, std::unique_ptr<base::RepeatingTimer> timer,
@@ -37,7 +37,8 @@ class CpuAnswerResult : public SystemInfoAnswerResult,
CpuAnswerResult& operator=(const CpuAnswerResult& other) = delete; CpuAnswerResult& operator=(const CpuAnswerResult& other) = delete;
void OnCpuDataUpdated(const std::u16string& title, void OnCpuDataUpdated(const std::u16string& title,
const std::u16string& description) override; const std::u16string& description,
const std::u16string& accessibility_label) override;
void UpdateResult(); void UpdateResult();
private: private:

@@ -23,7 +23,9 @@ MemoryAnswerResult::MemoryAnswerResult(
double relevance_score, double relevance_score,
const std::u16string& title, const std::u16string& title,
const std::u16string& description, const std::u16string& description,
const std::u16string& accessibility_label,
SystemInfoCategory system_info_category, SystemInfoCategory system_info_category,
SystemInfoCardType system_info_card_type,
const AnswerCardInfo& answer_card_info, const AnswerCardInfo& answer_card_info,
SystemInfoCardProvider::UpdateMemoryResultCallback callback, SystemInfoCardProvider::UpdateMemoryResultCallback callback,
std::unique_ptr<base::RepeatingTimer> timer, std::unique_ptr<base::RepeatingTimer> timer,
@@ -35,7 +37,9 @@ MemoryAnswerResult::MemoryAnswerResult(
relevance_score, relevance_score,
title, title,
description, description,
accessibility_label,
system_info_category, system_info_category,
system_info_card_type,
answer_card_info), answer_card_info),
callback_(std::move(callback)), callback_(std::move(callback)),
timer_(std::move(timer)), timer_(std::move(timer)),
@@ -53,9 +57,11 @@ MemoryAnswerResult::~MemoryAnswerResult() {
} }
} }
void MemoryAnswerResult::OnMemoryUpdated(const double memory_usage_percentage, void MemoryAnswerResult::OnMemoryUpdated(
const std::u16string& description) { const double memory_usage_percentage,
UpdateTitleAndDetails(u"", description); const std::u16string& description,
const std::u16string& accessibility_label) {
UpdateTitleAndDetails(u"", description, accessibility_label);
UpdateBarChartPercentage(memory_usage_percentage); UpdateBarChartPercentage(memory_usage_percentage);
} }

@@ -6,7 +6,6 @@
#define CHROME_BROWSER_ASH_APP_LIST_SEARCH_SYSTEM_INFO_MEMORY_ANSWER_RESULT_H_ #define CHROME_BROWSER_ASH_APP_LIST_SEARCH_SYSTEM_INFO_MEMORY_ANSWER_RESULT_H_
#include "ash/public/cpp/app_list/app_list_types.h" #include "ash/public/cpp/app_list/app_list_types.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "chrome/browser/ash/app_list/search/system_info/system_info_answer_result.h" #include "chrome/browser/ash/app_list/search/system_info/system_info_answer_result.h"
@@ -25,7 +24,9 @@ class MemoryAnswerResult : public SystemInfoAnswerResult,
double relevance_score, double relevance_score,
const std::u16string& title, const std::u16string& title,
const std::u16string& description, const std::u16string& description,
const std::u16string& accessibility_label,
SystemInfoCategory system_info_category, SystemInfoCategory system_info_category,
SystemInfoCardType system_info_card_type,
const ash::SystemInfoAnswerCardData& answer_card_info, const ash::SystemInfoAnswerCardData& answer_card_info,
SystemInfoCardProvider::UpdateMemoryResultCallback callback, SystemInfoCardProvider::UpdateMemoryResultCallback callback,
std::unique_ptr<base::RepeatingTimer> timer, std::unique_ptr<base::RepeatingTimer> timer,
@@ -37,7 +38,8 @@ class MemoryAnswerResult : public SystemInfoAnswerResult,
MemoryAnswerResult& operator=(const MemoryAnswerResult& other) = delete; MemoryAnswerResult& operator=(const MemoryAnswerResult& other) = delete;
void OnMemoryUpdated(const double memory_usage_percentage, void OnMemoryUpdated(const double memory_usage_percentage,
const std::u16string& description) override; const std::u16string& description,
const std::u16string& accessibility_label) override;
void UpdateResult(); void UpdateResult();
private: private:

@@ -7,6 +7,7 @@
#include <string> #include <string>
#include "ash/public/cpp/app_list/app_list_metrics.h" #include "ash/public/cpp/app_list/app_list_metrics.h"
#include "ash/strings/grit/ash_strings.h"
#include "ash/webui/diagnostics_ui/url_constants.h" #include "ash/webui/diagnostics_ui/url_constants.h"
#include "base/strings/strcat.h" #include "base/strings/strcat.h"
#include "chrome/browser/ash/app_list/search/common/icon_constants.h" #include "chrome/browser/ash/app_list/search/common/icon_constants.h"
@@ -14,6 +15,7 @@
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h" #include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h"
#include "chrome/browser/ui/settings_window_manager_chromeos.h" #include "chrome/browser/ui/settings_window_manager_chromeos.h"
#include "ui/base/l10n/l10n_util.h"
#include "url/gurl.h" #include "url/gurl.h"
namespace app_list { namespace app_list {
@@ -22,6 +24,39 @@ namespace {
constexpr char kOsSettingsResultPrefix[] = "os-settings://"; constexpr char kOsSettingsResultPrefix[] = "os-settings://";
using AnswerCardInfo = ::ash::SystemInfoAnswerCardData; using AnswerCardInfo = ::ash::SystemInfoAnswerCardData;
const std::u16string CardTypeString(
SystemInfoAnswerResult::SystemInfoCardType system_info_card_type) {
switch (system_info_card_type) {
case SystemInfoAnswerResult::SystemInfoCardType::kVersion:
return l10n_util::GetStringUTF16(
IDS_ASH_ACCESSIBILITY_OS_VERSION_LABEL_IN_LAUNCHER);
case SystemInfoAnswerResult::SystemInfoCardType::kMemory:
return l10n_util::GetStringUTF16(
IDS_ASH_ACCESSIBILITY_MEMORY_LABEL_IN_LAUNCHER);
case SystemInfoAnswerResult::SystemInfoCardType::kStorage:
return l10n_util::GetStringUTF16(
IDS_ASH_ACCESSIBILITY_STORAGE_LABEL_IN_LAUNCHER);
case SystemInfoAnswerResult::SystemInfoCardType::kCPU:
return l10n_util::GetStringUTF16(
IDS_ASH_ACCESSIBILITY_CPU_LABEL_IN_LAUNCHER);
case SystemInfoAnswerResult::SystemInfoCardType::kBattery:
return l10n_util::GetStringUTF16(
IDS_ASH_ACCESSIBILITY_BATTERY_LABEL_IN_LAUNCHER);
}
}
const std::u16string CategoryString(
SystemInfoAnswerResult::SystemInfoCategory system_info_category) {
switch (system_info_category) {
case SystemInfoAnswerResult::SystemInfoCategory::kDiagnostics:
return l10n_util::GetStringUTF16(
IDS_ASH_ACCESSIBILITY_LABEL_DIAGNOSTICS_APP_IN_LAUNCHER);
case SystemInfoAnswerResult::SystemInfoCategory::kSettings:
return l10n_util::GetStringUTF16(
IDS_ASH_ACCESSIBILITY_LABEL_SETTINGS_PAGE_IN_LAUNCHER);
}
}
} // namespace } // namespace
SystemInfoAnswerResult::SystemInfoAnswerResult( SystemInfoAnswerResult::SystemInfoAnswerResult(
@@ -32,9 +67,12 @@ SystemInfoAnswerResult::SystemInfoAnswerResult(
double relevance_score, double relevance_score,
const std::u16string& title, const std::u16string& title,
const std::u16string& description, const std::u16string& description,
const std::u16string& accessibility_label,
SystemInfoCategory system_info_category, SystemInfoCategory system_info_category,
SystemInfoCardType system_info_card_type,
const ash::SystemInfoAnswerCardData& answer_card_info) const ash::SystemInfoAnswerCardData& answer_card_info)
: system_info_category_(system_info_category), : system_info_category_(system_info_category),
system_info_card_type_(system_info_card_type),
answer_card_info_(answer_card_info), answer_card_info_(answer_card_info),
profile_(profile), profile_(profile),
query_(query), query_(query),
@@ -46,7 +84,7 @@ SystemInfoAnswerResult::SystemInfoAnswerResult(
SetIcon(IconInfo(ui::ImageModel::FromImageSkia(icon), kAppIconDimension)); SetIcon(IconInfo(ui::ImageModel::FromImageSkia(icon), kAppIconDimension));
SetCategory(Category::kSettings); SetCategory(Category::kSettings);
SetResultType(ResultType::kSystemInfo); SetResultType(ResultType::kSystemInfo);
UpdateTitleAndDetails(title, description); UpdateTitleAndDetails(title, description, accessibility_label);
SetMetricsType(ash::SYSTEM_INFO); SetMetricsType(ash::SYSTEM_INFO);
std::string id = std::string id =
system_info_category_ == SystemInfoCategory::kSettings system_info_category_ == SystemInfoCategory::kSettings
@@ -60,7 +98,8 @@ SystemInfoAnswerResult::~SystemInfoAnswerResult() = default;
void SystemInfoAnswerResult::UpdateTitleAndDetails( void SystemInfoAnswerResult::UpdateTitleAndDetails(
const std::u16string& title, const std::u16string& title,
const std::u16string& description) { const std::u16string& description,
const std::u16string& accessibility_label) {
std::vector<TextItem> title_vector; std::vector<TextItem> title_vector;
title_vector.push_back(CreateStringTextItem(title)); title_vector.push_back(CreateStringTextItem(title));
SetTitleTextVector(title_vector); SetTitleTextVector(title_vector);
@@ -69,13 +108,24 @@ void SystemInfoAnswerResult::UpdateTitleAndDetails(
details_vector.push_back(CreateStringTextItem(description)); details_vector.push_back(CreateStringTextItem(description));
SetDetailsTextVector(details_vector); SetDetailsTextVector(details_vector);
std::u16string accessibility_label_answer_type_details =
l10n_util::GetStringFUTF16(IDS_ASH_ACCESSIBILITY_ANSWER_TYPE_IN_LAUNCHER,
CardTypeString(system_info_card_type_));
std::u16string accessibility_label_open_page =
l10n_util::GetStringFUTF16(IDS_ASH_ACCESSIBILITY_OPEN_LABEL_IN_LAUNCHER,
CategoryString(system_info_category_));
std::vector<std::u16string> accessibility_vector; std::vector<std::u16string> accessibility_vector;
for (const std::u16string& text : {title, description}) { for (const std::u16string& text :
{accessibility_label_answer_type_details, accessibility_label,
accessibility_label_open_page}) {
if (!text.empty()) { if (!text.empty()) {
accessibility_vector.emplace_back(text); accessibility_vector.emplace_back(text);
} }
} }
SetAccessibleName(base::JoinString(accessibility_vector, u", "));
SetAccessibleName(base::JoinString(accessibility_vector, u". "));
} }
void SystemInfoAnswerResult::Open(int event_flags) { void SystemInfoAnswerResult::Open(int event_flags) {

@@ -16,6 +16,7 @@ namespace app_list {
class SystemInfoAnswerResult : public ChromeSearchResult { class SystemInfoAnswerResult : public ChromeSearchResult {
public: public:
enum class SystemInfoCategory { kSettings, kDiagnostics }; enum class SystemInfoCategory { kSettings, kDiagnostics };
enum class SystemInfoCardType { kVersion, kMemory, kStorage, kCPU, kBattery };
SystemInfoAnswerResult(Profile* profile, SystemInfoAnswerResult(Profile* profile,
const std::u16string& query, const std::u16string& query,
@@ -24,7 +25,9 @@ class SystemInfoAnswerResult : public ChromeSearchResult {
double relevance_score, double relevance_score,
const std::u16string& title, const std::u16string& title,
const std::u16string& description, const std::u16string& description,
const std::u16string& accessibility_label,
SystemInfoCategory system_info_category, SystemInfoCategory system_info_category,
SystemInfoCardType system_info_card_type,
const ash::SystemInfoAnswerCardData& answer_card_info); const ash::SystemInfoAnswerCardData& answer_card_info);
SystemInfoAnswerResult(const SystemInfoAnswerResult&) = delete; SystemInfoAnswerResult(const SystemInfoAnswerResult&) = delete;
SystemInfoAnswerResult& operator=(const SystemInfoAnswerResult&) = delete; SystemInfoAnswerResult& operator=(const SystemInfoAnswerResult&) = delete;
@@ -34,12 +37,14 @@ class SystemInfoAnswerResult : public ChromeSearchResult {
void Open(int event_flags) override; void Open(int event_flags) override;
void UpdateTitleAndDetails(const std::u16string& title, void UpdateTitleAndDetails(const std::u16string& title,
const std::u16string& description); const std::u16string& description,
const std::u16string& accessibility_label);
void UpdateBarChartPercentage(const double bar_chart_percentage); void UpdateBarChartPercentage(const double bar_chart_percentage);
private: private:
SystemInfoCategory const system_info_category_; SystemInfoCategory const system_info_category_;
SystemInfoCardType const system_info_card_type_;
ash::SystemInfoAnswerCardData answer_card_info_; ash::SystemInfoAnswerCardData answer_card_info_;
const raw_ptr<Profile, ExperimentalAsh> profile_; const raw_ptr<Profile, ExperimentalAsh> profile_;
const std::u16string query_; const std::u16string query_;

@@ -50,7 +50,10 @@ TEST_F(SystemInfoAnswerResultTest, version) {
profile_.get(), u"query", "path", GetTestIcon(), 0.8, profile_.get(), u"query", "path", GetTestIcon(), 0.8,
u"Version 108.0.5359.37 (Official Build) beta (64-bit)", u"Version 108.0.5359.37 (Official Build) beta (64-bit)",
u"Click here to check for updates", u"Click here to check for updates",
SystemInfoAnswerResult::SystemInfoCategory::kSettings, answer_card_info); u"Current version 108.0.5359.37 (Official Build) beta (64-bit). Click "
u"to check for details",
SystemInfoAnswerResult::SystemInfoCategory::kSettings,
SystemInfoAnswerResult::SystemInfoCardType::kVersion, answer_card_info);
EXPECT_EQ(result.id(), "os-settings://path"); EXPECT_EQ(result.id(), "os-settings://path");
EXPECT_EQ(result.display_type(), DisplayType::kAnswerCard); EXPECT_EQ(result.display_type(), DisplayType::kAnswerCard);
EXPECT_EQ(result.category(), Category::kSettings); EXPECT_EQ(result.category(), Category::kSettings);
@@ -64,8 +67,10 @@ TEST_F(SystemInfoAnswerResultTest, version) {
EXPECT_EQ(result.system_info_answer_card_data()->display_type, EXPECT_EQ(result.system_info_answer_card_data()->display_type,
ash::SystemInfoAnswerCardDisplayType::kTextCard); ash::SystemInfoAnswerCardDisplayType::kTextCard);
EXPECT_EQ(result.accessible_name(), EXPECT_EQ(result.accessible_name(),
u"Version 108.0.5359.37 (Official Build) beta (64-bit), Click here " u"Showing OS version information. Current version 108.0.5359.37 "
u"to check for updates"); u"(Official "
u"Build) beta (64-bit). Click "
u"to check for details. Select to open Settings page.");
ASSERT_EQ(result.title_text_vector().size(), 1u); ASSERT_EQ(result.title_text_vector().size(), 1u);
const auto& title = result.title_text_vector()[0]; const auto& title = result.title_text_vector()[0];
@@ -86,8 +91,9 @@ TEST_F(SystemInfoAnswerResultTest, memory) {
SystemInfoAnswerResult result( SystemInfoAnswerResult result(
profile_.get(), u"query", "", GetTestIcon(), 0.8, u"", profile_.get(), u"query", "", GetTestIcon(), 0.8, u"",
u"5.16 GB of 15.52 GB available", u"5.16 GB of 15.52 GB available",
u"Memory 5.16 GB available out of 15.52 GB total",
SystemInfoAnswerResult::SystemInfoCategory::kDiagnostics, SystemInfoAnswerResult::SystemInfoCategory::kDiagnostics,
answer_card_info); SystemInfoAnswerResult::SystemInfoCardType::kMemory, answer_card_info);
EXPECT_EQ(result.id(), kChromeUIDiagnosticsAppUrl); EXPECT_EQ(result.id(), kChromeUIDiagnosticsAppUrl);
EXPECT_EQ(result.display_type(), DisplayType::kAnswerCard); EXPECT_EQ(result.display_type(), DisplayType::kAnswerCard);
EXPECT_EQ(result.category(), Category::kSettings); EXPECT_EQ(result.category(), Category::kSettings);
@@ -101,7 +107,9 @@ TEST_F(SystemInfoAnswerResultTest, memory) {
EXPECT_EQ(result.system_info_answer_card_data()->display_type, EXPECT_EQ(result.system_info_answer_card_data()->display_type,
ash::SystemInfoAnswerCardDisplayType::kBarChart); ash::SystemInfoAnswerCardDisplayType::kBarChart);
EXPECT_EQ(result.system_info_answer_card_data()->bar_chart_percentage, 54.8); EXPECT_EQ(result.system_info_answer_card_data()->bar_chart_percentage, 54.8);
EXPECT_EQ(result.accessible_name(), u"5.16 GB of 15.52 GB available"); EXPECT_EQ(result.accessible_name(),
u"Showing memory information. Memory 5.16 GB available out of "
u"15.52 GB total. Select to open Diagnostics app.");
ASSERT_EQ(result.title_text_vector().size(), 1u); ASSERT_EQ(result.title_text_vector().size(), 1u);
const auto& title = result.title_text_vector()[0]; const auto& title = result.title_text_vector()[0];

@@ -11,8 +11,6 @@
#include "ash/strings/grit/ash_strings.h" #include "ash/strings/grit/ash_strings.h"
#include "base/functional/bind.h" #include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/strings/strcat.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/apps/app_service/app_service_proxy.h"
#include "chrome/browser/ash/app_list/search/common/icon_constants.h" #include "chrome/browser/ash/app_list/search/common/icon_constants.h"
@@ -206,6 +204,10 @@ void SystemInfoCardProvider::OnMemoryUsageUpdated(bool create_result,
l10n_util::GetStringFUTF16(IDS_ASH_MEMORY_USAGE_IN_LAUNCHER_DESCRIPTION, l10n_util::GetStringFUTF16(IDS_ASH_MEMORY_USAGE_IN_LAUNCHER_DESCRIPTION,
available_memory_gb, total_memory_gb); available_memory_gb, total_memory_gb);
std::u16string accessibility_label_details = l10n_util::GetStringFUTF16(
IDS_ASH_MEMORY_USAGE_IN_LAUNCHER_ACCESSIBILITY_LABEL, available_memory_gb,
total_memory_gb);
if (create_result) { if (create_result) {
AnswerCardInfo answer_card_info(memory_usage_percentage); AnswerCardInfo answer_card_info(memory_usage_percentage);
// The bar chart will turn red if there is less than 10% of memory free. // The bar chart will turn red if there is less than 10% of memory free.
@@ -216,8 +218,9 @@ void SystemInfoCardProvider::OnMemoryUsageUpdated(bool create_result,
profile_, last_query_, /*url_path=*/base::EmptyString(), profile_, last_query_, /*url_path=*/base::EmptyString(),
diagnostics_icon_, relevance_, diagnostics_icon_, relevance_,
/*title=*/base::EmptyString16(), description, /*title=*/base::EmptyString16(), description,
accessibility_label_details,
SystemInfoAnswerResult::SystemInfoCategory::kDiagnostics, SystemInfoAnswerResult::SystemInfoCategory::kDiagnostics,
answer_card_info, SystemInfoAnswerResult::SystemInfoCardType::kMemory, answer_card_info,
base::BindRepeating(&SystemInfoCardProvider::UpdateMemoryUsage, base::BindRepeating(&SystemInfoCardProvider::UpdateMemoryUsage,
weak_factory_.GetWeakPtr()), weak_factory_.GetWeakPtr()),
std::move(memory_timer_), this)); std::move(memory_timer_), this));
@@ -225,7 +228,8 @@ void SystemInfoCardProvider::OnMemoryUsageUpdated(bool create_result,
memory_timer_ = std::make_unique<base::RepeatingTimer>(); memory_timer_ = std::make_unique<base::RepeatingTimer>();
} else { } else {
for (auto& observer : memory_observers_) { for (auto& observer : memory_observers_) {
observer.OnMemoryUpdated(memory_usage_percentage, description); observer.OnMemoryUpdated(memory_usage_percentage, description,
accessibility_label_details);
} }
} }
} }
@@ -280,17 +284,21 @@ void SystemInfoCardProvider::OnCpuUsageUpdated(bool create_result,
PopulateAverageScaledClockSpeed(*cpu_info, *new_cpu_usage.get()); PopulateAverageScaledClockSpeed(*cpu_info, *new_cpu_usage.get());
previous_cpu_usage_data_ = new_cpu_usage_data; previous_cpu_usage_data_ = new_cpu_usage_data;
std::u16string cpu_temp =
base::NumberToString16(new_cpu_usage->GetAverageCpuTempCelsius());
// Provide the frequency in GHz and round the value to 2 decimal places.
std::u16string cpu_speed = base::NumberToString16(
static_cast<double>(
new_cpu_usage->GetScalingAverageCurrentFrequencyKhz() / 10000) /
100);
std::u16string title = std::u16string title =
l10n_util::GetStringFUTF16(IDS_ASH_CPU_IN_LAUNCHER_TITLE, l10n_util::GetStringFUTF16(IDS_ASH_CPU_IN_LAUNCHER_TITLE,
new_cpu_usage->GetPercentUsageTotalString()); new_cpu_usage->GetPercentUsageTotalString());
std::u16string description = l10n_util::GetStringFUTF16( std::u16string description = l10n_util::GetStringFUTF16(
IDS_ASH_CPU_IN_LAUNCHER_DESCRIPTION, IDS_ASH_CPU_IN_LAUNCHER_DESCRIPTION, cpu_temp, cpu_speed);
base::NumberToString16(new_cpu_usage->GetAverageCpuTempCelsius()), std::u16string accessibility_label_details = l10n_util::GetStringFUTF16(
// Provide the frequency in GHz and round the value to 2 decimal places. IDS_ASH_CPU_IN_LAUNCHER_ACCESSIBILITY_LABEL,
base::NumberToString16( new_cpu_usage->GetPercentUsageTotalString(), cpu_temp, cpu_speed);
static_cast<double>(
new_cpu_usage->GetScalingAverageCurrentFrequencyKhz() / 10000) /
100));
if (create_result) { if (create_result) {
AnswerCardInfo answer_card_info( AnswerCardInfo answer_card_info(
@@ -300,8 +308,9 @@ void SystemInfoCardProvider::OnCpuUsageUpdated(bool create_result,
new_results.emplace_back(std::make_unique<CpuAnswerResult>( new_results.emplace_back(std::make_unique<CpuAnswerResult>(
profile_, last_query_, /*url_path=*/base::EmptyString(), profile_, last_query_, /*url_path=*/base::EmptyString(),
diagnostics_icon_, relevance_, title, description, diagnostics_icon_, relevance_, title, description,
accessibility_label_details,
SystemInfoAnswerResult::SystemInfoCategory::kDiagnostics, SystemInfoAnswerResult::SystemInfoCategory::kDiagnostics,
answer_card_info, SystemInfoAnswerResult::SystemInfoCardType::kCPU, answer_card_info,
base::BindRepeating(&SystemInfoCardProvider::UpdateCpuUsage, base::BindRepeating(&SystemInfoCardProvider::UpdateCpuUsage,
weak_factory_.GetWeakPtr()), weak_factory_.GetWeakPtr()),
std::move(cpu_usage_timer_), this)); std::move(cpu_usage_timer_), this));
@@ -309,7 +318,8 @@ void SystemInfoCardProvider::OnCpuUsageUpdated(bool create_result,
cpu_usage_timer_ = std::make_unique<base::RepeatingTimer>(); cpu_usage_timer_ = std::make_unique<base::RepeatingTimer>();
} else { } else {
for (auto& observer : cpu_observers_) { for (auto& observer : cpu_observers_) {
observer.OnCpuDataUpdated(title, description); observer.OnCpuDataUpdated(title, description,
accessibility_label_details);
} }
} }
} }
@@ -364,6 +374,16 @@ void SystemInfoCardProvider::OnBatteryInfoUpdated(
base::NumberToString16(new_battery_health->GetBatteryWearPercentage()), base::NumberToString16(new_battery_health->GetBatteryWearPercentage()),
base::NumberToString16(new_battery_health->GetCycleCount())); base::NumberToString16(new_battery_health->GetCycleCount()));
std::u16string accessibility_extra_details = l10n_util::GetStringFUTF16(
IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_EXTRA_DETAILS_ACCESSIBILITY_LABEL,
base::NumberToString16(new_battery_health->GetBatteryWearPercentage()),
base::NumberToString16(new_battery_health->GetCycleCount()));
std::u16string accessibility_label_details =
base::JoinString({new_battery_health->GetAccessibilityLabel(),
accessibility_extra_details},
u". ");
AnswerCardInfo answer_card_info(new_battery_health->GetBatteryPercentage()); AnswerCardInfo answer_card_info(new_battery_health->GetBatteryPercentage());
// The bar chart will turn red if there is less than 20 of battery // The bar chart will turn red if there is less than 20 of battery
// charge left. // charge left.
@@ -374,8 +394,9 @@ void SystemInfoCardProvider::OnBatteryInfoUpdated(
profile_, last_query_, /*url_path=*/base::EmptyString(), profile_, last_query_, /*url_path=*/base::EmptyString(),
diagnostics_icon_, relevance_, diagnostics_icon_, relevance_,
/*title=*/base::EmptyString16(), new_battery_health->GetPowerTime(), /*title=*/base::EmptyString16(), new_battery_health->GetPowerTime(),
accessibility_label_details,
SystemInfoAnswerResult::SystemInfoCategory::kDiagnostics, SystemInfoAnswerResult::SystemInfoCategory::kDiagnostics,
answer_card_info)); SystemInfoAnswerResult::SystemInfoCardType::kBattery, answer_card_info));
SwapResults(&new_results); SwapResults(&new_results);
battery_health_ = std::move(new_battery_health); battery_health_ = std::move(new_battery_health);
@@ -389,22 +410,26 @@ void SystemInfoCardProvider::UpdateChromeOsVersion() {
: IDS_VERSION_UI_UNOFFICIAL); : IDS_VERSION_UI_UNOFFICIAL);
std::u16string processor_variation = l10n_util::GetStringUTF16( std::u16string processor_variation = l10n_util::GetStringUTF16(
sizeof(void*) == 8 ? IDS_VERSION_UI_64BIT : IDS_VERSION_UI_32BIT); sizeof(void*) == 8 ? IDS_VERSION_UI_64BIT : IDS_VERSION_UI_32BIT);
std::u16string channel_name = base::UTF8ToUTF16(
chrome::GetChannelName(chrome::WithExtendedStable(true)));
std::u16string version_string = l10n_util::GetStringFUTF16( std::u16string version_string = l10n_util::GetStringFUTF16(
IDS_ASH_VERSION_IN_LAUNCHER_MESSAGE, version, is_official, IDS_ASH_VERSION_IN_LAUNCHER_MESSAGE, version, is_official, channel_name,
base::UTF8ToUTF16(
chrome::GetChannelName(chrome::WithExtendedStable(true))),
processor_variation); processor_variation);
std::u16string description = std::u16string description =
l10n_util::GetStringUTF16(IDS_ASH_VERSION_IN_LAUNCHER_DESCRIPTION); l10n_util::GetStringUTF16(IDS_ASH_VERSION_IN_LAUNCHER_DESCRIPTION);
std::u16string accessibility_label_details = l10n_util::GetStringFUTF16(
IDS_ASH_VERSION_IN_LAUNCHER_ACCESSIBILITY_LABEL, version, is_official,
channel_name, processor_variation);
AnswerCardInfo answer_card_info( AnswerCardInfo answer_card_info(
ash::SystemInfoAnswerCardDisplayType::kTextCard); ash::SystemInfoAnswerCardDisplayType::kTextCard);
SearchProvider::Results new_results; SearchProvider::Results new_results;
new_results.emplace_back(std::make_unique<SystemInfoAnswerResult>( new_results.emplace_back(std::make_unique<SystemInfoAnswerResult>(
profile_, last_query_, kAboutChromeOsSectionPath, os_settings_icon_, profile_, last_query_, kAboutChromeOsSectionPath, os_settings_icon_,
relevance_, version_string, description, relevance_, version_string, description, accessibility_label_details,
SystemInfoAnswerResult::SystemInfoCategory::kSettings, answer_card_info)); SystemInfoAnswerResult::SystemInfoCategory::kSettings,
SystemInfoAnswerResult::SystemInfoCardType::kVersion, answer_card_info));
SwapResults(&new_results); SwapResults(&new_results);
} }
@@ -495,12 +520,17 @@ void SystemInfoCardProvider::CreateStorageAnswerCard() {
std::u16string description = l10n_util::GetStringFUTF16( std::u16string description = l10n_util::GetStringFUTF16(
IDS_ASH_STORAGE_STATUS_IN_LAUNCHER_DESCRIPTION, in_use_size, total_size); IDS_ASH_STORAGE_STATUS_IN_LAUNCHER_DESCRIPTION, in_use_size, total_size);
std::u16string accessibility_label_details = l10n_util::GetStringFUTF16(
IDS_ASH_STORAGE_STATUS_IN_LAUNCHER_ACCESSIBILITY_LABEL, in_use_size,
total_size);
AnswerCardInfo answer_card_info(in_use_bytes * 100 / total_bytes); AnswerCardInfo answer_card_info(in_use_bytes * 100 / total_bytes);
SearchProvider::Results new_results; SearchProvider::Results new_results;
new_results.emplace_back(std::make_unique<SystemInfoAnswerResult>( new_results.emplace_back(std::make_unique<SystemInfoAnswerResult>(
profile_, last_query_, kStorageSubpagePath, os_settings_icon_, relevance_, profile_, last_query_, kStorageSubpagePath, os_settings_icon_, relevance_,
/*title=*/base::EmptyString16(), description, /*title=*/base::EmptyString16(), description, accessibility_label_details,
SystemInfoAnswerResult::SystemInfoCategory::kSettings, answer_card_info)); SystemInfoAnswerResult::SystemInfoCategory::kSettings,
SystemInfoAnswerResult::SystemInfoCardType::kStorage, answer_card_info));
SwapResults(&new_results); SwapResults(&new_results);
} }

@@ -42,8 +42,10 @@ class SystemInfoCardProvider : public SearchProvider,
// cpu usage of the device. // cpu usage of the device.
class CpuDataObserver : public base::CheckedObserver { class CpuDataObserver : public base::CheckedObserver {
public: public:
virtual void OnCpuDataUpdated(const std::u16string& title, virtual void OnCpuDataUpdated(
const std::u16string& description) = 0; const std::u16string& title,
const std::u16string& description,
const std::u16string& accessibility_label) = 0;
}; };
// Implemented by clients that wish to be updated periodically about the // Implemented by clients that wish to be updated periodically about the
@@ -51,7 +53,8 @@ class SystemInfoCardProvider : public SearchProvider,
class MemoryObserver : public base::CheckedObserver { class MemoryObserver : public base::CheckedObserver {
public: public:
virtual void OnMemoryUpdated(const double memory_usage_percentage, virtual void OnMemoryUpdated(const double memory_usage_percentage,
const std::u16string& description) = 0; const std::u16string& description,
const std::u16string& accessibility_label) = 0;
}; };
explicit SystemInfoCardProvider(Profile* profile); explicit SystemInfoCardProvider(Profile* profile);

@@ -12,7 +12,6 @@
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "chrome/browser/ash/app_list/search/system_info/cpu_usage_data.h" #include "chrome/browser/ash/app_list/search/system_info/cpu_usage_data.h"
#include "chrome/grit/generated_resources.h"
#include "chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_probe.mojom.h" #include "chromeos/ash/services/cros_healthd/public/mojom/cros_healthd_probe.mojom.h"
#include "chromeos/dbus/power_manager/power_supply_properties.pb.h" #include "chromeos/dbus/power_manager/power_supply_properties.pb.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
@@ -231,13 +230,14 @@ std::u16string GetBatteryTimeText(base::TimeDelta time_left) {
time_left); time_left);
} }
std::u16string CalculatePowerTime( void PopulatePowerStatus(const power_manager::PowerSupplyProperties& proto,
const power_manager::PowerSupplyProperties& proto) { BatteryHealth& battery_health) {
bool charging = proto.battery_state() == bool charging = proto.battery_state() ==
power_manager::PowerSupplyProperties_BatteryState_CHARGING; power_manager::PowerSupplyProperties_BatteryState_CHARGING;
bool calculating = proto.is_calculating_battery_time(); bool calculating = proto.is_calculating_battery_time();
int percent = int percent =
ash::power_utils::GetRoundedBatteryPercent(proto.battery_percent()); ash::power_utils::GetRoundedBatteryPercent(proto.battery_percent());
DCHECK(percent <= 100 && percent >= 0);
base::TimeDelta time_left; base::TimeDelta time_left;
bool show_time = false; bool show_time = false;
@@ -248,25 +248,28 @@ std::u16string CalculatePowerTime(
} }
std::u16string status_text; std::u16string status_text;
std::u16string accessibility_string;
if (show_time) { if (show_time) {
status_text = l10n_util::GetStringFUTF16( status_text = l10n_util::GetStringFUTF16(
charging ? IDS_ASH_BATTERY_STATUS_CHARGING_IN_LAUNCHER_DESCRIPTION_LEFT charging ? IDS_ASH_BATTERY_STATUS_CHARGING_IN_LAUNCHER_DESCRIPTION_LEFT
: IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_DESCRIPTION_LEFT, : IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_DESCRIPTION_LEFT,
base::NumberToString16(percent), GetBatteryTimeText(time_left)); base::NumberToString16(percent), GetBatteryTimeText(time_left));
accessibility_string = l10n_util::GetStringFUTF16(
charging
? IDS_ASH_BATTERY_STATUS_CHARGING_IN_LAUNCHER_ACCESSIBILITY_LABEL
: IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_ACCESSIBILITY_LABEL,
base::NumberToString16(percent), GetBatteryTimeText(time_left));
} else { } else {
status_text = l10n_util::GetStringFUTF16( status_text = l10n_util::GetStringFUTF16(
IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_DESCRIPTION_LEFT_SHORT, IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_DESCRIPTION_LEFT_SHORT,
base::NumberToString16(percent)); base::NumberToString16(percent));
accessibility_string = l10n_util::GetStringFUTF16(
IDS_ASH_BATTERY_STATUS_IN_LAUNCHER_ACCESSIBILITY_LABEL_SHORT,
base::NumberToString16(percent));
} }
return status_text;
}
void PopulatePowerStatus(const power_manager::PowerSupplyProperties& proto, battery_health.SetPowerTime(status_text);
BatteryHealth& battery_health) { battery_health.SetAccessibilityLabel(accessibility_string);
int percent =
ash::power_utils::GetRoundedBatteryPercent(proto.battery_percent());
battery_health.SetPowerTime(CalculatePowerTime(proto));
battery_health.SetBatteryPercentage(percent); battery_health.SetBatteryPercentage(percent);
} }

@@ -67,9 +67,6 @@ void PopulateBatteryHealth(
const ash::cros_healthd::mojom::BatteryInfo& battery_info, const ash::cros_healthd::mojom::BatteryInfo& battery_info,
BatteryHealth& battery_health); BatteryHealth& battery_health);
std::u16string CalculatePowerTime(
const power_manager::PowerSupplyProperties& proto);
void PopulatePowerStatus( void PopulatePowerStatus(
const power_manager::PowerSupplyProperties& power_supply_properties, const power_manager::PowerSupplyProperties& power_supply_properties,
BatteryHealth& battery_health); BatteryHealth& battery_health);