Loading core/java/android/service/dreams/DreamService.java +21 −0 Original line number Diff line number Diff line Loading @@ -1146,6 +1146,27 @@ public class DreamService extends Service implements Window.Callback { } } /** * Sets the screen brightness. * * This method sets the underlying {@link LayoutParams#screenBrightness} property. Since this * affects the window, {@link #setScreenBrightness(float)} should not be used for windowless * dreams. * * @hide For use by SystemUI components only. */ @UnsupportedAppUsage public void setScreenBrightness(float brightness) { if (mWindow == null) { Slog.e(TAG, "trying to set screen brightness without window"); return; } WindowManager.LayoutParams lp = mWindow.getAttributes(); lp.screenBrightness = brightness; mWindow.setAttributes(lp); } /** * Sets the screen brightness to use while dozing. * <p> Loading packages/SystemUI/aconfig/systemui.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -2047,6 +2047,16 @@ flag { bug: "397180418" } flag { name: "lowlight_clock_set_brightness" namespace: "systemui" description: "Sets brightness to minimum when using lowlight clock" bug: "419096438" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "lowlight_clock_uses_keyguard_charging_status" namespace: "systemui" Loading packages/SystemUI/src/com/google/android/systemui/lowlightclock/LowLightClockDreamService.java +9 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.widget.TextClock; import android.widget.TextView; import com.android.dream.lowlight.LowLightTransitionCoordinator; import com.android.systemui.Flags; import com.android.systemui.lowlightclock.ChargingStatusProvider; import com.android.systemui.lowlightclock.LowLightClockAnimationProvider; import com.android.systemui.lowlightclock.LowLightDisplayController; Loading Loading @@ -102,7 +103,14 @@ public class LowLightClockDreamService extends DreamService implements Log.v(TAG, "setting dim brightness state"); mDisplayController.setDisplayBrightnessModeEnabled(true); } else { Log.v(TAG, "dim brightness not supported"); if (Flags.lowlightClockSetBrightness()) { Log.v(TAG, "dim brightness not supported. setting screen brightness to minimum"); setScreenBrightness(0f); } else { Log.v(TAG, "dim brightness not supported."); } } } } Loading services/tests/dreamservicetests/src/com/android/server/dreams/DreamServiceTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import android.service.dreams.Flags; import android.service.dreams.IDreamOverlayCallback; import android.testing.TestableLooper; import android.view.KeyEvent; import android.view.WindowManager; import androidx.test.filters.SmallTest; import androidx.test.platform.app.InstrumentationRegistry; Loading Loading @@ -241,6 +242,27 @@ public class DreamServiceTest { environment.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SPACE)); } @Test public void testSetBrightness() throws Exception { final float screenBrightness = .45f; TestDreamEnvironment environment = new TestDreamEnvironment.Builder(mTestableLooper) .build(); environment.advance(TestDreamEnvironment.DREAM_STATE_DREAM_ACTIVITY_CREATED); environment.setDreamScreenBrightness(screenBrightness); final WindowManager.LayoutParams params = environment.getLatestLayoutParams(); assertThat(params.screenBrightness).isEqualTo(screenBrightness); } @Test public void testSetBrightnessNoWindowEarlyExits() throws Exception { final float screenBrightness = .45f; TestDreamEnvironment environment = new TestDreamEnvironment.Builder(mTestableLooper) .build(); // This call should not crash environment.setDreamScreenBrightness(screenBrightness); } @Test @EnableFlags(Flags.FLAG_DREAM_HANDLES_BEING_OBSCURED) public void testComeToFront() throws Exception { Loading services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamEnvironment.java +19 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.server.dreams; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.anyBoolean; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.description; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.eq; Loading Loading @@ -429,4 +430,22 @@ public class TestDreamEnvironment { public IDreamOverlayClient getDreamOverlayClient() { return mDreamOverlayClient; } /** * Calls {@link DreamService#setScreenBrightness(float)} */ public void setDreamScreenBrightness(float brightness) { mService.setScreenBrightness(brightness); } /** * Returns the last {@link android.view.WindowManager.LayoutParams} set on the activity window. */ public WindowManager.LayoutParams getLatestLayoutParams() { final ArgumentCaptor<WindowManager.LayoutParams> lpCaptor = ArgumentCaptor.forClass(WindowManager.LayoutParams.class); verify(mActivityWindow, atLeastOnce()).setAttributes(lpCaptor.capture()); return lpCaptor.getValue(); } } Loading
core/java/android/service/dreams/DreamService.java +21 −0 Original line number Diff line number Diff line Loading @@ -1146,6 +1146,27 @@ public class DreamService extends Service implements Window.Callback { } } /** * Sets the screen brightness. * * This method sets the underlying {@link LayoutParams#screenBrightness} property. Since this * affects the window, {@link #setScreenBrightness(float)} should not be used for windowless * dreams. * * @hide For use by SystemUI components only. */ @UnsupportedAppUsage public void setScreenBrightness(float brightness) { if (mWindow == null) { Slog.e(TAG, "trying to set screen brightness without window"); return; } WindowManager.LayoutParams lp = mWindow.getAttributes(); lp.screenBrightness = brightness; mWindow.setAttributes(lp); } /** * Sets the screen brightness to use while dozing. * <p> Loading
packages/SystemUI/aconfig/systemui.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -2047,6 +2047,16 @@ flag { bug: "397180418" } flag { name: "lowlight_clock_set_brightness" namespace: "systemui" description: "Sets brightness to minimum when using lowlight clock" bug: "419096438" metadata { purpose: PURPOSE_BUGFIX } } flag { name: "lowlight_clock_uses_keyguard_charging_status" namespace: "systemui" Loading
packages/SystemUI/src/com/google/android/systemui/lowlightclock/LowLightClockDreamService.java +9 −1 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.widget.TextClock; import android.widget.TextView; import com.android.dream.lowlight.LowLightTransitionCoordinator; import com.android.systemui.Flags; import com.android.systemui.lowlightclock.ChargingStatusProvider; import com.android.systemui.lowlightclock.LowLightClockAnimationProvider; import com.android.systemui.lowlightclock.LowLightDisplayController; Loading Loading @@ -102,7 +103,14 @@ public class LowLightClockDreamService extends DreamService implements Log.v(TAG, "setting dim brightness state"); mDisplayController.setDisplayBrightnessModeEnabled(true); } else { Log.v(TAG, "dim brightness not supported"); if (Flags.lowlightClockSetBrightness()) { Log.v(TAG, "dim brightness not supported. setting screen brightness to minimum"); setScreenBrightness(0f); } else { Log.v(TAG, "dim brightness not supported."); } } } } Loading
services/tests/dreamservicetests/src/com/android/server/dreams/DreamServiceTest.java +22 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import android.service.dreams.Flags; import android.service.dreams.IDreamOverlayCallback; import android.testing.TestableLooper; import android.view.KeyEvent; import android.view.WindowManager; import androidx.test.filters.SmallTest; import androidx.test.platform.app.InstrumentationRegistry; Loading Loading @@ -241,6 +242,27 @@ public class DreamServiceTest { environment.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SPACE)); } @Test public void testSetBrightness() throws Exception { final float screenBrightness = .45f; TestDreamEnvironment environment = new TestDreamEnvironment.Builder(mTestableLooper) .build(); environment.advance(TestDreamEnvironment.DREAM_STATE_DREAM_ACTIVITY_CREATED); environment.setDreamScreenBrightness(screenBrightness); final WindowManager.LayoutParams params = environment.getLatestLayoutParams(); assertThat(params.screenBrightness).isEqualTo(screenBrightness); } @Test public void testSetBrightnessNoWindowEarlyExits() throws Exception { final float screenBrightness = .45f; TestDreamEnvironment environment = new TestDreamEnvironment.Builder(mTestableLooper) .build(); // This call should not crash environment.setDreamScreenBrightness(screenBrightness); } @Test @EnableFlags(Flags.FLAG_DREAM_HANDLES_BEING_OBSCURED) public void testComeToFront() throws Exception { Loading
services/tests/dreamservicetests/src/com/android/server/dreams/TestDreamEnvironment.java +19 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.server.dreams; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.anyBoolean; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.description; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.eq; Loading Loading @@ -429,4 +430,22 @@ public class TestDreamEnvironment { public IDreamOverlayClient getDreamOverlayClient() { return mDreamOverlayClient; } /** * Calls {@link DreamService#setScreenBrightness(float)} */ public void setDreamScreenBrightness(float brightness) { mService.setScreenBrightness(brightness); } /** * Returns the last {@link android.view.WindowManager.LayoutParams} set on the activity window. */ public WindowManager.LayoutParams getLatestLayoutParams() { final ArgumentCaptor<WindowManager.LayoutParams> lpCaptor = ArgumentCaptor.forClass(WindowManager.LayoutParams.class); verify(mActivityWindow, atLeastOnce()).setAttributes(lpCaptor.capture()); return lpCaptor.getValue(); } }