NightDisplayServiceTest.java revision e5bb03e2ea8cf0d7ab98fb6e6f8db1007d8d48d2
1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.server; 18 19import android.app.ActivityManager; 20import android.app.AlarmManager; 21import android.content.Context; 22import android.content.ContextWrapper; 23import android.os.UserHandle; 24import android.provider.Settings; 25import android.provider.Settings.Secure; 26import android.support.test.InstrumentationRegistry; 27import android.support.test.runner.AndroidJUnit4; 28import android.test.mock.MockContentResolver; 29 30import com.android.internal.app.NightDisplayController; 31import com.android.internal.app.NightDisplayController.LocalTime; 32import com.android.internal.util.test.FakeSettingsProvider; 33import com.android.server.display.DisplayTransformManager; 34import com.android.server.display.NightDisplayService; 35import com.android.server.twilight.TwilightManager; 36import com.android.server.twilight.TwilightState; 37import org.junit.After; 38import org.junit.Before; 39import org.junit.Test; 40import org.junit.runner.RunWith; 41import org.mockito.Mockito; 42 43import java.util.Calendar; 44 45import static com.google.common.truth.Truth.assertWithMessage; 46import static org.mockito.Mockito.doReturn; 47 48@RunWith(AndroidJUnit4.class) 49public class NightDisplayServiceTest { 50 51 private Context mContext; 52 private int mUserId; 53 54 private TwilightManager mTwilightManager; 55 56 private NightDisplayController mNightDisplayController; 57 private NightDisplayService mNightDisplayService; 58 59 @Before 60 public void setUp() { 61 mContext = Mockito.spy(new ContextWrapper(InstrumentationRegistry.getTargetContext())); 62 mUserId = ActivityManager.getCurrentUser(); 63 64 doReturn(mContext).when(mContext).getApplicationContext(); 65 66 final MockContentResolver cr = new MockContentResolver(mContext); 67 cr.addProvider(Settings.AUTHORITY, new FakeSettingsProvider()); 68 doReturn(cr).when(mContext).getContentResolver(); 69 70 final AlarmManager am = Mockito.mock(AlarmManager.class); 71 doReturn(am).when(mContext).getSystemService(Context.ALARM_SERVICE); 72 73 final DisplayTransformManager dtm = Mockito.mock(DisplayTransformManager.class); 74 LocalServices.addService(DisplayTransformManager.class, dtm); 75 76 mTwilightManager = Mockito.mock(TwilightManager.class); 77 LocalServices.addService(TwilightManager.class, mTwilightManager); 78 79 mNightDisplayController = new NightDisplayController(mContext, mUserId); 80 mNightDisplayService = new NightDisplayService(mContext); 81 } 82 83 @After 84 public void tearDown() { 85 LocalServices.removeServiceForTest(DisplayTransformManager.class); 86 LocalServices.removeServiceForTest(TwilightManager.class); 87 88 mNightDisplayService = null; 89 mNightDisplayController = null; 90 91 mTwilightManager = null; 92 93 mUserId = UserHandle.USER_NULL; 94 mContext = null; 95 } 96 97 @Test 98 public void customSchedule_whenStartedAfterNight_ifOffAfterNight_turnsOff() { 99 setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */); 100 setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */); 101 102 startService(); 103 assertActivated(false /* activated */); 104 } 105 106 @Test 107 public void customSchedule_whenStartedAfterNight_ifOffBeforeNight_turnsOff() { 108 setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */); 109 setActivated(false /* activated */, -180 /* lastActivatedTimeOffset */); 110 111 startService(); 112 assertActivated(false /* activated */); 113 } 114 115 @Test 116 public void customSchedule_whenStartedAfterNight_ifOffDuringNight_turnsOff() { 117 setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */); 118 setActivated(false /* activated */, -90 /* lastActivatedTimeOffset */); 119 120 startService(); 121 assertActivated(false /* activated */); 122 } 123 124 @Test 125 public void customSchedule_whenStartedAfterNight_ifOffInFuture_turnsOff() { 126 setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */); 127 setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */); 128 129 startService(); 130 assertActivated(false /* activated */); 131 } 132 133 @Test 134 public void customSchedule_whenStartedAfterNight_ifOnAfterNight_turnsOn() { 135 setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */); 136 setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */); 137 138 startService(); 139 assertActivated(true /* activated */); 140 } 141 142 @Test 143 public void customSchedule_whenStartedAfterNight_ifOnBeforeNight_turnsOff() { 144 setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */); 145 setActivated(true /* activated */, -180 /* lastActivatedTimeOffset */); 146 147 startService(); 148 assertActivated(false /* activated */); 149 } 150 151 @Test 152 public void customSchedule_whenStartedAfterNight_ifOnDuringNight_turnsOff() { 153 setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */); 154 setActivated(true /* activated */, -90 /* lastActivatedTimeOffset */); 155 156 startService(); 157 assertActivated(false /* activated */); 158 } 159 160 @Test 161 public void customSchedule_whenStartedAfterNight_ifOnInFuture_turnsOff() { 162 setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */); 163 setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */); 164 165 startService(); 166 assertActivated(false /* activated */); 167 } 168 169 @Test 170 public void customSchedule_whenStartedBeforeNight_ifOffAfterNight_turnsOff() { 171 setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */); 172 setActivated(false /* activated */, 180 /* lastActivatedTimeOffset */); 173 174 startService(); 175 assertActivated(false /* activated */); 176 } 177 178 @Test 179 public void customSchedule_whenStartedBeforeNight_ifOffBeforeNight_turnsOff() { 180 setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */); 181 setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */); 182 183 startService(); 184 assertActivated(false /* activated */); 185 } 186 187 @Test 188 public void customSchedule_whenStartedBeforeNight_ifOffDuringNight_turnsOff() { 189 setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */); 190 setActivated(false /* activated */, 90 /* lastActivatedTimeOffset */); 191 192 startService(); 193 assertActivated(false /* activated */); 194 } 195 196 @Test 197 public void customSchedule_whenStartedBeforeNight_ifOffInPast_turnsOff() { 198 setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */); 199 setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */); 200 201 startService(); 202 assertActivated(false /* activated */); 203 } 204 205 @Test 206 public void customSchedule_whenStartedBeforeNight_ifOnAfterNight_turnsOff() { 207 setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */); 208 setActivated(true /* activated */, 180 /* lastActivatedTimeOffset */); 209 210 startService(); 211 assertActivated(false /* activated */); 212 } 213 214 @Test 215 public void customSchedule_whenStartedBeforeNight_ifOnBeforeNight_turnsOff() { 216 setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */); 217 setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */); 218 219 startService(); 220 assertActivated(false /* activated */); 221 } 222 223 @Test 224 public void customSchedule_whenStartedBeforeNight_ifOnDuringNight_turnsOff() { 225 setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */); 226 setActivated(true /* activated */, 90 /* lastActivatedTimeOffset */); 227 228 startService(); 229 assertActivated(false /* activated */); 230 } 231 232 @Test 233 public void customSchedule_whenStartedBeforeNight_ifOnInPast_turnsOn() { 234 setAutoModeCustom(60 /* startTimeOffset */, 120 /* endTimeOffset */); 235 setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */); 236 237 startService(); 238 assertActivated(true /* activated */); 239 } 240 241 @Test 242 public void customSchedule_whenStartedDuringNight_ifOffAfterNight_turnsOn() { 243 setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */); 244 setActivated(false /* activated */, 90 /* lastActivatedTimeOffset */); 245 246 startService(); 247 assertActivated(true /* activated */); 248 } 249 250 @Test 251 public void customSchedule_whenStartedDuringNight_ifOffBeforeNight_turnsOn() { 252 setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */); 253 setActivated(false /* activated */, -90 /* lastActivatedTimeOffset */); 254 255 startService(); 256 assertActivated(true /* activated */); 257 } 258 259 @Test 260 public void customSchedule_whenStartedDuringNight_ifOffDuringNightInFuture_turnsOn() { 261 setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */); 262 setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */); 263 264 startService(); 265 assertActivated(true /* activated */); 266 } 267 268 @Test 269 public void customSchedule_whenStartedDuringNight_ifOffDuringNightInPast_turnsOff() { 270 setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */); 271 setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */); 272 273 startService(); 274 assertActivated(false /* activated */); 275 } 276 277 @Test 278 public void customSchedule_whenStartedDuringNight_ifOnAfterNight_turnsOn() { 279 setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */); 280 setActivated(true /* activated */, 90 /* lastActivatedTimeOffset */); 281 282 startService(); 283 assertActivated(true /* activated */); 284 } 285 286 @Test 287 public void customSchedule_whenStartedDuringNight_ifOnBeforeNight_turnsOn() { 288 setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */); 289 setActivated(true /* activated */, -90 /* lastActivatedTimeOffset */); 290 291 startService(); 292 assertActivated(true /* activated */); 293 } 294 295 @Test 296 public void customSchedule_whenStartedDuringNight_ifOnDuringNightInFuture_turnsOn() { 297 setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */); 298 setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */); 299 300 startService(); 301 assertActivated(true /* activated */); 302 } 303 304 @Test 305 public void customSchedule_whenStartedDuringNight_ifOnDuringNightInPast_turnsOn() { 306 setAutoModeCustom(-60 /* startTimeOffset */, 60 /* endTimeOffset */); 307 setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */); 308 309 startService(); 310 assertActivated(true /* activated */); 311 } 312 313 @Test 314 public void twilightSchedule_whenStartedAfterNight_ifOffAfterNight_turnsOff() { 315 setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */); 316 setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */); 317 318 startService(); 319 assertActivated(false /* activated */); 320 } 321 322 @Test 323 public void twilightSchedule_whenStartedAfterNight_ifOffBeforeNight_turnsOff() { 324 setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */); 325 setActivated(false /* activated */, -180 /* lastActivatedTimeOffset */); 326 327 startService(); 328 assertActivated(false /* activated */); 329 } 330 331 @Test 332 public void twilightSchedule_whenStartedAfterNight_ifOffDuringNight_turnsOff() { 333 setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */); 334 setActivated(false /* activated */, -90 /* lastActivatedTimeOffset */); 335 336 startService(); 337 assertActivated(false /* activated */); 338 } 339 340 @Test 341 public void twilightSchedule_whenStartedAfterNight_ifOffInFuture_turnsOff() { 342 setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */); 343 setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */); 344 345 startService(); 346 assertActivated(false /* activated */); 347 } 348 349 @Test 350 public void twilightSchedule_whenStartedAfterNight_ifOnAfterNight_turnsOn() { 351 setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */); 352 setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */); 353 354 startService(); 355 assertActivated(true /* activated */); 356 } 357 358 @Test 359 public void twilightSchedule_whenStartedAfterNight_ifOnBeforeNight_turnsOff() { 360 setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */); 361 setActivated(true /* activated */, -180 /* lastActivatedTimeOffset */); 362 363 startService(); 364 assertActivated(false /* activated */); 365 } 366 367 @Test 368 public void twilightSchedule_whenStartedAfterNight_ifOnDuringNight_turnsOff() { 369 setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */); 370 setActivated(true /* activated */, -90 /* lastActivatedTimeOffset */); 371 372 startService(); 373 assertActivated(false /* activated */); 374 } 375 376 @Test 377 public void twilightSchedule_whenStartedAfterNight_ifOnInFuture_turnsOff() { 378 setAutoModeTwilight(-120 /* sunsetOffset */, -60 /* sunriseOffset */); 379 setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */); 380 381 startService(); 382 assertActivated(false /* activated */); 383 } 384 385 @Test 386 public void twilightSchedule_whenStartedBeforeNight_ifOffAfterNight_turnsOff() { 387 setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */); 388 setActivated(false /* activated */, 180 /* lastActivatedTimeOffset */); 389 390 startService(); 391 assertActivated(false /* activated */); 392 } 393 394 @Test 395 public void twilightSchedule_whenStartedBeforeNight_ifOffBeforeNight_turnsOff() { 396 setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */); 397 setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */); 398 399 startService(); 400 assertActivated(false /* activated */); 401 } 402 403 @Test 404 public void twilightSchedule_whenStartedBeforeNight_ifOffDuringNight_turnsOff() { 405 setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */); 406 setActivated(false /* activated */, 90 /* lastActivatedTimeOffset */); 407 408 startService(); 409 assertActivated(false /* activated */); 410 } 411 412 @Test 413 public void twilightSchedule_whenStartedBeforeNight_ifOffInPast_turnsOff() { 414 setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */); 415 setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */); 416 417 startService(); 418 assertActivated(false /* activated */); 419 } 420 421 @Test 422 public void twilightSchedule_whenStartedBeforeNight_ifOnAfterNight_turnsOff() { 423 setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */); 424 setActivated(true /* activated */, 180 /* lastActivatedTimeOffset */); 425 426 startService(); 427 assertActivated(false /* activated */); 428 } 429 430 @Test 431 public void twilightSchedule_whenStartedBeforeNight_ifOnBeforeNight_turnsOff() { 432 setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */); 433 setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */); 434 435 startService(); 436 assertActivated(false /* activated */); 437 } 438 439 @Test 440 public void twilightSchedule_whenStartedBeforeNight_ifOnDuringNight_turnsOff() { 441 setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */); 442 setActivated(true /* activated */, 90 /* lastActivatedTimeOffset */); 443 444 startService(); 445 assertActivated(false /* activated */); 446 } 447 448 @Test 449 public void twilightSchedule_whenStartedBeforeNight_ifOnInPast_turnsOn() { 450 setAutoModeTwilight(60 /* sunsetOffset */, 120 /* sunriseOffset */); 451 setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */); 452 453 startService(); 454 assertActivated(true /* activated */); 455 } 456 457 @Test 458 public void twilightSchedule_whenStartedDuringNight_ifOffAfterNight_turnsOn() { 459 setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */); 460 setActivated(false /* activated */, 90 /* lastActivatedTimeOffset */); 461 462 startService(); 463 assertActivated(true /* activated */); 464 } 465 466 @Test 467 public void twilightSchedule_whenStartedDuringNight_ifOffBeforeNight_turnsOn() { 468 setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */); 469 setActivated(false /* activated */, -90 /* lastActivatedTimeOffset */); 470 471 startService(); 472 assertActivated(true /* activated */); 473 } 474 475 @Test 476 public void twilightSchedule_whenStartedDuringNight_ifOffDuringNightInFuture_turnsOn() { 477 setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */); 478 setActivated(false /* activated */, 30 /* lastActivatedTimeOffset */); 479 480 startService(); 481 assertActivated(true /* activated */); 482 } 483 484 @Test 485 public void twilightSchedule_whenStartedDuringNight_ifOffDuringNightInPast_turnsOff() { 486 setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */); 487 setActivated(false /* activated */, -30 /* lastActivatedTimeOffset */); 488 489 startService(); 490 assertActivated(false /* activated */); 491 } 492 493 @Test 494 public void twilightSchedule_whenStartedDuringNight_ifOnAfterNight_turnsOn() { 495 setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */); 496 setActivated(true /* activated */, 90 /* lastActivatedTimeOffset */); 497 498 startService(); 499 assertActivated(true /* activated */); 500 } 501 502 @Test 503 public void twilightSchedule_whenStartedDuringNight_ifOnBeforeNight_turnsOn() { 504 setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */); 505 setActivated(true /* activated */, -90 /* lastActivatedTimeOffset */); 506 507 startService(); 508 assertActivated(true /* activated */); 509 } 510 511 @Test 512 public void twilightSchedule_whenStartedDuringNight_ifOnDuringNightInFuture_turnsOn() { 513 setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */); 514 setActivated(true /* activated */, 30 /* lastActivatedTimeOffset */); 515 516 startService(); 517 assertActivated(true /* activated */); 518 } 519 520 @Test 521 public void twilightSchedule_whenStartedDuringNight_ifOnDuringNightInPast_turnsOn() { 522 setAutoModeTwilight(-60 /* sunsetOffset */, 60 /* sunriseOffset */); 523 setActivated(true /* activated */, -30 /* lastActivatedTimeOffset */); 524 525 startService(); 526 assertActivated(true /* activated */); 527 } 528 529 /** 530 * Convenience for making a {@link LocalTime} instance with an offset relative to now. 531 * 532 * @param offsetMinutes the offset relative to now (in minutes) 533 * @return the LocalTime instance 534 */ 535 private LocalTime getLocalTimeRelativeToNow(int offsetMinutes) { 536 final Calendar c = Calendar.getInstance(); 537 c.add(Calendar.MINUTE, offsetMinutes); 538 return new LocalTime(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE)); 539 } 540 541 /** 542 * Configures Night display to use a custom schedule. 543 * 544 * @param startTimeOffset the offset relative to now to activate Night display (in minutes) 545 * @param endTimeOffset the offset relative to now to deactivate Night display (in minutes) 546 */ 547 private void setAutoModeCustom(int startTimeOffset, int endTimeOffset) { 548 mNightDisplayController.setAutoMode(NightDisplayController.AUTO_MODE_CUSTOM); 549 mNightDisplayController.setCustomStartTime(getLocalTimeRelativeToNow(startTimeOffset)); 550 mNightDisplayController.setCustomEndTime(getLocalTimeRelativeToNow(endTimeOffset)); 551 } 552 553 /** 554 * Configures Night display to use the twilight schedule. 555 * 556 * @param sunsetOffset the offset relative to now for sunset (in minutes) 557 * @param sunriseOffset the offset relative to now for sunrise (in minutes) 558 */ 559 private void setAutoModeTwilight(int sunsetOffset, int sunriseOffset) { 560 mNightDisplayController.setAutoMode(NightDisplayController.AUTO_MODE_TWILIGHT); 561 562 final LocalTime sunset = getLocalTimeRelativeToNow(sunsetOffset); 563 final LocalTime sunrise = getLocalTimeRelativeToNow(sunriseOffset); 564 565 final Calendar now = Calendar.getInstance(); 566 long sunsetMillis = sunset.getDateTimeBefore(now).getTimeInMillis(); 567 long sunriseMillis = sunrise.getDateTimeBefore(now).getTimeInMillis(); 568 if (sunsetMillis < sunriseMillis) { 569 sunsetMillis = sunset.getDateTimeAfter(now).getTimeInMillis(); 570 } else { 571 sunriseMillis = sunrise.getDateTimeAfter(now).getTimeInMillis(); 572 } 573 574 final TwilightState state = new TwilightState(sunriseMillis, sunsetMillis); 575 doReturn(state).when(mTwilightManager).getLastTwilightState(); 576 } 577 578 /** 579 * Configures the Night display activated state. 580 * 581 * @param activated {@code true} if Night display should be activated 582 * @param lastActivatedTimeOffset the offset relative to now to record that Night display was 583 activated (in minutes) 584 */ 585 private void setActivated(boolean activated, int lastActivatedTimeOffset) { 586 mNightDisplayController.setActivated(activated); 587 588 final Calendar c = Calendar.getInstance(); 589 c.add(Calendar.MINUTE, lastActivatedTimeOffset); 590 Secure.putLongForUser(mContext.getContentResolver(), 591 Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME, c.getTimeInMillis(), mUserId); 592 } 593 594 /** 595 * Convenience method to start {@link #mNightDisplayService}. 596 */ 597 private void startService() { 598 Secure.putIntForUser(mContext.getContentResolver(), Secure.USER_SETUP_COMPLETE, 1, mUserId); 599 600 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { 601 @Override 602 public void run() { 603 mNightDisplayService.onStart(); 604 mNightDisplayService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED); 605 mNightDisplayService.onStartUser(mUserId); 606 } 607 }); 608 } 609 610 /** 611 * Convenience method for asserting whether Night display should be activated. 612 * 613 * @param activated the expected activated state of Night display 614 */ 615 private void assertActivated(boolean activated) { 616 assertWithMessage("Invalid Night display activated state") 617 .that(mNightDisplayController.isActivated()) 618 .isEqualTo(activated); 619 } 620} 621