diff options
-rw-r--r-- | core/java/android/webkit/HTML5VideoView.java | 15 | ||||
-rw-r--r-- | core/java/android/webkit/HTML5VideoViewProxy.java | 7 | ||||
-rw-r--r-- | core/java/android/webkit/WebViewClassic.java | 1 |
3 files changed, 20 insertions, 3 deletions
diff --git a/core/java/android/webkit/HTML5VideoView.java b/core/java/android/webkit/HTML5VideoView.java index 610808b..96d8248 100644 --- a/core/java/android/webkit/HTML5VideoView.java +++ b/core/java/android/webkit/HTML5VideoView.java @@ -35,6 +35,7 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener { static final int STATE_PREPARED = 2; static final int STATE_PLAYING = 3; static final int STATE_RESETTED = 4; + static final int STATE_RELEASED = 5; protected HTML5VideoViewProxy mProxy; @@ -126,7 +127,7 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener { } public void reset() { - if (mCurrentState != STATE_RESETTED) { + if (mCurrentState < STATE_RESETTED) { mPlayer.reset(); } mCurrentState = STATE_RESETTED; @@ -138,6 +139,18 @@ public class HTML5VideoView implements MediaPlayer.OnPreparedListener { } } + public static void release() { + if (mPlayer != null && mCurrentState != STATE_RELEASED) { + mPlayer.release(); + mPlayer = null; + } + mCurrentState = STATE_RELEASED; + } + + public boolean isReleased() { + return mCurrentState == STATE_RELEASED; + } + public boolean getPauseDuringPreparing() { return mPauseDuringPreparing; } diff --git a/core/java/android/webkit/HTML5VideoViewProxy.java b/core/java/android/webkit/HTML5VideoViewProxy.java index 2dba89d..701ef35 100644 --- a/core/java/android/webkit/HTML5VideoViewProxy.java +++ b/core/java/android/webkit/HTML5VideoViewProxy.java @@ -109,7 +109,8 @@ class HTML5VideoViewProxy extends Handler mBaseLayer = layer; // Don't do this for full screen mode. if (mHTML5VideoView != null - && !mHTML5VideoView.isFullScreenMode()) { + && !mHTML5VideoView.isFullScreenMode() + && !mHTML5VideoView.isReleased()) { int currentVideoLayerId = mHTML5VideoView.getVideoLayerId(); SurfaceTexture surfTexture = HTML5VideoInline.getSurfaceTexture(currentVideoLayerId); @@ -214,7 +215,9 @@ class HTML5VideoViewProxy extends Handler boolean skipPrepare = false; boolean createInlineView = false; - if (backFromFullScreenMode && currentVideoLayerId == videoLayerId) { + if (backFromFullScreenMode + && currentVideoLayerId == videoLayerId + && !mHTML5VideoView.isReleased()) { skipPrepare = true; createInlineView = true; } else if(backFromFullScreenMode diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java index 251ddf7..038dde5 100644 --- a/core/java/android/webkit/WebViewClassic.java +++ b/core/java/android/webkit/WebViewClassic.java @@ -745,6 +745,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc // Here we just need to clean up the Surface Texture which is static. if (level > TRIM_MEMORY_UI_HIDDEN) { HTML5VideoInline.cleanupSurfaceTexture(); + HTML5VideoView.release(); } WebViewClassic.nativeOnTrimMemory(level); } |