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

Commit 4e535b4c authored by Rob Carr's avatar Rob Carr Committed by Android (Google) Code Review
Browse files

Merge "Rename WindowlessViewRoot to SurfaceControlViewHost and rework API"

parents b41bab2a 59b1888b
Loading
Loading
Loading
Loading
+12 −7
Original line number Original line Diff line number Diff line
@@ -4350,6 +4350,18 @@ package android.view {
    method public abstract String asyncImpl() default "";
    method public abstract String asyncImpl() default "";
  }
  }


  public class SurfaceControlViewHost {
    ctor public SurfaceControlViewHost(@NonNull android.content.Context, @NonNull android.view.Display, @Nullable android.os.IBinder);
    method public void addView(android.view.View, android.view.WindowManager.LayoutParams);
    method public void dispose();
    method @Nullable public android.view.SurfaceControlViewHost.SurfacePackage getSurfacePackage();
    method public void relayout(android.view.WindowManager.LayoutParams);
  }

  public class SurfaceControlViewHost.SurfacePackage {
    method @NonNull public android.view.SurfaceControl getSurfaceControl();
  }

  public class SurfaceView extends android.view.View {
  public class SurfaceView extends android.view.View {
    method @Nullable public android.os.IBinder getInputToken();
    method @Nullable public android.os.IBinder getInputToken();
  }
  }
@@ -4401,13 +4413,6 @@ 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=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"), @android.view.ViewDebug.FlagToString(mask=0x4000000, equals=0x4000000, name="FIT_INSETS_CONTROLLED"), @android.view.ViewDebug.FlagToString(mask=0x8000000, equals=0x8000000, name="ONLY_DRAW_BOTTOM_BAR_BACKGROUND")}) public int privateFlags;
    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=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"), @android.view.ViewDebug.FlagToString(mask=0x4000000, equals=0x4000000, name="FIT_INSETS_CONTROLLED"), @android.view.ViewDebug.FlagToString(mask=0x8000000, equals=0x8000000, name="ONLY_DRAW_BOTTOM_BAR_BACKGROUND")}) public int privateFlags;
  }
  }


  public class WindowlessViewRoot {
    ctor public WindowlessViewRoot(@NonNull android.content.Context, @NonNull android.view.Display, @NonNull android.view.SurfaceControl, @Nullable android.os.IBinder);
    method public void addView(android.view.View, android.view.WindowManager.LayoutParams);
    method public void dispose();
    method public void relayout(android.view.WindowManager.LayoutParams);
  }

}
}


