diff options
author | 2024-03-07 15:25:21 +0000 | |
---|---|---|
committer | 2024-03-07 15:25:21 +0000 | |
commit | ded43d4e21aa2511d4e12f73692e8d8c544e180b (patch) | |
tree | c90de10fc385d581b888bb38ae229facf398a705 | |
parent | 85b089eb3b1c02d3cc526f37dddbe52555e98948 (diff) | |
parent | a3ff6961d3384f96557db1fec4b113cf28b2b6b7 (diff) |
Merge "Increasing screen brightness on home panel dream" into main
4 files changed, 55 insertions, 3 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamServiceTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamServiceTest.kt index 0a3aea767733..723f6a2bfff4 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamServiceTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamServiceTest.kt @@ -27,6 +27,8 @@ import com.android.systemui.log.logcatLogBuffer import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.whenever +import com.android.systemui.util.wakelock.WakeLockFake +import com.google.common.truth.Truth.assertThat import java.util.Optional import kotlinx.coroutines.test.runTest import org.junit.Before @@ -44,6 +46,9 @@ class HomeControlsDreamServiceTest : SysuiTestCase() { private val kosmos = testKosmos() private val testScope = kosmos.testScope + private lateinit var fakeWakeLockBuilder: WakeLockFake.Builder + private lateinit var fakeWakeLock: WakeLockFake + @Mock private lateinit var taskFragmentComponentFactory: TaskFragmentComponent.Factory @Mock private lateinit var taskFragmentComponent: TaskFragmentComponent @Mock private lateinit var activity: Activity @@ -57,6 +62,10 @@ class HomeControlsDreamServiceTest : SysuiTestCase() { whenever(taskFragmentComponentFactory.create(any(), any(), any(), any())) .thenReturn(taskFragmentComponent) + fakeWakeLock = WakeLockFake() + fakeWakeLockBuilder = WakeLockFake.Builder(context) + fakeWakeLockBuilder.setWakeLock(fakeWakeLock) + whenever(controlsComponent.getControlsListingController()) .thenReturn(Optional.of(controlsListingController)) @@ -87,12 +96,29 @@ class HomeControlsDreamServiceTest : SysuiTestCase() { verify(taskFragmentComponentFactory, never()).create(any(), any(), any(), any()) } + @Test + fun testAttachWindow_wakeLockAcquired() = + testScope.runTest { + underTest.onAttachedToWindow() + assertThat(fakeWakeLock.isHeld).isTrue() + } + @Test + fun testDetachWindow_wakeLockCanBeReleased() = + testScope.runTest { + underTest.onAttachedToWindow() + assertThat(fakeWakeLock.isHeld).isTrue() + + underTest.onDetachedFromWindow() + assertThat(fakeWakeLock.isHeld).isFalse() + } + private fun buildService(activityProvider: DreamActivityProvider): HomeControlsDreamService = with(kosmos) { return HomeControlsDreamService( controlsSettingsRepository = FakeControlsSettingsRepository(), taskFragmentFactory = taskFragmentComponentFactory, homeControlsComponentInteractor = homeControlsComponentInteractor, + fakeWakeLockBuilder, dreamActivityProvider = activityProvider, bgDispatcher = testDispatcher, logBuffer = logcatLogBuffer("HomeControlsDreamServiceTest") diff --git a/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamService.kt b/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamService.kt index e74814adb1b0..376d3129d8c3 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamService.kt +++ b/packages/SystemUI/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamService.kt @@ -17,6 +17,7 @@ package com.android.systemui.dreams.homecontrols import android.content.Intent +import android.os.PowerManager import android.service.controls.ControlsProviderService import android.service.dreams.DreamService import android.window.TaskFragmentInfo @@ -27,6 +28,8 @@ import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsCo import com.android.systemui.dreams.homecontrols.domain.interactor.HomeControlsComponentInteractor.Companion.MAX_UPDATE_CORRELATION_DELAY import com.android.systemui.log.LogBuffer import com.android.systemui.log.dagger.DreamLog +import com.android.systemui.util.wakelock.WakeLock +import com.android.systemui.util.wakelock.WakeLock.Builder.NO_TIMEOUT import javax.inject.Inject import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.CoroutineDispatcher @@ -42,14 +45,23 @@ constructor( private val controlsSettingsRepository: ControlsSettingsRepository, private val taskFragmentFactory: TaskFragmentComponent.Factory, private val homeControlsComponentInteractor: HomeControlsComponentInteractor, + private val wakeLockBuilder: WakeLock.Builder, private val dreamActivityProvider: DreamActivityProvider, @Background private val bgDispatcher: CoroutineDispatcher, @DreamLog logBuffer: LogBuffer ) : DreamService() { + private val serviceJob = SupervisorJob() private val serviceScope = CoroutineScope(bgDispatcher + serviceJob) - private val logger = DreamLogger(logBuffer, "HomeControlsDreamService") + private val logger = DreamLogger(logBuffer, TAG) private lateinit var taskFragmentComponent: TaskFragmentComponent + private val wakeLock: WakeLock by lazy { + wakeLockBuilder + .setMaxTimeout(NO_TIMEOUT) + .setTag(TAG) + .setLevelsAndFlags(PowerManager.SCREEN_BRIGHT_WAKE_LOCK) + .build() + } override fun onAttachedToWindow() { super.onAttachedToWindow() @@ -72,6 +84,8 @@ constructor( hide = { finish() } ) .apply { createTaskFragment() } + + wakeLock.acquire(TAG) } private fun onTaskFragmentInfoChanged(taskFragmentInfo: TaskFragmentInfo) { @@ -100,6 +114,7 @@ constructor( override fun onDetachedFromWindow() { super.onDetachedFromWindow() + wakeLock.release(TAG) taskFragmentComponent.destroy() serviceScope.launch { delay(CANCELLATION_DELAY_AFTER_DETACHED) @@ -115,5 +130,6 @@ constructor( * complete. */ val CANCELLATION_DELAY_AFTER_DETACHED = 5.seconds + const val TAG = "HomeControlsDreamService" } } diff --git a/packages/SystemUI/src/com/android/systemui/util/wakelock/ClientTrackingWakeLock.kt b/packages/SystemUI/src/com/android/systemui/util/wakelock/ClientTrackingWakeLock.kt index db300ebe6cae..2157fafa78ff 100644 --- a/packages/SystemUI/src/com/android/systemui/util/wakelock/ClientTrackingWakeLock.kt +++ b/packages/SystemUI/src/com/android/systemui/util/wakelock/ClientTrackingWakeLock.kt @@ -18,6 +18,7 @@ package com.android.systemui.util.wakelock import android.os.PowerManager import android.util.Log +import com.android.systemui.util.wakelock.WakeLock.Builder.NO_TIMEOUT import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicInteger @@ -36,7 +37,11 @@ class ClientTrackingWakeLock( override fun acquire(why: String) { val count = activeClients.computeIfAbsent(why) { _ -> AtomicInteger(0) }.incrementAndGet() logger?.logAcquire(pmWakeLock, why, count) - pmWakeLock.acquire(maxTimeout) + if (maxTimeout == NO_TIMEOUT) { + pmWakeLock.acquire() + } else { + pmWakeLock.acquire(maxTimeout) + } } override fun release(why: String) { diff --git a/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java b/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java index 707751a58d84..f763ee46666a 100644 --- a/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java +++ b/packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java @@ -130,7 +130,11 @@ public interface WakeLock { if (logger != null) { logger.logAcquire(inner, why, count); } - inner.acquire(maxTimeout); + if (maxTimeout == Builder.NO_TIMEOUT) { + inner.acquire(); + } else { + inner.acquire(maxTimeout); + } } /** @see PowerManager.WakeLock#release() */ @@ -169,6 +173,7 @@ public interface WakeLock { * An injectable Builder that wraps {@link #createPartial(Context, String, long)}. */ class Builder { + public static final long NO_TIMEOUT = -1; private final Context mContext; private final WakeLockLogger mLogger; private String mTag; |