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
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<State> 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);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user