Commit 2cf5267f authored by Claude van der Merwe's avatar Claude van der Merwe Committed by Commit Bot

Add Wifi Sync V2 feature to multidevice page

1. Adds Wifi Sync to Multidevice Subpage
2. Update tests to include Wifi Sync
3. Adds new search string tags for Wifi Sync
4. Refactored conditionally adding features to
GetMultiDeviceOptedOutSearchConcepts

Bug: 1117619
Change-Id: Iac0b065b2d1f244ae1318e6e69415a626c10d39a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2386395Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarJon Mann <jonmann@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Commit-Queue: Claude van der Merwe <cvandermerwe@google.com>
Cr-Commit-Position: refs/heads/master@{#803899}
parent 14115cf9
......@@ -255,6 +255,9 @@
<message name="IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB_TASK_CONTINUATION" translateable="false" desc="Text for search result item which, when clicked, navigates the user to Phone Hub Notifications badge settings, with a toggle to enable/disable the feature. Phone Hub Task Continuation allows user to continue a task between connected device and Chrome OS">
Phone Hub task continuation
</message>
<message name="IDS_OS_SETTINGS_TAG_MULTIDEVICE_WIFI_SYNC" translateable="false" desc="Text for search result item which, when clicked, navigates the user to Wi-Fi Sync V2 settings, with a toggle to enable/disable the feature. Wi-Fi Sync V2 allows user to sync network configurations between Chrome OS devices and a connected Android phone">
Wi-Fi Sync
</message>
<!-- People section. -->
......
......@@ -2236,6 +2236,12 @@
<message name="IDS_SETTINGS_MULTIDEVICE_NOTIFICATION_ACCESS_SETUP_DIALOG_COMPLETED_SUMMARY" translateable="false" desc="The body text of the dialog containing the Phone Hub notification opt-in flow when the feature is successfully turned on and notifications on their phone will now be mirrored to their Chromebook.">
You will receive your phone notifications on your Chromebook
</message>
<message name="IDS_SETTINGS_MULTIDEVICE_WIFI_SYNC_SECTION_TITLE" translateable="false" desc="The title of the Wifi Sync section on the settings page. Wi-Fi Sync V2 allows user to sync network configurations between Chrome OS devices and a connected Android phone.">
Wi-Fi Sync
</message>
<message name="IDS_SETTINGS_MULTIDEVICE_WIFI_SYNC_SUMMARY" translateable="false" desc="Description of for the 'Wifi Sync' setting. This feature lets the user sync wifi network configurations between Chrome OS devices and a connected Android phone">
Sync Wi-Fi networks with your phone <ph name="LINK_BEGIN">&lt;a target="_blank" href="$1<ex>https://google.com/</ex>"&gt;</ph>Learn more<ph name="LINK_END">&lt;/a&gt;</ph>
</message>
<!-- Lock Screen Page (OS settings) -->
<message name="IDS_ASH_SETTINGS_LOCK_SCREEN_NOTIFICATION_TITLE" desc="The title of options to change the behavior of notifications on the lock screen.">
......
......@@ -44,6 +44,7 @@ cr.define('settings', function() {
PHONE_HUB_NOTIFICATIONS: 5,
PHONE_HUB_NOTIFICATION_BADGE: 6,
PHONE_HUB_TASK_CONTINUATION: 7,
WIFI_SYNC: 8,
};
/**
......@@ -89,6 +90,7 @@ cr.define('settings', function() {
* phoneHubNotificationsState: !settings.MultiDeviceFeatureState,
* phoneHubNotificationBadgeState: !settings.MultiDeviceFeatureState,
* phoneHubTaskContinuationState: !settings.MultiDeviceFeatureState,
* wifiSyncState: !settings.MultiDeviceFeatureState,
* isAndroidSmsPairingComplete: boolean,
* isNotificationAccessGranted: boolean
* }}
......
......@@ -114,6 +114,8 @@ const MultiDeviceFeatureBehaviorImpl = {
return this.i18n('multidevicePhoneHubNotificationBadgeItemTitle');
case settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION:
return this.i18n('multidevicePhoneHubTaskContinuationItemTitle');
case settings.MultiDeviceFeature.WIFI_SYNC:
return this.i18n('multideviceWifiSyncItemTitle');
default:
return '';
}
......@@ -139,6 +141,9 @@ const MultiDeviceFeatureBehaviorImpl = {
case settings.MultiDeviceFeature.PHONE_HUB_NOTIFICATION_BADGE:
case settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION:
return 'os-settings:multidevice-better-together-suite';
// TODO(cvandermerwe): Use real Wifi Sync asset.
case settings.MultiDeviceFeature.WIFI_SYNC:
return 'os-settings:multidevice-wifi';
default:
return '';
}
......@@ -168,6 +173,8 @@ const MultiDeviceFeatureBehaviorImpl = {
case settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION:
return this.i18nAdvanced(
'multidevicePhoneHubTaskContinuationItemSummary');
case settings.MultiDeviceFeature.WIFI_SYNC:
return this.i18nAdvanced('multideviceWifiSyncItemSummary');
default:
return '';
}
......@@ -202,6 +209,8 @@ const MultiDeviceFeatureBehaviorImpl = {
return this.pageContentData.phoneHubNotificationBadgeState;
case settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION:
return this.pageContentData.phoneHubTaskContinuationState;
case settings.MultiDeviceFeature.WIFI_SYNC:
return this.pageContentData.wifiSyncState;
default:
return null;
}
......
......@@ -135,6 +135,15 @@
page-content-data="[[pageContentData]]">
</settings-multidevice-feature-item>
</template>
<template is="dom-if"
if="[[isFeatureSupported(
MultiDeviceFeature.WIFI_SYNC, pageContentData)]]"
restamp>
<settings-multidevice-feature-item id="wifiSyncItem"
feature="[[MultiDeviceFeature.WIFI_SYNC]]"
page-content-data="[[pageContentData]]">
</settings-multidevice-feature-item>
</template>
</div>
</template>
<div class="settings-box two-line">
......
......@@ -28,6 +28,10 @@ These icons may appear blurry.
<g id="multidevice-better-together-suite" viewBox="0 0 24 24"><path d="M17,1.01 L7,1 C5.9,1 5,1.9 5,3 L5,21 C5,22.1 5.9,23 7,23 L17,23 C18.1,23 19,22.1 19,21 L19,3 C19,1.9 18.1,1.01 17,1.01 Z M17,21 L7,21 L7,20 L17,20 L17,21 Z M17,18 L7,18 L7,6 L17,6 L17,18 Z M7,4 L7,3 L17,3 L17,4 L7,4 Z"></path></g>
<g id="multidevice-smart-lock" viewBox="0 0 24 24"><path d="M18,9 L17,9 L17,7 C17,4.24 14.76,2 12,2 C9.24,2 7,4.24 7,7 L7,9 L6,9 C4.9,9 4,9.9 4,11 L4,21 C4,22.1 4.9,23 6,23 L18,23 C19.1,23 20,22.1 20,21 L20,11 C20,9.9 19.1,9 18,9 Z M9,7 C9,5.34 10.34,4 12,4 C13.66,4 15,5.34 15,7 L15,9 L9,9 L9,7 Z M18,21 L6,21 L6,11 L18,11 L18,21 Z M12,18 C13.1,18 14,17.1 14,16 C14,14.9 13.1,14 12,14 C10.9,14 10,14.9 10,16 C10,17.1 10.9,18 12,18 Z"></path></g>
<g id="multidevice-messages" viewBox="0 0 24 24"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 2H3.66667C2.75 2 2.00833 2.75 2.00833 3.66667L2 17.5L5 15H16C16.9167 15 18 14.4167 18 13.5V3.5C18 2.58333 16.9167 2 16 2ZM16 13H4V4H16V13ZM5 9H11V11H5V9ZM5 6H15V8H5V6Z"></path></g>
<g id="multidevice-wifi" viewBox="0 0 24 24">
<path d="M10.01 17.99L20 5.46C19.613 5.164 15.765 2 10 2 4.227 2 .387 5.165 0 5.46l9.99 12.53.01.01.01-.01z" fill-opacity=".3"></path>
<path d="M2.942 9.143l7.05 8.85L10 18l.008-.008 7.05-8.85C16.7 8.867 14.008 6.668 10 6.668s-6.7 2.2-7.058 2.476z"></path>
</g>
<!-- Material icon from http://icons/ -->
<g id="play-prism" viewBox="0 0 24 24"><path d="M20.18 10.88l-3.06-1.74L14.26 12l2.86 2.86 3.06-1.74c.55-.31.82-.71.82-1.12 0-.41-.27-.81-.82-1.12zM4.71 2.45l8.42 8.42 2.55-2.55-10.7-6.06c-.07-.04-.14-.07-.21-.1-.17-.07-.3.05-.15.21.03.02.06.05.09.08zm0 19.1l-.08.08c-.15.15-.02.28.15.21.07-.03.14-.06.21-.1l10.69-6.06-2.55-2.55s-7.2 7.21-8.42 8.42zM12 12L3.38 3.38c-.19-.19-.38-.07-.38.19v16.86c0 .26.19.38.38.19L12 12z"></path></g>
......
......@@ -57,6 +57,7 @@ enum Setting {
kPhoneHubNotificationsOnOff = 210,
kPhoneHubNotificationBadgeOnOff = 211,
kPhoneHubTaskContinuationOnOff = 212,
kWifiSyncOnOff = 213,
// People section.
kAddAccount = 300,
......
......@@ -42,6 +42,7 @@ const char kPageContentDataPhoneHubNotificationBadgeStateKey[] =
"phoneHubNotificationBadgeState";
const char kPageContentDataPhoneHubTaskContinuationStateKey[] =
"phoneHubTaskContinuationState";
const char kPageContentDataWifiSyncStateKey[] = "wifiSyncState";
const char kPageContentDataSmartLockStateKey[] = "smartLockState";
const char kIsNotificationAccessGranted[] = "isNotificationAccessGranted";
const char kIsAndroidSmsPairingComplete[] = "isAndroidSmsPairingComplete";
......@@ -457,6 +458,10 @@ MultideviceHandler::GeneratePageContentDataDictionary() {
static_cast<int32_t>(
feature_states
[multidevice_setup::mojom::Feature::kPhoneHubTaskContinuation]));
page_content_dictionary->SetInteger(
kPageContentDataWifiSyncStateKey,
static_cast<int32_t>(
feature_states[multidevice_setup::mojom::Feature::kWifiSync]));
if (host_status_with_device.second) {
page_content_dictionary->SetString(kPageContentDataHostDeviceNameKey,
......
......@@ -66,6 +66,8 @@ GenerateDefaultFeatureStatesMap() {
{multidevice_setup::mojom::Feature::kPhoneHubNotificationBadge,
multidevice_setup::mojom::FeatureState::kUnavailableNoVerifiedHost},
{multidevice_setup::mojom::Feature::kPhoneHubTaskContinuation,
multidevice_setup::mojom::FeatureState::kUnavailableNoVerifiedHost},
{multidevice_setup::mojom::Feature::kWifiSync,
multidevice_setup::mojom::FeatureState::kUnavailableNoVerifiedHost}};
}
......@@ -133,6 +135,11 @@ void VerifyPageContentDict(
multidevice_setup::mojom::Feature::kPhoneHubTaskContinuation);
EXPECT_EQ(static_cast<int>(it->second), phone_hub_task_continuation_state);
int wifi_sync_state;
EXPECT_TRUE(page_content_dict->GetInteger("wifiSyncState", &wifi_sync_state));
it = feature_states_map.find(multidevice_setup::mojom::Feature::kWifiSync);
EXPECT_EQ(static_cast<int>(it->second), wifi_sync_state);
std::string host_device_name;
if (expected_host_device) {
EXPECT_TRUE(
......
......@@ -105,6 +105,18 @@ GetMultiDeviceOptedInPhoneHubSearchConcepts() {
return *tags;
}
const std::vector<SearchConcept>&
GetMultiDeviceOptedInWifiSyncSearchConcepts() {
static const base::NoDestructor<std::vector<SearchConcept>> tags(
{{IDS_OS_SETTINGS_TAG_MULTIDEVICE_WIFI_SYNC,
mojom::kMultiDeviceFeaturesSubpagePath,
mojom::SearchResultIcon::kWifi,
mojom::SearchResultDefaultRank::kMedium,
mojom::SearchResultType::kSetting,
{.setting = mojom::Setting::kWifiSyncOnOff}}});
return *tags;
}
const std::vector<SearchConcept>& GetMultiDeviceOptedOutSearchConcepts() {
static const base::NoDestructor<std::vector<SearchConcept>> tags([] {
// Special-case: The "set up" search tag also includes the names of the
......@@ -122,23 +134,31 @@ const std::vector<SearchConcept>& GetMultiDeviceOptedOutSearchConcepts() {
IDS_OS_SETTINGS_TAG_MULTIDEVICE_SMART_LOCK, SearchConcept::kAltTagEnd},
};
bool is_phone_hub_enabled = features::IsPhoneHubEnabled();
bool is_instant_tether_enabled =
base::FeatureList::IsEnabled(features::kInstantTethering);
// If Phone Hub and/or Instant Tethering is available, also include them in
// the list.
if (is_phone_hub_enabled) {
set_up_concept.alt_tag_ids[3] = IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB;
if (is_instant_tether_enabled) {
set_up_concept.alt_tag_ids[4] = IDS_OS_SETTINGS_TAG_INSTANT_TETHERING;
} else {
set_up_concept.alt_tag_ids[4] = SearchConcept::kAltTagEnd;
}
} else if (is_instant_tether_enabled) {
set_up_concept.alt_tag_ids[3] = IDS_OS_SETTINGS_TAG_INSTANT_TETHERING;
set_up_concept.alt_tag_ids[4] = SearchConcept::kAltTagEnd;
// Include the following features in alternate message IDs if they are
// enabled and the alt tag limit has not been reached: Phone Hub, Instant
// Tethering and Wifi Sync.
int alt_tag_index = 3;
if (features::IsPhoneHubEnabled()) {
set_up_concept.alt_tag_ids[alt_tag_index] =
IDS_OS_SETTINGS_TAG_MULTIDEVICE_PHONE_HUB;
alt_tag_index++;
}
if (base::FeatureList::IsEnabled(features::kInstantTethering)) {
set_up_concept.alt_tag_ids[alt_tag_index] =
IDS_OS_SETTINGS_TAG_INSTANT_TETHERING;
alt_tag_index++;
}
// TODO(cvandermerwe): Update 5 alt tag limit to 6 and remove condition
if (alt_tag_index < 5 && features::IsWifiSyncAndroidEnabled()) {
set_up_concept.alt_tag_ids[alt_tag_index] =
IDS_OS_SETTINGS_TAG_MULTIDEVICE_WIFI_SYNC;
alt_tag_index++;
}
if (alt_tag_index < 5) {
set_up_concept.alt_tag_ids[alt_tag_index] = SearchConcept::kAltTagEnd;
}
return std::vector<SearchConcept>{set_up_concept};
......@@ -257,6 +277,8 @@ void MultiDeviceSection::AddLoadTimeData(
IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_NOTIFICATION_BADGE_SUMMARY},
{"multidevicePhoneHubTaskContinuationItemSummary",
IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_TASK_CONTINUATION_SUMMARY},
{"multideviceWifiSyncItemTitle",
IDS_SETTINGS_MULTIDEVICE_WIFI_SYNC_SECTION_TITLE},
{"multideviceNotificationAccessSetupAckTitle",
IDS_SETTINGS_MULTIDEVICE_NOTIFICATION_ACCESS_SETUP_DIALOG_ACK_TITLE},
{"multideviceNotificationAccessSetupConnectingTitle",
......@@ -341,6 +363,15 @@ void MultiDeviceSection::AddLoadTimeData(
l10n_util::GetStringFUTF16(
IDS_SETTINGS_MULTIDEVICE_PHONE_HUB_NOTIFICATIONS_SUMMARY,
ui::GetChromeOSDeviceName()));
html_source->AddString(
"multideviceWifiSyncItemSummary",
l10n_util::GetStringFUTF16(
IDS_SETTINGS_MULTIDEVICE_WIFI_SYNC_SUMMARY,
// TODO(cvandermerwe) Replace with WifiSyncLearnMoreUrl once created
base::UTF8ToUTF16(
multidevice_setup::
GetBoardSpecificBetterTogetherSuiteLearnMoreUrl()
.spec())));
AddEasyUnlockStrings(html_source);
::settings::AddNearbyShareData(html_source);
......@@ -400,6 +431,7 @@ void MultiDeviceSection::RegisterHierarchy(
mojom::Setting::kPhoneHubNotificationsOnOff,
mojom::Setting::kPhoneHubNotificationBadgeOnOff,
mojom::Setting::kPhoneHubTaskContinuationOnOff,
mojom::Setting::kWifiSyncOnOff,
};
RegisterNestedSettingBulk(mojom::Subpage::kMultiDeviceFeatures,
kMultiDeviceFeaturesSettings, generator);
......@@ -442,12 +474,15 @@ void MultiDeviceSection::OnHostStatusChanged(
SearchTagRegistry::ScopedTagUpdater updater = registry()->StartUpdate();
updater.RemoveSearchTags(GetMultiDeviceOptedOutSearchConcepts());
updater.RemoveSearchTags(GetMultiDeviceOptedInPhoneHubSearchConcepts());
updater.RemoveSearchTags(GetMultiDeviceOptedInWifiSyncSearchConcepts());
updater.RemoveSearchTags(GetMultiDeviceOptedInSearchConcepts());
if (IsOptedIn(host_status_with_device.first)) {
updater.AddSearchTags(GetMultiDeviceOptedInSearchConcepts());
if (features::IsPhoneHubEnabled())
updater.AddSearchTags(GetMultiDeviceOptedInPhoneHubSearchConcepts());
if (features::IsWifiSyncAndroidEnabled())
updater.AddSearchTags(GetMultiDeviceOptedInWifiSyncSearchConcepts());
} else {
updater.AddSearchTags(GetMultiDeviceOptedOutSearchConcepts());
}
......
......@@ -72,6 +72,10 @@ suite('Multidevice', function() {
settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION) ?
settings.MultiDeviceFeatureState.ENABLED_BY_USER :
settings.MultiDeviceFeatureState.NOT_SUPPORTED_BY_CHROMEBOOK,
wifiSyncState: supportedFeatures.includes(
settings.MultiDeviceFeature.WIFI_SYNC) ?
settings.MultiDeviceFeatureState.ENABLED_BY_USER :
settings.MultiDeviceFeatureState.NOT_SUPPORTED_BY_CHROMEBOOK,
});
Polymer.dom.flush();
}
......@@ -135,11 +139,14 @@ suite('Multidevice', function() {
!!multideviceSubpage.$$('#phoneHubNotificationsItem'),
mode === settings.MultiDeviceSettingsMode.HOST_SET_VERIFIED);
assertEquals(
!!multideviceSubpage.$$('#phoneHubNotificationBadgeItem'),
mode === settings.MultiDeviceSettingsMode.HOST_SET_VERIFIED);
!!multideviceSubpage.$$('#phoneHubNotificationBadgeItem'),
mode === settings.MultiDeviceSettingsMode.HOST_SET_VERIFIED);
assertEquals(
!!multideviceSubpage.$$('#phoneHubTaskContinuationItem'),
mode === settings.MultiDeviceSettingsMode.HOST_SET_VERIFIED);
assertEquals(
!!multideviceSubpage.$$('#phoneHubTaskContinuationItem'),
mode === settings.MultiDeviceSettingsMode.HOST_SET_VERIFIED);
!!multideviceSubpage.$$('#wifiSyncItem'),
mode === settings.MultiDeviceSettingsMode.HOST_SET_VERIFIED);
}
});
......@@ -153,6 +160,7 @@ suite('Multidevice', function() {
assertTrue(!!multideviceSubpage.$$('#phoneHubNotificationsItem'));
assertTrue(!!multideviceSubpage.$$('#phoneHubNotificationBadgeItem'));
assertTrue(!!multideviceSubpage.$$('#phoneHubTaskContinuationItem'));
assertTrue(!!multideviceSubpage.$$('#wifiSyncItem'));
setSupportedFeatures([
settings.MultiDeviceFeature.SMART_LOCK,
......@@ -161,6 +169,7 @@ suite('Multidevice', function() {
settings.MultiDeviceFeature.PHONE_HUB_NOTIFICATIONS,
settings.MultiDeviceFeature.PHONE_HUB_NOTIFICATION_BADGE,
settings.MultiDeviceFeature.PHONE_HUB_TASK_CONTINUATION,
settings.MultiDeviceFeature.WIFI_SYNC,
]);
assertTrue(!!multideviceSubpage.$$('#smartLockItem'));
assertFalse(!!multideviceSubpage.$$('#instantTetheringItem'));
......@@ -169,6 +178,7 @@ suite('Multidevice', function() {
assertTrue(!!multideviceSubpage.$$('#phoneHubNotificationsItem'));
assertTrue(!!multideviceSubpage.$$('#phoneHubNotificationBadgeItem'));
assertTrue(!!multideviceSubpage.$$('#phoneHubTaskContinuationItem'));
assertTrue(!!multideviceSubpage.$$('#wifiSyncItem'));
setSupportedFeatures([settings.MultiDeviceFeature.INSTANT_TETHERING]);
assertFalse(!!multideviceSubpage.$$('#smartLockItem'));
......@@ -178,6 +188,7 @@ suite('Multidevice', function() {
assertFalse(!!multideviceSubpage.$$('#phoneHubNotificationsItem'));
assertFalse(!!multideviceSubpage.$$('#phoneHubNotificationBadgeItem'));
assertFalse(!!multideviceSubpage.$$('#phoneHubTaskContinuationItem'));
assertFalse(!!multideviceSubpage.$$('#wifiSyncItem'));
setSupportedFeatures([]);
assertFalse(!!multideviceSubpage.$$('#smartLockItem'));
......@@ -187,6 +198,7 @@ suite('Multidevice', function() {
assertFalse(!!multideviceSubpage.$$('#phoneHubNotificationsItem'));
assertFalse(!!multideviceSubpage.$$('#phoneHubNotificationBadgeItem'));
assertFalse(!!multideviceSubpage.$$('#phoneHubTaskContinuationItem'));
assertFalse(!!multideviceSubpage.$$('#wifiSyncItem'));
});
test('clicking SmartLock item routes to SmartLock subpage', function() {
......
......@@ -31,7 +31,8 @@ MultiDeviceSetupClient::GenerateDefaultFeatureStatesMap() {
{mojom::Feature::kPhoneHubNotificationBadge,
mojom::FeatureState::kProhibitedByPolicy},
{mojom::Feature::kPhoneHubTaskContinuation,
mojom::FeatureState::kProhibitedByPolicy}};
mojom::FeatureState::kProhibitedByPolicy},
{mojom::Feature::kWifiSync, mojom::FeatureState::kProhibitedByPolicy}};
}
MultiDeviceSetupClient::MultiDeviceSetupClient() = default;
......
......@@ -53032,6 +53032,7 @@ Called by update_net_trust_anchors.py.-->
<int value="210" label="Phone Hub Notifications: On/Off"/>
<int value="211" label="Phone Hub Notification Badge: On/Off"/>
<int value="212" label="Phone Hub Task Continuation: On/Off"/>
<int value="213" label="Wifi Sync: On/Off"/>
<int value="300" label="Add Account"/>
<int value="301" label="Remove Account"/>
<int value="302" label="Split Sync On/Off"/>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment