Commit 8878e3f4 authored by Rachel Wong's avatar Rachel Wong Committed by Commit Bot

[settings logging] Expose a bool indicating if it is after sunset.

Bug: 1014839
Change-Id: Ieaf9f19ec95e4b46f8ce06f3cbd5585a04babaa2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2049144
Commit-Queue: Rachel Wong <wrong@chromium.org>
Reviewed-by: default avatarTony Yeoman <tby@chromium.org>
Reviewed-by: default avatarAhmed Fakhry <afakhry@chromium.org>
Cr-Commit-Position: refs/heads/master@{#742478}
parent 39871298
...@@ -119,14 +119,15 @@ void UserSettingsEventLogger::LogNightLightUkmEvent(const bool enabled) { ...@@ -119,14 +119,15 @@ void UserSettingsEventLogger::LogNightLightUkmEvent(const bool enabled) {
event->set_previous_value(!enabled ? 1 : 0); event->set_previous_value(!enabled ? 1 : 0);
event->set_current_value(enabled ? 1 : 0); event->set_current_value(enabled ? 1 : 0);
const auto& schedule_type = const auto* night_light_controller = Shell::Get()->night_light_controller();
Shell::Get()->night_light_controller()->GetScheduleType(); const auto schedule_type = night_light_controller->GetScheduleType();
const bool has_night_light_schedule = const bool has_night_light_schedule =
schedule_type != NightLightController::ScheduleType::kNone; schedule_type != NightLightController::ScheduleType::kNone;
UMA_HISTOGRAM_BOOLEAN("Ash.Shelf.UkmLogger.HasNightLightSchedule", UMA_HISTOGRAM_BOOLEAN("Ash.Shelf.UkmLogger.HasNightLightSchedule",
has_night_light_schedule); has_night_light_schedule);
features->set_has_night_light_schedule(has_night_light_schedule); features->set_has_night_light_schedule(has_night_light_schedule);
// TODO(crbug/1014839): Set the |is_after_sunset| feature field. features->set_is_after_sunset(
night_light_controller->IsNowWithinSunsetSunrise());
PopulateSharedFeatures(&settings_event); PopulateSharedFeatures(&settings_event);
SendToUkm(settings_event); SendToUkm(settings_event);
......
...@@ -54,6 +54,33 @@ NetworkStatePropertiesPtr CreateCellularNetwork(int signal_strength) { ...@@ -54,6 +54,33 @@ NetworkStatePropertiesPtr CreateCellularNetwork(int signal_strength) {
return network; return network;
} }
class FakeNightLightDelegate : public NightLightControllerImpl::Delegate {
public:
FakeNightLightDelegate() = default;
~FakeNightLightDelegate() override = default;
FakeNightLightDelegate(const FakeNightLightDelegate&) = delete;
FakeNightLightDelegate& operator=(const FakeNightLightDelegate&) = delete;
void SetFakeNow(TimeOfDay time) { fake_now_ = time.ToTimeToday(); }
void SetFakeSunset(TimeOfDay time) { fake_sunset_ = time.ToTimeToday(); }
void SetFakeSunrise(TimeOfDay time) { fake_sunrise_ = time.ToTimeToday(); }
// NightLightControllerImpl::Delegate:
base::Time GetNow() const override { return fake_now_; }
base::Time GetSunsetTime() const override { return fake_sunset_; }
base::Time GetSunriseTime() const override { return fake_sunrise_; }
bool SetGeoposition(
const NightLightController::SimpleGeoposition& position) override {
return false;
}
bool HasGeoposition() const override { return false; }
private:
base::Time fake_now_;
base::Time fake_sunset_;
base::Time fake_sunrise_;
};
} // namespace } // namespace
class UserSettingsEventLoggerTest : public AshTestBase { class UserSettingsEventLoggerTest : public AshTestBase {
...@@ -157,8 +184,7 @@ TEST_F(UserSettingsEventLoggerTest, TestLogBluetoothEvent) { ...@@ -157,8 +184,7 @@ TEST_F(UserSettingsEventLoggerTest, TestLogBluetoothEvent) {
UserSettingsEvent::Event::BLUETOOTH); UserSettingsEvent::Event::BLUETOOTH);
TestUkmRecorder::ExpectEntryMetric(entry, "SettingType", TestUkmRecorder::ExpectEntryMetric(entry, "SettingType",
UserSettingsEvent::Event::QUICK_SETTINGS); UserSettingsEvent::Event::QUICK_SETTINGS);
// TODO(crbug/1014839): Test that |is_paired_bluetooth_device| is set // |is_paired_bluetooth_device| is tested manually.
// correctly.
} }
TEST_F(UserSettingsEventLoggerTest, TestLogNightLightEvent) { TEST_F(UserSettingsEventLoggerTest, TestLogNightLightEvent) {
...@@ -192,6 +218,32 @@ TEST_F(UserSettingsEventLoggerTest, TestLogNightLightEvent) { ...@@ -192,6 +218,32 @@ TEST_F(UserSettingsEventLoggerTest, TestLogNightLightEvent) {
TestUkmRecorder::ExpectEntryMetric(entry, "HasNightLightSchedule", false); TestUkmRecorder::ExpectEntryMetric(entry, "HasNightLightSchedule", false);
} }
TEST_F(UserSettingsEventLoggerTest, TestNightLightSunsetFeature) {
auto night_light_delegate = std::make_unique<FakeNightLightDelegate>();
auto* night_light = night_light_delegate.get();
Shell::Get()->night_light_controller()->SetDelegateForTesting(
std::move(night_light_delegate));
// Set fake sunrise and sunset to 6am and 6pm.
night_light->SetFakeSunrise(TimeOfDay(6 * 60));
night_light->SetFakeSunset(TimeOfDay(18 * 60));
// Log events at 3am, 12pm, and 11pm.
night_light->SetFakeNow(TimeOfDay(3 * 60));
logger_->LogNightLightUkmEvent(false);
night_light->SetFakeNow(TimeOfDay(12 * 60));
logger_->LogNightLightUkmEvent(false);
night_light->SetFakeNow(TimeOfDay(23 * 60));
logger_->LogNightLightUkmEvent(false);
const auto& entries = GetUkmEntries();
ASSERT_EQ(3ul, entries.size());
TestUkmRecorder::ExpectEntryMetric(entries[0], "IsAfterSunset", true);
TestUkmRecorder::ExpectEntryMetric(entries[1], "IsAfterSunset", false);
TestUkmRecorder::ExpectEntryMetric(entries[2], "IsAfterSunset", true);
}
TEST_F(UserSettingsEventLoggerTest, TestLogQuietModeEvent) { TEST_F(UserSettingsEventLoggerTest, TestLogQuietModeEvent) {
// Log an event that quiet mode has been switched on. // Log an event that quiet mode has been switched on.
logger_->LogQuietModeUkmEvent(true); logger_->LogQuietModeUkmEvent(true);
......
...@@ -584,6 +584,12 @@ bool NightLightControllerImpl::GetAmbientColorEnabled() const { ...@@ -584,6 +584,12 @@ bool NightLightControllerImpl::GetAmbientColorEnabled() const {
active_user_pref_service_->GetBoolean(prefs::kAmbientColorEnabled); active_user_pref_service_->GetBoolean(prefs::kAmbientColorEnabled);
} }
bool NightLightControllerImpl::IsNowWithinSunsetSunrise() const {
// The times below are all on the same calendar day.
const base::Time now = delegate_->GetNow();
return now < delegate_->GetSunriseTime() || now > delegate_->GetSunsetTime();
}
void NightLightControllerImpl::SetEnabled(bool enabled, void NightLightControllerImpl::SetEnabled(bool enabled,
AnimationDuration animation_type) { AnimationDuration animation_type) {
if (active_user_pref_service_) { if (active_user_pref_service_) {
......
...@@ -149,6 +149,9 @@ class ASH_EXPORT NightLightControllerImpl ...@@ -149,6 +149,9 @@ class ASH_EXPORT NightLightControllerImpl
TimeOfDay GetCustomEndTime() const; TimeOfDay GetCustomEndTime() const;
bool GetAmbientColorEnabled() const; bool GetAmbientColorEnabled() const;
// Get whether the current time is after sunset and before sunrise.
bool IsNowWithinSunsetSunrise() const;
// Update |ambient_rgb_scaling_factors_| from the current // Update |ambient_rgb_scaling_factors_| from the current
// |ambient_temperature_|. // |ambient_temperature_|.
void UpdateAmbientRgbScalingFactors(); void UpdateAmbientRgbScalingFactors();
......
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