1 /* 2 * Copyright (C) 2022 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 17 package com.android.systemui.settings 18 19 import android.hardware.display.DisplayManager 20 import android.hardware.display.DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS 21 import android.hardware.display.DisplayManagerGlobal 22 import android.os.Handler 23 import android.testing.AndroidTestingRunner 24 import android.view.Display 25 import android.view.DisplayAdjustments 26 import android.view.DisplayInfo 27 import androidx.test.filters.SmallTest 28 import com.android.systemui.SysuiTestCase 29 import com.google.common.truth.Truth.assertThat 30 import java.util.concurrent.Executor 31 import org.junit.Before 32 import org.junit.Test 33 import org.junit.runner.RunWith 34 import org.mockito.Mock 35 import org.mockito.Mockito.any 36 import org.mockito.Mockito.eq 37 import org.mockito.Mockito.never 38 import org.mockito.Mockito.verify 39 import org.mockito.Mockito.`when` 40 import org.mockito.MockitoAnnotations 41 42 @SmallTest 43 @RunWith(AndroidTestingRunner::class) 44 class DisplayTrackerImplTest : SysuiTestCase() { 45 @Mock private lateinit var displayManager: DisplayManager 46 @Mock private lateinit var handler: Handler 47 48 private val executor = Executor(Runnable::run) 49 private lateinit var mDefaultDisplay: Display 50 private lateinit var mSecondaryDisplay: Display 51 private lateinit var tracker: DisplayTrackerImpl 52 53 @Before setUpnull54 fun setUp() { 55 MockitoAnnotations.initMocks(this) 56 57 mDefaultDisplay = 58 Display( 59 DisplayManagerGlobal.getInstance(), 60 Display.DEFAULT_DISPLAY, 61 DisplayInfo(), 62 DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS 63 ) 64 mSecondaryDisplay = 65 Display( 66 DisplayManagerGlobal.getInstance(), 67 Display.DEFAULT_DISPLAY + 1, 68 DisplayInfo(), 69 DisplayAdjustments.DEFAULT_DISPLAY_ADJUSTMENTS 70 ) 71 72 `when`(displayManager.displays).thenReturn(arrayOf(mDefaultDisplay, mSecondaryDisplay)) 73 74 tracker = DisplayTrackerImpl(displayManager, handler) 75 } 76 77 @Test testGetDefaultDisplaynull78 fun testGetDefaultDisplay() { 79 assertThat(tracker.defaultDisplayId).isEqualTo(Display.DEFAULT_DISPLAY) 80 } 81 82 @Test testGetAllDisplaysnull83 fun testGetAllDisplays() { 84 assertThat(tracker.allDisplays).isEqualTo(arrayOf(mDefaultDisplay, mSecondaryDisplay)) 85 } 86 87 @Test registerCallback_registersDisplayListenernull88 fun registerCallback_registersDisplayListener() { 89 tracker.addDisplayChangeCallback(TestCallback(), executor) 90 verify(displayManager).registerDisplayListener(any(), any()) 91 } 92 93 @Test registerBrightnessCallback_registersDisplayListenernull94 fun registerBrightnessCallback_registersDisplayListener() { 95 tracker.addBrightnessChangeCallback(TestCallback(), executor) 96 verify(displayManager) 97 .registerDisplayListener(any(), any(), eq(EVENT_FLAG_DISPLAY_BRIGHTNESS)) 98 } 99 100 @Test unregisterCallback_displayListenerStillRegisterednull101 fun unregisterCallback_displayListenerStillRegistered() { 102 val callback1 = TestCallback() 103 tracker.addDisplayChangeCallback(callback1, executor) 104 tracker.addDisplayChangeCallback(TestCallback(), executor) 105 tracker.removeCallback(callback1) 106 107 verify(displayManager, never()).unregisterDisplayListener(any()) 108 } 109 110 @Test unregisterLastCallback_unregistersDisplayListenernull111 fun unregisterLastCallback_unregistersDisplayListener() { 112 val callback = TestCallback() 113 tracker.addDisplayChangeCallback(callback, executor) 114 tracker.removeCallback(callback) 115 116 verify(displayManager).unregisterDisplayListener(any()) 117 } 118 119 @Test callbackCalledOnDisplayAddnull120 fun callbackCalledOnDisplayAdd() { 121 val testDisplay = 2 122 val callback = TestCallback() 123 tracker.addDisplayChangeCallback(callback, executor) 124 tracker.displayChangedListener.onDisplayAdded(testDisplay) 125 126 assertThat(callback.lastDisplayAdded).isEqualTo(testDisplay) 127 } 128 129 @Test callbackCalledOnDisplayRemovednull130 fun callbackCalledOnDisplayRemoved() { 131 val testDisplay = 2 132 val callback = TestCallback() 133 tracker.addDisplayChangeCallback(callback, executor) 134 tracker.displayChangedListener.onDisplayRemoved(testDisplay) 135 136 assertThat(callback.lastDisplayRemoved).isEqualTo(testDisplay) 137 } 138 139 @Test callbackCalledOnDisplayChangednull140 fun callbackCalledOnDisplayChanged() { 141 val testDisplay = 2 142 val callback = TestCallback() 143 tracker.addDisplayChangeCallback(callback, executor) 144 tracker.displayChangedListener.onDisplayChanged(testDisplay) 145 146 assertThat(callback.lastDisplayChanged).isEqualTo(testDisplay) 147 } 148 149 @Test callbackCalledOnBrightnessChangednull150 fun callbackCalledOnBrightnessChanged() { 151 val testDisplay = 2 152 val callback = TestCallback() 153 tracker.addBrightnessChangeCallback(callback, executor) 154 tracker.displayBrightnessChangedListener.onDisplayChanged(testDisplay) 155 156 assertThat(callback.lastDisplayChanged).isEqualTo(testDisplay) 157 } 158 159 private class TestCallback : DisplayTracker.Callback { 160 var lastDisplayAdded = -1 161 var lastDisplayRemoved = -1 162 var lastDisplayChanged = -1 163 onDisplayAddednull164 override fun onDisplayAdded(displayId: Int) { 165 lastDisplayAdded = displayId 166 } 167 onDisplayRemovednull168 override fun onDisplayRemoved(displayId: Int) { 169 lastDisplayRemoved = displayId 170 } 171 onDisplayChangednull172 override fun onDisplayChanged(displayId: Int) { 173 lastDisplayChanged = displayId 174 } 175 } 176 } 177