Releases: eneim/toro
Release 3.7.0.2010003 (2020/02/15)
This release is to support ExoPlayer 2.10.3. This will be the last version of ExoPlayer 2.10.x to be supported. From next release, Toro will support ExoPlayer 2.11.2 and newer.
- [Update]: ExoPlayer to 2.10.3. Related classes are updated with backward compatibility and some deprecation to Toro implementations.
- [Update]: AndroidX 1.1.0 package is used where possible.
- [Update]: Demo for mopub now uses mopub 5.10.0 for Android.
- [Update]: AdsExoPlayerViewHelper now requires AdsLoader.AdViewProvider instead of ViewGroup as
adsContainer
. This is to update with ExoPlayer 2.10.3. - [Update]:
Config
construction now allow to passContext
, and creating newConfig
withContext
is recommended way.
Some other changes may require migration effort, please feel free to create Github Issues.
Release 3.7.0.2905-A1 (2019/10/18)
This release is a middle-stage release to insist the full release of 3.7.0-2010005.
This alpha release contains the following significant changes:
- Migrate to AndroidX. Toro will now depends on AndroidX and other latest Jetpack libraries.
- Update ExoPlayer to 2.9.5. As said, the target will be ExoPlayer 2.10.5. Since ExoPlayer 2.10.x is update with many things may not work well with 2.9.x, this release can also be helpful for those who depends on 2.9.5 for long term.
ToroPlayerHelper
andPlayable
interface now havesetPlaybackInfo
method to support manualPlaybackInfo
setup. Default implementation classes are updated with this change.
Release 3.6.2.2903 (2019/01/18)
- [Update] Update to ExoPlayer 2.9.3, Android Studio 3.3 final.
Release 3.6.2.2804 (2018/12/16)
-
[Update] Update to ExoPlayer 2.8.4, Android 28 and Support Libraries 28, Android Studio 3.3 RC2.
-
[Update] Add
onFirstFrameRendered()
to ToroPlayer.EventListener. The method is called when the video is first rendered to the View. This is a signal to the client to hide the thumbnail view for example. Implementation of Helper class is responsible for calling this callback. When used withMediaPlayer
this will only called on Android 17 and above. -
[Update] Add CopyOnWriteArraySet implementation for listeners of ToroPlayer.
-
[Update]
toro_exo_player_view
has a change in layout structure: theProgressBar
is brought to the front, in front ofexo_overlay
FrameLayout. -
[Change/Breaking]
ToroPlayerHelper#initialize(Container, PlaybackInfo)
is now final. Any implementation that override this method should be updated. The recommended way is to override theToroPlayerHelper#initialize(PlaybackInfo)
only. -
[Demo App] Better build config for app module. Proguard is included to demonstrate real life scenario. APK of this demo is included in the release tag.
Release 3.6.1.2802 (2018/09/11)
Fix a bug that allow ExoPlayer instance to reuse VolumeInfo of a Player for other Player.
Release 3.6.0.2802 (2018/08/27)
Detailed release note can be found in CHANGELOG.md
Article about this can be found here: introduce to Toro 3.6.0.2802
Release 3.5.2 (2018/05/21)
3.5.2 (2018/05/21)
README: 3.5.2 is identical to 3.5.0, but to fix the bad artifact caused by gradle-maven issue (though there is a work around and I applied that to fix it in 3.5.2). Sorry for the inconvenience.
TL,DR: From Toro 3.5.0, client can actively prepare a PlaybackInfo
for ToroPlayer
by its order, using the newly added Container$Initializer
interface.
Custom initial PlaybackInfo sample:
container.setPlayerInitializer(order -> {
VolumeInfo volumeInfo = new VolumeInfo(true, 0.75f); // mute by default, but will be 0.75 when un-mute
return new PlaybackInfo(INDEX_UNSET, TIME_UNSET, volumeInfo);
});
Toro is also updated with improved PlaybackInfo in-memory caching mechanism, giving client better performance and correctness.
DETAILS
-
Toro is now developed using Android Studio 3.2
-
ExoPlayer extension now depends on ExoPlayer 2.7.3. (2.8.0 is a breaking change and will be support in next major release).
-
ToroPlayer:
ToroPlayer#initialize(Container, PlaybackInfo)
now has non-null PlaybackInfo (was null-able).ToroPlayerHelper#initialize(Container, PlaybackInfo)
now has non-null PlaybackInfo (was null-able).ToroPlayerHelper#initialize(PlaybackInfo)
now has non-null PlaybackInfo (was null-able).
-
PlaybackInfo:
- NEW:
PlaybackInfo
has been updated withVolumeInfo
as a field. - NEW: Add
PlaybackInfo#SCRAP
object, which is a default, trivial static instance of PlaybackInfo. This instance should be used only to mark a player as un-initialized.
- NEW:
-
Container:
- NEW: Add
Container#getLatestPlaybackInfos()
as a utility method so that client can get current playback info of all possible players at any time. - NEW: Add
Container$Initializer
interface. This interface, when set, will request client to initialize thePlaybackInfo
for aToroPlayer
by its order, viaInitializer#initPlaybackInfo(int)
. Default implementation return a trivialPlaybackInfo
.
- NEW: Add
-
ExoPlayer extension:
Playable$EventListeners
now extends aHashSet
instead ofArrayList
, to guarantee the uniqueness of listener to be added by its hash value.
-
Add
RemoveIn
annotation so that user of Toro would know when a deprecated item will be removed. -
Some internal methods are changed to final, other improvements and also deprecated class(es) are removed.
Release 3.5.0 (2018/05/18)
3.5.0 (2018/05/18)
TL,DR: From Toro 3.5.0, client can actively prepare a PlaybackInfo
for ToroPlayer
by its order, using the newly added Container$Initializer
interface.
Custom initial PlaybackInfo sample:
container.setPlayerInitializer(order -> {
VolumeInfo volumeInfo = new VolumeInfo(true, 0.75f); // mute by default, but will be 0.75 when un-mute
return new PlaybackInfo(INDEX_UNSET, TIME_UNSET, volumeInfo);
});
Toro is also updated with improved PlaybackInfo in-memory caching mechanism, giving client better performance and correctness.
DETAILS
-
Toro is now developed using Android Studio 3.2
-
ExoPlayer extension now depends on ExoPlayer 2.7.3. (2.8.0 is a breaking change and will be support in next major release).
-
ToroPlayer:
ToroPlayer#initialize(Container, PlaybackInfo)
now has non-null PlaybackInfo (was null-able).ToroPlayerHelper#initialize(Container, PlaybackInfo)
now has non-null PlaybackInfo (was null-able).ToroPlayerHelper#initialize(PlaybackInfo)
now has non-null PlaybackInfo (was null-able).
-
PlaybackInfo:
- NEW:
PlaybackInfo
has been updated withVolumeInfo
as a field. - NEW: Add
PlaybackInfo#SCRAP
object, which is a default, trivial static instance of PlaybackInfo. This instance should be used only to mark a player as un-initialized.
- NEW:
-
Container:
- NEW: Add
Container#getLatestPlaybackInfos()
as a utility method so that client can get current playback info of all possible players at any time. - NEW: Add
Container$Initializer
interface. This interface, when set, will request client to initialize thePlaybackInfo
for aToroPlayer
by its order, viaInitializer#initPlaybackInfo(int)
. Default implementation return a trivialPlaybackInfo
.
- NEW: Add
-
ExoPlayer extension:
Playable$EventListeners
now extends aHashSet
instead ofArrayList
, to guarantee the uniqueness of listener to be added by its hash value.
-
Add
RemoveIn
annotation so that user of Toro would know when a deprecated item will be removed. -
Some internal methods are changed to final, other improvements and also deprecated class(es) are removed.
Release 3.4.2 (2018/04/11)
Toro 3.4.2 and above will be developed by Android Studio 3.1.0+, and maybe kotlin as well.
-
Development
- Migrate the repo to Android Studio 3.1.1.
- Remove
gradle.properties-sample
and some internal change so contributor can start forking and contributing more easily. - Toro is now distributed to SNAPSHOT channel as well for early builds. This enables user to try latest updates with ease. Detail can be found on README.
-
toro-core
- Add a mechanism to support the case
Container
is used inCoordinatorLayout
with other Views, usingBehavior
. Detail can be found on README. - Add
ToroUtil#wrapParamBehavior()
to help shorten the setup of newBehavior
above. - Add
VolumeInfo
for a tailored volume setup. It holds the 'mute' status as well as the actual volume value when the playback is unmuted. - Add
ToroPlayer$OnVolumeChangeListener
that listens to the change of internalVolumeInfo
. Instance of this interface is setup byToroPlayerHelper
and its variants. Container
will no longer start a delayed playback if the scroll is not idled.
- Add a mechanism to support the case
-
toro-exoplayer
Config
now accepts an array ofDrmSessionManager
s instead of a singleDrmSessionManager
. This is an experiment.- Add
Playable#setParameters()
andPlayable#getParameters
to match ExoPlayer behaviour. - Add
ToroExoPlayer
which extendsSimpleExoPlayer
and provides the ability to work withVolumeInfo
. Playable
and default implementations are updated to work withVolumeInfo
.
-
toro-mopub
- Add custom UI components:
PlayerView
andToroControlView
that combines ExoPlayer r2.4.4 implementation with some fixes from ExoPlayer 2.7.0. - Add
Playable#setParameters()
andPlayable#getParameters
to match ExoPlayer behaviour. - Add
ToroExoPlayer
which extendsSimpleExoPlayer
and provides the ability to work withVolumeInfo
. Playable
and default implementations are updated to work withVolumeInfo
.- Demo app is updated using new UI components as well as
VolumeInfo
.
- Add custom UI components:
-
Others: minor performance improvement update.
-
Detail implementation and suggested usage can be found on demo applications.
Release 3.4.1 (2018/03/06)
- Fix a critical bug in 3.4.0, which cause the NPE when initializing the playables.
- toro-exoplayer: Some methods of
ExoCreator
andMediaSourceBuilder
now requires the Uri extension as option, to deal with the case that actual Url doesn't end with file extension. Client should pass expected media type so that ExoPlayer can build suitable MediaSource instances. As a result,ExoPlayerViewHelper
adds addition constructor to support optional media type extension.