Skip to content

Commit 5075f8e

Browse files
Romain GuyAndroid (Google) Code Review
authored andcommitted
Merge "Update TextureView's layer on size change Bug #7171323" into jb-mr1-dev
2 parents 3f1246a + 88801b2 commit 5075f8e

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

core/java/android/view/TextureView.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ public void setOpaque(boolean opaque) {
189189
if (opaque != mOpaque) {
190190
mOpaque = opaque;
191191
if (mLayer != null) {
192-
updateLayer();
192+
updateLayerAndInvalidate();
193193
}
194194
}
195195
}
@@ -310,6 +310,7 @@ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
310310
super.onSizeChanged(w, h, oldw, oldh);
311311
if (mSurface != null) {
312312
nSetDefaultBufferSize(mSurface, getWidth(), getHeight());
313+
updateLayer();
313314
if (mListener != null) {
314315
mListener.onSurfaceTextureSizeChanged(mSurface, getWidth(), getHeight());
315316
}
@@ -352,9 +353,7 @@ HardwareLayer getHardwareLayer() {
352353
public void onFrameAvailable(SurfaceTexture surfaceTexture) {
353354
// Per SurfaceTexture's documentation, the callback may be invoked
354355
// from an arbitrary thread
355-
synchronized (mLock) {
356-
mUpdateLayer = true;
357-
}
356+
updateLayer();
358357

359358
if (Looper.myLooper() == Looper.getMainLooper()) {
360359
invalidate();
@@ -379,9 +378,7 @@ public void onFrameAvailable(SurfaceTexture surfaceTexture) {
379378

380379
// Since we are updating the layer, force an update to ensure its
381380
// parameters are correct (width, height, transform, etc.)
382-
synchronized (mLock) {
383-
mUpdateLayer = true;
384-
}
381+
updateLayer();
385382
mMatrixChanged = true;
386383

387384
mAttachInfo.mHardwareRenderer.setSurfaceTexture(mLayer, mSurface);
@@ -404,15 +401,23 @@ protected void onVisibilityChanged(View changedView, int visibility) {
404401
// updates listener
405402
if (visibility == VISIBLE) {
406403
mSurface.setOnFrameAvailableListener(mUpdateListener);
407-
updateLayer();
404+
updateLayerAndInvalidate();
408405
} else {
409406
mSurface.setOnFrameAvailableListener(null);
410407
}
411408
}
412409
}
413410

414411
private void updateLayer() {
415-
mUpdateLayer = true;
412+
synchronized (mLock) {
413+
mUpdateLayer = true;
414+
}
415+
}
416+
417+
private void updateLayerAndInvalidate() {
418+
synchronized (mLock) {
419+
mUpdateLayer = true;
420+
}
416421
invalidate();
417422
}
418423

0 commit comments

Comments
 (0)