Loading core/java/android/view/SurfaceControlViewHost.java +20 −8 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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); } /** Loading @@ -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 */); } /** Loading Loading @@ -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(); Loading Loading
core/java/android/view/SurfaceControlViewHost.java +20 −8 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); Loading Loading @@ -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); } /** Loading @@ -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 */); } /** Loading Loading @@ -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(); Loading