From 52693ab0aa5c939c46d7ccd575160486abe47cf5 Mon Sep 17 00:00:00 2001 From: Wonsik Kim Date: Thu, 14 Jul 2016 11:58:47 +0900 Subject: [PATCH] Refine fingerprint animation handling Release stale SurfaceTexture and MediaPlayer when necessary. Bug: 30104155 Change-Id: Ife5ba215fb962522cf007cd711a9329b4202cc39 --- .../FingerprintLocationAnimationVideoView.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoView.java b/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoView.java index 523627220b9..2593e333042 100644 --- a/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoView.java +++ b/src/com/android/settings/fingerprint/FingerprintLocationAnimationVideoView.java @@ -56,11 +56,20 @@ public class FingerprintLocationAnimationVideoView extends TextureView protected void onFinishInflate() { super.onFinishInflate(); setSurfaceTextureListener(new SurfaceTextureListener() { + private SurfaceTexture mTextureToDestroy = null; + @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { setVisibility(View.INVISIBLE); Uri videoUri = resourceEntryToUri(mContext, R.raw.fingerprint_location_animation); + if (mMediaPlayer != null) { + mMediaPlayer.release(); + } + if (mTextureToDestroy != null) { + mTextureToDestroy.release(); + mTextureToDestroy = null; + } mMediaPlayer = MediaPlayer.create(mContext, videoUri); mMediaPlayer.setSurface(new Surface(surfaceTexture)); mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { @@ -91,6 +100,7 @@ public class FingerprintLocationAnimationVideoView extends TextureView @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { + mTextureToDestroy = surfaceTexture; return false; }