diff options
author | Yorke Lee <yorkelee@google.com> | 2015-04-01 14:08:42 -0700 |
---|---|---|
committer | Yorke Lee <yorkelee@google.com> | 2015-04-06 14:08:54 -0700 |
commit | dc911a043d45f43f181339a8078cadb2825f4038 (patch) | |
tree | 7f42c630ae4ac3cd87670fb251664e37c1e676ed | |
parent | 18c0feda76fe333f3db1bf7bd307458a9e6b6005 (diff) |
DO NOT MERGE Fix crash when rotating video fragment
Due to a recent framework change,
https://googleplex-android-review.git.corp.google.com/#/c/659363/
TextureView will now crash if setSurfaceTexture is called before
the TextureView is attached to the window. Use an
OnAttachStateListener to call setSurfaceTexture only after the view
is attached to the window.
Cherry-pick from
https://us2-mirror-googleplex-android-review.googlesource.com/#/c/666312/1
Bug: 20071288
Change-Id: I8c443542db6f4a432a097326fdb49607baa55889
-rw-r--r-- | InCallUI/src/com/android/incallui/VideoCallFragment.java | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/InCallUI/src/com/android/incallui/VideoCallFragment.java b/InCallUI/src/com/android/incallui/VideoCallFragment.java index c4d10c569..a2511f23d 100644 --- a/InCallUI/src/com/android/incallui/VideoCallFragment.java +++ b/InCallUI/src/com/android/incallui/VideoCallFragment.java @@ -108,7 +108,7 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter, * changes. */ private static class VideoCallSurface implements TextureView.SurfaceTextureListener, - View.OnClickListener { + View.OnClickListener, View.OnAttachStateChangeListener { private int mSurfaceId; private VideoCallPresenter mPresenter; private TextureView mTextureView; @@ -159,17 +159,7 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter, mTextureView = view; mTextureView.setSurfaceTextureListener(this); mTextureView.setOnClickListener(this); - - final boolean areSameSurfaces = - Objects.equal(mSavedSurfaceTexture, mTextureView.getSurfaceTexture()); - Log.d(this, "recreateView: SavedSurfaceTexture=" + mSavedSurfaceTexture - + " areSameSurfaces=" + areSameSurfaces); - if (mSavedSurfaceTexture != null && !areSameSurfaces) { - mTextureView.setSurfaceTexture(mSavedSurfaceTexture); - if (createSurface(mWidth, mHeight)) { - onSurfaceCreated(); - } - } + mTextureView.addOnAttachStateChangeListener(this); mIsDoneWithSurface = false; } @@ -281,6 +271,23 @@ public class VideoCallFragment extends BaseFragment<VideoCallPresenter, // Not Handled } + @Override + public void onViewAttachedToWindow(View v) { + final boolean areSameSurfaces = + Objects.equal(mSavedSurfaceTexture, mTextureView.getSurfaceTexture()); + Log.d(this, "onViewAttachedToWindow: SavedSurfaceTexture=" + mSavedSurfaceTexture + + " areSameSurfaces=" + areSameSurfaces); + if (mSavedSurfaceTexture != null && !areSameSurfaces) { + mTextureView.setSurfaceTexture(mSavedSurfaceTexture); + if (createSurface(mWidth, mHeight)) { + onSurfaceCreated(); + } + } + } + + @Override + public void onViewDetachedFromWindow(View v) {} + /** * Retrieves the current {@link TextureView}. * |