diff options
author | Robert Carr <racarr@google.com> | 2019-12-18 00:38:40 -0800 |
---|---|---|
committer | Robert Carr <racarr@google.com> | 2019-12-30 20:59:39 -0800 |
commit | 59b1888bb95544a57e29d8a3c29960087d9f7ae9 (patch) | |
tree | 2eb97f0fcc30e78b07890fa084f254e9976c01c3 | |
parent | f06d584d39723ed4ddfb326c256d67121d5e5d5a (diff) |
Rename WindowlessViewRoot to SurfaceControlViewHost and rework API
Should be a little more clear. The internal IWindowSession implementation
keeps the WindowlessWindowManager name, but the API section definitely
needs a more usable name. Instead of passing in a root Surface we want it
to be owned by the SurfaceControlViewHost itself. This way we can ensure
we only return a SurfacePackage. In follow up CLs we will add an
accessibility ID to the SurfacePackage so we can ensure the Control
is passed around with the accessibility ID.
Test: Builds
Bug: 134365580
Change-Id: I30520e8b169d3744a66ccedf61cc4515cfef4dee
-rw-r--r-- | api/test-current.txt | 19 | ||||
-rw-r--r-- | api/test-lint-baseline.txt | 12 | ||||
-rw-r--r-- | core/java/android/view/SurfaceControlViewHost.java (renamed from core/java/android/view/WindowlessViewRoot.java) | 40 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java | 10 | ||||
-rw-r--r-- | services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java | 14 | ||||
-rw-r--r-- | tests/SurfaceControlViewHostTest/Android.bp (renamed from tests/WindowlessWmTest/Android.bp) | 2 | ||||
-rw-r--r-- | tests/SurfaceControlViewHostTest/AndroidManifest.xml (renamed from tests/WindowlessWmTest/AndroidManifest.xml) | 2 | ||||
-rw-r--r-- | tests/SurfaceControlViewHostTest/src/com/android/test/viewembed/SurfaceControlViewHostTest.java (renamed from tests/WindowlessWmTest/src/com/android/test/viewembed/WindowlessWmTest.java) | 13 |
8 files changed, 75 insertions, 37 deletions
diff --git a/api/test-current.txt b/api/test-current.txt index 219258ef50b0..4b17eb8c03b4 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -4424,6 +4424,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(); } @@ -4474,13 +4486,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 { diff --git a/api/test-lint-baseline.txt b/api/test-lint-baseline.txt index ef8165fc6edb..6d1f29122b71 100644 --- a/api/test-lint-baseline.txt +++ b/api/test-lint-baseline.txt @@ -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: diff --git a/core/java/android/view/WindowlessViewRoot.java b/core/java/android/view/SurfaceControlViewHost.java index 68f2bde9c265..4f8aecd08f6d 100644 --- a/core/java/android/view/WindowlessViewRoot.java +++ b/core/java/android/view/SurfaceControlViewHost.java @@ -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); } diff --git a/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java b/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java index 5ec61c3313f0..02c7857f0cfd 100644 --- a/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java +++ b/packages/SystemUI/src/com/android/systemui/wm/SystemWindows.java @@ -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); diff --git a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java index eadfd31c27bf..e57b7b3d6d32 100644 --- a/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java +++ b/services/autofill/java/com/android/server/autofill/ui/AutoFillUI.java @@ -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()); diff --git a/tests/WindowlessWmTest/Android.bp b/tests/SurfaceControlViewHostTest/Android.bp index 2ace3f363ef9..e4e060010eea 100644 --- a/tests/WindowlessWmTest/Android.bp +++ b/tests/SurfaceControlViewHostTest/Android.bp @@ -15,7 +15,7 @@ // android_test { - name: "WindowlessWmTest", + name: "SurfaceControlViewHostTest", srcs: ["**/*.java"], platform_apis: true, certificate: "platform", diff --git a/tests/WindowlessWmTest/AndroidManifest.xml b/tests/SurfaceControlViewHostTest/AndroidManifest.xml index babfd76d91e8..ee95763453f7 100644 --- a/tests/WindowlessWmTest/AndroidManifest.xml +++ b/tests/SurfaceControlViewHostTest/AndroidManifest.xml @@ -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"/> diff --git a/tests/WindowlessWmTest/src/com/android/test/viewembed/WindowlessWmTest.java b/tests/SurfaceControlViewHostTest/src/com/android/test/viewembed/SurfaceControlViewHostTest.java index 5c1e830e1382..6687f83ad0db 100644 --- a/tests/WindowlessWmTest/src/com/android/test/viewembed/WindowlessWmTest.java +++ b/tests/SurfaceControlViewHostTest/src/com/android/test/viewembed/SurfaceControlViewHostTest.java @@ -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() { |