* commit 'b0c939adfa339c5cbb7f458072119269368b3ba5': Prevent crash when detaching a SurfaceView. Bug #3400461
This commit is contained in:
@@ -174,6 +174,7 @@ public class SurfaceView extends View {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
private boolean mGlobalListenersAdded;
|
||||
|
||||
public SurfaceView(Context context) {
|
||||
super(context);
|
||||
@@ -212,9 +213,13 @@ public class SurfaceView extends View {
|
||||
mLayout.token = getWindowToken();
|
||||
mLayout.setTitle("SurfaceView");
|
||||
mViewVisibility = getVisibility() == VISIBLE;
|
||||
ViewTreeObserver observer = getViewTreeObserver();
|
||||
observer.addOnScrollChangedListener(mScrollChangedListener);
|
||||
observer.addOnPreDrawListener(mDrawListener);
|
||||
|
||||
if (!mGlobalListenersAdded) {
|
||||
ViewTreeObserver observer = getViewTreeObserver();
|
||||
observer.addOnScrollChangedListener(mScrollChangedListener);
|
||||
observer.addOnPreDrawListener(mDrawListener);
|
||||
mGlobalListenersAdded = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -275,9 +280,13 @@ public class SurfaceView extends View {
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
ViewTreeObserver observer = getViewTreeObserver();
|
||||
observer.removeOnScrollChangedListener(mScrollChangedListener);
|
||||
observer.removeOnPreDrawListener(mDrawListener);
|
||||
if (mGlobalListenersAdded) {
|
||||
ViewTreeObserver observer = getViewTreeObserver();
|
||||
observer.removeOnScrollChangedListener(mScrollChangedListener);
|
||||
observer.removeOnPreDrawListener(mDrawListener);
|
||||
mGlobalListenersAdded = false;
|
||||
}
|
||||
|
||||
mRequestedVisible = false;
|
||||
updateWindow(false, false);
|
||||
mHaveFrame = false;
|
||||
@@ -285,6 +294,7 @@ public class SurfaceView extends View {
|
||||
try {
|
||||
mSession.remove(mWindow);
|
||||
} catch (RemoteException ex) {
|
||||
// Not much we can do here...
|
||||
}
|
||||
mWindow = null;
|
||||
}
|
||||
|
||||
@@ -7897,7 +7897,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
|
||||
}
|
||||
|
||||
void dispatchDetachedFromWindow() {
|
||||
//System.out.println("Detached! " + this);
|
||||
AttachInfo info = mAttachInfo;
|
||||
if (info != null) {
|
||||
int vis = info.mWindowVisibility;
|
||||
@@ -7907,10 +7906,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
|
||||
}
|
||||
|
||||
onDetachedFromWindow();
|
||||
if ((mPrivateFlags&SCROLL_CONTAINER_ADDED) != 0) {
|
||||
|
||||
if ((mPrivateFlags & SCROLL_CONTAINER_ADDED) != 0) {
|
||||
mAttachInfo.mScrollContainers.remove(this);
|
||||
mPrivateFlags &= ~SCROLL_CONTAINER_ADDED;
|
||||
}
|
||||
|
||||
mAttachInfo = null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user