summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2015-04-01 14:08:42 -0700
committerYorke Lee <yorkelee@google.com>2015-04-06 14:08:54 -0700
commitdc911a043d45f43f181339a8078cadb2825f4038 (patch)
tree7f42c630ae4ac3cd87670fb251664e37c1e676ed
parent18c0feda76fe333f3db1bf7bd307458a9e6b6005 (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.java31
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}.
*