Commit 795cfbfd authored by Jeffrey Young's avatar Jeffrey Young Committed by Commit Bot

ambient: allow specific art gallery albums based on feature params

Hide ambient mode art gallery settings unless they are allowed
by finch params.

BUG=b:167458920

Change-Id: I367ad1d37fab2629ed219721ec2dd4558b7d395f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2399578
Commit-Queue: Jeffrey Young <cowmoo@chromium.org>
Reviewed-by: default avatarXiaohui Chen <xiaohuic@chromium.org>
Reviewed-by: default avatarJimmy Gong <jimmyxgong@chromium.org>
Reviewed-by: default avatarTao Wu <wutao@chromium.org>
Cr-Commit-Position: refs/heads/master@{#807985}
parent 969fbe8f
......@@ -22,6 +22,7 @@
#include "base/optional.h"
#include "base/time/time.h"
#include "chromeos/assistant/internal/proto/google3/backdrop/backdrop.pb.h"
#include "chromeos/constants/chromeos_features.h"
#include "components/prefs/pref_service.h"
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
......@@ -155,6 +156,27 @@ ScreenUpdate ToScreenUpdate(
return screen_update;
}
bool IsArtSettingVisible(const ArtSetting& art_setting) {
const auto& album_id = art_setting.album_id;
if (album_id == kAmbientModeStreetArtAlbumId)
return chromeos::features::kAmbientModeStreetArtAlbumEnabled.Get();
if (album_id == kAmbientModeCapturedOnPixelAlbumId)
return chromeos::features::kAmbientModeCapturedOnPixelAlbumEnabled.Get();
if (album_id == kAmbientModeEarthAndSpaceAlbumId)
return chromeos::features::kAmbientModeEarthAndSpaceAlbumEnabled.Get();
if (album_id == kAmbientModeFeaturedPhotoAlbumId)
return chromeos::features::kAmbientModeFeaturedPhotoAlbumEnabled.Get();
if (album_id == kAmbientModeFineArtAlbumId)
return chromeos::features::kAmbientModeFineArtAlbumEnabled.Get();
return false;
}
} // namespace
// Helper class for handling Backdrop service requests.
......@@ -368,10 +390,15 @@ void AmbientBackendControllerImpl::OnGetSettings(
auto settings = BackdropClientConfig::ParseGetSettingsResponse(*response);
// |art_settings| should not be empty if parsed successfully.
if (settings.art_settings.empty())
if (settings.art_settings.empty()) {
std::move(callback).Run(base::nullopt);
else
} else {
for (auto& art_setting : settings.art_settings) {
art_setting.visible = IsArtSettingVisible(art_setting);
art_setting.enabled = art_setting.enabled && art_setting.visible;
}
std::move(callback).Run(settings);
}
}
void AmbientBackendControllerImpl::StartToUpdateSettings(
......
......@@ -7,6 +7,11 @@
namespace ash {
const char kAmbientModeRecentHighlightsAlbumId[] = "RecentHighlights";
const char kAmbientModeFeaturedPhotoAlbumId[] = "FeaturedPhoto";
const char kAmbientModeFineArtAlbumId[] = "FineArt";
const char kAmbientModeEarthAndSpaceAlbumId[] = "EarthAndSpace";
const char kAmbientModeStreetArtAlbumId[] = "StreetArt";
const char kAmbientModeCapturedOnPixelAlbumId[] = "CapturedOnPixel";
// ArtSetting ------------------------------------------------------------------
......
......@@ -14,8 +14,12 @@ namespace ash {
// Structs and classes related to Ambient mode Settings.
// TODO(wutao): Replace the internal code with this constant.
ASH_PUBLIC_EXPORT extern const char kAmbientModeRecentHighlightsAlbumId[];
ASH_PUBLIC_EXPORT extern const char kAmbientModeFeaturedPhotoAlbumId[];
ASH_PUBLIC_EXPORT extern const char kAmbientModeFineArtAlbumId[];
ASH_PUBLIC_EXPORT extern const char kAmbientModeEarthAndSpaceAlbumId[];
ASH_PUBLIC_EXPORT extern const char kAmbientModeStreetArtAlbumId[];
ASH_PUBLIC_EXPORT extern const char kAmbientModeCapturedOnPixelAlbumId[];
// Enumeration of the topic source, i.e. where the photos come from.
// Values need to stay in sync with the |topicSource_| in ambient_mode_page.js.
......@@ -44,6 +48,10 @@ struct ASH_PUBLIC_EXPORT ArtSetting {
// Whether the setting is enabled in the Art gallery topic source.
bool enabled = false;
// Whether the setting is visible to the user. This is controlled by feature
// parameters to allow remotely disabling certain categories.
bool visible = false;
// UTF-8 encoded.
std::string title;
......
......@@ -33,14 +33,23 @@ AmbientSettings CreateFakeSettings() {
art_setting0.album_id = "0";
art_setting0.enabled = true;
art_setting0.title = "art0";
art_setting0.visible = true;
settings.art_settings.emplace_back(art_setting0);
ArtSetting art_setting1;
art_setting1.album_id = "1";
art_setting1.enabled = false;
art_setting1.title = "art1";
art_setting1.visible = true;
settings.art_settings.emplace_back(art_setting1);
ArtSetting hidden_setting;
hidden_setting.album_id = "2";
hidden_setting.enabled = false;
hidden_setting.title = "hidden";
hidden_setting.visible = false;
settings.art_settings.emplace_back(hidden_setting);
settings.selected_album_ids = {"1"};
return settings;
}
......
......@@ -236,6 +236,9 @@ void AmbientModeHandler::HandleSetSelectedAlbums(const base::ListValue* args) {
});
const bool checked = it != albums->GetList().end();
art_setting.enabled = checked;
// A setting must be visible to be enabled.
if (art_setting.enabled)
CHECK(art_setting.visible);
}
break;
}
......@@ -282,6 +285,8 @@ void AmbientModeHandler::SendAlbums(ash::AmbientModeTopicSource topic_source) {
break;
case ash::AmbientModeTopicSource::kArtGallery:
for (const auto& setting : settings_->art_settings) {
if (!setting.visible)
continue;
base::Value value(base::Value::Type::DICTIONARY);
value.SetKey("albumId", base::Value(setting.album_id));
value.SetKey("checked", base::Value(setting.enabled));
......
......@@ -4,6 +4,7 @@
#include "chromeos/constants/chromeos_features.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
namespace chromeos {
namespace features {
......@@ -26,6 +27,21 @@ const base::Feature kAllowScrollSettings{"AllowScrollSettings",
const base::Feature kAmbientModeFeature{"ChromeOSAmbientMode",
base::FEATURE_DISABLED_BY_DEFAULT};
constexpr base::FeatureParam<bool> kAmbientModeCapturedOnPixelAlbumEnabled{
&kAmbientModeFeature, "CapturedOnPixelAlbumEnabled", false};
constexpr base::FeatureParam<bool> kAmbientModeFineArtAlbumEnabled{
&kAmbientModeFeature, "FineArtAlbumEnabled", false};
constexpr base::FeatureParam<bool> kAmbientModeFeaturedPhotoAlbumEnabled{
&kAmbientModeFeature, "FeaturedPhotoAlbumEnabled", false};
constexpr base::FeatureParam<bool> kAmbientModeEarthAndSpaceAlbumEnabled{
&kAmbientModeFeature, "EarthAndSpaceAlbumEnabled", false};
constexpr base::FeatureParam<bool> kAmbientModeStreetArtAlbumEnabled{
&kAmbientModeFeature, "StreetArtAlbumEnabled", false};
// Controls whether to enable Ambient mode album selection with photo previews.
const base::Feature kAmbientModePhotoPreviewFeature{
"ChromeOSAmbientModePhotoPreview", base::FEATURE_ENABLED_BY_DEFAULT};
......
......@@ -7,6 +7,7 @@
#include "base/component_export.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
namespace chromeos {
namespace features {
......@@ -20,6 +21,16 @@ extern const base::Feature kAllowScrollSettings;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const base::Feature kAmbientModeFeature;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const base::FeatureParam<bool> kAmbientModeCapturedOnPixelAlbumEnabled;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const base::FeatureParam<bool> kAmbientModeFineArtAlbumEnabled;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const base::FeatureParam<bool> kAmbientModeFeaturedPhotoAlbumEnabled;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const base::FeatureParam<bool> kAmbientModeEarthAndSpaceAlbumEnabled;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const base::FeatureParam<bool> kAmbientModeStreetArtAlbumEnabled;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const base::Feature kAmbientModePhotoPreviewFeature;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const base::Feature kAmbientModeDevUseProdFeature;
......
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