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

Commit 6f631db8 authored by Robert Carr's avatar Robert Carr
Browse files

SurfaceControlViewHost: Expose IPC helpers

Use of SurfaceControlViewHost requires the embeder and embedee to
establish a side-channel in order to exchange the SurfacePackage
containing the embedded hierarchy. In recent commits, SurfacePackage
has grown a built in side-channel, useful for exchanging info from
the host back in to the embedee. In this CL we make two of these APIs
public. The general motivation for making them public is as follows:
	1. onDetachedFromWindow: While public API provides a manner
	to tear down a SurfaceControlViewHost, it seems that almost
	every user will have to include an IPC method for this in their
	bespoke side-channel. Since it's required for every use case
	it seems to make sense to provide some convenience.
	2. onConfigurationChanged: At the moment there would be no way
	to change the configuration of the remote
	SurfaceControlViewHosts. Client apps are instead forced to
	create their own configuration update side-channel and recreate
	the whole SurfaceControlViewHost each time.

Bug: 200284683
Test: SurfaceControlViewHostTests
Change-Id: I6f33f0953224d7ff60dc819560d54564250bbe3f
parent a7ba26fb
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -48968,6 +48968,8 @@ package android.view {
  public static final class SurfaceControlViewHost.SurfacePackage implements android.os.Parcelable {
    ctor public SurfaceControlViewHost.SurfacePackage(@NonNull android.view.SurfaceControlViewHost.SurfacePackage);
    method public int describeContents();
    method public void notifyConfigurationChanged(@NonNull android.content.res.Configuration);
    method public void notifyDetachedFromWindow();
    method public void release();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.view.SurfaceControlViewHost.SurfacePackage> CREATOR;
+31 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.graphics.PixelFormat;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteException;
import android.view.accessibility.IAccessibilityEmbeddedConnection;

import java.util.Objects;
@@ -168,6 +169,36 @@ public class SurfaceControlViewHost {
            return mRemoteInterface;
        }

        /**
         * Forward a configuration to the remote SurfaceControlViewHost.
         * This will cause View#onConfigurationChanged to be invoked on the remote
         * end. This does not automatically cause the SurfaceControlViewHost
         * to be resized. The root View of a SurfaceControlViewHost
         * is more akin to a PopupWindow in that the size is user specified
         * independent of configuration width and height.
         *
         * @param c The configuration to forward
         */
        public void notifyConfigurationChanged(@NonNull Configuration c) {
            try {
                getRemoteInterface().onConfigurationChanged(c);
            } catch (RemoteException e) {
                e.rethrowAsRuntimeException();
            }
        }

        /**
         * Tear down the remote SurfaceControlViewHost and cause
         * View#onDetachedFromWindow to be invoked on the other side.
         */
        public void notifyDetachedFromWindow() {
            try {
                getRemoteInterface().onDispatchDetachedFromWindow();
            } catch (RemoteException e) {
                e.rethrowAsRuntimeException();
            }
        }

        @Override
        public int describeContents() {
            return 0;