am b0c939ad: Merge "Prevent crash when detaching a SurfaceView. Bug #3400461" into honeycomb

* commit 'b0c939adfa339c5cbb7f458072119269368b3ba5':
  Prevent crash when detaching a SurfaceView. Bug #3400461
This commit is contained in:
Romain Guy
2011-01-28 14:20:01 -08:00
committed by Android Git Automerger
2 changed files with 19 additions and 8 deletions

View File

@@ -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;
}

View File

@@ -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;
}