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

Commit 1fcf469c authored by Vishnu Nair's avatar Vishnu Nair Committed by Android (Google) Code Review
Browse files

Merge "SCVH: Remove ViewRootImpl config callbacks on cleanup" into udc-dev

parents 9d319e4d 59027cea
Loading
Loading
Loading
Loading
+20 −8
Original line number Diff line number Diff line
@@ -120,6 +120,8 @@ public class SurfaceControlViewHost {

    private ISurfaceControlViewHost mRemoteInterface = new ISurfaceControlViewHostImpl();

    private ViewRootImpl.ConfigChangedCallback mConfigChangedCallback;

    /**
     * Package encapsulating a Surface hierarchy which contains interactive view
     * elements. It's expected to get this object from
@@ -307,7 +309,7 @@ public class SurfaceControlViewHost {
        mWm = wwm;
        mViewRoot = new ViewRootImpl(c, d, mWm, new WindowlessWindowLayout());
        mCloseGuard.openWithCallSite("release", callsite);
        addConfigCallback(c, d);
        setConfigCallback(c, d);

        WindowManagerGlobal.getInstance().addWindowlessRoot(mViewRoot);

@@ -357,21 +359,23 @@ public class SurfaceControlViewHost {

        mViewRoot = new ViewRootImpl(context, display, mWm, new WindowlessWindowLayout());
        mCloseGuard.openWithCallSite("release", callsite);
        addConfigCallback(context, display);
        setConfigCallback(context, display);

        WindowManagerGlobal.getInstance().addWindowlessRoot(mViewRoot);

        mAccessibilityEmbeddedConnection = mViewRoot.getAccessibilityEmbeddedConnection();
    }

    private void addConfigCallback(Context c, Display d) {
    private void setConfigCallback(Context c, Display d) {
        final IBinder token = c.getWindowContextToken();
        mViewRoot.addConfigCallback((conf) -> {
        mConfigChangedCallback = conf -> {
            if (token instanceof WindowTokenClient) {
                final WindowTokenClient w = (WindowTokenClient)  token;
                w.onConfigurationChanged(conf, d.getDisplayId(), true);
            }
        });
        };

        ViewRootImpl.addConfigCallback(mConfigChangedCallback);
    }

    /**
@@ -386,8 +390,7 @@ public class SurfaceControlViewHost {
            mCloseGuard.warnIfOpen();
        }
        // We aren't on the UI thread here so we need to pass false to doDie
        mViewRoot.die(false /* immediate */);
        WindowManagerGlobal.getInstance().removeWindowlessRoot(mViewRoot);
        doRelease(false /* immediate */);
    }

    /**
@@ -496,7 +499,16 @@ public class SurfaceControlViewHost {
     */
    public void release() {
        // ViewRoot will release mSurfaceControl for us.
        mViewRoot.die(true /* immediate */);
        doRelease(true /* immediate */);
    }

    private void doRelease(boolean immediate) {
        if (mConfigChangedCallback != null) {
            ViewRootImpl.removeConfigCallback(mConfigChangedCallback);
            mConfigChangedCallback = null;
        }

        mViewRoot.die(immediate);
        WindowManagerGlobal.getInstance().removeWindowlessRoot(mViewRoot);
        mReleased = true;
        mCloseGuard.close();