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

Commit 8833ae89 authored by Robert Carr's avatar Robert Carr
Browse files

Fix WindowlessWm null check

Fix careless mistake and also add end-to-end tests so that it doesn't happen again.

Bug: 134365580
Test: WindowlessWmTests
Change-Id: I4b22498faeb19d28f9f40daa8777f69efe6899ba
parent c48da419
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -3335,6 +3335,11 @@ package android.view {
    field @android.view.ViewDebug.ExportedProperty(flagMapping={@android.view.ViewDebug.FlagToString(mask=0x1, equals=0x1, name="FAKE_HARDWARE_ACCELERATED"), @android.view.ViewDebug.FlagToString(mask=0x2, equals=0x2, name="FORCE_HARDWARE_ACCELERATED"), @android.view.ViewDebug.FlagToString(mask=0x4, equals=0x4, name="WANTS_OFFSET_NOTIFICATIONS"), @android.view.ViewDebug.FlagToString(mask=0x10, equals=0x10, name="SHOW_FOR_ALL_USERS"), @android.view.ViewDebug.FlagToString(mask=android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION, equals=android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION, name="NO_MOVE_ANIMATION"), @android.view.ViewDebug.FlagToString(mask=0x80, equals=0x80, name="COMPATIBLE_WINDOW"), @android.view.ViewDebug.FlagToString(mask=0x100, equals=0x100, name="SYSTEM_ERROR"), @android.view.ViewDebug.FlagToString(mask=0x200, equals=0x200, name="INHERIT_TRANSLUCENT_DECOR"), @android.view.ViewDebug.FlagToString(mask=0x400, equals=0x400, name="KEYGUARD"), @android.view.ViewDebug.FlagToString(mask=0x800, equals=0x800, name="DISABLE_WALLPAPER_TOUCH_EVENTS"), @android.view.ViewDebug.FlagToString(mask=0x1000, equals=0x1000, name="FORCE_STATUS_BAR_VISIBLE_TRANSPARENT"), @android.view.ViewDebug.FlagToString(mask=0x2000, equals=0x2000, name="PRESERVE_GEOMETRY"), @android.view.ViewDebug.FlagToString(mask=0x4000, equals=0x4000, name="FORCE_DECOR_VIEW_VISIBILITY"), @android.view.ViewDebug.FlagToString(mask=0x8000, equals=0x8000, name="WILL_NOT_REPLACE_ON_RELAUNCH"), @android.view.ViewDebug.FlagToString(mask=0x10000, equals=0x10000, name="LAYOUT_CHILD_WINDOW_IN_PARENT_FRAME"), @android.view.ViewDebug.FlagToString(mask=0x20000, equals=0x20000, name="FORCE_DRAW_STATUS_BAR_BACKGROUND"), @android.view.ViewDebug.FlagToString(mask=0x40000, equals=0x40000, name="SUSTAINED_PERFORMANCE_MODE"), @android.view.ViewDebug.FlagToString(mask=0x80000, equals=0x80000, name="HIDE_NON_SYSTEM_OVERLAY_WINDOWS"), @android.view.ViewDebug.FlagToString(mask=0x100000, equals=0x100000, name="IS_ROUNDED_CORNERS_OVERLAY"), @android.view.ViewDebug.FlagToString(mask=0x400000, equals=0x400000, name="IS_SCREEN_DECOR"), @android.view.ViewDebug.FlagToString(mask=0x800000, equals=0x800000, name="STATUS_FORCE_SHOW_NAVIGATION"), @android.view.ViewDebug.FlagToString(mask=0x1000000, equals=0x1000000, name="COLOR_SPACE_AGNOSTIC")}) public int privateFlags;
  }

  public class WindowlessViewRoot {
    ctor public WindowlessViewRoot(android.content.Context, android.view.Display, android.view.SurfaceControl);
    method public void addView(android.view.View, android.view.WindowManager.LayoutParams);
  }

}

package android.view.accessibility {
+3 −0
Original line number Diff line number Diff line
@@ -21,12 +21,15 @@ import android.content.Context;
import android.view.SurfaceControl;
import android.view.View;

import android.annotation.TestApi;

/**
 * Utility class for adding a view hierarchy to a SurfaceControl.
 *
 * See WindowlessWmTest for example usage.
 * @hide
 */
@TestApi
public class WindowlessViewRoot {
    ViewRootImpl mViewRoot;
    WindowlessWindowManager mWm;
+12 −5
Original line number Diff line number Diff line
@@ -95,8 +95,9 @@ class WindowlessWindowManager implements IWindowSession {
    public void remove(android.view.IWindow window) {}

    private boolean isOpaque(WindowManager.LayoutParams attrs) {
        if (attrs.surfaceInsets.left != 0 || attrs.surfaceInsets.top != 0 ||
                attrs.surfaceInsets.right != 0 || attrs.surfaceInsets.bottom != 0) {
        if (attrs.surfaceInsets != null && attrs.surfaceInsets.left != 0 || 
                attrs.surfaceInsets.top != 0 || attrs.surfaceInsets.right != 0 ||
                attrs.surfaceInsets.bottom != 0) {
            return false;
        }
        return !PixelFormat.formatHasAlpha(attrs.format);
@@ -118,9 +119,15 @@ class WindowlessWindowManager implements IWindowSession {
                    "Invalid window token (never added or removed already)");
        }
        SurfaceControl.Transaction t = new SurfaceControl.Transaction();
        t.show(sc).setBufferSize(sc,
                requestedWidth + attrs.surfaceInsets.left + attrs.surfaceInsets.right,
                requestedHeight + attrs.surfaceInsets.top + attrs.surfaceInsets.bottom)

        final Rect surfaceInsets = attrs.surfaceInsets;
        int width = surfaceInsets != null ?
                requestedWidth + surfaceInsets.left + surfaceInsets.right : requestedWidth;
        int height = surfaceInsets != null ?
                requestedHeight + surfaceInsets.top + surfaceInsets.bottom : requestedHeight;

        t.show(sc)
            .setBufferSize(sc, width, height)
            .setOpaque(sc, isOpaque(attrs))
            .apply();
        outSurfaceControl.copyFrom(sc);