Merge "Rename WindowlessViewRoot to SurfaceControlViewHost and rework API"
This commit is contained in:
@@ -4350,6 +4350,18 @@ package android.view {
|
||||
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 {
|
||||
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;
|
||||
}
|
||||
|
||||
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 {
|
||||
|
||||
@@ -2079,17 +2079,17 @@ MissingNullability: android.view.ViewDebug#startRenderingCommandsCapture(android
|
||||
|
||||
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:
|
||||
|
||||
|
||||
@@ -29,25 +29,55 @@ import android.os.IBinder;
|
||||
* @hide
|
||||
*/
|
||||
@TestApi
|
||||
public class WindowlessViewRoot {
|
||||
public class SurfaceControlViewHost {
|
||||
private ViewRootImpl mViewRoot;
|
||||
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 */
|
||||
public WindowlessViewRoot(@NonNull Context c, @NonNull Display d,
|
||||
public SurfaceControlViewHost(@NonNull Context c, @NonNull Display d,
|
||||
@NonNull WindowlessWindowManager wwm) {
|
||||
mWm = wwm;
|
||||
mViewRoot = new ViewRootImpl(c, d, mWm);
|
||||
}
|
||||
|
||||
public WindowlessViewRoot(@NonNull Context c, @NonNull Display d,
|
||||
@NonNull SurfaceControl rootSurface,
|
||||
public SurfaceControlViewHost(@NonNull Context c, @NonNull Display d,
|
||||
@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);
|
||||
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) {
|
||||
mViewRoot.setView(view, attrs, null);
|
||||
}
|
||||
@@ -42,7 +42,7 @@ import android.view.SurfaceControl;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowlessViewRoot;
|
||||
import android.view.SurfaceControlViewHost;
|
||||
import android.view.WindowlessWindowManager;
|
||||
|
||||
import com.android.internal.os.IResultReceiver;
|
||||
@@ -61,7 +61,7 @@ public class SystemWindows {
|
||||
private static final String TAG = "SystemWindows";
|
||||
|
||||
private final SparseArray<PerDisplay> mPerDisplay = new SparseArray<>();
|
||||
final HashMap<View, WindowlessViewRoot> mViewRoots = new HashMap<>();
|
||||
final HashMap<View, SurfaceControlViewHost> mViewRoots = new HashMap<>();
|
||||
Context mContext;
|
||||
IWindowSession mSession;
|
||||
DisplayWindowController mDisplayController;
|
||||
@@ -121,7 +121,7 @@ public class SystemWindows {
|
||||
* @param view
|
||||
*/
|
||||
public void removeView(View view) {
|
||||
WindowlessViewRoot root = mViewRoots.remove(view);
|
||||
SurfaceControlViewHost root = mViewRoots.remove(view);
|
||||
root.die();
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ public class SystemWindows {
|
||||
* Updates the layout params of a view.
|
||||
*/
|
||||
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)) {
|
||||
return;
|
||||
}
|
||||
@@ -177,7 +177,7 @@ public class SystemWindows {
|
||||
return;
|
||||
}
|
||||
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;
|
||||
viewRoot.addView(view, attrs);
|
||||
mViewRoots.put(view, viewRoot);
|
||||
|
||||
@@ -40,8 +40,8 @@ import android.text.TextUtils;
|
||||
import android.util.Slog;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.SurfaceControlViewHost;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowlessViewRoot;
|
||||
import android.view.autofill.AutofillId;
|
||||
import android.view.autofill.AutofillManager;
|
||||
import android.view.autofill.AutofillValue;
|
||||
@@ -217,14 +217,12 @@ public final class AutoFillUI {
|
||||
}
|
||||
|
||||
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.
|
||||
final WindowlessViewRoot wvr = new WindowlessViewRoot(context, context.getDisplay(), sc,
|
||||
null);
|
||||
final SurfaceControlViewHost wvr = new SurfaceControlViewHost(context, context.getDisplay(),
|
||||
(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.setText(datasetValue.getTextValue());
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
//
|
||||
|
||||
android_test {
|
||||
name: "WindowlessWmTest",
|
||||
name: "SurfaceControlViewHostTest",
|
||||
srcs: ["**/*.java"],
|
||||
platform_apis: true,
|
||||
certificate: "platform",
|
||||
@@ -16,7 +16,7 @@
|
||||
package="com.android.test.viewembed">
|
||||
|
||||
<application>
|
||||
<activity android:name="WindowlessWmTest" android:label="View Embedding Test">
|
||||
<activity android:name="SurfaceControlViewHostTest" android:label="View Embedding Test">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
@@ -22,18 +22,19 @@ import android.graphics.Color;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.os.Bundle;
|
||||
import android.view.Gravity;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.SurfaceHolder;
|
||||
import android.view.SurfaceView;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowlessViewRoot;
|
||||
import android.view.SurfaceControlViewHost;
|
||||
import android.widget.Button;
|
||||
import android.widget.FrameLayout;
|
||||
|
||||
|
||||
public class WindowlessWmTest extends Activity implements SurfaceHolder.Callback{
|
||||
public class SurfaceControlViewHostTest extends Activity implements SurfaceHolder.Callback{
|
||||
SurfaceView mView;
|
||||
WindowlessViewRoot mVr;
|
||||
SurfaceControlViewHost mVr;
|
||||
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
FrameLayout content = new FrameLayout(this);
|
||||
@@ -49,8 +50,12 @@ public class WindowlessWmTest extends Activity implements SurfaceHolder.Callback
|
||||
|
||||
@Override
|
||||
public void surfaceCreated(SurfaceHolder holder) {
|
||||
mVr = new WindowlessViewRoot(this, this.getDisplay(), mView.getSurfaceControl(),
|
||||
mVr = new SurfaceControlViewHost(this, this.getDisplay(),
|
||||
mView.getInputToken());
|
||||
|
||||
final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
|
||||
t.reparent(mVr.getSurfacePackage().getSurfaceControl(), mView.getSurfaceControl()).apply();
|
||||
|
||||
Button v = new Button(this);
|
||||
v.setBackgroundColor(Color.BLUE);
|
||||
v.setOnClickListener(new View.OnClickListener() {
|
||||
Reference in New Issue
Block a user