March 31, 20244 minutes
Build platform deployment, TVOS launch, stabilization of native input, introduction of VAST... Everything you need to know about 7.241 version
We are thrilled to announce the first 2024 major release of Dana. This release brings major stabilization on existing components like EPG and NativeInput and introduce some new features in Beta like VAST or Tracking privacy. But the most important news for this first quarter is the launch of Dana build platform and official support of TVOS devices.
Major objective of this release was to be apple to develop and produce application for TVOS. Stabilization has been done on Dana to offer you the best development experience for TVOS and Dana build platform now integrate support of TVOS too. You can now configure your CI / CD to create application for Apple TVs with signature for release. Deployment to test flight should be done manually for the moment.
To be able to build official release of different engines, you need to use the new Dana build platform. For now, prefer using workflows.
Version of Shaka player has been upgraded from 3.3.18 to 4.6.15 to include latest fixes.
Vendor for Hisense TV vendor-hisense
has been renamed to vendor-vidaa
. Even if Hisense is creator of Vidaa operating system, it is used by multiple manufacturer, so it makes sense to use this name.
NativeInputTextElement
has been stabilized around every device.
In particular:
Android and TVOS now have implementation of getSeekableTimeRange
method of PlayerService
.
Returned value for live or not loaded media wasn’t consistent between engines. Rule for the returned value of getDuration
is now the following :
Infinity
for live and NaN
if no media is loadedNavigation type used by RecyclingList and other components are no longer a Trait. Files have been renamed to reflect that.
The RecyclingList views using the LRNavigation
will need less item views to be configured in nbViewsBefore
and nbViewsAfter
.
The start and end time configured in the EPG component can now be modified anytime when needed. Also the start and end time of each time frame of the EPG can now be configured more precisely.
Support of client-side VAST specification is on going in Dana. You can start testing by using vendor-shaka
and read Ad insertion article.
Limitations
Implementation of VAST will be based on capability of Player. There is no JavaScript code to support VAST, we rely on player. So limitations on devices will depend on player limitations and not of Dana.
On TVOS, you could need to ask users for their permission to track them. An abstraction as been created to allow to use it across multiple platform. You can read more about it here.
Android now supports multiple player sessions.
In app_android/app/src/main/res/layout/main_activity.xml
, remove the <include...>
tag with id `@+id/player.
In app_android/app/src/main/java/app_id/MainActivity.java
:
playerAdapter.addPlayerView(findViewById(R.id.playerView));
becomes playerAdapter.setRootView((WTV8RelativeLayout)findViewById(R.id.rendererView));
playerAdapter.playerSessionSetActive(false);
becomes playerAdapter.setSessionsActive(false);
playerAdapter.stop();
becomes playerAdapter.stopSessions();
playerAdapter.playerSessionSetActive(true);
becomes playerAdapter.setSessionsActive(true);
import com.dana.androidtv.v8_runtime.WTV8RelativeLayout;
with other importAn internal note will be shared for migration.
You will need to rename import and declaration of the navigation type references :
MFixedNavigation type
becomes FixedNavigationType
MFixedRightNavigation type
becomes FixedRightNavigationType
MLMRNavigation type
becomes LMRNavigationType
MLRNavigation type
becomes LRNavigationType
MPaginateNavigation type
becomes PaginateNavigationType
Adapt nbViewsBefore
and nbViewsAfter
of the RecyclingListView
that are using LRNavigation
. See number of item views configuration in RecyclingListView documentation.
Danger
The perimeter of the following internal methods have been updated : _setDataInRecycleMode
, _recycleFirstItem
, _recycleLastItem
. In case you override one of these, please
check your code.
The internal method _getPosition
have been removed. Overrides of this method must be replaced by giving a specific navigationType
instance in your list. Navigation types are
simple class and can be inherited.
_getPosition
Some internal methods have changed, if you had overriden one of these method, you should check consequences : _setDataInRecycleMode
, _getPosition
, _recycleFirstItem
, _recycleLastItem
Configuration of the EPG has changed, and it now needs the channel and the time to show parameters.
Before you should have :
// Done only once during the first screen opening ...
this.epgView.configure(channels, startTime, endTime);
// ... then
this.epgView.select(channelId, timeToSelect);
Now you should use :
this.epgView.configure(channels, {startTime: startTime, endTime: endTime}, channelId, timeToSelect)
Note
select
is still the right method to call when EPG has been configured once.
Also note that configure
method can now be called as many times it needs, and that if offers new time options for a more precise configuration.
updateChannels
method no longer exist, but configure
can now be called more than once. Replace :
this.epgView.updateChannels(newChannelList, channelId, timeToSelect);
with :
this.epgView.configure(newChannelList, null /* null value indicates no change in time configuration */ , channelId, timeToSelect);