From f4ba7c39c7755f15b17698fc9607776125c95a35 Mon Sep 17 00:00:00 2001 From: Beverly Date: Fri, 31 Mar 2023 16:49:16 +0000 Subject: [PATCH] Use UiBackgroundExecutor to set doze screen brightness Move the IPC to a background thread that can occur on transition to AOD. Test: change brightness of room and see brightness still changes in AOD Fixes: 210877065 Change-Id: I745a25b7a1eb55909ff121d58aa15a667e4e9eaa --- .../doze/DozeBrightnessHostForwarder.java | 7 +++++-- .../com/android/systemui/doze/DozeMachine.java | 10 +++++++--- .../doze/DozeScreenStatePreventingAdapter.java | 10 ++++++---- ...DozeSuspendScreenStatePreventingAdapter.java | 11 +++++++---- .../systemui/doze/dagger/DozeModule.java | 16 +++++++++------- .../DozeScreenStatePreventingAdapterTest.java | 17 ++++++++++++++--- ...SuspendScreenStatePreventingAdapterTest.java | 14 +++++++++++--- 7 files changed, 59 insertions(+), 26 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeBrightnessHostForwarder.java b/packages/SystemUI/src/com/android/systemui/doze/DozeBrightnessHostForwarder.java index 0aeb12875ea1b..cf0dcad5bf0d9 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeBrightnessHostForwarder.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeBrightnessHostForwarder.java @@ -16,6 +16,8 @@ package com.android.systemui.doze; +import java.util.concurrent.Executor; + /** * Forwards the currently used brightness to {@link DozeHost}. */ @@ -23,8 +25,9 @@ public class DozeBrightnessHostForwarder extends DozeMachine.Service.Delegate { private final DozeHost mHost; - public DozeBrightnessHostForwarder(DozeMachine.Service wrappedService, DozeHost host) { - super(wrappedService); + public DozeBrightnessHostForwarder(DozeMachine.Service wrappedService, DozeHost host, + Executor bgExecutor) { + super(wrappedService, bgExecutor); mHost = host; } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java index f0aefb5bc0dff..7f0b16bca8b4a 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeMachine.java @@ -39,6 +39,7 @@ import com.android.systemui.util.wakelock.WakeLock; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.concurrent.Executor; import javax.inject.Inject; @@ -150,7 +151,6 @@ public class DozeMachine { private final DockManager mDockManager; private final Part[] mParts; private final UserTracker mUserTracker; - private final ArrayList mQueuedRequests = new ArrayList<>(); private State mState = State.UNINITIALIZED; private int mPulseReason; @@ -512,9 +512,11 @@ public class DozeMachine { class Delegate implements Service { private final Service mDelegate; + private final Executor mBgExecutor; - public Delegate(Service delegate) { + public Delegate(Service delegate, Executor bgExecutor) { mDelegate = delegate; + mBgExecutor = bgExecutor; } @Override @@ -534,7 +536,9 @@ public class DozeMachine { @Override public void setDozeScreenBrightness(int brightness) { - mDelegate.setDozeScreenBrightness(brightness); + mBgExecutor.execute(() -> { + mDelegate.setDozeScreenBrightness(brightness); + }); } } } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenStatePreventingAdapter.java b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenStatePreventingAdapter.java index 25c2c39f3e253..8d4447285af25 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeScreenStatePreventingAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeScreenStatePreventingAdapter.java @@ -22,14 +22,16 @@ import androidx.annotation.VisibleForTesting; import com.android.systemui.statusbar.phone.DozeParameters; +import java.util.concurrent.Executor; + /** * Prevents usage of doze screen states on devices that don't support them. */ public class DozeScreenStatePreventingAdapter extends DozeMachine.Service.Delegate { @VisibleForTesting - DozeScreenStatePreventingAdapter(DozeMachine.Service inner) { - super(inner); + DozeScreenStatePreventingAdapter(DozeMachine.Service inner, Executor bgExecutor) { + super(inner, bgExecutor); } @Override @@ -47,8 +49,8 @@ public class DozeScreenStatePreventingAdapter extends DozeMachine.Service.Delega * return a new instance of {@link DozeScreenStatePreventingAdapter} wrapping {@code inner}. */ public static DozeMachine.Service wrapIfNeeded(DozeMachine.Service inner, - DozeParameters params) { - return isNeeded(params) ? new DozeScreenStatePreventingAdapter(inner) : inner; + DozeParameters params, Executor bgExecutor) { + return isNeeded(params) ? new DozeScreenStatePreventingAdapter(inner, bgExecutor) : inner; } private static boolean isNeeded(DozeParameters params) { diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapter.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapter.java index a0c4909511994..f7773f1888b31 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapter.java @@ -22,14 +22,16 @@ import androidx.annotation.VisibleForTesting; import com.android.systemui.statusbar.phone.DozeParameters; +import java.util.concurrent.Executor; + /** * Prevents usage of doze screen states on devices that don't support them. */ public class DozeSuspendScreenStatePreventingAdapter extends DozeMachine.Service.Delegate { @VisibleForTesting - DozeSuspendScreenStatePreventingAdapter(DozeMachine.Service inner) { - super(inner); + DozeSuspendScreenStatePreventingAdapter(DozeMachine.Service inner, Executor bgExecutor) { + super(inner, bgExecutor); } @Override @@ -45,8 +47,9 @@ public class DozeSuspendScreenStatePreventingAdapter extends DozeMachine.Service * return a new instance of {@link DozeSuspendScreenStatePreventingAdapter} wrapping {@code inner}. */ public static DozeMachine.Service wrapIfNeeded(DozeMachine.Service inner, - DozeParameters params) { - return isNeeded(params) ? new DozeSuspendScreenStatePreventingAdapter(inner) : inner; + DozeParameters params, Executor bgExecutor) { + return isNeeded(params) ? new DozeSuspendScreenStatePreventingAdapter(inner, bgExecutor) + : inner; } private static boolean isNeeded(DozeParameters params) { diff --git a/packages/SystemUI/src/com/android/systemui/doze/dagger/DozeModule.java b/packages/SystemUI/src/com/android/systemui/doze/dagger/DozeModule.java index 069344ff0e2df..d408472efca54 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/dagger/DozeModule.java +++ b/packages/SystemUI/src/com/android/systemui/doze/dagger/DozeModule.java @@ -22,6 +22,7 @@ import android.os.Handler; import com.android.systemui.R; import com.android.systemui.dagger.qualifiers.Main; +import com.android.systemui.dagger.qualifiers.UiBackground; import com.android.systemui.doze.DozeAuthRemover; import com.android.systemui.doze.DozeBrightnessHostForwarder; import com.android.systemui.doze.DozeDockHandler; @@ -45,13 +46,14 @@ import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.wakelock.DelayedWakeLock; import com.android.systemui.util.wakelock.WakeLock; +import dagger.Module; +import dagger.Provides; + import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Optional; - -import dagger.Module; -import dagger.Provides; +import java.util.concurrent.Executor; /** Dagger module for use with {@link com.android.systemui.doze.dagger.DozeComponent}. */ @Module @@ -60,13 +62,13 @@ public abstract class DozeModule { @DozeScope @WrappedService static DozeMachine.Service providesWrappedService(DozeMachine.Service dozeMachineService, - DozeHost dozeHost, DozeParameters dozeParameters) { + DozeHost dozeHost, DozeParameters dozeParameters, @UiBackground Executor bgExecutor) { DozeMachine.Service wrappedService = dozeMachineService; - wrappedService = new DozeBrightnessHostForwarder(wrappedService, dozeHost); + wrappedService = new DozeBrightnessHostForwarder(wrappedService, dozeHost, bgExecutor); wrappedService = DozeScreenStatePreventingAdapter.wrapIfNeeded( - wrappedService, dozeParameters); + wrappedService, dozeParameters, bgExecutor); wrappedService = DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded( - wrappedService, dozeParameters); + wrappedService, dozeParameters, bgExecutor); return wrappedService; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java index 6b3ec682b12b8..a7d7b93c40447 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeScreenStatePreventingAdapterTest.java @@ -28,20 +28,29 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.phone.DozeParameters; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Test; +import java.util.concurrent.Executor; + @SmallTest public class DozeScreenStatePreventingAdapterTest extends SysuiTestCase { + private Executor mExecutor; private DozeMachine.Service mInner; private DozeScreenStatePreventingAdapter mWrapper; @Before public void setup() throws Exception { + mExecutor = new FakeExecutor(new FakeSystemClock()); mInner = mock(DozeMachine.Service.class); - mWrapper = new DozeScreenStatePreventingAdapter(mInner); + mWrapper = new DozeScreenStatePreventingAdapter( + mInner, + mExecutor + ); } @Test @@ -86,7 +95,8 @@ public class DozeScreenStatePreventingAdapterTest extends SysuiTestCase { when(params.getDisplayStateSupported()).thenReturn(false); assertEquals(DozeScreenStatePreventingAdapter.class, - DozeScreenStatePreventingAdapter.wrapIfNeeded(mInner, params).getClass()); + DozeScreenStatePreventingAdapter.wrapIfNeeded(mInner, params, mExecutor) + .getClass()); } @Test @@ -94,6 +104,7 @@ public class DozeScreenStatePreventingAdapterTest extends SysuiTestCase { DozeParameters params = mock(DozeParameters.class); when(params.getDisplayStateSupported()).thenReturn(true); - assertSame(mInner, DozeScreenStatePreventingAdapter.wrapIfNeeded(mInner, params)); + assertSame(mInner, DozeScreenStatePreventingAdapter.wrapIfNeeded(mInner, params, + mExecutor)); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java index 9ae7217d317e0..240d2d7bd35cc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeSuspendScreenStatePreventingAdapterTest.java @@ -28,20 +28,26 @@ import androidx.test.filters.SmallTest; import com.android.systemui.SysuiTestCase; import com.android.systemui.statusbar.phone.DozeParameters; +import com.android.systemui.util.concurrency.FakeExecutor; +import com.android.systemui.util.time.FakeSystemClock; import org.junit.Before; import org.junit.Test; +import java.util.concurrent.Executor; + @SmallTest public class DozeSuspendScreenStatePreventingAdapterTest extends SysuiTestCase { + private Executor mExecutor; private DozeMachine.Service mInner; private DozeSuspendScreenStatePreventingAdapter mWrapper; @Before public void setup() throws Exception { + mExecutor = new FakeExecutor(new FakeSystemClock()); mInner = mock(DozeMachine.Service.class); - mWrapper = new DozeSuspendScreenStatePreventingAdapter(mInner); + mWrapper = new DozeSuspendScreenStatePreventingAdapter(mInner, mExecutor); } @Test @@ -92,7 +98,8 @@ public class DozeSuspendScreenStatePreventingAdapterTest extends SysuiTestCase { when(params.getDozeSuspendDisplayStateSupported()).thenReturn(false); assertEquals(DozeSuspendScreenStatePreventingAdapter.class, - DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(mInner, params).getClass()); + DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(mInner, params, mExecutor) + .getClass()); } @Test @@ -100,6 +107,7 @@ public class DozeSuspendScreenStatePreventingAdapterTest extends SysuiTestCase { DozeParameters params = mock(DozeParameters.class); when(params.getDozeSuspendDisplayStateSupported()).thenReturn(true); - assertSame(mInner, DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(mInner, params)); + assertSame(mInner, DozeSuspendScreenStatePreventingAdapter.wrapIfNeeded(mInner, params, + mExecutor)); } }