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

Commit 8ec0943a authored by Jeff Brown's avatar Jeff Brown
Browse files

Blank all displays including Wifi Display when screen is off.

Calling blank() on Surface Flinger to turn the screen off is not
enough to ensure that the content is blanked to all virtual displays.
What's more, the black surface left in place by the ElectronBeam may
not completely hide the content (particularly if the display orientation
changes).  To fix this for real, we'll want to move the display power
management code from the power manager into the display manager
but we don't have time for that.

As a work around, force all displays to show an empty layer stack
with no surfaces on it while blanked.

Bug: 7311959
Change-Id: I870c985f9e76f3f2322e5d83cdbbed9ed15b9f10
parent 016ff14f
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -305,6 +305,8 @@ public final class DisplayManagerService extends IDisplayManager.Stub {
                    DisplayDevice device = mDisplayDevices.get(i);
                    device.blankLocked();
                }

                scheduleTraversalLocked(false);
            }
        }
    }
@@ -322,6 +324,8 @@ public final class DisplayManagerService extends IDisplayManager.Stub {
                    DisplayDevice device = mDisplayDevices.get(i);
                    device.unblankLocked();
                }

                scheduleTraversalLocked(false);
            }
        }
    }
@@ -755,7 +759,9 @@ public final class DisplayManagerService extends IDisplayManager.Stub {
                    + device.getDisplayDeviceInfoLocked());
            return;
        } else {
            display.configureDisplayInTransactionLocked(device);
            boolean isBlanked = (mAllDisplayBlankStateFromPowerManager
                    == DISPLAY_BLANK_STATE_BLANKED);
            display.configureDisplayInTransactionLocked(device, isBlanked);
        }

        // Update the viewports if needed.
+8 −2
Original line number Diff line number Diff line
@@ -55,6 +55,10 @@ import libcore.util.Objects;
final class LogicalDisplay {
    private final DisplayInfo mBaseDisplayInfo = new DisplayInfo();

    // The layer stack we use when the display has been blanked to prevent any
    // of its content from appearing.
    private static final int BLANK_LAYER_STACK = -1;

    private final int mDisplayId;
    private final int mLayerStack;
    private DisplayInfo mOverrideDisplayInfo; // set by the window manager
@@ -217,13 +221,15 @@ final class LogicalDisplay {
     * where the display is being mirrored.
     *
     * @param device The display device to modify.
     * @param isBlanked True if the device is being blanked.
     */
    public void configureDisplayInTransactionLocked(DisplayDevice device) {
    public void configureDisplayInTransactionLocked(DisplayDevice device,
            boolean isBlanked) {
        final DisplayInfo displayInfo = getDisplayInfoLocked();
        final DisplayDeviceInfo displayDeviceInfo = device.getDisplayDeviceInfoLocked();

        // Set the layer stack.
        device.setLayerStackInTransactionLocked(mLayerStack);
        device.setLayerStackInTransactionLocked(isBlanked ? BLANK_LAYER_STACK : mLayerStack);

        // Set the viewport.
        // This is the area of the logical display that we intend to show on the