Loading packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamServiceTest.kt +26 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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)) Loading Loading @@ -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") Loading packages/SystemUI/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamService.kt +17 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() Loading @@ -72,6 +84,8 @@ constructor( hide = { finish() } ) .apply { createTaskFragment() } wakeLock.acquire(TAG) } private fun onTaskFragmentInfoChanged(taskFragmentInfo: TaskFragmentInfo) { Loading Loading @@ -100,6 +114,7 @@ constructor( override fun onDetachedFromWindow() { super.onDetachedFromWindow() wakeLock.release(TAG) taskFragmentComponent.destroy() serviceScope.launch { delay(CANCELLATION_DELAY_AFTER_DETACHED) Loading @@ -115,5 +130,6 @@ constructor( * complete. */ val CANCELLATION_DELAY_AFTER_DETACHED = 5.seconds const val TAG = "HomeControlsDreamService" } } packages/SystemUI/src/com/android/systemui/util/wakelock/ClientTrackingWakeLock.kt +6 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java +6 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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; Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamServiceTest.kt +26 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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)) Loading Loading @@ -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") Loading
packages/SystemUI/src/com/android/systemui/dreams/homecontrols/HomeControlsDreamService.kt +17 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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() Loading @@ -72,6 +84,8 @@ constructor( hide = { finish() } ) .apply { createTaskFragment() } wakeLock.acquire(TAG) } private fun onTaskFragmentInfoChanged(taskFragmentInfo: TaskFragmentInfo) { Loading Loading @@ -100,6 +114,7 @@ constructor( override fun onDetachedFromWindow() { super.onDetachedFromWindow() wakeLock.release(TAG) taskFragmentComponent.destroy() serviceScope.launch { delay(CANCELLATION_DELAY_AFTER_DETACHED) Loading @@ -115,5 +130,6 @@ constructor( * complete. */ val CANCELLATION_DELAY_AFTER_DETACHED = 5.seconds const val TAG = "HomeControlsDreamService" } }
packages/SystemUI/src/com/android/systemui/util/wakelock/ClientTrackingWakeLock.kt +6 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading
packages/SystemUI/src/com/android/systemui/util/wakelock/WakeLock.java +6 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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; Loading