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
c759b5b1
authored
Jun 09, 2020
by
olly
Committed by
Ian Baker
Jun 09, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Add option to hide Prev/Rwnd/Ffwd/Next buttons
Issue: #7410 PiperOrigin-RevId: 315480798
parent
a11f7b8c
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
147 additions
and
18 deletions
RELEASENOTES.md
library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java
library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java
library/ui/src/main/res/values/attrs.xml
RELEASENOTES.md
View file @
c759b5b1
...
...
@@ -184,6 +184,9 @@
*
UI
*
Remove deperecated
`exo_simple_player_view.xml`
and
`exo_playback_control_view.xml`
from resource.
*
Add setter methods to
`PlayerView`
and
`PlayerControlView`
to set
whether the rewind, fast forward, previous and next buttons are shown
(
[
#7410
](
https://github.com/google/ExoPlayer/issues/7410
)
).
*
Move logic of prev, next, fast forward and rewind to ControlDispatcher
(
[
#6926
](
https://github.com/google/ExoPlayer/issues/6926
)
).
*
Update
`TrackSelectionDialogBuilder`
to use AndroidX Compat Dialog
...
...
@@ -211,10 +214,10 @@
(
[
#7306
](
https://github.com/google/ExoPlayer/issues/7306
)
).
*
Fix issue in
`AudioTrackPositionTracker`
that could cause negative positions
to be reported at the start of playback and immediately after seeking
(
[
#7456
](
https://github.com/google/ExoPlayer/issues/7456
)
.
(
[
#7456
](
https://github.com/google/ExoPlayer/issues/7456
)
)
.
*
Fix further cases where downloads would sometimes not resume after their
network requirements are met
(
[
#7453
](
https://github.com/google/ExoPlayer/issues/7453
)
.
(
[
#7453
](
https://github.com/google/ExoPlayer/issues/7453
)
)
.
*
DASH:
*
Merge trick play adaptation sets (i.e., adaptation sets marked with
`http://dashif.org/guidelines/trickmode`
) into the same
`TrackGroup`
as
...
...
@@ -295,11 +298,12 @@
to the
`DefaultAudioSink`
constructor
(
[
#7134
](
https://github.com/google/ExoPlayer/issues/7134
)
).
*
Workaround issue that could cause slower than realtime playback of AAC
on Android 10 (
[
#6671
](
https://github.com/google/ExoPlayer/issues/6671
)
.
on Android 10
(
[
#6671
](
https://github.com/google/ExoPlayer/issues/6671
)
).
*
Fix case where another app spuriously holding transient audio focus
could prevent ExoPlayer from acquiring audio focus for an indefinite
period of time
(
[
#7182
](
https://github.com/google/ExoPlayer/issues/7182
)
.
(
[
#7182
](
https://github.com/google/ExoPlayer/issues/7182
)
)
.
*
Fix case where the player volume could be permanently ducked if audio
focus was released whilst ducking.
*
Fix playback of WAV files with trailing non-media bytes
...
...
@@ -1248,7 +1252,7 @@
(
[
#4492
](
https://github.com/google/ExoPlayer/issues/4492
)
and
[
#4634
](
https://github.com/google/ExoPlayer/issues/4634
)
).
*
Fix issue where removing looping media from a playlist throws an exception
(
[
#4871
](
https://github.com/google/ExoPlayer/issues/4871
)
.
(
[
#4871
](
https://github.com/google/ExoPlayer/issues/4871
)
)
.
*
Fix issue where the preferred audio or text track would not be selected if
mapped onto a secondary renderer of the corresponding type
(
[
#4711
](
http://github.com/google/ExoPlayer/issues/4711
)
).
...
...
@@ -1679,7 +1683,7 @@
resources when the playback thread has quit by the time the loading task has
completed.
*
ID3: Better handle malformed ID3 data
(
[
#3792
](
https://github.com/google/ExoPlayer/issues/3792
)
.
(
[
#3792
](
https://github.com/google/ExoPlayer/issues/3792
)
)
.
*
Support 14-bit mode and little endianness in DTS PES packets
(
[
#3340
](
https://github.com/google/ExoPlayer/issues/3340
)
).
*
Demo app: Add ability to download not DRM protected content.
...
...
library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerControlView.java
View file @
c759b5b1
...
...
@@ -66,6 +66,26 @@ import java.util.concurrent.CopyOnWriteArrayList;
* <li>Corresponding method: {@link #setShowTimeoutMs(int)}
* <li>Default: {@link #DEFAULT_SHOW_TIMEOUT_MS}
* </ul>
* <li><b>{@code show_rewind_button}</b> - Whether the rewind button is shown.
* <ul>
* <li>Corresponding method: {@link #setShowRewindButton(boolean)}
* <li>Default: true
* </ul>
* <li><b>{@code show_fastforward_button}</b> - Whether the fast forward button is shown.
* <ul>
* <li>Corresponding method: {@link #setShowFastForwardButton(boolean)}
* <li>Default: true
* </ul>
* <li><b>{@code show_previous_button}</b> - Whether the previous button is shown.
* <ul>
* <li>Corresponding method: {@link #setShowPreviousButton(boolean)}
* <li>Default: true
* </ul>
* <li><b>{@code show_next_button}</b> - Whether the next button is shown.
* <ul>
* <li>Corresponding method: {@link #setShowNextButton(boolean)}
* <li>Default: true
* </ul>
* <li><b>{@code rewind_increment}</b> - The duration of the rewind applied when the user taps the
* rewind button, in milliseconds. Use zero to disable the rewind button.
* <ul>
...
...
@@ -305,6 +325,10 @@ public class PlayerControlView extends FrameLayout {
private
int
showTimeoutMs
;
private
int
timeBarMinUpdateIntervalMs
;
private
@RepeatModeUtil
.
RepeatToggleModes
int
repeatToggleModes
;
private
boolean
showRewindButton
;
private
boolean
showFastForwardButton
;
private
boolean
showPreviousButton
;
private
boolean
showNextButton
;
private
boolean
showShuffleButton
;
private
long
hideAtMs
;
private
long
[]
adGroupTimesMs
;
...
...
@@ -341,6 +365,10 @@ public class PlayerControlView extends FrameLayout {
repeatToggleModes
=
DEFAULT_REPEAT_TOGGLE_MODES
;
timeBarMinUpdateIntervalMs
=
DEFAULT_TIME_BAR_MIN_UPDATE_INTERVAL_MS
;
hideAtMs
=
C
.
TIME_UNSET
;
showRewindButton
=
true
;
showFastForwardButton
=
true
;
showPreviousButton
=
true
;
showNextButton
=
true
;
showShuffleButton
=
false
;
int
rewindMs
=
DefaultControlDispatcher
.
DEFAULT_REWIND_MS
;
int
fastForwardMs
=
DefaultControlDispatcher
.
DEFAULT_FAST_FORWARD_MS
;
...
...
@@ -357,6 +385,15 @@ public class PlayerControlView extends FrameLayout {
controllerLayoutId
=
a
.
getResourceId
(
R
.
styleable
.
PlayerControlView_controller_layout_id
,
controllerLayoutId
);
repeatToggleModes
=
getRepeatToggleModes
(
a
,
repeatToggleModes
);
showRewindButton
=
a
.
getBoolean
(
R
.
styleable
.
PlayerControlView_show_rewind_button
,
showRewindButton
);
showFastForwardButton
=
a
.
getBoolean
(
R
.
styleable
.
PlayerControlView_show_fastforward_button
,
showFastForwardButton
);
showPreviousButton
=
a
.
getBoolean
(
R
.
styleable
.
PlayerControlView_show_previous_button
,
showPreviousButton
);
showNextButton
=
a
.
getBoolean
(
R
.
styleable
.
PlayerControlView_show_next_button
,
showNextButton
);
showShuffleButton
=
a
.
getBoolean
(
R
.
styleable
.
PlayerControlView_show_shuffle_button
,
showShuffleButton
);
setTimeBarMinUpdateInterval
(
...
...
@@ -593,6 +630,46 @@ public class PlayerControlView extends FrameLayout {
}
/**
* Sets whether the rewind button is shown.
*
* @param showRewindButton Whether the rewind button is shown.
*/
public
void
setShowRewindButton
(
boolean
showRewindButton
)
{
this
.
showRewindButton
=
showRewindButton
;
updateNavigation
();
}
/**
* Sets whether the fast forward button is shown.
*
* @param showFastForwardButton Whether the fast forward button is shown.
*/
public
void
setShowFastForwardButton
(
boolean
showFastForwardButton
)
{
this
.
showFastForwardButton
=
showFastForwardButton
;
updateNavigation
();
}
/**
* Sets whether the previous button is shown.
*
* @param showPreviousButton Whether the previous button is shown.
*/
public
void
setShowPreviousButton
(
boolean
showPreviousButton
)
{
this
.
showPreviousButton
=
showPreviousButton
;
updateNavigation
();
}
/**
* Sets whether the next button is shown.
*
* @param showNextButton Whether the next button is shown.
*/
public
void
setShowNextButton
(
boolean
showNextButton
)
{
this
.
showNextButton
=
showNextButton
;
updateNavigation
();
}
/**
* @deprecated Use {@link #setControlDispatcher(ControlDispatcher)} with {@link
* DefaultControlDispatcher#DefaultControlDispatcher(long, long)}.
*/
...
...
@@ -832,10 +909,10 @@ public class PlayerControlView extends FrameLayout {
}
}
setButtonEnabled
(
enablePrevious
,
previousButton
);
setButtonEnabled
(
enableRewind
,
rewindButton
);
setButtonEnabled
(
enableFastForward
,
fastForwardButton
);
setButtonEnabled
(
enableNext
,
nextButton
);
updateButton
(
showPreviousButton
,
enablePrevious
,
previousButton
);
updateButton
(
showRewindButton
,
enableRewind
,
rewindButton
);
updateButton
(
showFastForwardButton
,
enableFastForward
,
fastForwardButton
);
updateButton
(
showNextButton
,
enableNext
,
nextButton
);
if
(
timeBar
!=
null
)
{
timeBar
.
setEnabled
(
enableSeeking
);
}
...
...
@@ -847,19 +924,19 @@ public class PlayerControlView extends FrameLayout {
}
if
(
repeatToggleModes
==
RepeatModeUtil
.
REPEAT_TOGGLE_MODE_NONE
)
{
repeatToggleButton
.
setVisibility
(
GONE
);
updateButton
(
/* visible= */
false
,
/* enabled= */
false
,
repeatToggleButton
);
return
;
}
@Nullable
Player
player
=
this
.
player
;
if
(
player
==
null
)
{
setButtonEnabled
(
false
,
repeatToggleButton
);
updateButton
(
/* visible= */
true
,
/* enabled= */
false
,
repeatToggleButton
);
repeatToggleButton
.
setImageDrawable
(
repeatOffButtonDrawable
);
repeatToggleButton
.
setContentDescription
(
repeatOffButtonContentDescription
);
return
;
}
setButtonEnabled
(
true
,
repeatToggleButton
);
updateButton
(
/* visible= */
true
,
/* enabled= */
true
,
repeatToggleButton
);
switch
(
player
.
getRepeatMode
())
{
case
Player
.
REPEAT_MODE_OFF
:
repeatToggleButton
.
setImageDrawable
(
repeatOffButtonDrawable
);
...
...
@@ -886,13 +963,13 @@ public class PlayerControlView extends FrameLayout {
@Nullable
Player
player
=
this
.
player
;
if
(!
showShuffleButton
)
{
shuffleButton
.
setVisibility
(
GONE
);
updateButton
(
/* visible= */
false
,
/* enabled= */
false
,
shuffleButton
);
}
else
if
(
player
==
null
)
{
setButtonEnabled
(
false
,
shuffleButton
);
updateButton
(
/* visible= */
true
,
/* enabled= */
false
,
shuffleButton
);
shuffleButton
.
setImageDrawable
(
shuffleOffButtonDrawable
);
shuffleButton
.
setContentDescription
(
shuffleOffContentDescription
);
}
else
{
setButtonEnabled
(
true
,
shuffleButton
);
updateButton
(
/* visible= */
true
,
/* enabled= */
true
,
shuffleButton
);
shuffleButton
.
setImageDrawable
(
player
.
getShuffleModeEnabled
()
?
shuffleOnButtonDrawable
:
shuffleOffButtonDrawable
);
shuffleButton
.
setContentDescription
(
...
...
@@ -1029,13 +1106,13 @@ public class PlayerControlView extends FrameLayout {
}
}
private
void
setButtonEnabled
(
boolean
enabled
,
@Nullable
View
view
)
{
private
void
updateButton
(
boolean
visible
,
boolean
enabled
,
@Nullable
View
view
)
{
if
(
view
==
null
)
{
return
;
}
view
.
setEnabled
(
enabled
);
view
.
setAlpha
(
enabled
?
buttonAlphaEnabled
:
buttonAlphaDisabled
);
view
.
setVisibility
(
VISIBL
E
);
view
.
setVisibility
(
visible
?
VISIBLE
:
GON
E
);
}
private
void
seekToTimeBarPosition
(
Player
player
,
long
positionMs
)
{
...
...
library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java
View file @
c759b5b1
...
...
@@ -1001,6 +1001,46 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider
}
/**
* Sets whether the rewind button is shown.
*
* @param showRewindButton Whether the rewind button is shown.
*/
public
void
setShowRewindButton
(
boolean
showRewindButton
)
{
Assertions
.
checkStateNotNull
(
controller
);
controller
.
setShowRewindButton
(
showRewindButton
);
}
/**
* Sets whether the fast forward button is shown.
*
* @param showFastForwardButton Whether the fast forward button is shown.
*/
public
void
setShowFastForwardButton
(
boolean
showFastForwardButton
)
{
Assertions
.
checkStateNotNull
(
controller
);
controller
.
setShowFastForwardButton
(
showFastForwardButton
);
}
/**
* Sets whether the previous button is shown.
*
* @param showPreviousButton Whether the previous button is shown.
*/
public
void
setShowPreviousButton
(
boolean
showPreviousButton
)
{
Assertions
.
checkStateNotNull
(
controller
);
controller
.
setShowPreviousButton
(
showPreviousButton
);
}
/**
* Sets whether the next button is shown.
*
* @param showNextButton Whether the next button is shown.
*/
public
void
setShowNextButton
(
boolean
showNextButton
)
{
Assertions
.
checkStateNotNull
(
controller
);
controller
.
setShowNextButton
(
showNextButton
);
}
/**
* @deprecated Use {@link #setControlDispatcher(ControlDispatcher)} with {@link
* DefaultControlDispatcher#DefaultControlDispatcher(long, long)}.
*/
...
...
library/ui/src/main/res/values/attrs.xml
View file @
c759b5b1
...
...
@@ -44,6 +44,10 @@
<attr
name=
"show_timeout"
format=
"integer"
/>
<attr
name=
"rewind_increment"
format=
"integer"
/>
<attr
name=
"fastforward_increment"
format=
"integer"
/>
<attr
name=
"show_rewind_button"
format=
"boolean"
/>
<attr
name=
"show_fastforward_button"
format=
"boolean"
/>
<attr
name=
"show_previous_button"
format=
"boolean"
/>
<attr
name=
"show_next_button"
format=
"boolean"
/>
<attr
name=
"show_shuffle_button"
format=
"boolean"
/>
<attr
name=
"time_bar_min_update_interval"
format=
"integer"
/>
<attr
name=
"controller_layout_id"
format=
"reference"
/>
...
...
@@ -115,6 +119,10 @@
<attr
name=
"rewind_increment"
/>
<attr
name=
"fastforward_increment"
/>
<attr
name=
"repeat_toggle_modes"
/>
<attr
name=
"show_rewind_button"
/>
<attr
name=
"show_fastforward_button"
/>
<attr
name=
"show_previous_button"
/>
<attr
name=
"show_next_button"
/>
<attr
name=
"show_shuffle_button"
/>
<attr
name=
"time_bar_min_update_interval"
/>
<attr
name=
"controller_layout_id"
/>
...
...
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