Merge "SCVH: Remove ViewRootImpl config callbacks on cleanup" into udc-dev
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user