package android.view.accessibility {
package android.view.accessibility {
+6 −6
Original line number Original line Diff line number Diff line
@@ -2079,17 +2079,17 @@ MissingNullability: android.view.ViewDebug#startRenderingCommandsCapture(android
    
    
MissingNullability: android.view.WindowManager.LayoutParams#accessibilityTitle:
MissingNullability: android.view.WindowManager.LayoutParams#accessibilityTitle:
    
    
MissingNullability: android.view.WindowlessViewRoot#WindowlessViewRoot(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #0:
MissingNullability: android.view.SurfaceControlViewHost#SurfaceControlViewHost(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #0:
    
    
MissingNullability: android.view.WindowlessViewRoot#WindowlessViewRoot(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #1:
MissingNullability: android.view.SurfaceControlViewHost#SurfaceControlViewHost(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #1:
    
    
MissingNullability: android.view.WindowlessViewRoot#WindowlessViewRoot(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #2:
MissingNullability: android.view.SurfaceControlViewHost#SurfaceControlViewHost(android.content.Context, android.view.Display, android.view.SurfaceControl) parameter #2:
    
    
MissingNullability: android.view.WindowlessViewRoot#addView(android.view.View, android.view.WindowManager.LayoutParams) parameter #0:
MissingNullability: android.view.SurfaceControlViewHost#addView(android.view.View, android.view.WindowManager.LayoutParams) parameter #0:
    
    
MissingNullability: android.view.WindowlessViewRoot#addView(android.view.View, android.view.WindowManager.LayoutParams) parameter #1:
MissingNullability: android.view.SurfaceControlViewHost#addView(android.view.View, android.view.WindowManager.LayoutParams) parameter #1:
    
    
MissingNullability: android.view.WindowlessViewRoot#relayout(android.view.WindowManager.LayoutParams) parameter #0:
MissingNullability: android.view.SurfaceControlViewHost#relayout(android.view.WindowManager.LayoutParams) parameter #0:
    
    
MissingNullability: android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener#onAccessibilityServicesStateChanged(android.view.accessibility.AccessibilityManager) parameter #0:
MissingNullability: android.view.accessibility.AccessibilityManager.AccessibilityServicesStateChangeListener#onAccessibilityServicesStateChanged(android.view.accessibility.AccessibilityManager) parameter #0:
    
    
+35 −5
Original line number Original line Diff line number Diff line
@@ -29,25 +29,55 @@ import android.os.IBinder;
 * @hide
 * @hide
 */
 */
@TestApi
@TestApi
public class WindowlessViewRoot {
public class SurfaceControlViewHost {
    private ViewRootImpl mViewRoot;
    private ViewRootImpl mViewRoot;
    private WindowlessWindowManager mWm;
    private WindowlessWindowManager mWm;


    private SurfaceControl mSurfaceControl;

    /**
     * @hide
     */
    @TestApi
    public class SurfacePackage {
        final SurfaceControl mSurfaceControl;
        // TODO: Accessibility ID goes here

        SurfacePackage(SurfaceControl sc) {
            mSurfaceControl = sc;
        }

        public @NonNull SurfaceControl getSurfaceControl() {
            return mSurfaceControl;
        }
    }

    /** @hide */
    /** @hide */
    public WindowlessViewRoot(@NonNull Context c, @NonNull Display d,
    public SurfaceControlViewHost(@NonNull Context c, @NonNull Display d,
            @NonNull WindowlessWindowManager wwm) {
            @NonNull WindowlessWindowManager wwm) {
        mWm = wwm;
        mWm = wwm;
        mViewRoot = new ViewRootImpl(c, d, mWm);
        mViewRoot = new ViewRootImpl(c, d, mWm);
    }
    }


    public WindowlessViewRoot(@NonNull Context c, @NonNull Display d,
    public SurfaceControlViewHost(@NonNull Context c, @NonNull Display d,
            @NonNull SurfaceControl rootSurface,
            @Nullable IBinder hostInputToken) {
            @Nullable IBinder hostInputToken) {
        mWm = new WindowlessWindowManager(c.getResources().getConfiguration(), rootSurface,
        mSurfaceControl = new SurfaceControl.Builder()
            .setContainerLayer()
            .setName("SurfaceControlViewHost")
            .build();
        mWm = new WindowlessWindowManager(c.getResources().getConfiguration(), mSurfaceControl,
                hostInputToken);
                hostInputToken);
        mViewRoot = new ViewRootImpl(c, d, mWm);
        mViewRoot = new ViewRootImpl(c, d, mWm);
    }
    }


    public @Nullable SurfacePackage getSurfacePackage() {
        if (mSurfaceControl != null) {
            return new SurfacePackage(mSurfaceControl);
        } else {
            return null;
        }
    }

    public void addView(View view, WindowManager.LayoutParams attrs) {
    public void addView(View view, WindowManager.LayoutParams attrs) {
        mViewRoot.setView(view, attrs, null);
        mViewRoot.setView(view, attrs, null);
    }
    }
+5 −5
Original line number Original line Diff line number Diff line
@@ -42,7 +42,7 @@ import android.view.SurfaceControl;
import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.WindowManager;
import android.view.WindowlessViewRoot;
import android.view.SurfaceControlViewHost;
import android.view.WindowlessWindowManager;
import android.view.WindowlessWindowManager;


import com.android.internal.os.IResultReceiver;
import com.android.internal.os.IResultReceiver;
@@ -61,7 +61,7 @@ public class SystemWindows {
    private static final String TAG = "SystemWindows";
    private static final String TAG = "SystemWindows";


    private final SparseArray<PerDisplay> mPerDisplay = new SparseArray<>();
    private final SparseArray<PerDisplay> mPerDisplay = new SparseArray<>();
    final HashMap<View, WindowlessViewRoot> mViewRoots = new HashMap<>();
    final HashMap<View, SurfaceControlViewHost> mViewRoots = new HashMap<>();
    Context mContext;
    Context mContext;
    IWindowSession mSession;
    IWindowSession mSession;
    DisplayWindowController mDisplayController;
    DisplayWindowController mDisplayController;
@@ -121,7 +121,7 @@ public class SystemWindows {
     * @param view
     * @param view
     */
     */
    public void removeView(View view) {
    public void removeView(View view) {
        WindowlessViewRoot root = mViewRoots.remove(view);
        SurfaceControlViewHost root = mViewRoots.remove(view);
        root.die();
        root.die();
    }
    }


@@ -129,7 +129,7 @@ public class SystemWindows {
     * Updates the layout params of a view.
     * Updates the layout params of a view.
     */
     */
    public void updateViewLayout(@NonNull View view, ViewGroup.LayoutParams params) {
    public void updateViewLayout(@NonNull View view, ViewGroup.LayoutParams params) {
        WindowlessViewRoot root = mViewRoots.get(view);
        SurfaceControlViewHost root = mViewRoots.get(view);
        if (root == null || !(params instanceof WindowManager.LayoutParams)) {
        if (root == null || !(params instanceof WindowManager.LayoutParams)) {
            return;
            return;
        }
        }
@@ -177,7 +177,7 @@ public class SystemWindows {
                return;
                return;
            }
            }
            final Display display = mDisplayController.getDisplay(mDisplayId);
            final Display display = mDisplayController.getDisplay(mDisplayId);
            WindowlessViewRoot viewRoot = new WindowlessViewRoot(mContext, display, wwm);
            SurfaceControlViewHost viewRoot = new SurfaceControlViewHost(mContext, display, wwm);
            attrs.flags |= FLAG_HARDWARE_ACCELERATED;
            attrs.flags |= FLAG_HARDWARE_ACCELERATED;
            viewRoot.addView(view, attrs);
            viewRoot.addView(view, attrs);
            mViewRoots.put(view, viewRoot);
            mViewRoots.put(view, viewRoot);
+6 −8
Original line number Original line Diff line number Diff line
@@ -40,8 +40,8 @@ import android.text.TextUtils;
import android.util.Slog;
import android.util.Slog;
import android.view.KeyEvent;
import android.view.KeyEvent;
import android.view.SurfaceControl;
import android.view.SurfaceControl;
import android.view.SurfaceControlViewHost;
import android.view.WindowManager;
import android.view.WindowManager;
import android.view.WindowlessViewRoot;
import android.view.autofill.AutofillId;
import android.view.autofill.AutofillId;
import android.view.autofill.AutofillManager;
import android.view.autofill.AutofillManager;
import android.view.autofill.AutofillValue;
import android.view.autofill.AutofillValue;
@@ -217,14 +217,12 @@ public final class AutoFillUI {
        }
        }


        final AutofillValue datasetValue = dataset.getFieldValues().get(index);
        final AutofillValue datasetValue = dataset.getFieldValues().get(index);
        final SurfaceControl sc = new SurfaceControl.Builder()
                // TODO(b/137800469): sanitize name
                .setName("af suggestion")
                .build();

        //TODO(b/137800469): Pass in inputToken from IME.
        //TODO(b/137800469): Pass in inputToken from IME.
        final WindowlessViewRoot wvr = new WindowlessViewRoot(context, context.getDisplay(), sc,
        final SurfaceControlViewHost wvr = new SurfaceControlViewHost(context, context.getDisplay(),
                null);
                (IBinder) null);
        // TODO(b/134365580): Use the package instead of the SurfaceControl itself
        // for accessibility support.
        final SurfaceControl sc = wvr.getSurfacePackage().getSurfaceControl();


        TextView textView = new TextView(context);
        TextView textView = new TextView(context);
        textView.setText(datasetValue.getTextValue());
        textView.setText(datasetValue.getTextValue());
Loading