Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a3ff6961 authored by Prince's avatar Prince Committed by Lucas Silva
Browse files

Increasing screen brightness on home panel dream

This change manually grabs a SCREEN_BRIGHT wakelock when the home
controls dream is attached to the window, and releases it when
detached. This is a workaround due to the fact that FLAG_KEEP_SCREEN_ON
set by the DreamActivity is not honored in this case, as the home
controls activity occludes the DreamActivity.

Test: HomeControlsDreamServiceTest
Flag: ACONFIG android.service.controls.flags.home_panel_dream STAGING
Fixes: 325453103
Change-Id: I11fe981cc0ada12797248ccb58c86ac99315b707
parent 9b5907be
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -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")
+17 −1
Original line number Diff line number Diff line
@@ -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"
    }
}
+6 −1
Original line number Diff line number Diff line
@@ -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,8 +37,12 @@ class ClientTrackingWakeLock(
    override fun acquire(why: String) {
        val count = activeClients.computeIfAbsent(why) { _ -> AtomicInteger(0) }.incrementAndGet()
        logger?.logAcquire(pmWakeLock, why, count)
        if (maxTimeout == NO_TIMEOUT) {
            pmWakeLock.acquire()
        } else {
            pmWakeLock.acquire(maxTimeout)
        }
    }

    override fun release(why: String) {
        val count = activeClients[why]?.decrementAndGet() ?: -1
+6 −1
Original line number Diff line number Diff line
@@ -130,8 +130,12 @@ public interface WakeLock {
                if (logger != null) {
                    logger.logAcquire(inner, why, count);
                }
                if (maxTimeout == Builder.NO_TIMEOUT) {
                    inner.acquire();
                } else {
                    inner.acquire(maxTimeout);
                }
            }

            /** @see PowerManager.WakeLock#release() */
            public void release(String why) {
@@ -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;