From 240444c21374d59c97da75134e5e55bd99599cc0 Mon Sep 17 00:00:00 2001 From: Gerardo Pacheco Date: Tue, 10 Jul 2018 15:00:56 +0200 Subject: [PATCH 1/7] Android keep screen on --- .../com/brentvatne/react/ReactVideoView.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoView.java b/android/src/main/java/com/brentvatne/react/ReactVideoView.java index 954130a155..6568f860b6 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoView.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoView.java @@ -9,6 +9,7 @@ import android.os.Handler; import android.util.Log; import android.view.MotionEvent; +import android.view.WindowManager; import android.webkit.CookieManager; import android.widget.MediaController; @@ -89,7 +90,6 @@ public String toString() { private Handler videoControlHandler = new Handler(); private MediaController mediaController; - private String mSrcUriString = null; private String mSrcType = "mp4"; private ReadableMap mRequestHeaders = null; @@ -591,6 +591,15 @@ protected void onDetachedFromWindow() { mMediaPlayerValid = false; super.onDetachedFromWindow(); + + if (mThemedReactContext != null) { + mThemedReactContext.getCurrentActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + mThemedReactContext.getCurrentActivity().getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + }); + } } @Override @@ -598,6 +607,15 @@ protected void onAttachedToWindow() { super.onAttachedToWindow(); + if (mThemedReactContext != null) { + mThemedReactContext.getCurrentActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + mThemedReactContext.getCurrentActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + }); + } + if(mMainVer>0) { setSrc(mSrcUriString, mSrcType, mSrcIsNetwork, mSrcIsAsset, mRequestHeaders, mMainVer, mPatchVer); } From 2f0b694b38029a6260d5dbe0394133f7f29a6769 Mon Sep 17 00:00:00 2001 From: Gerardo Pacheco Date: Wed, 11 Jul 2018 12:28:26 +0200 Subject: [PATCH 2/7] Android: MediaPlayer - Prevent screen from dimming --- .../com/brentvatne/react/ReactVideoView.java | 56 +++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoView.java b/android/src/main/java/com/brentvatne/react/ReactVideoView.java index 6568f860b6..b933c5d172 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoView.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoView.java @@ -358,10 +358,12 @@ public void setPausedModifier(final boolean paused) { if (mPaused) { if (mMediaPlayer.isPlaying()) { pause(); + setPreventScreenFromDimmingFlag(false); } } else { if (!mMediaPlayer.isPlaying()) { start(); + setPreventScreenFromDimmingFlag(true); // Setting the rate unpauses, so we have to wait for an unpause if (mRate != mActiveRate) { setRateModifier(mRate); @@ -457,6 +459,42 @@ public void setControls(boolean controls) { this.mUseNativeControls = controls; } + public boolean isPreventScreenFromDimmingFlagOn() { + int flags = mThemedReactContext.getCurrentActivity().getWindow().getAttributes().flags; + + if ((flags & WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) == 0) { + return false; + } + + return true; + } + + public void setPreventScreenFromDimmingFlag(final boolean state) { + if (!mMediaPlayerValid && mThemedReactContext == null) { + return; + } + + final boolean isFlagOn = isPreventScreenFromDimmingFlagOn(); + + if (state && !isFlagOn) { + mThemedReactContext.getCurrentActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + mThemedReactContext.getCurrentActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + }); + } + + if (!state && isFlagOn) { + mThemedReactContext.getCurrentActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + mThemedReactContext.getCurrentActivity().getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + }); + } + } + @Override public void onPrepared(MediaPlayer mp) { @@ -592,14 +630,7 @@ protected void onDetachedFromWindow() { mMediaPlayerValid = false; super.onDetachedFromWindow(); - if (mThemedReactContext != null) { - mThemedReactContext.getCurrentActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - mThemedReactContext.getCurrentActivity().getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } - }); - } + setPreventScreenFromDimmingFlag(false); } @Override @@ -607,14 +638,7 @@ protected void onAttachedToWindow() { super.onAttachedToWindow(); - if (mThemedReactContext != null) { - mThemedReactContext.getCurrentActivity().runOnUiThread(new Runnable() { - @Override - public void run() { - mThemedReactContext.getCurrentActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } - }); - } + setPreventScreenFromDimmingFlag(true); if(mMainVer>0) { setSrc(mSrcUriString, mSrcType, mSrcIsNetwork, mSrcIsAsset, mRequestHeaders, mMainVer, mPatchVer); From 7e5647d57ffa19c6825566e5375139f3f7b960e3 Mon Sep 17 00:00:00 2001 From: Gerardo Pacheco Date: Wed, 25 Jul 2018 10:02:04 +0200 Subject: [PATCH 3/7] Android: MediaPlayer - Prevent screen from dimming, fixed bug and simplified code --- .../com/brentvatne/react/ReactVideoView.java | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoView.java b/android/src/main/java/com/brentvatne/react/ReactVideoView.java index 217f73f500..a8cd590cc5 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoView.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoView.java @@ -503,24 +503,12 @@ public void setControls(boolean controls) { this.mUseNativeControls = controls; } - public boolean isPreventScreenFromDimmingFlagOn() { - int flags = mThemedReactContext.getCurrentActivity().getWindow().getAttributes().flags; - - if ((flags & WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) == 0) { - return false; - } - - return true; - } - public void setPreventScreenFromDimmingFlag(final boolean state) { - if (!mMediaPlayerValid && mThemedReactContext == null) { + if (!mMediaPlayerValid || mThemedReactContext == null) { return; } - final boolean isFlagOn = isPreventScreenFromDimmingFlagOn(); - - if (state && !isFlagOn) { + if (state) { mThemedReactContext.getCurrentActivity().runOnUiThread(new Runnable() { @Override public void run() { @@ -529,7 +517,7 @@ public void run() { }); } - if (!state && isFlagOn) { + if (!state) { mThemedReactContext.getCurrentActivity().runOnUiThread(new Runnable() { @Override public void run() { From ab273ed1b5bc75610f8907b6ce63a14eaa722dd7 Mon Sep 17 00:00:00 2001 From: Gerardo Pacheco Date: Wed, 25 Jul 2018 10:24:48 +0200 Subject: [PATCH 4/7] Android: MediaPlayer - Prevent screen from dimming, check for activity --- .../java/com/brentvatne/react/ReactVideoView.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoView.java b/android/src/main/java/com/brentvatne/react/ReactVideoView.java index a8cd590cc5..c3b52f020a 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoView.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoView.java @@ -508,20 +508,25 @@ public void setPreventScreenFromDimmingFlag(final boolean state) { return; } + Activity activity = mThemedReactContext.getCurrentActivity(); + if (activity == null) { + return; + } + if (state) { - mThemedReactContext.getCurrentActivity().runOnUiThread(new Runnable() { + activity.runOnUiThread(new Runnable() { @Override public void run() { - mThemedReactContext.getCurrentActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }); } if (!state) { - mThemedReactContext.getCurrentActivity().runOnUiThread(new Runnable() { + activity.runOnUiThread(new Runnable() { @Override public void run() { - mThemedReactContext.getCurrentActivity().getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + activity.getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }); } From 99591e45d68a42337c8e8421e19ba52b640b858f Mon Sep 17 00:00:00 2001 From: Gerardo Pacheco Date: Wed, 25 Jul 2018 10:34:41 +0200 Subject: [PATCH 5/7] Android: MediaPlayer - Prevent screen from dimming, make variable as final --- android/src/main/java/com/brentvatne/react/ReactVideoView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoView.java b/android/src/main/java/com/brentvatne/react/ReactVideoView.java index c3b52f020a..dddd15075f 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoView.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoView.java @@ -508,7 +508,7 @@ public void setPreventScreenFromDimmingFlag(final boolean state) { return; } - Activity activity = mThemedReactContext.getCurrentActivity(); + final Activity activity = mThemedReactContext.getCurrentActivity(); if (activity == null) { return; } From bd48a001c00a8f7af7ca790ed50c318e59bfff6a Mon Sep 17 00:00:00 2001 From: Hampton Maxwell Date: Sun, 5 Aug 2018 17:27:49 -0700 Subject: [PATCH 6/7] Switch to using setKeepScreenOn to prevent screen timeouts --- .../com/brentvatne/react/ReactVideoView.java | 43 ++----------------- 1 file changed, 3 insertions(+), 40 deletions(-) diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoView.java b/android/src/main/java/com/brentvatne/react/ReactVideoView.java index dddd15075f..b4348114f9 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoView.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoView.java @@ -359,7 +359,6 @@ public void setRepeatModifier(final boolean repeat) { } public void setPausedModifier(final boolean paused) { - mPaused = paused; if (!mMediaPlayerValid) { @@ -369,12 +368,10 @@ public void setPausedModifier(final boolean paused) { if (mPaused) { if (mMediaPlayer.isPlaying()) { pause(); - setPreventScreenFromDimmingFlag(false); } } else { if (!mMediaPlayer.isPlaying()) { start(); - setPreventScreenFromDimmingFlag(true); // Setting the rate unpauses, so we have to wait for an unpause if (mRate != mActiveRate) { setRateModifier(mRate); @@ -384,6 +381,7 @@ public void setPausedModifier(final boolean paused) { mProgressUpdateHandler.post(mProgressUpdateRunnable); } } + setKeepScreenOn(!mPaused); } // reduces the volume based on stereoPan @@ -503,36 +501,6 @@ public void setControls(boolean controls) { this.mUseNativeControls = controls; } - public void setPreventScreenFromDimmingFlag(final boolean state) { - if (!mMediaPlayerValid || mThemedReactContext == null) { - return; - } - - final Activity activity = mThemedReactContext.getCurrentActivity(); - if (activity == null) { - return; - } - - if (state) { - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } - }); - } - - if (!state) { - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - activity.getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } - }); - } - } - - @Override public void onPrepared(MediaPlayer mp) { @@ -663,27 +631,22 @@ public void onCompletion(MediaPlayer mp) { @Override protected void onDetachedFromWindow() { - mMediaPlayerValid = false; super.onDetachedFromWindow(); - - setPreventScreenFromDimmingFlag(false); + setKeepScreenOn(false); } @Override protected void onAttachedToWindow() { - super.onAttachedToWindow(); - setPreventScreenFromDimmingFlag(true); - if(mMainVer>0) { setSrc(mSrcUriString, mSrcType, mSrcIsNetwork, mSrcIsAsset, mRequestHeaders, mMainVer, mPatchVer); } else { setSrc(mSrcUriString, mSrcType, mSrcIsNetwork, mSrcIsAsset, mRequestHeaders); } - + setKeepScreenOn(true); } @Override From 3a1d81930e271ffac13ceaba680cb7befc0c7b12 Mon Sep 17 00:00:00 2001 From: Hampton Maxwell Date: Sun, 5 Aug 2018 17:34:16 -0700 Subject: [PATCH 7/7] Allow screen to sleep when video finishes --- .../src/main/java/com/brentvatne/react/ReactVideoView.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/brentvatne/react/ReactVideoView.java b/android/src/main/java/com/brentvatne/react/ReactVideoView.java index b4348114f9..2a699685a8 100644 --- a/android/src/main/java/com/brentvatne/react/ReactVideoView.java +++ b/android/src/main/java/com/brentvatne/react/ReactVideoView.java @@ -624,9 +624,11 @@ public int getAudioSessionId() { @Override public void onCompletion(MediaPlayer mp) { - isCompleted = true; mEventEmitter.receiveEvent(getId(), Events.EVENT_END.toString(), null); + if (!mRepeat) { + setKeepScreenOn(false); + } } @Override