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 @@ ...@@ -22,6 +22,7 @@
#include "base/optional.h" #include "base/optional.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "chromeos/assistant/internal/proto/google3/backdrop/backdrop.pb.h" #include "chromeos/assistant/internal/proto/google3/backdrop/backdrop.pb.h"
#include "chromeos/constants/chromeos_features.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "net/base/load_flags.h" #include "net/base/load_flags.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
...@@ -155,6 +156,27 @@ ScreenUpdate ToScreenUpdate( ...@@ -155,6 +156,27 @@ ScreenUpdate ToScreenUpdate(
return screen_update; 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 } // namespace
// Helper class for handling Backdrop service requests. // Helper class for handling Backdrop service requests.
...@@ -368,10 +390,15 @@ void AmbientBackendControllerImpl::OnGetSettings( ...@@ -368,10 +390,15 @@ void AmbientBackendControllerImpl::OnGetSettings(
auto settings = BackdropClientConfig::ParseGetSettingsResponse(*response); auto settings = BackdropClientConfig::ParseGetSettingsResponse(*response);
// |art_settings| should not be empty if parsed successfully. // |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); 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); std::move(callback).Run(settings);
}
} }
void AmbientBackendControllerImpl::StartToUpdateSettings( void AmbientBackendControllerImpl::StartToUpdateSettings(
......
...@@ -7,6 +7,11 @@ ...@@ -7,6 +7,11 @@
namespace ash { namespace ash {
const char kAmbientModeRecentHighlightsAlbumId[] = "RecentHighlights"; 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 ------------------------------------------------------------------ // ArtSetting ------------------------------------------------------------------
......
...@@ -14,8 +14,12 @@ namespace ash { ...@@ -14,8 +14,12 @@ namespace ash {
// Structs and classes related to Ambient mode Settings. // 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 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. // 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. // Values need to stay in sync with the |topicSource_| in ambient_mode_page.js.
...@@ -44,6 +48,10 @@ struct ASH_PUBLIC_EXPORT ArtSetting { ...@@ -44,6 +48,10 @@ struct ASH_PUBLIC_EXPORT ArtSetting {
// Whether the setting is enabled in the Art gallery topic source. // Whether the setting is enabled in the Art gallery topic source.
bool enabled = false; 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. // UTF-8 encoded.
std::string title; std::string title;
......
...@@ -33,14 +33,23 @@ AmbientSettings CreateFakeSettings() { ...@@ -33,14 +33,23 @@ AmbientSettings CreateFakeSettings() {
art_setting0.album_id = "0"; art_setting0.album_id = "0";
art_setting0.enabled = true; art_setting0.enabled = true;
art_setting0.title = "art0"; art_setting0.title = "art0";
art_setting0.visible = true;
settings.art_settings.emplace_back(art_setting0); settings.art_settings.emplace_back(art_setting0);
ArtSetting art_setting1; ArtSetting art_setting1;
art_setting1.album_id = "1"; art_setting1.album_id = "1";
art_setting1.enabled = false; art_setting1.enabled = false;
art_setting1.title = "art1"; art_setting1.title = "art1";
art_setting1.visible = true;
settings.art_settings.emplace_back(art_setting1); 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"}; settings.selected_album_ids = {"1"};
return settings; return settings;
} }
......
...@@ -236,6 +236,9 @@ void AmbientModeHandler::HandleSetSelectedAlbums(const base::ListValue* args) { ...@@ -236,6 +236,9 @@ void AmbientModeHandler::HandleSetSelectedAlbums(const base::ListValue* args) {
}); });
const bool checked = it != albums->GetList().end(); const bool checked = it != albums->GetList().end();
art_setting.enabled = checked; art_setting.enabled = checked;
// A setting must be visible to be enabled.
if (art_setting.enabled)
CHECK(art_setting.visible);
} }
break; break;
} }
...@@ -282,6 +285,8 @@ void AmbientModeHandler::SendAlbums(ash::AmbientModeTopicSource topic_source) { ...@@ -282,6 +285,8 @@ void AmbientModeHandler::SendAlbums(ash::AmbientModeTopicSource topic_source) {
break; break;
case ash::AmbientModeTopicSource::kArtGallery: case ash::AmbientModeTopicSource::kArtGallery:
for (const auto& setting : settings_->art_settings) { for (const auto& setting : settings_->art_settings) {
if (!setting.visible)
continue;
base::Value value(base::Value::Type::DICTIONARY); base::Value value(base::Value::Type::DICTIONARY);
value.SetKey("albumId", base::Value(setting.album_id)); value.SetKey("albumId", base::Value(setting.album_id));
value.SetKey("checked", base::Value(setting.enabled)); value.SetKey("checked", base::Value(setting.enabled));
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "chromeos/constants/chromeos_features.h" #include "chromeos/constants/chromeos_features.h"
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
namespace chromeos { namespace chromeos {
namespace features { namespace features {
...@@ -26,6 +27,21 @@ const base::Feature kAllowScrollSettings{"AllowScrollSettings", ...@@ -26,6 +27,21 @@ const base::Feature kAllowScrollSettings{"AllowScrollSettings",
const base::Feature kAmbientModeFeature{"ChromeOSAmbientMode", const base::Feature kAmbientModeFeature{"ChromeOSAmbientMode",
base::FEATURE_DISABLED_BY_DEFAULT}; 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. // Controls whether to enable Ambient mode album selection with photo previews.
const base::Feature kAmbientModePhotoPreviewFeature{ const base::Feature kAmbientModePhotoPreviewFeature{
"ChromeOSAmbientModePhotoPreview", base::FEATURE_ENABLED_BY_DEFAULT}; "ChromeOSAmbientModePhotoPreview", base::FEATURE_ENABLED_BY_DEFAULT};
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/component_export.h" #include "base/component_export.h"
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
namespace chromeos { namespace chromeos {
namespace features { namespace features {
...@@ -20,6 +21,16 @@ extern const base::Feature kAllowScrollSettings; ...@@ -20,6 +21,16 @@ extern const base::Feature kAllowScrollSettings;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS) COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const base::Feature kAmbientModeFeature; extern const base::Feature kAmbientModeFeature;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS) 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; extern const base::Feature kAmbientModePhotoPreviewFeature;
COMPONENT_EXPORT(CHROMEOS_CONSTANTS) COMPONENT_EXPORT(CHROMEOS_CONSTANTS)
extern const base::Feature kAmbientModeDevUseProdFeature; 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