Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
b5a4dc8f
authored
Sep 02, 2020
by
olly
Committed by
Oliver Woodman
Sep 07, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Fix dispatch of play when in IDLE or ENDED
PiperOrigin-RevId: 329722282
parent
8e5336c5
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
59 additions
and
28 deletions
library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java
library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java
library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java
View file @
b5a4dc8f
...
@@ -38,6 +38,7 @@ import com.google.android.exoplayer2.DefaultControlDispatcher;
...
@@ -38,6 +38,7 @@ import com.google.android.exoplayer2.DefaultControlDispatcher;
import
com.google.android.exoplayer2.ExoPlayerLibraryInfo
;
import
com.google.android.exoplayer2.ExoPlayerLibraryInfo
;
import
com.google.android.exoplayer2.PlaybackPreparer
;
import
com.google.android.exoplayer2.PlaybackPreparer
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Player.State
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.RepeatModeUtil
;
import
com.google.android.exoplayer2.util.RepeatModeUtil
;
...
@@ -1211,13 +1212,13 @@ public class PlayerControlView extends FrameLayout {
...
@@ -1211,13 +1212,13 @@ public class PlayerControlView extends FrameLayout {
switch
(
keyCode
)
{
switch
(
keyCode
)
{
case
KeyEvent
.
KEYCODE_MEDIA_PLAY_PAUSE
:
case
KeyEvent
.
KEYCODE_MEDIA_PLAY_PAUSE
:
case
KeyEvent
.
KEYCODE_HEADSETHOOK
:
case
KeyEvent
.
KEYCODE_HEADSETHOOK
:
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
!
player
.
getPlayWhenReady
()
);
dispatchPlayPause
(
player
);
break
;
break
;
case
KeyEvent
.
KEYCODE_MEDIA_PLAY
:
case
KeyEvent
.
KEYCODE_MEDIA_PLAY
:
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
true
);
dispatchPlay
(
player
);
break
;
break
;
case
KeyEvent
.
KEYCODE_MEDIA_PAUSE
:
case
KeyEvent
.
KEYCODE_MEDIA_PAUSE
:
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
false
);
dispatchPause
(
player
);
break
;
break
;
case
KeyEvent
.
KEYCODE_MEDIA_NEXT
:
case
KeyEvent
.
KEYCODE_MEDIA_NEXT
:
controlDispatcher
.
dispatchNext
(
player
);
controlDispatcher
.
dispatchNext
(
player
);
...
@@ -1240,6 +1241,31 @@ public class PlayerControlView extends FrameLayout {
...
@@ -1240,6 +1241,31 @@ public class PlayerControlView extends FrameLayout {
&&
player
.
getPlayWhenReady
();
&&
player
.
getPlayWhenReady
();
}
}
private
void
dispatchPlayPause
(
Player
player
)
{
@State
int
state
=
player
.
getPlaybackState
();
if
(
state
==
Player
.
STATE_IDLE
||
state
==
Player
.
STATE_ENDED
||
!
player
.
getPlayWhenReady
())
{
dispatchPlay
(
player
);
}
else
{
dispatchPause
(
player
);
}
}
private
void
dispatchPlay
(
Player
player
)
{
@State
int
state
=
player
.
getPlaybackState
();
if
(
state
==
Player
.
STATE_IDLE
)
{
if
(
playbackPreparer
!=
null
)
{
playbackPreparer
.
preparePlayback
();
}
}
else
if
(
state
==
Player
.
STATE_ENDED
)
{
seekTo
(
player
,
player
.
getCurrentWindowIndex
(),
C
.
TIME_UNSET
);
}
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
/* playWhenReady= */
true
);
}
private
void
dispatchPause
(
Player
player
)
{
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
/* playWhenReady= */
false
);
}
@SuppressLint
(
"InlinedApi"
)
@SuppressLint
(
"InlinedApi"
)
private
static
boolean
isHandledMediaKey
(
int
keyCode
)
{
private
static
boolean
isHandledMediaKey
(
int
keyCode
)
{
return
keyCode
==
KeyEvent
.
KEYCODE_MEDIA_FAST_FORWARD
return
keyCode
==
KeyEvent
.
KEYCODE_MEDIA_FAST_FORWARD
...
@@ -1355,16 +1381,9 @@ public class PlayerControlView extends FrameLayout {
...
@@ -1355,16 +1381,9 @@ public class PlayerControlView extends FrameLayout {
}
else
if
(
rewindButton
==
view
)
{
}
else
if
(
rewindButton
==
view
)
{
controlDispatcher
.
dispatchRewind
(
player
);
controlDispatcher
.
dispatchRewind
(
player
);
}
else
if
(
playButton
==
view
)
{
}
else
if
(
playButton
==
view
)
{
if
(
player
.
getPlaybackState
()
==
Player
.
STATE_IDLE
)
{
dispatchPlay
(
player
);
if
(
playbackPreparer
!=
null
)
{
playbackPreparer
.
preparePlayback
();
}
}
else
if
(
player
.
getPlaybackState
()
==
Player
.
STATE_ENDED
)
{
seekTo
(
player
,
player
.
getCurrentWindowIndex
(),
C
.
TIME_UNSET
);
}
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
true
);
}
else
if
(
pauseButton
==
view
)
{
}
else
if
(
pauseButton
==
view
)
{
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
false
);
dispatchPause
(
player
);
}
else
if
(
repeatToggleButton
==
view
)
{
}
else
if
(
repeatToggleButton
==
view
)
{
controlDispatcher
.
dispatchSetRepeatMode
(
controlDispatcher
.
dispatchSetRepeatMode
(
player
,
RepeatModeUtil
.
getNextRepeatMode
(
player
.
getRepeatMode
(),
repeatToggleModes
));
player
,
RepeatModeUtil
.
getNextRepeatMode
(
player
.
getRepeatMode
(),
repeatToggleModes
));
...
...
library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java
View file @
b5a4dc8f
...
@@ -45,6 +45,7 @@ import com.google.android.exoplayer2.Format;
...
@@ -45,6 +45,7 @@ import com.google.android.exoplayer2.Format;
import
com.google.android.exoplayer2.PlaybackParameters
;
import
com.google.android.exoplayer2.PlaybackParameters
;
import
com.google.android.exoplayer2.PlaybackPreparer
;
import
com.google.android.exoplayer2.PlaybackPreparer
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Player.State
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroup
;
...
@@ -1649,10 +1650,10 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -1649,10 +1650,10 @@ public class StyledPlayerControlView extends FrameLayout {
dispatchPlayPause
(
player
);
dispatchPlayPause
(
player
);
break
;
break
;
case
KeyEvent
.
KEYCODE_MEDIA_PLAY
:
case
KeyEvent
.
KEYCODE_MEDIA_PLAY
:
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
true
);
dispatchPlay
(
player
);
break
;
break
;
case
KeyEvent
.
KEYCODE_MEDIA_PAUSE
:
case
KeyEvent
.
KEYCODE_MEDIA_PAUSE
:
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
false
);
dispatchPause
(
player
);
break
;
break
;
case
KeyEvent
.
KEYCODE_MEDIA_NEXT
:
case
KeyEvent
.
KEYCODE_MEDIA_NEXT
:
controlDispatcher
.
dispatchNext
(
player
);
controlDispatcher
.
dispatchNext
(
player
);
...
@@ -1675,6 +1676,31 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -1675,6 +1676,31 @@ public class StyledPlayerControlView extends FrameLayout {
&&
player
.
getPlayWhenReady
();
&&
player
.
getPlayWhenReady
();
}
}
private
void
dispatchPlayPause
(
Player
player
)
{
@State
int
state
=
player
.
getPlaybackState
();
if
(
state
==
Player
.
STATE_IDLE
||
state
==
Player
.
STATE_ENDED
||
!
player
.
getPlayWhenReady
())
{
dispatchPlay
(
player
);
}
else
{
dispatchPause
(
player
);
}
}
private
void
dispatchPlay
(
Player
player
)
{
@State
int
state
=
player
.
getPlaybackState
();
if
(
state
==
Player
.
STATE_IDLE
)
{
if
(
playbackPreparer
!=
null
)
{
playbackPreparer
.
preparePlayback
();
}
}
else
if
(
state
==
Player
.
STATE_ENDED
)
{
seekTo
(
player
,
player
.
getCurrentWindowIndex
(),
C
.
TIME_UNSET
);
}
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
/* playWhenReady= */
true
);
}
private
void
dispatchPause
(
Player
player
)
{
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
/* playWhenReady= */
false
);
}
@SuppressLint
(
"InlinedApi"
)
@SuppressLint
(
"InlinedApi"
)
private
static
boolean
isHandledMediaKey
(
int
keyCode
)
{
private
static
boolean
isHandledMediaKey
(
int
keyCode
)
{
return
keyCode
==
KeyEvent
.
KEYCODE_MEDIA_FAST_FORWARD
return
keyCode
==
KeyEvent
.
KEYCODE_MEDIA_FAST_FORWARD
...
@@ -1831,20 +1857,6 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -1831,20 +1857,6 @@ public class StyledPlayerControlView extends FrameLayout {
}
}
}
}
private
void
dispatchPlayPause
(
Player
player
)
{
if
(
player
.
getPlaybackState
()
==
Player
.
STATE_IDLE
)
{
if
(
playbackPreparer
!=
null
)
{
playbackPreparer
.
preparePlayback
();
}
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
true
);
}
else
if
(
player
.
getPlaybackState
()
==
Player
.
STATE_ENDED
)
{
seekTo
(
player
,
player
.
getCurrentWindowIndex
(),
C
.
TIME_UNSET
);
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
true
);
}
else
{
controlDispatcher
.
dispatchSetPlayWhenReady
(
player
,
!
player
.
getPlayWhenReady
());
}
}
private
class
SettingsAdapter
extends
RecyclerView
.
Adapter
<
SettingViewHolder
>
{
private
class
SettingsAdapter
extends
RecyclerView
.
Adapter
<
SettingViewHolder
>
{
private
final
String
[]
mainTexts
;
private
final
String
[]
mainTexts
;
private
final
String
[]
subTexts
;
private
final
String
[]
subTexts
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment