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

Commit 23b54317 authored by brycelee's avatar brycelee
Browse files

Dim screen brightness for low light clock.

Most devices do not support dim brightness mode (dbm). In this case, the
brightness of the screen should be reduced to minimum when showing the
low-light clock. This change adds an internal method to DreamService to
set brightness, which is then used by the LowLightClockDreamService.

Fixes: 419096438
Test: atest DreamServiceTest
Flag: com.android.systemui.lowlight_clock_set_brightness
Change-Id: I0cf3cf904e6da1da5cdbe6a61618aa11c10f1153
parent 24645ccc
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -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>
+10 −0
Original line number Diff line number Diff line
@@ -2030,6 +2030,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"
+9 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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.");

                }
            }
        }
    }
+22 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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 {
+19 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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();
    }
}