Toro Versions Save

Video list auto playback made simple, specially built for RecyclerView

3.7.0.2010003

4 years ago

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 pass Context, and creating new Config with Context is recommended way.

Some other changes may require migration effort, please feel free to create Github Issues.

3.7.0.2905-A1

4 years ago

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 and Playable interface now have setPlaybackInfo method to support manual PlaybackInfo setup. Default implementation classes are updated with this change.

3.6.2.2903

5 years ago
  • [Update] Update to ExoPlayer 2.9.3, Android Studio 3.3 final.

3.6.2.2804

5 years ago
  • [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 with MediaPlayer 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: the ProgressBar is brought to the front, in front of exo_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 the ToroPlayerHelper#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.

3.6.1.2802

5 years ago

Fix a bug that allow ExoPlayer instance to reuse VolumeInfo of a Player for other Player.

3.6.0.2802

5 years ago

Detailed release note can be found in CHANGELOG.md

Article about this can be found here: introduce to Toro 3.6.0.2802

3.5.2

5 years ago

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 with VolumeInfo 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.
  • 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 the PlaybackInfo for a ToroPlayer by its order, via Initializer#initPlaybackInfo(int). Default implementation return a trivial PlaybackInfo.
  • ExoPlayer extension:

    • Playable$EventListeners now extends a HashSet instead of ArrayList, 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.

3.5.0

5 years ago

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 with VolumeInfo 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.
  • 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 the PlaybackInfo for a ToroPlayer by its order, via Initializer#initPlaybackInfo(int). Default implementation return a trivial PlaybackInfo.
  • ExoPlayer extension:

    • Playable$EventListeners now extends a HashSet instead of ArrayList, 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.

3.4.2

6 years ago

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 in CoordinatorLayout with other Views, using Behavior. Detail can be found on README.
    • Add ToroUtil#wrapParamBehavior() to help shorten the setup of new Behavior 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 internal VolumeInfo. Instance of this interface is setup by ToroPlayerHelper and its variants.
    • Container will no longer start a delayed playback if the scroll is not idled.
  • toro-exoplayer

    • Config now accepts an array of DrmSessionManagers instead of a single DrmSessionManager. This is an experiment.
    • Add Playable#setParameters() and Playable#getParameters to match ExoPlayer behaviour.
    • Add ToroExoPlayer which extends SimpleExoPlayer and provides the ability to work with VolumeInfo.
    • Playable and default implementations are updated to work with VolumeInfo.
  • toro-mopub

    • Add custom UI components: PlayerView and ToroControlView that combines ExoPlayer r2.4.4 implementation with some fixes from ExoPlayer 2.7.0.
    • Add Playable#setParameters() and Playable#getParameters to match ExoPlayer behaviour.
    • Add ToroExoPlayer which extends SimpleExoPlayer and provides the ability to work with VolumeInfo.
    • Playable and default implementations are updated to work with VolumeInfo.
    • Demo app is updated using new UI components as well as VolumeInfo.
  • Others: minor performance improvement update.

  • Detail implementation and suggested usage can be found on demo applications.

3.4.1

6 years ago
  • Fix a critical bug in 3.4.0, which cause the NPE when initializing the playables.
  • toro-exoplayer: Some methods of ExoCreator and MediaSourceBuilder 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.

[Important notice, 2018/03/05] Due to some internal bugs, 3.4.0 has been pulled down from Jcenter. Please wait for 3.4.1 with the bug fixes. At the mean time, please stay at 3.3.0 or 3.4.0-A4. Sorry for the inconvenience.