2.70.80 (05/11/2022) - GeckoView: You no longer need to restart the software completely (nuke or reboot) if you change the .INI cookie parameters. - Scripts: - TVTools.setObjectBackgroundColor now also accepts the "Vosgian" format. - TVTools.getVar is now also able to return widget variables. - New function "TVTools.delay()" so the script can pause for a short time. - The "Vosgian" color format now also accepts floats. - Full screen overlay messages now also respect the duration parameter. - Support for MasterDB inside of a MasterDB. Not compatible with synchro ! - WebSocket: Completely removed the Neovisionaries client which wasn't maintained for over two years. Now both client and server are using the Java-WebSocket library. Also tweaked the websocket client's SSL connexion host verification code so that secure connexions (wss) also work with Android versions prior to 7 (API level 24). - The actual device time is now saved in a file before a reboot, and every 15 minutes during normal function. It is restored when the software starts with a one minute increase. - Support for FTP printing: New command FTP Printing.xml to setup host, directory, login and password of a FTP printer. New script command "TVTools.printScreen(mode)" to print the actual screen. Mode 0 prints to the configured ftp. New android command "printscreenftp", also prints the actual screen to the configured ftp. - Enhanced the "RotateScreen" .INI parameter so that it works on most devices. "ScreenOrientation" must be set to 1 too. It will require "VideoRenderMode=1" on most devices too. 2.70.79 (23/11/2022) - MastertDB: Support for full screen overlay message widgets in playlists. - Designs: text boxes with only a Color [] statement will now be considered empty, and the statement will define their background color. - New .INI entry for GeckoView, UserAgent, which permits to define a built in or custom user agent. No value or chrome: chrome desktop user agent. This is the default. firefox: firefox desktop user agent. edge: edge desktop user agent. desktop: built in desktop user agent. mobile: built in mobile user agent. vr: built in virtual reality user agent. 2.70.78 (16/11/2022) - Hotfix for actual playlist detection. 2.70.77 (15/11/2022) - Images in designs should no longer be able to be too big to be displayed. - Changed the flag.txt change checks so that it also downloads the new flag if the date hasn't changed, as for instance for the global extinction command. - Events in the planning can now have several participants in the same event. - The topmost modal playlist now reports it's playback to the monitoring. - Multizones now report precise info about their playback to the monitoring. - Removing quotes from font names when the WebAccess sends badly formatted strings. - Increased maximum amount of records in a data source from 1000 to 2500. 2.70.76 (10/11/2022) - Scripts: "makeFileAccessible" fixed so that it recognises the TVTools server even when the URL starts with "TVTCloud". - Fixed the case when the indians don't sent a rtfData for an edited text field. - Fixed the case when font names have quotes around them. 2.70.75 (08/11/2022) - Support of global screen off/on command and flag parameter for devices in the same schedule level. - Support for updates to the intern's version of the software via Android command. That version is experimental and will receive no support from the main developer. - Restored old text scaling numbers, which are closer to what is used in the WebAccess. 2.70.74 (03/11/2022) - New Command "LoadMasterDB", which loads a single MDB into a named Playlist. The link to the MDB can have script tags and user variables. - First step of the screen on/off system. Android command "screen on/off" will turn the device's screen on or off (when supported). - Designs: GeckoView will now also apply it's animation in order to be placed properly on the screen. - KeepFiles will now also affect cache completely. No file at all will be deleted. To be used with care, as customers could easily fill the storage with that. - New Android commands: getstorageinfo returns a numbered list of the application's available storages spaces. changelocalroot changes the local media file storage for the application using a number from the list given by getstorage info. The command will copy all files to the new storage and delete old files. - Various fixes and improvements. 2.70.73 (24/10/2022) - New global cache system for design containers and databases. Can be enabled with the .INI option System/UnifiedCache. - MasterDB added boxes: The "paramsupp" parameter is once again used. - Fixed the cut animation so that it also takes the start and end times of the object into account. - Fixed a crash when requesting infos about the new PDF visualizer. - The inactivity status is now dispatched to all visible designs. - New command "LoadMasterDB", which permits to load a MDB using a direct path on the server. The command accepts user variables. Parameters can be "onClick=main" or "onClick=back" to be able to go back to the main or previous playlist when you touch the screen. 2.70.72 (28/09/2022) - Fixed a problem with URL permissions in GeckoView. 2.70.71 (26/09/2022) - New PDF interactive viewer supporting zoom, scrolling and more. 2.70.70 (21/09/2022) - Some enhancements to the "SyncCommand" WebSocket system so that there are no blacks at all between the different playlists. The STOP function should work with any playlist too now. - Fixes to booking so that it works from anywhere in the world depending on the Timezone of the server, the calendar and the player. 2.70.69 (19/09/2022) - Restored old Synchro server code. The one which works from Renaud. - New command "SyncCommand" which allows a WebSocket group to receive commands. - New script function sendCommandToGroup(String groupName, String command) which permits to send a command string to a synchro group. - Tweaked synchro server code so that you can send commands to a group without being in the group. - Secured the display of designs containing playlists so that you can't interact before all playlists are ready and started. 2.70.68 (07/09/2022) - Object scripts are now also passed to parsing for image and animation boxes. - MasterDB are now totally stopped when changing synchronized content to avoid older player from crashing by having to display two videos. 2.70.67 (07/09/2022) - MDB: commands now also use the 4th parameter. - Videos in a TextureView (VideoRenderMode=1) in a design can now be paused and navigated on a touch device. - Many enhancements to synchronization, there's now a message signaling a MDB is ready after the background download, so that the master can wait for all players to be ready before sending a swapPlaylist message. A playlist is now also considered empty if it has no controller element and won't play. - No longer displaying the player number for synchro, only the master will display the total players in the synchro group, since it was confusing for some customers. 2.70.66 (01/09/2022) - Synchro: more enhancements for MasterDB synchro. Dynamic playlists now wait for the synchro delay after stopping the playback during a playlist swap, to avoid congestion server side and confusion about who is the master. - PDF in Designs: PDF_END_PAGE box parameters now accepts the value -1, which means that only the PDF_START_PAGE will be displayed. Can't use 0 since the WebAccess already sends 0 to 0 if it wants to play all pages. The viewer will now properly center the page even if there's more than one page in the document but only one is to be displayed. 2.70.65 (29/08/2022) - Enhancements to GeckoView: better management of white and black lists, now only the domain of the initial website is added to the whitelist. - Synchro: no longer unregistering the socketUser when the connection is lost, all tests are now on the sync group name. This allows very fast recovery after a loss of connection, and also to keep playing while the connection is down. If a message times out, the WebSocket client is disconnected, allowing for a reconnection when the network comes back. 2.70.64 (22/08/2022) - Gecko Web Browser View: New command "Web Browsing Parameters", that allows to set a inactivity timer after which the view goes back to it's home page, and a white and a black list of hosts name and keywords that are accepted or blocked by the browser in links. The lists are special databases. If there is a whitelist, only the host names in that list and the home page host name will be accepted when the user clicks a link. Any link containing a keyword in the blacklist will be blocked. For instance, a whitelist containing "tvtools.eu" and "tecsoft.fr" will only allow navigation on the web sites of those two domains. And a blacklist containing ".doc" and ".exe" will additionally block any link containing those words. - DRMs are reactivated in ExoPlayer. - Upgrade to GeckoView 100.0.20220425210429. - TVGeckoView now supports opening PDF file links in web pages, using a DocViewer playlist. - New script functions: TVTools.setWebPageInactivityDelay(int delay) sets the web page inactivity delay. TVTools.setWebPageAuthorisations(String white, String black) sets web page white and black lists. 2.70.63 (11/08/2022) - Interactive PDF: there's now an inactivity timer of 120s after which the document will automatically go back to the first page. This is only for interactive PDFs with page duration 0. - New .INI entry in the WebEngine section: AuthorizedHosts, which defines which host names are authorized for the web browsers of the player (only works with WebEngine = 1): If it is "*" (default), there's no restrictions. If it is empty, no host is authorized except the initial host. If it is a list of hosts separated by ",", only those hosts will be navigable. Example: "www.tvtools.eu,www.tecsoft.fr". The initial host which opens the page is always authorized. 2.70.62 (10/08/2022) - 2.70.61 (10/08/2022) - New .INI entry in the WebSocket section: WebSocketServerPort defines the port for when the player is used as WebSocket server. - Information now also contain the network mask for the active connection. - New Android command "netinfo" which displays the IP, host name, mask, DNS servers and external IP of the device in the "server information" column. - Implemented interactive PDF with links to other pages or web pages. For web pages, you'll need a playlist named "WEB_BROWSER" containing the design used to display the pages. 2.70.60 (05/08/2022) - YouTube iFrame player now fills the various variables with info about the video that is played. - MDB : Com 0 Var1 0 and 1 are now considered YouTube Videos. - Improved iFrame YouTube player to not show the "play" logo before the video starts. It will display a progress circle during buffering instead. - The iFrame YouTube player is now hosted on https://download.tecsoft.fr, customers willing to use YouTube videos will have to grant access to that site, which is also necessary for updating anyway. - Fixed an issue with the PDF player where the end of the document was never signaled to the playlist. 2.70.59 (04/08/2022) - Still no DRMs in this version, so don't upgrade if you're using DRMs. - New OpenGL video player to use with cropped videos, which will do an effect on the two sides of the video using a fragment shader. Enabled with "VideoRenderMode = 2" in the video section. - New INI parameter in the Media section: ResumeDynamicPlaylists, to decide if a MasterDB starts at the first element or at the last previously played element when it's called again during the same diffusion cycle. Set it to "previous" in order for MDB to resume at the previously played element, otherwise, the default is the first element. 2.70.58 (01/08/2022) - New YouTube player based on IFrames (web). - Web pages in designs now clear cookies after each session. - Web Pages in designs now accept geolocation. - New script function "clearCookies", which clears web cookies for the application. - Secured some dialog dismissing which could crash when the application ended. - Improved cache management when several recordsets in a same design use the same data source. - Upgraded to ExoPlayer 2.18.1 (from 2.16.1). - DRM WILL NO LONGER WORK IN THIS VERSION - They will be restored in the next version. So don't use this version if you are using videos with DRMs. 2.70.57 (13/07/2022) - PDF documents: implemented page turn animation and touch controls. - Fixed an issue for overlays in Playlists when even smaller designs were stretched to the full page. 2.70.56 (11/07/2022) - Simple implementation of container filters for mode 2. - Design updates from a WebSocket command will now also apply if the design is in a multizone. - New Android command "ConfigCheckout " to configure the WebSocket/WebAccess checkout system. - WebSocket: connections to the default TVTools server will now always be "wss://" instead of "ws://". - New Android command: setbluetooth : Turns bluetooth on or off on the device. - Displaying bluetooth status in the information demand and in the debug window. 2.70.55 (17/06/2022) - MasterDB: weather widgets now support alternate pictogram sets. - Fixed image replacement in MasterDB widgets. transformFileName should no longer abnormally transform dynamic file names. - Fixed issue where the system would randomly reset the Locale to the default one for no reason. clockFunction will now also watch this and correct it if needed. - SCRIPTS: Variables changes are now also propagated to designs which have been changed in a zone with the "playPlayList" function. 2.70.54 (03/06/2022) - Designs: Implemented the "always reload http files" checkbox for images. - Fixed transparency for text boxes coming from the WebAccess, which work reverse from the image boxes... 2.70.53 (01/06/2022) - MasterDB: The mediaUrl of object parameters will now also apply to modified existing objects, unlike before where it only applied to added objects. - Optimized normal media download in playlists with multiple days. - Fixed a possible freeze in database updates when a user variable was empty (introduced in 20.70.52). 2.70.52 (23/05/2022) - Implementation of .SVG vector format images. - New script functions: - "TVTools.getObjectPages(int objectID)" returns the number of pages of a container or a PDF document. - "TVTools.getObjectActualPage(int objectID)" returns the actually displayed page of a container or PDF document. - ClearVariables now only clears the non-saved user variables. - Some fixes to centered grid containers. - Improved license management. 2.70.51 (09/05/2022) - Synchro: "onConnect" will now also be called when trying to register a WebSocket user again. - Fixed two cases when WebSocket failure would not make the playlist start over like it should. - Devices will no longer try to automatically reload their content after a reboot if they aren't on a daily schedule mode. - Implementation of HiSense API elements: reboot, backlight control (set and get), screen orientation. - Other fixes to the synchronisation mechanics. 2.70.50 (15/03/2022) - Designs: Improved recordset filtering speed when all conditions are "AND" or "OR". If the most important condition is first, data should now be filtered twice as fast as before. - Designs: Also improved the speed of container generation and thumbnail image display when there's no image. - Designs: Image boxes now also support masterdb.xml links coming from databases. - New INI parameter WebEngine/CookieMode, which sets the kind of cookies the GeckoView should accept: 0 = all cookies (default) 1 = only first party cookies 2 = no cookies - use this to avoid some sites to display the "Do you accept cookies ?" requester. - Elements in a MasterDB will now use the MasterDB ID + MasterDB element ID as unique identifier for their cache instead of the MasterDB ID + index of the element. This will avoid an unneeded cache update when the element changes position in the MasterDB. Example of result in log: Playlist ID 52407_203 for https://prod6.tvtools.eu/medias/designs\_default\widgets\meteo\meteo_005.xml => unique cache ID will be "52407_203_X", X being the number of the recordset in the design. - Greatly improved synchronization when mixing different media elements at the same index of synchronized playlists. - Slighly changed how synchronisation behaves on a loss of connexion to the WebSocket server. 2.70.49 (29/03/2022) - Designs: Horizontal scrolling with size adaptation will now resize all their text elements, from left to right. - Designs: Fixed recordset filters. 2.70.48 (24/03/2022) - Designs: Permanent animation are now once again also applied to scrolling containers and other "justCreate" type container pages. - Fixed a crash when a transition command was inherited by a MasterDB. 2.70.47 (23/03/2022) - There's no longer a black screen between two playlists in the same schedule level. - Designs: Integration of formats (Mahmoud). - WebAccess: Integration of price formats (Mahmoud). - Synchro: the default mode for file synchronization is now by index in the playlist, and no longer by filename. If you want the old filename method, add "ind=0" to your parameter list in the command. - Monitoring device information: The number of open files should be more precise and doesn't require root anymore. 2.70.46 (21/03/2022) - New weather TAG "meteoAQ", returning the air quality. - More detailed system temperature information. 2.70.45 (21/03/2022) - Designs/Databases: background color for objets with uniqueID 0, which are the background, will now be properly set since there's no real object in this case. - New Android command "uptime", displays the player uptime, which is the time since the last restart of TVSlide, in the "Info" column. - Synchronized playlists work again even if the WebSocket isn't enabled. 2.70.44 (17/03/2022) - Support for command 10 subcommand 3 for the WebSocket, which makes a design reload. - MasterDB now support "OverlayMedia", but only with a single design as parameter. - Cleaned up the management of overlays in MasterDB (OverlayMedia, Clocks, Messages, RSS, etc...). Each overlay will now have its own sub-playlist. You still can only have ONE overlay at a time, so the next one will still replace the previous one. - Designs: videos put in image boxes now inherit the aspect ratio parameter from the image box. - The WatchDog Log will now report any disconnections from the Internet, the TVTools server or the local network. 2.70.43 (14/03/2022) - PDF view will now center the page horizontally if there's only one in the document. - Implementation of GeckoView version 94.0.20211119140621 as alternate web page display engine. Parameter "WebEngine" in the section "WebEngine" of the .INI defines if the software uses: 0 = original WebView based engine. 1 = GeckoView based engine. - Designs with many containers, some of which may be empty, will now wait appropriately for all to be ready. This will avoid flickering of the first page during initialization. - Some .INI sections where separated in different categories. You now have Video and WebSocket separated categories. - New Android command "updatelauncher", which will update the TVLauncher from download.tecsoft.fr. It ONLY works with Device Owner Launchers. 2.70.41 (08/03/2022) - Changes to the message callback of the WebSocket so that it doesn't lock the user list for too long. - Fixed restricted WebView client in designs so it works on older devices. - Restricted sites in design WebViews now only check the host name, no longer the prefix, to avoid problems with sites mixing http and https. 2.70.40 (03/03/2022) - autowall : numbering now starts at 1 and not 0. - Synchronization : * The system now uses the "Devices number" field of the command. If not 0, it contains the number of expected devices for the synchro group, and the playback will start as soon as that number is reached. If 0, it's the old behavior waiting for the timeout. - Philips LEDs : fixed an issue with the new models where the socket was closed before the whole buffer was written. 2.70.39 (28/02/2022) - A player can now have multiple synchronized playlists in different areas of a multizone. - Web pages in designs can now be restricted to the initial host. Syntax = https://www.tvtools.eu|restricted=1 This will restrict this web view to URLs starting with https://www.tvtools.eu. Any link redirecting to another domain will be ignored. 2.70.38 (21/02/2022) - A MasterDB will no longer stop working and stay black if alone in a playlist and emptied of all its elements. 2.70.37 (15/02/2022) - Filter parameters now also accept "min" instead of "minute", which works like the windows version. - Supporting LEDs on Sony TEOS tablets. - WebSocket can now recover the IP of the player meant to be the server through a WebService call. The syntax for the URL is then "PLAYER:". - Command "websocketconfig": new option "PLAYER:" to configure it to work like described above. 2.70.36 (08/02/2022) - Fixed an issue where some devices would be starting their screen saver when you had a playlist in a modal dialog. 2.70.35 (07/02/2022) - Android command ListViews will now also return bitmap sizes in design image views. - Multizones now accept playlists in sub zones too. Due to the lack of TVTMasterDatabaseEnd tags, the zone change and end tags are also considered as MasterDB end tags. - Logging to a file should now start a bit earlier after the application was restarted. - New Android command "getusbdevices", to list all connected USB devices and eventuel compatible USB to Serial devices. - Now invalidating the PDF viewer view after each update. 2.70.34 (31/01/2022) - New script functions: TVTools.setBDDCustomFiltering(String bddName, String function) Permits to use custom javascript filters for recordsets. The called function must be in the first page of the design, and with the following arguments: function filterList(filter, entry, field, filter) filter is the index of the filter in TVTools. entry is the index of the condition inside of the filter. field is the value of the field. filter is the optional filter value entered in TVTools. The function returns a boolean. TVTools.setBDDCustomSorting(String bddName, String function) Same as above but for recordset sorting. The called function must be in the first page of the design, and with the following arguments: function sortList(filter, val1, val2) filter is the index of the TVTools sorting filter. val1 and val2 are the two values to compare. The function returns a boolean. - Scripts: There are now two looperThreads for the scripting system, one for the function calls, and one for callbacks, since callbacks can be called from within another script function and this would cause the application to freeze. - Enhanced bitmap rendering on high resolution screens. 2.70.33 (25/01/2022) - Simplifications in the software startup code in order to improve stability. - More reduction of the eventLoop in designs to stay within the compiler limits. - Implementations of a special view for OpenStreetMaps custom maps in designs, in a URL anim box using the "map:" keyword. - Plans will now also work without wayfinding mask. - Some changes and improvements for plans, you no longer need to regenerate all masks in order to change a room's occupied status. - Upgraded to ExoPlayer 2.16.1 for all players (Surface, Texture, YouTube and OpenGL). 2.70.32 (10/01/2022) - Local files for medias in MDB will now always be using lower case paths. - Increased time after which the application force restarts the clockFunction and downloading to 30 minutes. 2.70.31 (07/01/2022) - Changed manifest activity parameter "android:launchMode" to "singleTask" instead of "singleTop". This should reduce the ability of devices who don't respect the Android application life cycle to affect the application's normal functioning. - Moved file cleanup in MDB to swapPlayLists, and no longer cleaning up if the actual playlist is null, so it won't try to clean up after each player restart but only if the MDB has been changed dynamically when the player is running. - ELBase.isSame() now only returns true for ELMasterDB. 2.70.30 (06/01/2022) - Fixed screen off detection watchdog error when application is shutting down. - ELBase.isSame() now only checks for controller elements. 2.70.29 (24/12/2021) - Fixed inverted screen status for 4.4 devices. - Elements present in several playlists will only be created once. This includes MasterDB. 2.70.28 (23/12/2021) - Added additional security measures to try to avoid unexpected sleep mode on Philips screens. 2.70.26 (20/12/2021) - Removed playlists from the Surface player, since they are no longer needed. 2.70.25 (15/12/2021) - Default schedule level at player installation will now be "WebAccess" instead of "Demo" if LV5 can't be reached (private server/network). 2.70.24 (14/12/2021) - Fixed a case where the progress dialog wouldn't be removed when changing Design page via a button click. 2.70.23 (13/12/2021) - A multizone's zones now inherit the ready function, allowing MasterDB to load and update inside zones again. 2.70.22 (13/12/2021) - Fixed a nasty bug that could create too many threads when trying to change LED color on Philips devices, especially when they were blinking. - All scripts are now running on a single Looper Thread. 2.70.21 (08/12/2021) - TVSurfacePlayer: DRM request is no longer running on the main thread and therefore failing. 2.70.20 (07/12/2021) - Fixed emergency databases following an undocumented change in flag.txt. 2.70.19 (07/12/2021) - Changed progress dialog for dynamic designs to further protect against buttons spamming. 2.70.18 (06/12/2021) - Added a new .INI parameter "EmergencyReboot=hh:mm;hh:mm" which contains a list of times at which to reboot the player daily. - MasterDB: since they are now only updated when the server sends a message, it could happen that some files where missing on players with bad connexions or connexion drops. Now the player will remember the number of download problems even after a reboot and keep on trying until he has all the files. - Fixed a rare bug where a playlist would not restart after being emptied of all its elements, or all elements where invalidated. 2.70.17 (03/12/2021) - Fixed a problem with synchronized players in the new version of TexturePlayer and SurfacePlayer. Those players are now keeping their player view stored separately from the elementView so that they can still access it after the elementView has been released. 2.70.16 (01/12/2021) - Internal release for a specific customer. 2.70.15 (26/11/2021) - MDB: Fixed weighting when elements of the playlist are disabled. 2.70.14 (24/11/2021) - Opening PDF files in web pages is now also supported in designs, and will now call the playlist "DocViewer" instead of "DOCVIEWER" in order to respect the naming used in LegalDoc designs. - MDB: Fixed weighting since we no longer load the unvalidated entries. 2.70.12 (24/11/2021) - Designs: Now initializing and downloading missing fonts in "init" rather than "extractFiles", since it was causing a recordset to be initialized before the database ID was available, which was messing up the cache. - No longer cleaning dynamic playlist files at initializations, to avoid one MDB to clean files of other MDB which may not have initialized yet. 2.70.11 (23/11/2021) - Now using Database ID + Index + recordset number for caches in databases. - Fixed an issue with the websocket server not recognizing the right host on some networks. - Enabling the WebSocket server no longer requires to also enable the client. 2.70.10 (22/11/2021) - Fixed a cache problem when several instances of the same design in a MDB would clean the cache of other instances from dynamically changed elements. - Fixed the background detection function so that it no longer believes TVSlide is in background when other system applications are marked as "visible". - Fixed a problem due to undocumented changes in WebAccess, the designs in MasterDB were not looping correctly if you had one unique design. 2.70.09 (18/11/2021) - Fixed videoRotateTexture which was getting 0 width and height from the view. 2.70.08 (18/11/2021) - Fixes to clockFunction and dynamic playlist loading. 2.70.07 (05/11/2021) - Fixed an very rare issue where the player would crash to the watchdog when trying to rename an empty directory. - Fixed index out of bounds in the playlist manager duplication and init. 2.70.06 (04/11/2021) - Changed the method to detect if TVSlide is in the foreground. - Watchdog logs should again contain a stack trace. - Watchdog logs now have a maximum size of 1000000 bytes (1 MB). - Timeblocks with no controller element will no longer be considered stopped but paused. - Displaying a * in the server info column if the player has a non empty watchdog log. - TexturePlayer now runs ExoPlayer on the main thread instead of its own looper because of ExoPlayer internal crashes on some Philips devices. 2.70.05 (02/11/2021) - Fixed the display of the "stopped.emi" and "pause.emi" status so that it doesn't trigger "stopped" on an empty timeb lock containing just a "wait" between two valid time blocks. 2.70.04 (02/11/2021) - Fixed an issue where one some player models from Philips, a surface would never signal itself ready and therefore videos would never start. - On devices with that capability, if the screen is turned off and the device enters lock mode, the software will automatically turn the screen back on. - If the clockFunction is inactive for more than 1 minute, turn it back on from the WebService thread. 2.70.03 (26/10/2021) - MasterDB: Support for media weights. - Scripts: TVTools.getWifiSignalLevel() will now properly return -1 if there's no network at all and -2 for ethernet. 2.70.02 (25/10/2021) - Fixed an issue where on some devices, onStart would never be called after onStop, never restarting essential tasks of the software. 2.70.01 (25/10/2021) - Support for effects in designs from WebAccess. - Fixed stats, the playlist parameter will no longer overwrite the MasterDB paramaters. Now also adding the media ID from the databases. - Support for periodic medias in MasterDB. - No longer downloading non validated elements in MasterDB, except of course emergency playlists. - Fixed plans in MasterDB to adapt to an undocumented change to the TAG, which was "media :" and is now "TVTMAP :". Both will work now (retroactive). - PDF in databases can now optionally be interactive too. - Added more information about media playback in the "Get Infos" command result. - Added a security layer to detect and fix the case when a player would be on pause when it should be playing an existing time block. 2.70.00 (18/10/2021) - New design rendering engine, preparing all object animations instead of adding them progressively, making animations smoother. - Support for individual stats in MasterDB. - The Surface Player (supporting DRM, VideoRenderMode=0) is once again called from the UI thread because of problems in ExoPlayer when called from a LooperThread. - The new design rendering engine is now also compatible with synchronized screens. - If you are using transitions on a synchronized wall, do NOT upgrade to this version for now, transitions on infinite walls are disabled until next version. - Support for portrait mode on Presentations (second screen on Giada players). - Enhanced supersampling support in the PDF viewer. - Added the possibility to display PDF without respecting the aspect ratio, so they occupy the full area they are displayed in. That feature will be enabled once the setting is added in the WebAccess. 2.69.54 (07/10/2021) - Scripts: TVTools.isPlaying(String playListName) returns true if the specified playlist is actually playing. 2.69.53 (06/10/2021) - Fixed the debug window display problem on some devices. - Scripts: TVTools.closeAllDialogs() now returns the number of dialogs closed. TVTools.getDialogsNumber() now returns only the number of VISIBLE dialogs. Previously it was all dialogs. 2.69.52 (04/10/2021) - Fixed LED commands for the new Philips tablets. 2.69.51 (24/09/2021) - Updated to ExoPlayer 2.15.1 - Restored original buffers lengths to ExoPlayer. - SurfacePlayer uses the LooperThread again. - Some changes to Overlay time constrains in MasterDB. 2.69.50 (23/09/2021) - New Android command: execute : executes the given non root command on the device. - Now automatically unlocking screen orientation on devices supporting it, like the new MXQ players (M6CX3). - Containers with several construction pages are now also supported for array containers. - Supporting broadcasting stats for MasterDB. 2.69.49 (22/09/2021) - New Android command: executeasroot : executes the given command as root on the device. 2.69.48 (21/09/2021) - Scripts: New functions: TVTools.sendGenericMethod(String nb, String s1, String s2, String s3, String s4) sends a generic method command to the WebService. TVTools.getBDDOriginalURL(String recordsetName) returns the original url of a recordset file, including the TVTCloud: but with parsed variables. New callback: onNFCId(String nfcId) is called when a NFC device is presented to the reader, and passes the ID of that NFC device to the script. - MasterDB: duration for overlays should work again. 2.69.47 (17/09/2021) - Designs: Fixed mode detection for container's build pages. 2.69.46 (16/09/2021) - New Android commands: websocketconfig : enables the websocket on a specific server or url. autowall [V/H] [offset] [X bezel] [Y bezel]: automatically configures a rectangular wall of width x height screens. Optional parameters are orientation, offset of the first screen and bezel size in pixels. - New script functions: mailDocument(String subject, String content, String address, String fileURL) mails a file from the server to a specific address. makeFileAccessible(String fileURL) copies a file from the server to the mediabis directory so that it is accessible for download. - Update to ExoPlayer 2.15.0. - Synchro: The master now waits 1/10s (100ms) before sending the "startMedia" socket message after receiving the "mediaReady" message from all slaves. The video starting runnable is now a final variable instead of being generated dynamically in order to reduce the startup time to the maximum. The surface player once again runs on the UI thread. - The Android Command "deviceinfo" now returns more details about the device. 2.69.45 (08/09/2021) - Fixed an issue where a second download task could be started after swapping to another schedule level or another cloud server, erasing files that should have been protected by the new content. - Support for software updates with TVLauncher 4.03 even on non rooted devices. - Specific support for horoscope and quote widgets. - Support for DRM parameters in IPTV config files created by the dashboard. 2.69.44 (01/09/2021) - Added support for Advantech/Silab USB Serial devices. 2.69.43 (30/08/2021) - Fixed playlist searching when timeblocks continue after midnight for a specific day. 2.69.42 (30/08/2021) - SurfacePlayer: more changes to play nice with the UI thread. LibVLC plays again normally. now also works with synchro. - Scripts: New function "TVTools.getDialogsNumber()": returns the number of modal dialogs actually open. - Designs: Progress bars now initialize and update better based on the PROGRESS_ACTUAL and PROGRESS_TOTAL variables. - The playlist manager now uses a cache to store the command .xml files locally, to improve performance when the server is down or the player lost his network connection. - 25 user variables are now saved to storage instead of 10. - WebSocket: if WebSocketURL contains "PLAYER:xxxx", where xxxx is the ID of a player in everyWhere, the WebSocket clients will ask the WebService for the IP of that player, and will use it as WebSocket server. If the player is not found, it reverts to the default socket server on the TVTools server or the WebSocketServer configuration entry. 2.69.41 (18/08/2021) - Support for looping of videos in designs once again works for the Texture and Surface players. - Designs: the video player is now more able to make the difference between a server file and a stream. - WebSocket: support for com 1 / 10 messages from the WebAccess, which are forwarded to the actually played element through the key press message system. 2.69.40 (17/08/2021) - The texture player once again runs on the UI thread and not on its own looper, since ExoPlayer seems to have problems with that. - DRM: Support for DRM on Android 9. Forcing surface player when DRM are present. - Rewrote the surface player on the model of the texture player. - Support for subtitles in the surface player. - Android commands: New: enableapp : enables the given application (root only). makedeviceowner : makes the given application device owner (root only). Existing: Improved the "install" Android command so it also updates existing applications (root only). 2.69.36 (10/08/2021) - New OpenGL video player supporting DRM and subtitles based on ExoPlayer and available with VideoRenderMode=2 (Experimental, will be final in the next version). - Integrated a Web Socket synchro server. To activate it, you need to enable WebSocket and set EnableWebSocketServer to 1 in the .INI. The server is on port 8081 since the ports 80 and 8080 are already in use. - Updated YouTube player to adapt to the changes from Google. 2.69.35 (04/08/2021) - Designs: The sleep timer for the eventLoop has been increased from 10ms to 100ms max in order to avoid the garbage collector not being able to free memory in time on slower devices with little memory when you have many containers on screen. - Added support for custom views in the WebView. - Scripts: New command "TVTools.changeConstructionPage(int objectID, int page)" to change the construction page of a container before rebuilding it. - Recordsets in "Cache only" mode will now also use the parameter of the recordset update time instead of the .INI default. - Fixes to .GIF animations so they don't display their first image(s) again if they are not looping. 2.69.34 (28/07/2021) - Upgraded to ExoPlayer 2.14.2. - All URL based videos which aren't HTTP(S) or which don't point to the TVTools server are now considered streams instead of files. - Designs: GIF animations now report when they are finished so they work with 0 duration pages. - Grid containers now also use the incremental appearance parameter from the designer. - Grid containers can now be aligned both horizontally and vertically using the text aligement parameter of the container box for horizontal alignement and the vertical centering and bottom alignement parameters for the vertical alignement. 2.69.33 (26/07/2021) - Support for subtitles in the TexturePlayer. - Some fixes to the ExoPlayer subtitle system so that it doesn't remove them too quickly from the screen. - Designs: for a horizontal container, the text alignment parameter of the container's construction text box defines how elements will be aligned inside of the container. 2.69.32 (22/07/2021) - Support for DRM with ExoPlayer 2.14.1 in the TexturePlayer. - Android commands: Enhanced "listplaylists" so it uses the precise MasterDB ID. New command "clearvariables" to temporarily clear all user variables. - Emergency playlists will now update even without the server signal to do so. 2.69.31 (20/07/2021) - WebAccess: Support for playlist parameters "Keep ratio for full screen medias" and "blackground color". - TVPlaylist objects can now have individually defined background colors which differ from the global background color. Default is transparent as before. 2.69.30 (09/07/2021) - Changes to the asynchronous download mechanism of MasterDB so it's compatible with both normal players and synchronized slave players. - MasterDB which are not actually played will be swapped immediately in background after a download instead of the next time they are played. 2.69.29 (06/07/2021) - Removed blacks at the beginning of a new MasterDB, the playlist system will now wait until the first element of the MasterDB is visible on the screen before swapping pages. - New Android commands: trafficstats: displays the actual network traffic stats of the device, if there are none stored measurements will be taken over 10 seconds. trafficstats : stores network traffic stats of the device, saved to storage every minutes. 0 stops the process. trafficstats clear: clears the actual network traffic stats file. 2.69.28 (01/07/2021) - PDF View: Fixed a rare division by zero error due to inaccuracies of sizes reported by the PDF reader. - Designs: Fixed a rare crash in the status information function of containers. 2.69.27 (01/07/2021) - Synchro: disabled the "anti black screen" for synchronized players as it still impacts video synchronization. 2.69.26 (01/07/2021) - Monitoring thumbnails will now also show full screen videos played in a TextureView (VideoRenderMode = 1). - Fixed a crash on Android 4.4 with versions 2.69.24 and 2.69.25 when you open the Debug Window, because of the incompatibility of network type functions. - The debug window and information request of the monitoring now display the current data throughput of the device's network. - Synchro: Some changes so that the "anti black screen" system doesn't negatively impact synchronized players. - New Android command "trafficstats" displays the actual network throughput of the device and the extrapolated data consumptions for a full day. 2.69.25 (30/06/2021) - MasterDB: If a MasterDB is used in several daily playlists, all instances are now updated synchronously. A MasterDB which is not playing will swap it's content to the new one immediately instead of waiting for the next time it is played. Asynchronous mode is kept for "Demo" mode and for devices synchronized via the WebSocket in a wall. 2.69.24 (29/06/2021) - Fixes the short "black screen" that can occur before the playback of some videos. Only works with VideoRenderMode = 1 using ExoPlayer (which is the default mode). 2.69.23 (28/06/2021) - Emergency messages can now come from any emergency playlist. The last used emergency playlist is stored as a default to be updated if it changes on the serveur for faster access. - Some more YouTube fixes for ExoPlayer 2.14.1. 2.69.22 (23/06/2021) - More YouTube fixes. 2.69.21 (23/06/2021) - MasterDB / YouTube: TVTAwesomiumParams sub type for YouTube videos is back to 0. Hopefully this won't change again in an hour or two... 2.69.20 (23/06/2021) - Upgraded to ExoPlayer 2.14.1 (already done in 2.69.19 in preparation for the OpenGL and DRM players). - YouTube: adapted to new changes from Google (the request URL to get the streams changed format) and changes in the new ExoPlayer. - MasterDB / YouTube: TVTAwesomiumParams sub type for YouTube videos is now 1 instead of 0, adapting to (undocumented) changes in the WebAccess. - New Android Commands: listapps: lists all applications installed on the device, with their name and their intent. disableapp : disables the given application. uninstallapp : uninstalls the given application. A system application also requires the name. This may not work on some recent Android version for system apps. 2.69.19 (22/06/2021) - Synchronization: New .INI parameters WebSocketServer and WebSocketURL, to define a different socket server than the actual one (e.g. prod10.tvtools.eu), or also a complete URL to a custom socket server. Stabilized the loading of a MasterDB with synchronization, now the change triggers a complete restart of the playlist in order to resynchronize all the devices. I also forces the slaves to swap playlist. - Some changes to the TVDesignView in order to avoid crashes in interactive schedules if the user switches very quickly between designs, e.g. with a remote control. - Fixed a rare issue where the players would first not return the correct resolution if the device is in portrait mode. - Monitoring: as preparation for the OpenGL video player, displays the version of OpenGLES on the device in the information request menu option. displays more detailed information about the network, like network type (WiFi or Ethernet) and Ethernet link speed. - Playlist elements (like e.g. traffic maps) can now be marked to automatically refresh their main media every defined period of time instead of always checking the size when the element is dynamic. 2.69.17 (15/06/2021) - No longer applying transitions to a video on a synchronized wall. - Scripts: new command TVTools.getNetworkType() returns 1 for Ethernet and 2 for WiFi. - MasterDB: now properly forwards the update message into multizones. 2.69.14 (08/06/2021) - Fixed a problem with inheritance of MasterDB broadcasting conditions. 2.69.13 (03/06/2021) - MasterDB : supporting time constrains from WebAccess 2.69.12 (01/06/2021) - Transition commands are now inherited by the following MasterDB. - MasterDB: support for map widgets. Doesn't seem to work server side yet, the image file is not generated. - Designs: Support for #FEV, an alternative to #FET with a different syntax. 2.69.11 (26/05/2021) - WebAccess/Designs: Once again adapted the text box parameters to undocumented changes by the WebAccess developpers. Modified text boxes will now reset the line spacing parameter to 0. - Updated serial driver and rewritten parts of the CdcAcm driver so that it works with the IMMENS power supply. - Fixed more undocumented changes to the database system: TVTMasterDatabase instead of TVTDatabase stopped MasterDB from loading when in a command. - Support for pressed/nonpressed bitmaps for buttons in designs. - Some fixes to the preferences (.INI) so that some parameter no longer cause a non necessary write on the internal storage if they haven't changed. - .INI: DeviceID should no long be updated intempestively. - Changed to the Script API for the IMEENS system. - New script functions "TVTools.getDeviceID()" and "TVTools.getDeviceName()". 2.69.10 (30/04/2021) - Fixed overlays when there's a single MasterDB looping on itself. - Fixed multiple registrations of a same MasterDB. - Implemented all emergency message types, overlay or full screen. - Overlay messages now also work in regular playlists. - Fixed a very rare issue where the working range of the device wasn't updated properly, resulting in a black screen and a paused player: now reading the flag.txt every time it's checked. 2.69.08 (26/04/2021) - Support for web pages in MasterDB. - Support for added text boxes in MasterDB designs. - Some fixes to VLC stream playback, reduced buffer size. - Dynamic playlists with too many errors will only download and become active if there's no existing content on the player. - A lot of changes and improvements to suppress the inability to display content in case of Internet failure, missing medias and other problems. - You can now set the device's screen orientation in the schedule level parameters. - You can now set the first 3 user variables in the schedule level parameters. 2.69.07 (13/04/2021) - Fix for synchro with MasterDB. 2.69.06 (13/04/2021) - MasterDB: solves the issue where a MasterDB would not start playing if the network is down at the time of a reboot/start of the player. - The default time zone of the application is now forced to Europe/Paris no matter what the system time zone is. - MasterDB: support for YouTube videos. - Bug fixes, if you have 2.69.00 or higher, it is recommended to upgrade to this version. 2.69.02 (24/03/2021) - Scripts: New commands: int TVTools.findSerialDevice(int bauds, int bits, int stop, int parity, int delay, String message, String expectedResult) Finds the serial device answering to a specific message. If expectedResult is empty, just finds a device that answers anything. String TVTools.sendCommandToSerial(int device, int bauds, int bits, int stop, int parity, int delay, String message) Sends a serial message to a specific device and returns the answer. Messages can be either alphanumric or a string of hexadecimal values. The answer will be of the same type than the request. boolean TVTools.enableWifi() Enables WIFI and scans for hotspots. Returns true on success. boolean TVTools.scanWifi() Forces a new hotspot scan. Returns true on success. boolean TVTools.wifiConnect(int number, String password) Attempts to connect to the hotspot "number" using the encrypted password. Returns true on success. String TVTools.getWifiHotspotSSID(int number) Returns the SSID of the hotspot "number". String TVTools.getWifiHotspots(int details) Returns the list of all wifi hotspots in range of the device, in a format compatible with list boxes. If details is 1, it will add the signal strength of each hotspot in dBm. String TVTools.getWifiConnectionName() Returns the name of the wifi hotspot the devices is acually connected to. int TVTools.getWifiSignalLevel() Returns the signal level of the connected hotspot. - Fixed social and twitter widgets. - Designs: Support for custom images boxes added via the WebAccess. - Support for emergency message widgets. - Support for emergency message commands. - Videos: aspect ratio fixes for when the virtual screen resolution is smaller than the real screen resolution. 2.69.01 (12/03/2021) - No longer transforming file names with "c:/tvtools" for database files (containing #BDD). - Lone MasterDB should no longer sometimes start the playback twice when looping. 2.69.00 (08/03/2021) - Upgraded to ExoPlayer 2.13.2. - Monitoring: The display of miniature previews will be automatically disabled 15 minutes after being enabled. Now displaying the played time of the actual MasterDB element in the "From/Depuis" column. The MasterDB last change date is now accutate based on the last modified element. 2.68.57 (08/03/2021) - TVTexturePlayer: stopVideo can no longer be called on the looper thread. - From this version on, on newly installed devices, VideoRenderMode = 1 (Texture) will be the default mode. 2.68.56 (08/03/2021) - Tweak to attempt to avoid the memory leak when capturing the screen for the monitoring on some older Philips devices. 2.68.55 (05/03/2021) - Fixed an issue that could crash video playback on some devices. - Optimized LooperThread. 2.68.53 (03/03/2021) - Design interactivity: in remote mode, the enter key can also be used to click text buttons now. 2.68.52 (03/03/2021) - Improved WIFI connection management: The system now detects WPA, WEP or Open networks. TVTools.wifiConnect now takes the index in the hotspots list instead of the SSID as first parameter: TVTools.wifiConnect(int index, String password) - Widgets: Fixed the issue where nothing would be played if maxPlayedPerCycle was 0. 2.68.51 (02/03/2021) - Scripts: new functions for WIFI connection managment: TVTools.enableWifi() : enables WIFI on the device. Will trigger the onWifiConnected() and onWifiDisconnected() script callbacks when you get or lose a connection. TVTools.scanWifi() : scans for WIFI hotspots. Will trigger the onWifiScanSuccess() script callback when done. TVTools.wifiConnect(String ssid, String password) : attemps to connect to the wifi hotspot "ssid" using an optional RSA encrypted password. TVTools.getWifiConnectionName() returns the actual connection ssid. TVTools.getWifiSignalLevel() returns the connection signal level, ranging from -1 (no connection) to 4. TVTools.getWifiHotspotSSID(int number) gets a specific entry from a previously scanned hotspots list. TVTools.getWifiHotspots(int details) gets a list of all scanned hotspots, compatible with scripted text list boxes. If details is 1, it will include the signal level in dBm. - Desings/Scripts: Enhancements to list boxes so you can now dynamically update their content. TVTools.updateObject and TVTools.redrawContent will update the list using the changed input variables. TVTools.resetObject will empty the list box. - Some enhancement to the progress dialogs. The can now have owners so a different progress dialog user can't close a progress opened by another user. 2.68.50 (25/02/2021) - Support for serial commands from scripts: TVTools.findSerialDevice(int bauds, int bits, int stop, int parity, int delay, String message, String expectedResult) Finds a specific serial device based on an expected result from a message. If expectedResult is empty, the function will simply expect any result. TVTools.sendCommandToSerial(int device, int bauds, int bits, int stop, int parity, int delay, String message) Sends a specific message to a serial device and returns the answer. In both functions, the message can be either a text string or a string of hexadecimal values (e.g. "0A 1C 2D 97 CC"). The answer will be of the same type than the message. 2.68.49 (23/02/2021) - Custom database filters improved, now supporting multiple filters and various operators between filters (AND, OR, etc...). - Real estate widgets are now fully functional. - Updated to ExoPlayer 2.13.1 - DRM are temporarily disabled in this version, so don't use if you play protected videos. - The Exo YouTube Player now also uses either TextureView or SurfaceView depending on the VideoRenderMode setting. 2.68.47 (18/02/2021) - Fixed YouTube playback in schedule levels, for some reason exoPlayer.setPlayWhenReady was blocking when stopping the video. 2.68.46 (17/02/2021) - Fixed a rare crash in the retrieval of the MasterDB currently played element. 2.68.45 (16/02/2021) - Hotfix to the issue where containers with 0 duration would end too quickly after their first page. - The Widget variable 0 for real estate now contains the root url of the selected real estate database. 2.68.43 (16/02/2021) - MasterDB: A single MasterDB looping will now also inform their host Playlist that they have looped. 2.68.42 (15/02/2021) - Videos put directly in a MasterDB will now respect their aspect ratio. The cropped parts will be transparent, or black if there is nothing behind. - EveryWhere now displays the currently played element in a MasterDB, and also the date of the last download of the MasterDB. 2.68.41 (11/02/2021) - Scripts: getAlternateImage and isVisible are now sending the recordset name in addition to the record ID. - Recordsets: Major fixes to XMLV2 field names and to the XML reader because of changes due to WebAccess databases. - MasterDB will now play at the correct size in playlists inside of designs. - MasterDB: Support for real estate widgets (except the "max play at once" parameter). - Recordsets: support for custom filters which can be dynamically generated. - Infinite Wall: new developper command "getRealPosition x y" returns the real position of the various screens in a canvas of size (x, y). - The debug view now shows the WIFI signal level and max transfer speed when connected in WIFI. - Fixed a rare issue that could make a dynamic playlist stall after being stopped, freezing the player (plans within plans within plans...). - Recordsets: Support for #DAY in filters. 2.68.36 (25/01/2021) - Smoother scrolling for scrollable containers. - Fixes to the YouTube player to reflect changes in the YouTube API and terms of service. - Checkbox system for containers. // CHECKBOX = true; Makes the image a checkbox. // VARIABLE = ; Puts the selected items into the variable , separated by commas. E.g. 2,5,4,1 // BUILDPAGE = 5; Page on which the graphics for the two states are. // CHECKED = 1; ID of the image for the checked status. // UNCHECKED = 2; ID of the image for the unchecked status. - New script commands for the checkbox system: TVTools.clearContainerChecks(int id) will clear all check boxes of the container id. TVTools.checkContainerElement(int id, int index, boolean status) will check or uncheck the element index of the container id. - Improvements and stabilisation of the playlists inside designs (for image boxes with playlist:). - Various bug fixes and performance improvements. 2.68.31 (07/01/2021) - Designs should no longer overwrite the start hour parameter of their base element. - MasterDBs now inherits from the synchro command that is put just before it in the timeblock. - UDP Streams from the "Stream" command will no longer be confused with files and will play correctly again. 2.68.30 (24/12/2020) - Designs: Slideshow animation boxes now use the "Audio mute" checkbox to enable images to be scaled inside the box frame, in order to fill the whole box. Borders will be cropped. - Designs: Slideshow animation boxes now use the "frames/image" box to defines the first image in the series to be displayed. - Designs: horizontal and vertical containers can also be able to smoothly scroll with the "//SCROLLABLE = true;" script parameter. Is it recommended to use the "//THUMBNAIL = true;" parameter in those containers for images, it is NOT made to display full scale images, or videos, or PDF documents. - Support of "options.xml" databases for #GVAR(type=xx) tags. Start of day and end of day options are not supported yet. 2.68.28 (15/12/2020) - New PDF rendering library compatible with Android 4.4. 2.68.27 (14/12/2020) - Fixed YouTube decryption function. - YouTube videos placed directly in a schedule are now played with the custom player instead of requiring the officiel youtube player to be installed. - MasterDB: enhanced font support. 2.68.25 (08/12/2020) - Fixed an issue where an expired cache would try to download a video on the UI thread, stopping that video from playing. - MasterDB: Support for overlay clocks. 2.68.24 (02/12/2020) - Designs: now sending stats when an image button has a PointStats parameter. 2.68.23 (01/12/2020) - DirectoryLists: the variable 7 parameter is now mandatory or the recordset will contain no data at all. 2.68.22 (01/12/2020) - .INI version updated to 1.28. - .INI: ServicePollDelay is now 10000 by default - any update from a previous version with a value of 2500 will be forced to 10000. If you have an interactive schedule on your device that requires input from a remote using the WebService, you will have to put the value 2500 back manually or with the dev command setininode System ServicePolLDelay=2500 if you want the previous responsiveness. - Recordsets: DirectoryList .xml files are now treated specifically. If there's a string in the user variable number 7, it will be used as base directory instead of the root directory, and only the recordings inside of that base directory and its subdirectories will be filtered in. - Scripts: new command TVTools.sendMail(subject, content, address) to send simple emails to a specific address. The content will be encoded with HTML tags
to respect carriage returns. 2.68.21 (26/11/2020) - Secured the resume download function by also storing the file size locally as long as it's not finished. - The device update APK download now always resumes the download after a timeout unless it's a fatal error (file no longer availble, etc...). - Containers with the "// SCROLLABLE = true;" argument can now be scrolled if the number of elements is greater than the size of the view. 2.68.20 (18/11/2020) - Fixed an issue with view swapping when playing a MasterDB after another design. - The overlay will once again no longer be removed when the playback starts. - MasterDB: RSS overlays fixed and finished. 2.68.19 (17/11/2020) - DB and MasterDB: Finalized color, font and attributes management for text boxes. - Designs: Image boxes with the "// THUMBNAIL = true;" parameter now automatically display the thumbnails in the temp subdirectory on the TVTools server instead of their main media. The main media is still downloaded into the device's cache. - MasterDB : broadcasting conditions are now also used for pictures, videos and PDF documents. - Updated intent code for new Philips devices. 2.68.18 (12/11/2020) - LegalDoc release. 2.68.17 (05/11/2020) - Fixes to playlist in design image boxes to support keyboards. - Some fixes to the script engine for better keyboard support. - Support for hints in input text boxes. - MasterDB now also accepts databases. - Fixed a problem with text color conversion to ARGB. 2.68.16 (02/11/2020) - MasterDB: Fixed the text alignement coming from WebAccess when the WebAccess has stripped the text from its spans. - MasterDB: Once again the database tvtparam1 is used in priority. 2.68.14 (29/10/2020) - Once again adapted to the retarded way colors are managed in design files, this time text color was in ABGR while text background in ARGB. 2.68.13 (28/10/2020) - No longer checking validate for databases when they are inside a MasterDB. 2.68.12 (28/10/2020) - Completed the implementation of the virtual keyboard for designs. - New developper command "showvariables" to display all assigned variables (user and script) on the device screen to help for debugging interactive designs. - Fixed an issue where a design could keep residual views after looping. If you are using 2.68.11, please update to this version. 2.68.11 - Updated LibVLC to 3.0.11.1 (VLC 3.2.1). - New hidden .INI parameters: VLCProgressStuckDelay: delay after which a video is considered stuck in VLC when no longer progressing. 0 = disabled. VLCOpeningStuckDelay: delay after which a video is considered stuck in VLC when opening but not playing. 0 = disabled. - Recordsets: improved cache management, specially the "only cache" mode. - Implemented a virtual keyboard system for designs, based on containers. 2.68.10 - Recordsets: Fixed doNotShowIfNothing which was disabled after some MasterDB changes. - Designs: Implementation of pointStat. - MasterDB: now using PDF parameters. 2.68.09 - Designs: improved loading time by better checking if BDD have changed. 2.68.08 - Fixed background dimensions in bugged designs. 2.68.07 (08/10/2020) - Support for Iiyama Reboot and Software Update functions via Intent. 2.68.06 (08/10/2020) - Fixed an issue with empty transitions in MasterDB. 2.68.05 (07/10/2020) - Changed the way to detect video streams in design video boxes without interfering with database videos. 2.68.04 (06/10/2020) - Booking now fully manages time zones, and info sent to the server is always in the timezone defined by the "timeZone" field of the booking file. - Fixed MasterDB update and Demo when you have multiple playlist containing the same MasterDB. - Fixed Dynamic Playlists in multizones which were cleaning elements they should not clean. 2.68.02 (05/10/2020) - MasterDB demo: Now properly using the ID instead of the index to find the first modified element. Also ignoring invalid counter numbers and only checking if the number of changes is greater. - Fixed an occurence where a loaded playlist would be validated multiple times, including when not yet ready to be validated. - Fixed potential crash when quitting the app on a device without a lock task. 2.68.01 (02/10/2020) - Booking: Now using the "timeZone" parameter in booking files. 2.68.00 (01/10/2020) - MasterDB demo mode support, which permits playback after a new content download to go directly and immediately to the first modified element. New .INI parameter DemoMode, which can be set via Developper command "demomode ". - MultiScreen now reconnects if a screen is plugged back in. - Upgraded to ExoPlayer 2.11.8. - The YouTube player now supports videos up to 4K resolution. 2.67.17 (30/09/2020) - Many fixes to plans to adapt to the room booking changes. - New command "MultiScreen" to be able to play a playlist loaded with "LoadPlaylist" on a second screen when the device supports it. - Improvements to update signal management by Dynamic Playlists (including MasterDB). - The keyframer now works for Android devices. 2.67.14 (17/09/2020) - Fix for older MasterDB versions without "Var4" properly set. - MasterDB now gets update signals from the server. 2.67.13 (15/09/2020) - Some minor enhancement to the dynamic navigation system. - Object with linked visibility objects now propagate their own visibility if they have the "VISIBLE" parameter. 2.67.12 (14/09/2020) - Previews: Now only checking the preview ID for the first recordset. - Preview now change screen orientation depending on the size of the previewed design. - Added a 1s delay after preview generation before grabbing the screenshot. 2.67.11 (11/09/2020) - Minor fix for plans. 2.67.10 (10/09/2020) - Dynamic Playlists (MasterDB and other) are now updating in the background. - Fixed PDF support in MasterDB and image boxes. - Videos and PDF put in an image box will make the page last until they finished playing. - MasterDB: Fixed a problem where invalid tvtparams in the MasterDB (which shouldn't be there) were overiding the valid values in the database. - The PlayListManager will no longer try to validate dynamic playlist that are created during playback initialisation, which created issues with double validation. - Fixed an issue for when a dynamic playlist is looping. 2.67.09 (04/09/2020) - Scripts: Now calling "onDesignStart" and "onPageStart" in immediate mode, so it waits for the script to finish before it continues. 2.67.08 (03/09/2020) - MasterDB: Fixed images in weather widgets. - Scripts: new function "TVTools.changeObjectImage(int objectID, String path)" to change a design image with another design image on the fly. The image has to be local on the player, recovered by "TVTools.getObjectFileName(int page, int objectID)". - Weather widgets: city names with the ' symbol will now work too. 2.67.07 (02/09/2020) - MasterDB: fixed text colors following addition of "rgba" by the indians. - MasterDB: added multiple media support in databases with ";" separator. 2.67.06 (01/09/2020) - Fixed possible application freeze when a #VAR hashtag is not properly closed with a ). 2.67.05 (31/08/2020) - Fix for LoadPlaylist function when the media is a group, which would in some cases not be renamed properly. 2.67.04 (28/08/2020) - Scripts: new function TVTools.playPlayList(String playListName, boolean loop, int zone) which plays a playlist loaded with the LoadPlaylist command. loop determines if the playList should loop or go back to the previous list at the end. zone is the zone in which to play the list if it's a multizone, or -1 for full screen. 2.67.03 (27/08/2020) - Designs: Fixed a crash that could occur with designs with 0 pages. 2.67.02 (27/08/2020) - Designs: Fixed an rare case where a background could end over the other elements of a design. 2.67.01 (26/08/2020) - Dynamic playlists: fixed the duration of images for directories in designs. - Dynamic playlists: Some enchancement for smoother transitions. 2.67.00 (25/08/2020) - TVLauncher 3.00 now allows TVSlide to start in "Lock Task" mode (Kiosk) when TVLauncher is made Device Admin. - New Command "SetIniParameters" permitting to set schedule level specific .INI parameters "on the fly" when the device arrives on the level. - MasterDB: Fixed tvtparam1 management, which now takes both the master DB (prioritary) and the Design field into account. - MasterDB: Fixed support for non Database designs which name is in a different field... - MasterDB: Added support for weather widgets. - Designs: Now also accepts images with TVTCloud: in their file name outside of containers. - Widget variables are now design dependant and no longer application wide. - Widget image fields with multiple medias can now display images, videos and PDF documents. - MasterDB: Font families are now working properly. - Changed MasterDB and Directories to Dynamic Playlists which can for now contain images and videos. - Dynamic playlists can be randomized at each cycle, and can have a limit on the number of elements to play. - Added PDF support for dynamic playlists. - MasterDB: supporting directories of medias in design image boxes. - Designs: you can now play a playlist loaded with the "LoadPlaylist" command in an image box using "playlist:" as image name. - TVSlide can now communicate with TVLauncher 3.00 to ask the launcher to start an application in kiosk mode. 2.66.02 (03/08/2020) - MasterDB: Fixed media names with HTML tags and escapes. - Moves to "Lock Task" mode if given the permission by a device owner TVLauncher 3.00+. - Script command TVTools.ChangeBDDFilterValue: Setting a filter to "#DISABLED" now makes it inactive. 2.66.01 (03/08/2020) - Hotfix random Philips integrated played crash when starting a video. 2.66.00 (03/08/2020) - The "Preload" check box on the page properties will no longer also make the page be invisible. - Partial support for MasterDB, full support will be in the next version. - Updated weather widgets support. 2.65.10 (21/07/2020) - Designs/Scripts: "#" replaced by record number in horizontal containers too. - New function "TVTools.uploadImage(objectID, uniqueString)" to upload images to specific subdirectories of the server's upload directory. - Minor bug fixes. 2.65.09 (09/07/2020) - New INI parameter "FixVideoRotation", to fix videos with a rotation on devices that don't support that feature. Requires VideoRenderMode = 1. - Designs/Scripts: Fixed a crash when trying to open a list without defining a list variable. 2.65.08 (08/07/2020) - Changed all views for design elements to AndroidX compatible versions. - Containers/Scripts: Elements of "grid" containers can now also be used as buttons, onClick is called with the record number. - Scripts: added two new functions to place calls using the Android system: TVTools.phoneCall(String number) calls the number using the native phone system. TVTools.duoCall(String number) calls the number using Google Duo, including video calls if possible. Note that those functions exit TVSlide and leaving them will restart it. The WebService continues working in the background. 2.65.07 (24/06/2020) - Implementation of weather widgets. - New variables for widgets, used with #WID(number=x). - New #BDD parameter widn=x to get a Widget variable instead of the field if the variable is not empty. 2.65.06 (23/06/2020) - Event strings coming from the WebService are now also dispatched to overlays. 2.65.05 (22/06/2020) - Scripts: new functions. TVTools.playSound(filename, loop) plays a sound, optionally looping it. File name can be retrieved by TVTools.getObjectFileName(page, id). TVTools.stopAllSounds() stops all currently playing sounds. - Fixed a bad variable assignement when scripts of multiple dialogs where called. 2.65.04 (19/06/2020) - Scripts: the "onKeyEvent(keys)" callback has been expanded and now also recieves the sender device ID when available: "onKeyEvent(keys, sender)" - Scripts: new function "TVTools.getDeviceID()" which returns the actual device ID as registered on the WebService. - Designs: Linked objects (to text boxes) are now also managed for containers displaying several entries per page. 2.65.03 (17/06/2020) - Scripts: new text box attribute "LINKED_VISIBILITY" which permits to make objects invisible if the text box is empty. // LINKED_VISIBILITY = 3,8; will make the objects ID 3 and 8 invisible if the text box is empty. 2.65.02 (16/06/2020) - Update of the youtube player to adapt to protocol changes. - Scripts: command "TVTools.setRelay(mode, number, state)". New mode "2" for the V3 protocol. - Default .INI configuration file per root schedule level. At start, the application will look for a "TVTSlide/.TVSlide-Config//ini_defaults.tvt" text file that contains some default settings for all devices under this root schedule level. E.g. the file located at "tvtslide\.TVSlide-Config\GD\ini_defaults.tvt" containing: [System] RebootAfterNetworkLoss = 30 Will set the "RebootAfterNetworkLoss" parameter of all devices switched to this schedule level or its children to the value of 30. 2.65.01 (09/06/2020) - Scripts: new command "TVTools.setRelay(mode, number, state)" to change relay states on IPX-800 devices. mode = 1 is for the V4 protocol. - Room booking scripts: new command "TVTools.roomBookingAddMultipleEvent(String start, String end, String details)" which permits to add multiple events for the same time period. - Scripts: callback to receive input commands from keyboard, webservice or other sources. - More stuff and fixes. 2.65.00 (09/04/2020) - All medias for designs are now downloaded directly from the "medias" directory of the server instead of "tvtslide/.publish". - New developer command "getPreview(name=,record=,guid=)" used internally by the server to generate accurate previews from Android for the Web Access. - Container image boxes now support .PDF files in addition to videos. - PDF files now respect their original aspect ratio inside of the destination frame. 2.64.09 (13/03/2020) - Fix for rotatevideos. 2.64.08 (12/03/2020) - Implemented CEC screen status for MXQ/M12S type devices. - Design text boxes: Fixed interline spacing for display densities that aren't 1.5. - New .INI setting "VideoRotateTexture", to rotate video rendering, only works with "VideoRenderMode = 1". - New developper command "rotatevideos xx.x" to set the above .INI values. E.g. "rotatevideos 90". 2.64.07 (09/03/2020) - Final version of 06. 2.64.06 (09/03/2020) - Recordsets: Support of "#TRANSLATE" filter. - Support of justified text. 2.64.05 (04/03/2020) - Designs: Videos will no longer loop if the page in which they are has a duration of 0. You can still force them to loop by adding "loop" to the params line. This should make page transitions smoother without repeating the video beginning for containers where the video object is the main element on the screen and decides its duration. 2.64.04 (03/03/2020) - TVTDatabase: additional recordsets are searched for even if they don't have a common root with the main recordset, if their URL starts with "tvtcloud:" (case insensitive). - Designs/images: No longer generating a video object when the image name points on a video if the construction page already contains a video object. 2.64.03 (03/03/2020) - Recordsets: Fixed filtering and sorting of recordsets with field lists. 2.64.02 (02/03/2020) - Designs: Image Boxes in containers can now also display videos. - Recordsets: Now support change of field order and addition of new fields without editing the recordset in the designer. 2.64.01 (28/02/2020) - Fix to screenshot monitoring - calling on UI thread again. 2.64.00 (26/02/2020) - TVTDatabase: Now adapting additional database names when they share a common root with the main injected database so that secondary elements relying on recordsets like logos keep on working after copying a level. The system will find the additional data sources where they are in the database tree. The additional aliases are cached on the device until the schedule level is changed. - INI: new parameter "RebootAfterNetworkLoss", defaults to 0. If 0, it does nothing. If not 0, it represents the number of minutes after a total loss of server connection before the device reboots if the connection doesn't come back. Reboot is only possible on rooted or Philips devices, on other devices the application will just restart. You can set it on several devices at once like all other .INI parameters with the everywhere admin command "setininode System RebootAfterNetworkLoss=xx", xx being the desired value in minutes. 2.63.47 (25/02/2020) - Updated to ExoPlayer 2.11.3 - Now supporting recordset unions. The data sources must have exactly the same fields. The field types are taken from the first recordset as the field editor for unions doesn't work. 2.63.46 (14/02/2020) - Internal beta version. - Updated to VLC 3.2.7. - Updated to ExoPlayer 2.11.1. - Changed the way "one shot" timelines and elements work because of undocumented non retrocompatible changes in the server side publication system. This includes big changes to groups, which elements are now duplicated on playback. - Designs: new image url type "signature:", to generate digital signatures on touch devices. - Designs: Text boxes now support the line spacing parameter. 2.63.45 (10/02/2020) - Final release of 2.63.45 and previous changes. 2.63.44 (07/02/2020) - The listprocesses command now runs in super user and lists all processes. - Designs: More details in log for the camera view. - TVTDatabase: now properly applying the dur: condition and setting page duration to 0 for ignored recordsets. - Fixed a size issue with horizontal containers. 2.63.43 (29/01/2020) - No longer using LibVLC in designs for now. 2.63.42 (28/01/2020) - Made script parameter syntax a bit more permissive. Now it doesn't matter if there are spaces around the "=" or not. The line must still end with ";" though. - Fixed front/back camera selection. - Designs/TVTDatabase: now supporting the page duration condition. - Fixed YouTube decipher function detection. 2.63.41 (22/01/2020) - Recordsets: Now supporting "tvtcond" conditions in databases. - Fixed YouTube player because of changes in the YouTube stream list recovery system. 2.63.40 (20/01/2020) - Designs: you can now enter "camera:" in a video box in order to display the preview of the device's camera. Optionally, you can precise "camera:front" to use the front (selfie) camera. - Scripts: New function TVTools.takeCameraPicture(int objectID) to take a picture from a camera video box. New function TVTools.displayCameraPicture(int objectID) to display the last taken camera picture in an image box. New callback onCameraPicture() called when TVTools.takeCameraPicture is finished. - Device installation: You can now select between using the software Android ID or the hardware serial number as unique device identifier. If you don't know what that means, don't touch. 2.63.39 (16/01/2020) - Designs: no longer creating the video view if the file is not a video. 2.63.38 (15/01/2020) - Designs: now managing the "tempsDepasse" parameter. - Designs/Databases: now injecting the DB name only into the first recordset. 2.63.37 (08/01/2020) - Recordsets: now supporting #BDD(doNotShowIfNothing=x). - Containers: supporting dynamic containers with a differed start time for apparition/animations. 2.63.36 (07/01/2020) - Temporarily disabled use of serial number because some devices seem to have a fake one. 2.63.35 (07/01/2020) - All newly installed devices will now always use the hardware serial number as unique ID instead of the Android ID. - Designs: Enhanced page swapping when the last non finished object has a cut end animation to avoid black images. Images objects that can't be displayed for any reason will be now marked as finished. - TVTDatabase: The text field format is now always set to UTF-8 no matter the settings in the designer, and eventual HTML tags will be converted. Before, the text field format was automatic only if the user didn't select anything in the designer. - Fixed the update of the database list when changing schedule level. - Daily reboot will now happen randomly in the hour specified in the .INI to avoid all devices to spam the server at the same time to reconnect. 2.63.34 (16/12/2019) - Designs: supporting vertically scrolling text (outside of containers). - The software updater will now seach for a new version in this order: 1) In the subdirectory of .TVSlide-Config named like the root of the actual schedule level. 2) If the file doesn't exist, at the usual place in the TVTSlide directory. 3) If that file doesn't exist either, in http://download.tecsoft.fr/TVSlide-versions/Latest/. 2.63.33 (16/12/2019) - Recordsets - TVTDatabase: Now automatically assumes UTF8 HTML5 format for text fields. Checks the "validate" field without having to setup a special filter. 2.63.32 (11/12/2019) - Supports databases with associated designs in schedules. - Recordsets: Supports the "days since" format for date fields. - No longer supporting NFC TAGS with writable manufacturer sector. 2.63.31 (05/12/2019) - Now supporting MyfareClassic NFC TAGS. - MXQ players can now turn screens with HDMI CEC support on and off. - Fix for the Indian database for URLs with are already encoded in the XML. 2.63.30 (28/11/2019) - ExoPlayer can now also be rendered on a TextureView with VideoRenderMode = 1. This will NOT work for 4K videos on a MXQ. 2.63.29 (26/11/2019) - Designs now also use a TextureView for videos when VideoRenderMode = 1. 2.63.28 (25/11/2019) - DRM protected streams can now be played with the DRM Stream command. Playready only works on Android TV devices. - Designs: Some booking timeline fixes. - Designs: Plannings can now have image attachments as daily background. 2.63.27 (12/11/2019) - New .INI system parameter "EnableP2P" to enable (1) or disable (0) peer to peer caching. Default is disabled (0). - Indian database patches... 2.63.26 (05/11/2019) - The peer to peer caching group is now schedule level specific. 2.63.24 (04/11/2019) - YouTube Player: playlists can now be randomized by adding "random" in the param field of the video box. 2.63.23 (04/11/2019) - YouTube player: Peer to peer caching. When the websocket is activated, the player joins a sync group called "P2P", and firsts requests the streams from the cache of the master player to limit the number of requests on sites with many players. The slave players still store the stream URLs in case the master gets disconnected and changes. - New developer command: getp2pinfo. - Scripts: setObjectVisibility now also works for images. 2.63.22 (24/10/2019) - YouTube playlists are now first searched for in the server cache. - YouTube video streams are now cached on the player for the validity duration of the url minus 30 minutes, or for a default duration of 2 hours. 2.63.20 (25/09/2019) - Design objects: new parameter // VISIBLE = true/false to define the starting visibility of a text box. - Scripts: improved TVTools.changeObjectVisibility so that it works even before the object is displayed. 2.63.19 (24/09/2019) - Designs/Scripts: "onLoad" is also no longer run on the UI thread. 2.63.18 (24/09/2019) - Designs/Scripts: "onLoad" is now immediate and waits to be finished. 2.63.17 (24/09/2019) - Designs - PDF and other dynamically downloaded files: Fixed a file path problem. - ExoPlayer 2.10.5. - Scripts: improved TVTools.changeObjectBackgroundColor so that it works even before the object is displayed. 2.63.16 (20/09/2019) - Now displaying more informations when a licence registration fails. 2.63.15 (19/09/2019) - Support of custom date formats. - Support of #DAT(onlydm) filter. 2.63.14 (06/09/2019) - Fixed RecyclerView invalid item position bug with a custom LinearLayoutManager. 2.63.13 (03/09/2019) - Scripts: Fixed incrementation in getListFromXML function. - A variable modification (setVar) is now calling the callback variableChanged for all displayed designs in all open modal playlists. - TVTools.roomBookingGetNextStatusChange now takes three parameters, adding the date at which to search from. Also added TVTools.roomBookingGetPreviousStatusChange which searches the previous status change. Both function have those arguments: (String roomName, String date, String format). - Disabled security key storage for devices before Android 5.0. 2.63.12 (19/08/2019) - Recordsets: Support of #BDD(pos=xx)"name", where pos is the number of records to add or substract to the actual one. It will loop once. 2.63.11 (13/08/2019) - ExoPlayer 2.10.4 - Now generates a KeyPair (private/public) and sends the public key to the server. - Fixed duration problem when a design is published as an image. 2.63.10 (09/08/2019) - Now supporting XML data sources with the same tag names at different levels of the document. 2.63.09 (08/08/2019) - The Designer PDF renderer now supports displaying multiple pages by filling the size fields. If the width and/or height entered are smaller than the width and/or height of the PDF box, multiple pages will be displayed side by side and/or one over the other. - Enhanced the "status" developer command. - getRBNextFreeNiche now takes additional parameters minHour and maxHour, which define the active hours during which to search for a free time. TVTools.roomBookingGetNextFreeNiche(String roomName, String startTime, String duration, String minHour, String maxHour) - A design text box can now be turned into a checkable list box. Parameters are: // BOX_TYPE = checklist; The box is a checkable list. // INPUT_VAR = SELECTIONS; The variable containing the selections, a string of 0 and 1. The format is compatible with TVTools.getListFromXML. // LIST_ENTRIES = LIST; The variable containing the list, separated by |. // LIST_RESULT = SELECTED_GUESTS; The variable containing the selected list elements, separated by |. // BUILD_PAGE = 2; The build page (like for a container) // HEIGHT = 50; The height of the active part of the build page. Elements below that height will be ignored but can be used for checked/unchecked images. // CHECKED = 3; Object ID of the selected checkbox image. // UNCHECKED = 4; Object ID of the unselected checkbox image. - Added additional year change check in clockFunction for the working range of the device. 2.63.08 (23/07/2019) - Added a file system sync before rebooting on Philips devices to avoid configuration/data loss with specific firmwares. - Some changes to multitasking in database access functions. 2.63.07 (22/07/2019) - WebSocket is now disabled by default. - ExoPlayer 2.10.3. - Fixed issue in movement detection introduced with face detection. 2.63.06 (10/07/2019) - Now supports download time restrictions. - ExoPlayer 2.10.2 2.63.05 (09/07/2019) - Designs/Slideshow anim: Fixed a timer problem when view is released at the same time as the timer advances. 2.63.03 (09/07/2019) - Fixed a crash of ExoPlayer in some specific conditions in designs. 2.63.02 (03/07/2019) - Irregular wall: fixed a pivot problem that occured with rotation when the device restarted. - Designs/scripts TVTools.getMinsFromTime(String time) returns the minutes for a time formated "HH:mm". TVTools.getListFromXML(String xml, String unitName, String name, String mask) Extracts the field "name" from an xml document from all records named "unitName". Mask can filter out specific records, format "00011010", 1 being the desired records. TVTools.inputCheckList(String label, String sOptions, final String listVar, final String selVar, final String retVar, String okText, String cancelText) displays a list with check boxes and puts the selected entries in the variable "retVar". The variable "selVar" contains a mask format "0011010" storing the selected entries. The mask can directly be used in the getListFromXML function too. - Slideshow animations now also work with ADIC file format. Also fixed the cache management of the images. 2.63.01 (25/06/2019) - Script: fix for some interface functions that are now called from the looper thread but need to post their UI changes on the UI thread. 2.63.00 (25/06/2019) - The script engine no longer runs on the UI Thread but now has its own looper thread. - Designs/Scripts: New command "TVTools.closeThisDialog()" which closes the dialog from which it is called. - Designs: You can now make Text boxes editable by adding parametres in the interactive script page: // INPUT_VAR = ; defines in which variable the input should be stored. // INPUT_TYPE = ; defines the type of input, triggering the right type of virtual keyboard. normal: default value, a normal multi line long text input. email: an email input, the keyboard will have the @ sign. password: a password input, the text will be masked and the result in the variable encrypted. // SINGLE_LINE = true; makes the text edit box single line. // ENCRYPT = ; if set to true, the result will be encrypted in the variable even if it's not a password type field. // FOCUS = true; means this field should have the focus after the page creation. - Designs/Scripts/Skype: String TVTools.loginMeeting(String mail, String pass) Tries to log into a skype meeting with the given mail/pass combination. The strings must be encrypted. The function returns either "ERROR:" if it fails or the result of the request. String TVTools.searchMeeting(String mail, String pass, String search) Requests a list of potential participants (contacts) for the given skype account. The search parameter is a filter. String TVTools.createMeeting(String mail, String pass, String subject, String description, String sipAtt, String att, String startTime, String endTime) Creates a booking with a skype meeting. - Now letting ExoPlayer manage the video durations instead of the unprecise TVTools value. 2.62.41 (18/06/2019) - PNG/GIF animations now use a TextureView. - Using the new font file system in designs. - Horizontal and vertical scrolling containers now can use a default page. 2.62.40 (11/06/2019) - Designs WebView: Keyboard input in a WebView is now updating the last activity counter. Improved load times through better caching of pages. - Fixed path names for directory containers for the transition from .publish to medias. - Upgraded to AndroidX libraries (Material Design). - Upgraded to ExoPlayer 2.10.1 for bug fixes and improved DRMs. - Fixed a problem where recordsets wouldn't update on device boot if the system clock isn't set. - Designs/plans: - added a new mode=1 for plans that can not be zoomed or scrolled. - new parameters: "scale" to preset the plan scale on start and "wfColor" for the wayfinding color. - New developer commands: - useserialnumber: makes the device use the hardware serial number if available instead of the device ID. - usedeviceid: makes the devices use the device ID as usual. After using one of those commands, you need to delete the device in everyWhere manager so it can register again because its unique ID will have changed. - Designs: now updating recordsets and regenerating pages when a container loops. - New developer command for MXQ M12S devices, "netconfig dhcp", which switches the device back from static ip to DHCP mode. - Designs: fixed an issue where horizontal and vertical rolling containers would not update if their associated recordset was previously empty. 2.62.39 (28/05/2019) - Scripts: added new callbacks for various events: function onWebPageStarted(url) is called when a web page is starting to load. function onWebPageFinished(url) is called when a web page has finished loading. function onTimerProgress(int value, int total) is called when the page timer advances. function onInactivityProgress(int value, int total) is called when the inactivity times. - Scripts: new function TVTools.removeProgressDialog() to remove any displayed progress modal dialog. - Now using 64 bit native code on 64 bit machines. - Updated LibVLC. 2.62.38 (27/05/2019) - Surface video player: changed sync system for the endvideo method. - Fixes to ExoPlayer in the surface player. - The surface video player now uses its own detected video length instead of the unreliable server one in ExoPlayer mode. - Designs: Plans now center on the point between the "you are here" and the room. 2.62.27 (15/05/2019) - Fixed a rare occurence where some elements don't use the same case than others for the same path, causing the cleanup system to be overzealous. 2.62.26 (14/05/2019) - Fixed a potential freeze in ExoPlayer mode when the video ends with an error. - New design animation object "calendar:", which displays a fully featured room booking calendar. The object can set following variables: "CAL_EVENT_CLICKED" with the time of the clicked event. "CAL_SPACE_CLICKED" with the time of the empty space clicked. 2.62.25 (30/04/2019) - The design youtube player will now attempt to automatically download and install the Youtube application on rooted devices. 2.62.24 (30/04/2019) - New developer command "status" gives details about the actually played element. "iptvinfo" was merged with that new command. - Designs: video boxes can now play youtube video streams and playlists. Just past the complete URL of the stream or playlist into the URL line. IMPORTANT: Requires the YouTube player application to be installed. 2.62.23 (25/04/2019) - Exoplayer: changed looper thread creation. - Fonts: now also parsing truetype font collection files (.TTC). - Videos in designs are playing on a surface like before for now. - Missing/erroneous fonts in designs no longer count as a download failure. 2.62.21 (23/04/2019) - Moved incrementDateMinutes and getDateDiff from TVScriptAPI to TVUtils. - Booking: new script function TVTools.roomBookingGetNextFreeNiche(String roomName, String startTime, String duration) Gets the next free time niche in which an event of specific duration can fit, starting at startTime. The date format is standard booking "dd/MM/yyyy HH:mm". For the duration, the format is "HH:mm". - Video playback: Fixed a crash in the progress timer when in MediaPlayer mode. - Videos in designs are always played on a texture for this version only. 2.62.20 (15/04/2019) - Improved caching of alternate script images in designs. - Fixed crash when the design PDF player didn't have the page duration or resolution information (value 0). - The design PDF player should no longer have display problems with transparent PDF files. - Scrolling text in designs now flags as "finished" at the end of the first loop, and doesn't loop if the page duration is 0. - Fixed a problem when the file of a published eDesign doesn't respect the case in its name and therefore was deleted by the cleanup system. 2.62.19 (08/04/2019) - New Android command "LoadFonts" to upload fonts to the server for use in the designs of that schedule level. - New script function "TVTools.quitApplication()" to quit TVSlide. - ExoPlayer now runs on a special thread with a looper. 2.62.18 (04/04/2019) - Added media progress callback to ExoPlayer and MediaPlayer. - Fonts: now also looking for a fonts.zip file in a subdirectory of the .TVSlide-Config named like the root publication level of the customer. 2.62.17 (01/04/2019) - Happy fish day ! - Fixed saving the encrypted license. 2.62.16 (29/03/2019) - Maintenance release - disabled flag for horizontal scrolling of virtual resolutions larger than physical resolutions. 2.62.15 (28/03/2019) - Fixed the text parser for when the source "CTXT" text doesn't end with a span (notably in eDesigns with Rich Text fields). 2.62.14 (26/03/2019) - Now setting screen brightness to minimum when the device is outside broadcasting hours (for tablet devices). - You can now set only a start or end date for element time constraints. Before, the two were required. - Fixed a possible lock of the application when trying to stop playback when containers are in a specific state. - A new custom text view for designs now allows text to text transitions. - "Airport" style text display in designs by adding "// TRANSITION = FLIP;" or "// TRANSISION = FLIPFLOP;" to the script page of the text box. - License numbers are now stored on the device and can be displayed in everyWhere via the "license" administrator command. 2.62.13 (15/03/2019) - XMLReader: Fix for when sub nodes have the same name as the child of the root node and therefore are wrongfully returned as a multiple field. 2.62.12 (15/03/2019) - Upgraded to LibVLC 3.1.5 (12/03/2019). - Design Scripts: new function "TVTools.setObjectBlink(int objectID, int rate, int number)". Makes an object blink at the specified (in ms) for the specified of times. - Native youtube video support using the official API. - Recordsets: multiple fields with the same name in the same parent element now generate an output that looks like: ?,,,... and that is usable by a type 0 (slideshow) animation box. 2.62.11 (08/03/2019) - Support of native PDF rendering in designs. - Recurring content now also works in multizone zones. - PNG animations now take the loop parameter into account. - Synchro now also works in overlays. - Designs: Page 0 Script function "onKeyEvent(String keys)" is called whenever a key events incomes, be it from a keyboard, a mouse, a remote or the webservice. 2.62.10 (22/02/2019) - Updated to ExoPlayer 2.9.6. - New .INI parameter: IgnoreDesignFonts = x if x = 1, the fonts specified in designs will be ignored and only those in fonts.zip will be used to bypass the bugs in the designer assigning the wrong file to some fonts. - The font manager now also recognizes font names with additional symbols instead of spaces (like "-" for instance). - The PlaylistManager now ignoring empty file names to avoid unwanted download errors. - The connection errors section of the information page now also display which element owns the file and has a timestamp. It also displays the last known number of critical download failures. - Vertical rolling now also doesn't repeat if page duration is 0, and marks itself as "finished" at the end of the first loop. - New .INI parameter: VlcAudioDesync, which permits to desync the audio channel played by VLC (in milliseconds). - Bypassing a crash when a field info name is null (normally impossible, but they did it !). - .INI version is now 1.19. 2.62.09 (07/02/2019) - Now updating TV channel info when a program ends. - Drastically changed the way designs are streched to fit the screen in order to support design synchronisation. This new method should also give better results when scaling text fields. - Fixed change of playlist in a multizone zone. 2.62.08 (28/01/2019) - Motion detection: new parameters. frames = defines the number of frames after which a change is considered a motion. Defaults to 2. This avoid passing by movement to trigger the event, and to only trigger it if the subject stops in front of the display. skipframes = defines the number of frames to skip when starting the camera, to avoid side effects like focus and apperture adjustments. - New Command: DRM Stream to play protected video streams. Parameters are: URI of the stream. Type of DRM, can be "playready", "widevine" or "clearkey" for now. URL of the license server. Various additional parameters. - New parameter for TVTools.roomBookingIsNextConfirmed(boolean ignoreActual), if true, only checks future events (in the range of confirmation delay). 2.62.07 (23/01/2019) - Motion detection: User actions (key press or touch action) are now also considered as motions. - SurfacePlayer: No longer stopping ExoPlayer on the UI Thread. 2.62.06 (22/01/2019) - The booking timeline is now redrawing just as plans and progressbars and can be dynamically updated. - Design scripts: New parameters for text boxes // GRADIENT_INTENSITY = ; permits to make boxes color gradients (vertical only for now). - Booking: Resource problem reports are now sent to the server. New script function "TVTools.sendCommand1(String number, String command)" for scripts to be able to send such messages to the web service. - New Script function "getBDDSize(String recordsetName)" to get the size of a recordset. - Improved routine to get script parameters for design objects. - Added per day constraints for playlist elements. - Support for movement detection: New C++ routines for advanced comparison of two bitmaps. New command "Motion Detection". The first text field defines the time after the last movement after which the idle message is sent. The second and third text fields are the messages to be sent on movement and on idle, to be used by subsequent keyboard input commands. The last text field permits to define parameters to fine tune the detection, separated by commas. It defaults to parameters for the Philips 10" booking tablets. The possible parameters are: hres=: maximum resolution desired for the image captures. The software will select the closest available resolution compatible with the device's camera. Defaults to 352. sensibility=: minimum color difference on a pixel for it to be considered changing. Defaults to 128. amplitude=: percent of pixels compared to the total image surface which must change for it to be considered a movement. Defaults to 5.0 %. mode=: camera mode to be used. It defaults to "night" mode if available. centx=,centy=: percentage of centering of the subzone of the image to be used for motion detection. Defaults to 25.0%, 0.0% for Philips tablets. sizex=,sizey=: percentage of size of the subzone of the image. Defaults to 25.0%, 100.0% for Philips tablets. preset=: allows to use a preset for all the above values. For now, preset=1 defines the full usage of a full HD resolution (1920 hres). - New command "PlaylistLoop", which if present in a group, will make that group loop instead of exiting when finished. 2.62.05 (14/01/2019) - Android Update command now first searches for the root level of the schedule in the .tvslide-config directory, which allows to deploy different version depending on the customer. - Upgraded to Exoplayer 2.9.3. - Fixed looping for videos in designs - now looping also triggers object finished. - Added customisable analog clocks to Designs. In a URL/VLC animation, use: clock:(param1=x1,param2=x2,param3=x3,...) Parameters can be: hour=x, minute=x, second=x : x is added to the actual time (for instance to change timezone). page=x : Page containing the custom graphics. dial=x, hourshand=x, minuteshand=x, secondshand=x : id of the images reprensenting the various elements of the clock. If no custom graphics are defined, the default Android graphics will be used. - The caps checkbox in recordset fields now works. - New text display routines for designs, the result will be closer to what you see in the designer and it now supports justified text, but it may slightly change the appearance of older schedules. New preferences parameter in category system: "OldText". If 1, the software will use the old text rendering routines for backwards compatibility. New developer commands "oldtext" and "newtext" to easily make groups of players switch between the two modes. Default is to use old text for now. - Fixed date formats with full day names. - New command ImageStream to display a changing image from the network. 2.62.04 (19/12/2018) - Command with single element no longer inherits onlyOnce from the parent to the element (evading a TVTools publication bug). - Sync now also works with a single element in the playlist. 2.62.03 (19/12/2018) - Fixed XMLV2 fields/tags detection. - Upgraded to current LibVLC 3.1.0 version. 2.62.02 (17/12/2018) - Inheriting stats from command to web page elements. - ELWebPage sends stats only if there's no errors. SSL Errors are ignored. - Implemented Awesomium "URL" media. 2.62.01 (13/12/2018) - Disabled web page SSL certificate check. Don't do this at home. 2.62.00 (12/12/2018) - Scripts: new commands TVTools.getHorizontalResolution() and TVTools.getVerticalResolution(), which return the real horizontal and vertical screen resolution of the device. - Commands: "Recurring Content" now works properly with timeblocks and different daily content. - Scripts: TVTools.modalPlayList now accepts additional parameters: TVTools.modalPlayList(, , , , ); x, y is the position (default = centered), w, h the size (default = size of the content). - Design scripts: New parameters for text boxes // , = ; permits to make boxes with rounded corners, the integer value being the radius. // BORDER = , permits to make outlined boxes, the first integer value being the thickness of the outline, the second the color in hexadecimal (AARRGGBB). 2.61.23 (07/12/2018) - Designs: implemented PNG animations. - Command "recurring Content" implemented. Extra parameters can be "offset=" to define an offset for the starting time of the recurrent media. 2.61.22 (30/11/2018) - Booking: better return values for request functions when there's no confirmation. 2.61.21 (29/11/2018) - Designs: Optimized recordset filtering. - Scripts: - New Command TVTools.filterBDD(String name) to refilter à recordset without reloading it. - Fixed TVTools.updateObject to also properly update containers. - Added confirmation function to rbFreeRoomIfNotConfirmed. - Philips tablets: Now always starting Philips Media Player before launching TVSlide to avoid the media player on top problem. 2.61.20 (23/11/2018) - Upgraded to ExoPlayer 2.9.1 - Now also sending room booking update commands to the main zone of a multizone. - Enabled DOM storage for TVWebView. 2.61.19 (21/11/2018) - New Command: LoadPlaylist.xml that permits to load content on the device without playing it. The first parameter is an unique name for the playlist. - Scripts: new function "modalPlaylist(name)" to play content in a modal dialog. - WebView: changed user agent to recent Chrome desktop version. - Synchro: when in a multizone, the info column in everyWhere will now display the synchro group of the main zone. - Booking: Fixed confirmation with booking V2. 2.61.18 (15/11/2018) - Designs: "Leclerc" prices (10th option in decimal format list of recordset fields) now displays two digits after the comma, or no comma at all if the price is an integer. - Design horizontal rollings: fixed the short reapparition of the first element when the rolling looped for pages with a duration of 0. 2.61.17 (13/11/2018) - Designs: added new spans for text boxes: applies a resizing ratio to the actual font. puts the font in superscript (exponent) mode. - Both #SCRIPT and #ALTBDDTEXT can now reformat database fields with scripts, including from multiple recordsets. - New .INI options in the System category: EnableAntiQuit will relaunch the application if it somehow loses focus because of a user action. This option can be enabled or disabled through the developer commands "enableantiquit" and "disableantiquit". 2.61.16 (12/11/2018) - Fix of double WebService connection. 2.61.15 (09/11/2018) - Fixed incompatibility problem of the additional booking V2 fields for booking V1. 2.61.14 (08/11/2018) - Restored normal treatment of file names for plans. - Textureplayer now gets video length from the file itself if possible, and no longer from the server. - Fixed TreeViews in touch mode. - Scripts: the function TVTools.contentUpdate() is deprecated. It's replaced by two functions: TVTools.updateObject(int objectID) updates a specific object on the actual page. Works for containers and animation objects like plans. TVTools.redrawContent(int objectID) redraws the content of a specific object without updating, for instance when a selection has changed. Works for animation objects. - Fixed a problem of item selection on start in interactive designs, where the container would be selected instead of the selected object. 2.61.13 (28/10/2018) - Quick fix for video durations in the textureplayer. 2.61.12 (26/10/2018) - You can now give an unique ID to all design elements which are scriptable, using a comment at the start of your script: // ID = This avoids having to rewrite scripts each time to add an element to the page. If you don't, the system falls back to the old mode (index of the item). - New plan parameters: infoX, infoY : coordinates of the room info box. lineWidth : width of the line drawn between the room info box and the room. circleRadius : radius of the circle drawn on the selected room. outlineWidth : width of the outline for the line and circle. lineColor : color of the line. outlineColor : color of the outline. hereX, hereY : coordinates of the location of the screen. - Plans: Now displays a line between the room info box and the room on the plan. Now support wayfinding between a specified location and the selected room. - Speedup for plan refreshing. 2.61.11 (18/10/2018) - Scripts: New function TVTools.setObjectBackgroundColor(int color), changes the background color of a design element (currently only text boxes). - Plan parameters: mode : not used yet. roomRecordset : number of the room recordset. eventRecordset : number of the event recordset. freeColor : color of a free room. occColor : color of an occupied room. freeSelColor : color of a free selected room. occSelColor : color of an occupied selected room. centerX, centerY : center of the visible area of the screen, room will be centered there on selection. 2.61.09 (15/10/2018) - Synchronization stabilized release. - New INI parameter "RootSetDate" to use the old method of synchronizing the time of the player to the server on rooted devices. 2.61.08 (10/10/2018) - Scripts: now waiting that a BDD update is finished. 2.61.07 (04/10/2018) - Temporarely removed the unregister device websocket command. 2.61.06 (02/10/2018) - A change of master player during synchronized playback will now work properly and restart the playlist. 2.61.05 (28/09/2018) - Synchronized playback greatly improved, it's now frame accurate on a local network. Over Internet, it depends on the connexion and latency variances. 2.61.02 (21/09/2018) - Navigation for plans. - Fixed RSA keys. 2.61.01 (17/09/2018) - Hid some critical stuff in the C/C++ library. - C++ image cropping is now multi threaded. - Room reservation confirmation is now stored server side. - Restarting TVSlide if, for some reason, it's no longer the topmost app. To quit, you now must use the regular way with the password. - Philips LED initialization no longer uses an alarm. 2.61.00 (12/09/2018) - Added a workaround for Android 4.4.4 on Philips devices not freeing bitmap memory in designs. - New script functions: - TVTools.getBDDFieldFromValue(String recordsetName, String selector, String field) returns the content of a BDD field where another field has a specific value. - TVTools.updateBDD(String recordsetName, boolean force) updates a BDD. If force is true, data will be forcefully downloaded again even if the cache delay hasn't expired. - TVTools.getBDDIndexFromValue(String recordsetName, String selector) returns the index of a BDD record where a field has a specific value. - TVTools.updateContainer(int objectID) updated a specific container. - TVTools.setInactivityTimer(int duration) defines the duration in seconds after the last touch activity after which the callback "onInactivity()" will be called on the design's page script. - Possibility to add parameters to design object scripts using comments. - // FOCUSABLE = false; means an interactive object can be clicked, will dispatch a click event but won't be focused on click. It avoids stealing focus from an existing element. - Made the "settings" button not focusable to avoit it interfering with interactive selectable elements. - Fixed an issue with #LOOP for ExoPlayer playlist, now using a LoopingMediaSource. Also fixed a crash when looping a playlist, and disabled playlists when in VLC mode so Aircast works again properly. - Added a C++ function to crop an image for the plans, resulting in increased performance and less memory consumption. 2.60.19 (30/08/2018) - Limited the heap usage in huge designs with a lot of pages and images. - New script command TVTools.setObjectVisibility(int objectID, boolean visible) allows to make a design object appear or disapear in real time, also making it unselectable. - Synchro should work again with the new permanent WebSocket with user registration. - Clicking "OK" in the EPG will play the selected channel. - Booking can now also register a storey instead of just a room. User Variable 3 should contain the storey number. So now, for booking: - Variable 0 = room name as in the calendar. - Variable 1 = displayed room name. - Variable 2 = room ID. - Variable 3 = storey ID. When working with storeys, the room variables will be automatically set by the system internally. - New script function boolean TVTools.roomBookingIsRoomFree(String start, String end, String roomName). Checks if room "roomName" is free between start and end (which can be equal). Format of start and end is "dd/MM/yyyy HH:mm". - New script callback "onPageCreated" which is called once all the elements of a design page have been displayed. 2.60.18 (24/08/2018) - New developer commands "disablewebsocket" and "enablewebsocket". - Displaying room name in "Media" column of Scheduler. - Booking refresh is more reactive and ignores cache delay. 2.60.17 (23/08/2018) - Booking V2 using webservice: TVTools.roomBookingInitInfo(roomRS, eventRS, confirmDelay, precision, mode) now has 3 mode: 0 is the old booking system. 1 is V2 with websocket connection. 2 is V2 with the webservice. 2.60.16 (22/08/2018) - Managing image transparency for interactive buttons in designs. - Booking no longer locally caches in websocket mode. - Work in progress on plans: - Anim boxes now accept a new URL: plan:(mode, freecolor, occcolor, freeselcolor, occselcolor) Mode is not used yet. Colors (format AARRGGBB): freecolor = free room. occcolor = occupied room. freeselcolor = free selected room. occselcolor = occupied selected room. - Design scripts: - OnClick now passes the pressed key as argument. - In a container, if you put "#" as active key, it will be replaced by the record index in the recordset. - The "getAlternativeImage(bddIndex)" callback for an image box permits to return the path to an alternative image for the item. - TVTools.getBDDField(recordset name, record index, field name) returns the string content of the field a recordset entry. - TVTools.getObjectFileName(page, object) returns the local file name of an image in a design page. - TVTools.setTouchReaction("highlight") permits to increase the luminosity of a selected image. - TVTools.setInteractiveDelay(milliseconds) sets the anti spam delay for inputs. - TVTools.updateContent() updates the content of all design page objects with an "updateContent" callback (for now, just plans). - TVTools.selectContainerElement(int objectID, String bddEntry) selects a container element corresponding to a BDD entry. E.g. TVTools.selectContainerElement(15, "id=36") will select the element corresponding to the first database entry where the field "id" equals "36". - Main page callback "onAnimClicked()" is called when an animation box is clicked. - The websocket connection is now trying to restore itself after a connection loss, and informs all the users of the reconnection. - Booking V2 using websocket is fully functional. 2.60.14 (01/08/2018) - The "Who am I" everyWhere command now displays the device ID on the four corners of the screen alternatively. - New script command "TVTools.getDeviceType()", returns "ANDROID" for Android devices. - New script command "TVTools.sendKeysToZone(String keys, int zone)" to send keys to a specific zone of a multizone. If there's no multizone, the keys will be sent to the main zone. - Sending "BACK" or "HOME" to a web browser object will make it go to the previous page or to its home page. - Secured the backToMainList() function to avoid it being called several times. - Enhanced back button usage to not spawn quit dialog so easily. - Disabled "Advanced Profiling" which can cause dialogs with text input to crash. - WebSocket disabled for this version. 2.60.13 (24/07/2018) - No longer formatting license number on Philips devices because of their bugged IME. 2.60.12 (24/07/2018) - Upgraded to ExoPlayer 2.8.2. - Upgraded to LibVLC 3.0.4. - Fixed an occurence when database images would not be kept when using the "TVTCloud:" keyword in databases. - Added the "visible password" flag to the text fields of the license configuration dialog to avoid Philips tablet's IME from auto-correcting. 2.60.11 (19/07/2018) - Fixed an issue where a container would loop even if the page length is zero, making the first record appear again briefly. 2.60.10 (10/07/2018) - Fixed a problem with video durations not adding up when ExoPlayer plays a playlist. - The #LOOP video parameter also works for playlists. - In device information, displays GPU renderer and vendor. 2.60.09 (09/07/2018) - Added cookie support to the RestrictedWeb command. - Recordsets: You can now get info from a recordset in another recordset. Format: #BDD(recordset=name of the second recordset,field=name of the field,content=searched field content)"field in the first recordset" - Designs: Fixed aspect ratio for the permanent animations. 2.60.08 (04/07/2018) - Fixed a potential problem in the EPG when a non existing channel is added. - New Android command RestrictedWeb, which permits to navigate the web but only on authorized URLs. Parameters are the starting URL, the inactrivity timeout after which it leaves the actual page, the list of authorized URLs separated by a comma and the message to display if the user tries to access a non authorized site. In the message, you can use #URL to display the refused URL. 2.60.07 (02/07/2018) - Changed the webService timeout from 5000ms to 10000ms. - Added set time zone permission for Android 8+. 2.60.06 (20/06/2018) - More LOG details for mustReloadBooking. 2.60.05 (19/06/2018) - Roombooking: roomBookingInitInfo has a new parameter, mode, which defines if it uses the old webservice based system or the new websocket based one. New syntax: TVTools.roomBookingInitInfo(room recordset number, event recordset number, confirmation delay, precision, mode); - Mode = 0 means webservice. - Mode = 1 means websocket. - Fixed TVTools.getDateDiff when you ask for hours. - inputTime has a new parameter, maximum, which sets the maximum duration possible in hours. If 0 or omitted, there's no limit. TVTools.inputTime(title, interval, variable, okText, cancelText, maximum) 2.60.04 (18/06/2018) - Consecutive videos are now grouped into playlists in Exoplayer to avoid blanks. - Implemented the permanent "up", "down", "left", "right" animations for design images and texts. - Better text button animations for touch panel mode. - TVTools.setInteractiveMode to set touch or remote mode is now global and no longer design specific. - Fixed program length in EPG. - Designs: new permanent effect "Pulse". 2.60.03 (29/05/2018) - TVTCloud: can now have arguments (ignored). - The player should no longer reboot in very specific circumstances when the network connexion is slow to establish. - Support for the "play only once" checkbox for schedule elements. - All Philips devices can now be rebooted and updated remotely (previously it was only tablets). - Upgraded to ExoPlayer 2.8.1. 2.60.02 (27/04/2018) - Fixed an occurence of when a video would not stop after its surface is destroyed, blocking the player e.g. after a .INI edition from everyWhere. 2.60.01 (25/04/2018) - New room booking script function TVTools.roomBookingSetReservationLimit(limit) Sets the length of events after which reservation is no longer required. - Fixed String to number conversions in recordsets when the decimal separator is a "," and not a ".". 2.60.00 (23/04/2018) - Room reservation and freeing is now locally cached, so those actions are instantaneous. - As a consequence of the above, you can no longer free a room too shortly after event creation, you have to wait for the server update to get the real event ID from the calendar system. - Scripting: TVToolsInputTime has a new parameter, maximum, which defines the maximum accepted duration. If not present, it behaves like before. - Philips tablets can now be rebooted via the everyWhere Manager. - TVSlide on Philips Tablets can now be updated via the everyWhere Manager. - TLS 1.1 and 1.2 for security are now supported on Philips tablets. 2.55.15 (21/02/2018) - New developer command "getplaylists" which lists all the current playlists in memory. - No longer writing in the prop file but using "setprop" to enable the real portrait mode. - Recordsets can now use user/password for the connection. 2.55.14 (19/02/2018) - XML Recordsets: Fixed case when the selected element is the root of the document. 2.55.13 (16/02/2018) - XML Recordsets: Fixed an issue when the field name is null and you need to get the tag (XMLV2). - Increased the maximum number of fields in recordsets. 2.55.12 (15/02/2018) - Now displaying SOC temperature in informations for MXQ devices. - Stopped debug overlay from sometimes opening twice. - Updated LibVLC to the 08/02/2018 version. - Fixed some weather translations. - Fixe a storage access problem that could occur on some devices. - Implemented design preview on Android devices. 2.55.11 (31/01/2018) - Supporting new permanent animations for design objects. - New script command TVTools.setPageVisibility(int page, boolean visibility) to make a page visible (true) or not (false). 2.55.10 (17/01/2018) - "getviews" developer command now starts at the root layout instead of baselayout. - Upgraded to ExoPlayer 2.6.1. - No longer restarting playlist at midnight. - Fixed cache cleanup problem when parts of the path can be lowercase or uppercase. - Supporting multi picture animations. 2.55.09 (09/01/2018) - Now keeping licence number in dialog if the registration failed. - Some fixes to the sync system. 2.55.08 (03/01/2018) - New developper command: install , to install APKs on a device. Example: install http://download.tecsoft.fr/TVSlide-versions/Latest/TVService v1.0.apk,com.wildcopper.tvservice/.TVService - Restoring connection on websocket in a separate thread. 2.55.07 (16/12/2017) - Fixed infinite recursion when socket commands do not reach destination for a longer time. 2.55.06 (15/12/2017) - Fixed websocket synchro freeze. 2.55.05 (14/12/2017) - Now displaying available external storage in quit dialog and everyWhere information request. - ADB is now available earlier after booting. - New developer command "sendcommand " to send a command via UDP to a device on the same network running the new TV background service. "reboot" reboots the device. "logcat" gets the logcat. "logfile" gets the log file if there's one. - Websocket Synchro now always disconnects when there's any kind of problem, and automatically reconnects at the next request. 2.55.04 (07/12/2017) - Fixed Webservice sendstate3 for when there's no "res" on older servers. 2.55.03 (07/12/2017) - Webservice: If there is no res, sending "null". - Websocket sync: Now just disconnecting on error instead of trying to reconnect immediately. 2.55.02 (06/12/2017) - Added Apache Commons Compress library for bzip2. - Fixed stats crashing in a multizone. 2.55.01 (05/12/2017) - Don't send stats if they aren't activated for the media. 2.55.00 (05/12/2017) - The webservice is now using a new function (sendState3) for sending the device state, with more flexibility. - Now sending diffusion time and date for medias marked for statistics. 2.54.63 (30/11/2017) - WebService hotfix. 2.54.62 (30/11/2017) - New Android command "Standby" which permits to delay the execution of a timeblock until an input string is received. A media or even group can be played during the waiting. - The timeout for Websocket sync now defaults to 5000. 2.54.61 (27/11/2017) - Images with a duration of 0 will now default to 10 seconds. - Implemented answer to websocket movement messages. 2.54.60 (24/11/2017) - Now dealing with backslashes in user variables. 2.54.59 (22/11/2017) - Synchro: Reconnecting to websocket when recieving error (3). 2.54.58 (21/11/2017) - Changed the "Reset License" to "Reset Player". It removes any TVSlide and TVLauncher data for a clean install on a new server. 2.54.57 (20/11/2017) - Implemented the automatic adjustement system via WebSocket for Irregular Walls. - Some fixes for the Tecbase (encoding and carriage returns). - Possibility to force encoding of bugged XML files using "ENCODING=" in the field where you can also enable XMLV2. - Added a "Reset License" button in the cloud change dialog. - Removed the vertical fading edges in the webview. 2.54.56 (10/11/2017) - New video rendering mode (only for TimeBlock videos for now), using MediaPlayer on a TextureView that can be rotated. - New .INI parameters: VideoRenderMode: if 0, uses the normal SurfaceView method, if 1, uses MediaPlayer on a TextureView. Rotation X: defines the 3D rotation of all the content along the X axis (horizontally parallel to the screen). Rotation Y: defines the 3D rotation of all the content along the Y axis (verticallly parallel to the screen). Rotation Z: defines the 3D rotation of all the content along the Z axis (perpendicular to the screen). Those work along with the existing VirtualResX, VirtualResY, OffsetX, OffsetY and OffsetZ parameters. - The debug view is now in the base FrameLayout of the application so it doen't rotate or stretch with the virtual resolution. 2.54.55 (08/11/2017) - Synchronization can now also be done on playlist element index by adding "ind=1" to the command's parameters. Reminder - command parameters are separated by a semicolon (";") and can be: ipw= for the url of the web service, defaults to "ws://"+server name+"/wsNew/ws.asxh". ind= for the element selection mode, default is by element name, if ind=1 it's by element index. - Fixed rare crash in designs for when page index changes at the same time objects are freed. 2.54.54 (31/10/2017) - Fixed possible crash in the application's "onDestroy" routine which may attempt to close a view that is already closing. - Content synchronization between devices has been rewritten with the master/slave system for better unexpected event management. - Displays the synchronization group and role (master/slave) in the info column of everyWhere Manager. 2.54.53 (25/10/2017) - No longer displaying the recordset loading screen after publication if the schedule level contains an Aircast command in any of its lists (main and groups). 2.54.52 (24/10/2017) - Designs/recordsets: New string command #SCHEDULELEVEL, which is replaced with the actual schedule level. - Designs: Also ignoring "NOTFOUND" fonts during string parsing so that it uses fonts from the .ZIP instead. - Aircast: new variables AIRCAST_ACTUAL_COMMENT and AIRCAST_NEXT_COMMENT display the comment (description) of the actual or next video. 2.54.51 (24/10/2017) - Skipping download of boxes with illegal file names (empty or gibberish) in designs. - EPG display: Channels are now also sorted by their numbers in the design "EPG:" special animation box. - Now ignoring design font files containing "NOTFOUND". - Aircast: "Before End" page now really using the second design page. 2.54.50 (24/10/2017) - Aircast mode now supports playlist randomizing. 2.54.49 (23/10/2017) - Message system: Now only displays unread messages. - Now uninstalling "com.droidlogic.FileBrowser" on MXQ devices to avoid the popup when inserting an external storage. - New Android command: commands/Android/Aircast Android The media is a design with two pages, the first for the display of the actual title, the second for the display of the next title. The following variables will be automatically filled: AIRCAST_ACTUAL_TITLE with the title of the actual (played) element. AIRCAST_NEXT_TITLE with the title of the element that will be played next. IMPORTANT: for Aircast to work, the player has to use LibVLC for now. 2.54.48 (13/10/2017) - New LibVLC build, 06.10.2017 - Managing command 103 to change channels from the Dashboard. - Now using the device name as room number for the gallery if the user variable 2 is not defined. - IPTV (MultiStream) sorting channels according to number. 2.54.47 (06/10/2017) - Some fixes to the automatic server configuration: Removing backslashes from schedule levels. Disabled the auto corrector of the Android keyboard for the License dialog. 2.54.46 (02/10/2017) - Changed XML reading routines for better management of exotic charsets. - UTF-16 files are managed as UTF-8 files. - Supporting automatic server configuration by entering a license code. 2.54.45 (27/09/2017) - Designs now support text fields sent as an image for better compatibility with Windows. - Upgraded to ExoPlayer 2.5.3. - The APK will now install and run on x86 based devices too and contains both versions of LibVLC. - Now sending the first three user variables with findDevice after the freeSpace. - Changed the icon to the new TVTools logo. - Ignoring last /par (carriage return) in text boxes in order to fix vertical centering. 2.54.44 (21/09/2017) - Killing "com.amlogic.SubTitleService" on non-MXQ devices. 2.54.43 (20/09/2017) - No longer recycling bitmaps in imageviews, which can lead to crashes. 2.54.42 (19/09/2017) - Supporting multiple hexadecimal values when unescaping HTML (e.g. ꂌ). - Using font info in designs, if there's none it falls back to the fonts.zip file. - Using the video player from .INI for IPTV on devices older than the MXQ (M8 and M8S). 2.54.41 (18/09/2017) - Fixed a crash in the dissolve transition when the image is invalid. - Audio files dropped directly in the schedule level are now played by the video player. - Disabled errors in the log for when "adb_keys.txt" and "fonts_infos" are not present on the server. - Prefs version 1.15 with new parameters: "MediaDisplayMode", for the display mode of videos on MXQ devices. Defaults to 1. "HttpInputFrequency" is the frequency at which the HttpInput command scans the url for changes, in milliseconds. Defaults to 2500. 2.54.40 (14/09/2017) - Fixed crash when trying to use an unimplemented container type. - Now supporting directory recordsets. 2.54.39 (13/09/2017) - No longer forcing default input and output formats in "RSS" mode recordsets. - Enhanced reliability of time offset setting on slow networks when the automatic time is activated on the player. 2.54.38 (07/09/2017) - Fixed font size in designs for devices with font scaling different from density. - Now remembering selection in directories in the gallery. - New "fonts_infos.xml" file on the server to convert incompatible fonts. - Horizontal scrolling containers now also "finish", permitting to move to the next page if duration is 0. 2.54.37 (05/09/2017) - Time adjustement of the player now only uses the offset, the rooted method is disabled. 2.54.36 (01/09/2017) - The audio visualizer is now listening to the mixer instead of the media player to avoid a possible crash when it closes. - Fixed text size in designs for different screen densities. 2.54.35 (31/08/2017) - EPG navigation has been improved. - EPG now has two construction pages, one for long programs, one for short programs. - New custom URL animation box: "gallery:" which displays an image/video/audio gallery. The gallery is built specifically to be used with a remote control and for now doesn't work with touch. The room or customer name must be in the user variable number 2. Parameters are: "mediapage" is the construction page for a media icon. "folderpage" is the construction page for a folder. "emptypage" is the construction page for an empty folder. The gallery sets the variables "ACTUALDIRECTORY" and "ACTUALELEMENT" when the user navigates the gallery. - Now always uses LibVLC for IPTV. - Automatically authorizes ADB if a key file is on server in .TVSlide-Config/adb_keys.txt - New developer commands: "getadbkeys" will return the adb keys from a device, in order to put them in the adb_keys.txt file on the server. - ADB should be enabled automatically on rooted devices. - OverlayMedia now also accepts groups. - Upgraded to ExoPlayer 2.5.1. - You can now use either TVTCloud: or tvtcloud: to add the server base URL to a string. - New script command: TVTools.sendCommandToDevice(String deviceID, String message) Sends a message (key sequence) to a device using the webservice. - Made watchdog more agressive with rebooting so it doesn't get stuck in stopping tasks and clearing. 2.54.34 (07/08/2017) - Fixed the progress dialog on the new MXQ devices. 2.54.33 (03/08/2017) - MultiStream no longer displays name at channel change outside of IPTV mode. 2.54.32 (01/08/2017) - New custom URL animation box: "epg:", which display a program guide when IPTV is activated in the schedule level. - Massive speed up of TVString parsing by caching the language in memory. - Initializing time is now two times shorter on MXQ devices. - Fixed problem when there's no remote EPG file. 2.54.31 (04/07/2017) - You can now exit the TV overlay with the back/exit key. - Messages now work on top on all medias including MultiStream (IPTV). - New variables usable in designs are defined when using IPTV with the PMS: #VAR("CUSTOMERFIRSTNAME") - Customer's first name. #VAR("CUSTOMERLASTNAME") - Customer's last (family) name. #VAR("CUSTOMERPREFIX") - Prefix to customer name, can be "Mr", "Mme" or "Mr et Mme". #VAR("CUSTOMERARRIVALDATE") - Arrival date #VAR("CUSTOMERDEPARTUREDATE") - Departure date 2.54.30 (30/06/2017) - The screen on/off commands in the schedule level "diffs/screen control" options are now working with the TimeBlock system. 2.54.29 (29/06/2017) - Fixed the GMT vs Local Timezone date problem on devices with the old date shell command (like M8S). 2.54.28 (28/06/2017) - Now ignoring illegal file names when moving temp files to final files when the playlist loads. 2.54.27 (28/06/2017) - quitApplication now starts a new Thread, stopping it from locking the service thread and losing contact with the player. - New script command "resetSelection", to reset the selected item on a design page. - Fixed vertical array container coordinates which are inverted. - Fixed horizontal and vertical containers displaying one element too much. 2.54.26 (26/06/2017) - Updated LibVLC to latest GIT version. - New INI parameter: "AnimSpeed", a multiplier for design animations. - Now using the advanced recordset settings for cache update delai and expiration. 2.54.25 (20/06/2017) - Doesn't play a video if the filename or url are illegal. 2.54.24 (14/06/2017) - Translating VLC track language information in the actual TVTools language. - Now correctly saving and restoring audio and subtitle languages between two sessions. - Ability to dynamically change a bitmap in a design. - everyWhere informations now also display the list of script variables. - Fixed VLC video playback, now removing the subtitle overlay when stopping. 2.54.23 (09/06/2017) - LibVLC TV Playback is now fully functional, with the MXQ tweak for better picture and working subtitles. - Script function inputList has a new parameter, immediate. If "true", it makes the selection validate immediately on click. New syntax: TVTools.inputList(String label, String sOptions, final String variable, String okText, String cancelText, String immediate) - Now saving Channel Number, Audio and Subtitle languages between two TV sessions. 2.54.22 (06/06/2017) - Implemented LibVLC for TV Playback. 2.54.21 (31/05/2017) - Upgraded to Exoplayer 2.4.1. - EPG now uses daily files. - Overlay now disapears. - Designs: Fixed a lock when the garbage collector was invoked within a synchronized method. - Weather texts now have a French version. - Now uninstalls all chinese bloatware on MXQ devices on first launch. Can be retriggered by deleting the "MXQClean" line in the .ini. - Fixed problem due to daylight saving when first initializing player time. 2.54.20 (24/05/2017) - Intercepted MENU so that it doesn't make the application completely lose focus. - New script function: displayProgressDialog(0) displays a waiting symbol until the next page is loaded. 2.54.19 (24/05/2017) - Fixed inverted width/height for array container elements. - New IPTV related global variables: IPTVAUDIOLANGUAGE : actual audio language. IPTVSUBTITLELANGUAGE : actual subtitle language. IPTVCHANNEL : actual channel number and name. IPTVLOGO : actual channel logo file. - Recordsets: new filter mode for week days. - Overlay with channel info for IPTV. - Not restarting player on 079 messages if IPTV is not activated. - Fixed a problem with horizontal and vertical containers with multiple pages and a single element per page. - IPTV Know issue: remaning focus problem when enabling/disabling the channel info overlay. 2.54.18 (15/05/2017) - EveryWhere device informations now contain a list of the last connection errors. - You can now modify the cloud server credentials directly on the player from a button in the "quit" menu. 2.54.17 (11/05/2017) - Fixed special case where elementview could be "null" when trying to close a progress dialog. 2.54.16 (10/05/2017) - Also checking "/temp/" to check if a design is pregenerated. This should fix problems when the user names his designs ending with "_android". - Now no longer loading designs and pages which have condition dates in the past. - Fixed page/design condition dates that are in seconds in TVTools files and not miliseconds like Android. 2.54.15 - Removed system Locale change for the damned Cahors firmware. 2.54.14 (05/05/2017) - Removed confusing error message in logcat when a bitmap file doesn't exist locally yet. - Removed leading "la" from "fêtes.txt". - Made it possible to play multiple successive specific playlists in a zone. 2.54.13 (04/05/2017) - No longer adding "?" to URL for foreign sites (recordsets). 2.54.12 (04/05/2017) - Upgraded to Exoplayer 2.4.0. - Fixed page condition checks. 2.54.11 (27/04/2017) - New script functions: TVTools.getActualPage() returns the actual played page of the design. TVTools.getTotalPages() returns the number of visible pages in the design, in play order. - New URL animation type: progressbar:(color=AARRGGBB,backcolor=AARRGGBB,gradient=x.x,actual=xx,total=xx,ignore=xx) Displays a progress bar. arguments: color is the color of the progression bar, in ARGB hexadecimal format. backcolor is the background color. gradient is the amount of gradient in the bars, from 0.0 to 1.0 actual is the actual value, if not present it takes the number of the actual page of the design. total is the total number, if not present it uses the total number of pages in the design. ignore is the number of pages of the design to ignore, it's substracted from total when using the design pages. - All scripts that don't have a return value are executed in a new thread. 2.54.10 (26/04/2017) - mustReloadBooking message management changed because it can now concern several different booking schedules. - Designs: Now managing design and page day, date and time conditions. - Room booking precision affects time extension too. 2.54.09 (18/04/2017) - Now also checking file content for design .xml files. 2.54.08 (11/04/2017) - Fixed date format for sending polls to be compatible with the windows serializer. 2.54.07 (11/04/2017) - New Design first page function: onDesignStart is called at the start of a design playback. - Poll answers are now locally cached and sent when the server is available, so polls don't get lost if the server is down. - New Poll functions: * TVTools.sendStats(String guid, int numQuestion, int numAnswer, String comment) adds one question stats to the disc cache. * TVTools.sendParams(String guid, String param, String flush) adds one parameter to the memory cache. If flush is "true", also writes to disc, to avoid writing several times in a row if you want to add several parameters. * TVTools.sendPoll(String guid) attempts to send the cached poll to the server. If the server acknowledges reception, the cache is reinitialized (erased), otherwise, it is kept until a sendPoll is finally successful. - Poll scripts have been updated. 2.54.06 (10/04/2017) - Fixing IPTV directory from flag.txt using Remote Root. - Fixed a problem in the design page management where it could end in a loop if you had invisible pages. 2.54.05 (04/04/2017) - Added 3 and 4 Treeview modes which make parent nodes unselectable. - Implemented Treeview with RSS links. - Horizontal interactive containers can now be navigated with the left/right keys. - If keys are unused for a tree view, they will be sent to the interactive container. - Added two new database related text field tags: #BDDREC for the current record, and #BDDSIZE for the total number of records (after filtering). - Roombooking: roomBookingInitInfo has a new parameter, precision, which defines how times are rounded. E.g. a precision of 15 will mean times are all rounded to 15 minutes. New syntax: TVTools.roomBookingInitInfo(room recordset number, event recordset number, confirmation delay, precision); New roomBookinGetPrecision function returns the precision. 2.54.04 (29/03/2017) - New date format for the poll report xml. - Made it so that playNextPage isn't called on the webservice thread when a room booking update event arrives. 2.54.03 (27/03/2017) - Implemented write caching for recordsets. - Now forcing xml cache update if getting a room booking update message. 2.54.02 (23/03/2017) - Fixed event extension free room detection for room booking. - No longer closing all dialogs on page update for room booking. - New .INI parameter: "cachePollStats" : when set to 1, caches poll stats in the "poll.xml" file at the root of the TVSlide directory on the device. 2.54.01 (17/03/2017) - Restored normal date synchronization for rooted devices. 2.54.00 (17/03/2017) - On non rooted device, this version is no longer dependant on the system clock and will take its time offset from the TVTools server. This way, the devices will use the correct time even in closed networks which don't have access to the Internet and the NTP server. It is recommended to DISABLE the automatic NTP synchronization in the Android time settings on such devices. - Happy Saint Patrick day to all! Slainte! 2.53.13 (15/03/2017) - New page javascript function on the first page of a design: onDesignInit, which is called after everything is loaded but before any initialization is done for the design. - New script functions for polls, which has to by put in "onDesignInit" of the first page. setPollRestartDelay(x) sets the delay in seconds after which a poll returns to its first page without user input. The default value is 180 seconds (3 minutes). - All modal dialogs opened by a design will be closed on page change. 2.53.12 (14/03/2017) - Fixed crash when an invalid default page is specified for a container. - Restoring fullscreen when leaving a text input dialog. - Great improvement to large XML loading times. - Now accepting GMT dates in recordsets 2.53.11 (10/03/2017) - Removed the non-root reboot as it can block on some devices. 2.53.10 (10/03/2017) - Fix crash in DB sorting. 2.53.09 (10/03/2017) - Polls: Now accepting up to 10 answers in text based polls. Now accepting user comments in polls. These changes required major changes to the poll scripts. - Synching file system even on non rooted devices after major storage operations. - If a device is not rooted, still trying to execute the "reboot" command. 2.53.08 (08/03/2017) - Fixed recordsets when first record isn't 0. I should have guessed that Philippe stored that data in a string named tempFile, I mean, it's a logical name for the first record of a database, isn't it ? 2.53.07 (08/03/2017) - Changed method to check root. 2.53.06 (08/03/2017) - Now displays the default NTP server in the informations asked through everyWhere. - Fixed cacheUpdateDelay which was in milliseconds. Now it's really in seconds. - Fixed crash in comparison when a date is invalid. - Added new date output formats for recordsets. 2.53.05 (02/03/2017) - TreeViews now correctly select their first element on start. - Improvements to the input pipeline. - TreeViews now automatically display the selection, removing the need to press "OK". 2.53.04 (01/03/2017) - Added a test to initialize the Philips LED system only if the socket doesn't answer, to avoid infinite loops when the application is restarted. - Room booking: Now using start date+time instead of id to validate events. Adding a flash reservation now automatically confirms it. 2.53.03 (28/02/2017) - Removed path for all root commands. - Room Booking: Added one optional parameter to function TVTools.roomBookingInitInfo(room record set, event record set, confirmation delay). If confirmation delays is greater than zero, it's the maximum delay for the booking to be confirmed before it's automatiacally canceled. - New room booking javascript functions: TVTools.roomBookingConfirmEvent() confirms the actual event. TVTools.isConfirmed() returns if the actual event has been confirmed. - New javascript function for design objects: isVisible(), which returns "true" or "false" whether the object should be visible or not. - Fixed problem when several script functions were called at once. 2.53.02 (24/02/2017) - More improvement to the page script calling. - Fixed date/time synchronization with server when on Android 6 or later. - Modified the way su commands are called. - Fixed logcat web service command, now the returned text has carriage returns. 2.53.01 (21/02/2017) - More improvements to the communications between the script engine and the designs. - Fixed freezing during design page change. 2.53.00 (21/02/2017) - Now connecting with NTFS security on secure servers, TLS 1.2 on Android 5 or later, otherwise TLS 1.0. - All logins and passwords are now encrypted with AES 256 in the .INI file. - Avoiding redundant calling of design player's playNextPage and calling a page script while the page is changing/reloading. 2.52.16 (20/02/2017) - roomBookingAddTime(time) now checks if the room is available during the additional period. The function can return: "NO_EVENT": there's no actual event to extend. "RB_NOT_INIT": room booking hasn't been initialized. "ROOM_OCCUPIED": the room isn't free during the requested period. "true": everything is ok. 2.52.15 (17/02/2017) - Compiling with API 24 (Android 7 Nougat) SDK. - Changed fonts downloading to evade the Android 4.4 font system locking the directory problem. - New room booking Javascript function: roomBookingAddTime(time). Adds a specific amount of time to the actual event. The format for time is "HH:mm" (24 hour mode hours:minutes). - Tweaked the TVSlide startup on Philips 10BDL3051T tablets so that it lets their mediaplayer start to enable the LED socket server. 2.52.14 (15/02/2017) - The debugview and information in everyWhere now clearly warn you if a device is not rooted. - Disabled subtitles again because of the stupid bug of the M8S. 2.52.13 (14/02/2017) - The "dummy" "¤" character in the active key field of interactivity of design objects is now ignored and just permits to add scripts without interactivity. - The scripts to grey out objects in the message info bar are now working. 2.52.12 (13/02/2017) - Changed the way the script engine works, there's now one instance per design. - Implemented the info bar for messages. - New script function for button: getButtonType() returns the button type for message designs. Format of the returned string is "TYPE,PAGE,ID", TYPE is one of the values below and PAGE and ID are the page/id of the greyed out version of the button. "MSG_PREV" if the button is to display the previous message. "MSG_NEXT" if the button is to display the next message. "MSG_INFO" if it's the info button for messages with "big" versions. 2.52.11 (13/02/2017) - Improvements to the message system: Messages read are now marked as such server side. - New command: Android/SetMessageInfoBarDesign Permits to set the design for the message info bar. - Interactive objects now restore their old animation after the 'pressed' animation. 2.52.10 (03/02/2017) - Updated to Exoplayer 2.2.0. - Basic message list management. - The number of unread messages can be displayed in a design's text box using "#UNREADMESSAGES". - Answer commands #079 (Channel change) and #080 (IPTV reset). - Can now view all unread messages, OK = continue, EXIT/BACK = exit messages. 2.52.09 (27/01/2017) - Messages are now modal and intercept all remote control events. - The text types in the dashboard is now injected into the message design. - Messages now have basic interactivity, you can close them with the "back/exit" key of the remote control. - The #TITLE or #TITRE and #TEXT or #TEXTE text box commands will be replaced by the title and the text of the message. 2.52.08 (26/01/2017) - Fixed default page for containers lasting forever even if it has a duration. - Reverted the management of "onPause" to prevent the application going in background to stop it. 2.52.07 (25/01/2017) - Fixed the problem when a single design was on a timeline and looped. 2.52.06 (23/01/2017) - Two new developer/maintenance commands ("Commande Patrick"): "SendKeys " permits to send a series of key as if they were sent from a keyboard, remote control or other input devices. "ListMedias" lists all medias present on the device. - Now sending IP and free storage space with findDevice. 2.52.05 (20/01/2017) - Disabled subtitles in MultiStream to stop the damned M8S from crashing. 2.52.04 (20/01/2017) - Now sending the mac address of the player to the server when calling findDevice. - 250ms anti spam system for remote control input. - 750ms anti spam for channel changing in MultiStream. - Text and image boxes without active key no longer have the button animation. 2.52.03 (12/01/2017) - Added a button down animation when interactive elements are touched or clicked in a design. - New .INI parameters: InteractiveDelay : Anti spam system for touch/click, defaults to 2500 milliseconds. ButtonAnimRatio - Amplitude of the "button down" animation, defaults to 85, meaning the button will be reduced to 85% of its size when clicked. 2.52.02 (11/01/2017) - New .INI entries for virtual resolution and display offset: VirtualResX and VirtualResY is the virtual resolution for the content. OffsetX and OffsetY are the X and Y offsets of the content. - Upgraded to ExoPlayer 2.1.1. - Implemented LibVLC as a new option for video playback. It can be enable in the .INI with "EnableLibVLC = 1". Default is disabled for now. - New command "SynchronizeDevices" to synchronize playback on several players through WebSocket. Param 0 is the synchro group name Param 1 is the number of players (not used) Param 2 is the synchronization timeout in milliseconds. Param 3 is the url of the WebSocket server, syntax: "ipw=
". - Changed IPTV MultiStream to fit the new server functionalities. - Moved MultiStream channel display when zapping to the left. - Added 750ms antispam delay for TV zapping. 2.52.01 (13/12/2016) - HTTP resume is now enabled by default. - Activating true portrait mode on MXQ Plus devices (requires a reboot). - Fixed Designs Treeview container generation when Index and Level fields aren't defined as integer in the recordset. 2.52.00 (05/12/2016) - New javascript function TVTools.initVar("variable name", "value"); It does the same than setVar, except that it does NOT call the variableChanged callback in the page script. - Fixed a special case in the room booking free range detection. - New javascript function TVTools.setLedColor("type", "color1", "color2", "blink rate"); Enables LED color changing for the devices which are equipped with such a feature. "type" is the type of device. For now, only "PHILIPS" is supported. "color1" is the desired color, in hexadecimal AARRGGBB format. If AA is 00, the leds are turned off. "color2" is the second color when blinking is desired. "blink rate" is the rate in milliseconds at which the two colors blink. If "0", blinking is disabled. - Javascript functions "inputTime" and "inputDuration" have been merged into a single function: TVTools.inputTime("title","interval", "variable", "okText", "cancelText"); 2.51.11 - New script function TVTools.question("title","message","variable","okText","cancelText"); Opens a modal question requester. It will put "OK" or "CANCEL" in "variable" depending on the user input. - IPTV is using Kodi again. 2.51.10 - Added "gradient" option to the timeline, to create a color gradient rather than plain colors. Values are decimal, from 0.0 to 1.0. - New script function TVTools.getDateDiff("date1","date2","format", "mode") returns the difference between two dates. mode can be "hours", "minutes" or "seconds". - New script functions for room booking: * TVTools.roomBookingInitInfo("room recordset", "event recordset"); Initializes the room booking system, parameters are two strings with the numbers of the room and event recordsets. * TVTools.roomBookingAddEvent("start", "end", "details"); Adds a room booking reservation to the actual room between start and end dates (format: "dd/MM/yyyy HH:mm") providing details of the event. * TVTools.roomBookingRoomAddEvent("start", "end", "roomname", "details"); Adds a room booking reservation to the specified room between start and end dates (format: "dd/MM/yyyy HH:mm") providing details of the event. * TVTools.roomBookingSelectNearbyFreeRoom("title", "start", "end", "variable", "okText", "cancelText") Will search among the nearby rooms those which are free in the start to end timeframe and then permit the user to select one and book it. * TVTools.roomBookingEndEvent() Ends the current event of the current room. - New script function TVTools.inputDuration("interval", "variable", "okText", "cancelText"); Permits the simple input of a duration. "interval" is the minimum time interval. E.g. if interval is "15", the time selector will allow 00:00, 00:15, 00:30, 00:45, 01:00, 01:15, etc... "variable" is the name of the variable in which to put the result. "okText" is the text of the OK button of the selector. "cancelText" is the text of the CANCEL button of the selector. - New callback javascript function variableChanged(variable, value) in the page script. This callback is called when a variable is changed in a script. This happens e.g. when any kind of input is finished. - New script function TVTools.blockingAlert("Title", "Message", "Seconds"); Displays a modal alert box with title and message during a specified amount of seconds. - New script function TVTools.setInteractiveMode("remote/touch"); Puts the device into remote control or just touch mode. In touch mode, there's no currently selected highlighted item. 2.51.09 - You can now use scripts in text areas of designs with the #SCRIPT command. Syntax : #SCRIPT("function_name("arg1", "arg2")") The javascript function must be in the page's properties interactive tab specific commands area and must return a String. 2.51.08 - Room booking beta version. - Room booking timeline object in URL animations: timeline:(mode=x,recordset=x,backcolor=AARRGGBB,futurecolor=AARRGGBB,pastcolor=AARRGGBB,nowcolor=AARRGGBB,starttime=HH:mm,endtime=HH:mm) mode is 0 for now, reserved for eventual future different timelines. recordset is the number of the recordset containing the TVTools Booking data. backcolor is the background color of the timeline in hexadecimal AARRGGBB format (alpha, red, green, blue). futurecolor is the color of future events. pastcolor is the color of past events. nowcolor is the color of the bar showing the current time. nowbarwidth is the width of the bar marking now (default: 5). starttime is the start time of the timeline. endtime is the end time of the timeline. 2.51.07 - Fixed recordset filtering so that filters 3 and 4 also work. - Made type 0 date format in recordsets more permissive by automatically removing any alphabetic characters. 2.51.06 - Fixed container default page management for "special" designs. - Changed some errors to warnings to avoid confusing the user. - Implemented the "center vertically" option for text boxes in containers. 2.51.05 - Support of the "whoAmI" command to identify players. 2.51.04 - Added device and server informations to the quit dialog. - Now using a FrameLayout as base layout, which removes size restrictions on children, modified to emulate position values of a RelativeLayout. - DynamicWeb can now be rotated with 4 (90° left) and 8 (90° right) in the "Interactive" field. - Basic support for "IPTV" messages enabled. 2.51.03 - Changed method to retrieve logcat, no longer using a file. - Fixed display of images starting with "C:/tvtools". 2.51.02 - Fixed "RotateSceen = 2" mode (reverse landscape). - Added more securisation to the .ini save routines. - Update to ExoPlayer 2.0.4. - Implemented sending mac address with the findDevice web service connexion, but it's disabled for now because of backwards compatibility problems. - Implemented "array" (mode 5 and 6) containers. 2.51.01 - Added "RotateScreen" to .ini, which rotates the display without changing orientation. Defaults to 0 (normal orientation). 2.51.00 - Implemented download resume mode, activated by the .ini parameter "HttpResume". If 1, downloads will attempt to resume if failed. Defaults to 0 - Fixed a flaw in the download routine that could result in files being incompletely downloaded. 2.50.82 - Added "HttpTimeOut" parameter to .ini, which is the timeout of HTTP connections, in milliseconds. It defaults to 5000 (5s). - Upgraded to Exoplayer 2.0.3. - Enabled language change via the everyWhere Manager. - Added the "clock:" command in the ignored files of Design download. - Synchronized .ini storage to avoid two threads writing at the same time. 2.50.81 - Added "StreamExoplayer" parameter in the .INI. 1 means the player will also use ExoPlayer for network video flux. - Fixed the designs trying to download even http links to video streams, generating a false download error. 2.50.80 - More fixes to the fonts system. 2.50.79 - Upgraded to Exoplayer 2.0.2. - Fixed weather because of the time format change. - Fixed empty recordset detection. - Added more special cases for font parsing. 2.50.78 - Upgraded to Exoplayer 2.0.1. - Javascript: added time, date and list selectors for input fields, so you now have: * TVTools.inputText(title, message, variable) for text/numbers. * TVTools.inputTime(format, mode, variable) for times. If mode is "24", works in 24 hours mode, otherwise it's 12 hours with am/pm. * TVTools.inputDate(format, variable) for dates. * TVTools.inputList(title, options, variable) for lists. Options are separated by a | (e.g.: "One|Two|Three|Four"). - Javascript: added "onChange" script function which is called when a text field changes. - Javascript: added some date/time functions: * TVTools.getCurrentDate(format) to get the current date. * TVTools.incrementDateMinutes(date, format, offset, precision). Precision is the minutes step of the value returned, for instance if precision = 5, at 11:43 it will return 11:45. * TVTools.compareDates(date1, format1, date2, format2) compares two dates and returns "equal", "before" or "after". - Javascript: Added a calendar event addition function. * TVTools.addCalendarEvent(room, name, date, start, end, event description, date format, time format, account name, agenda name, timezone). The function returns "true" if it succeeded. For this to work, the Google Agenda needs to be installed and the calendar account (Google or Exchange) must be added to the device. 2.50.77 - Now manages multi-page vertical disposition containers properly. - Fixed directory creation for IPTV configuration files. - Elements can now have a "Check Content" flag to not just compare file sizes but also file content before downloading. - Upgraded to Exoplayer 2.0.0. 2.50.76 - You can now create custom splashscreens for each primary schedule sublevel. The launcher splashscreen remains unique. - Some video player (exo and media) fixes. 2.50.75 - Fixed URL encoding so that spaces and all special characters are properly encoded. 2.50.74 - Fixed XML/RSS so that tags work when it's not a "XMLV2" type file. 2.50.73 - If the HTML server doesn't support the "HEAD" request, it will ignore file size and always download. - Enhanced management of "XMLV2" type XML files, and added support for "field/tag" notation in #BDD. - Fixed missing date output format. - Removed the error for not finding the custom splash screen file on the server. 2.50.72 - Fixed container definition files loading. - Upgraded to Exoplayer 1.5.10. - Went back to API 19 (KitKat) Target SDK. - No longer adding ? + random string to URL if there's already a ? in it. - Fixed starting and number of records in a recordset. 2.50.71 - Added "Interactive" argument to .ini, to turn on immersive mode for tablets. 2.50.70 - Added "DisableExoplayer" to .ini to be able to revert to the standard mediaplayer. - Fixed "InitTime" doubling when prefs are rewritten. 2.50.69 - Added logcat to everyWhere player Logfiles menu entry. - The .INI file now contains all possible entries, including those with default values. 2.50.68 - Remove IMMERSIVE mode for full screen to avoid the confirmation message. 2.50.67: - Unassigning surface from ExoPlayer after stopping the video. 2.50.66: - Using KODI for IPTV. 2.50.65: - Back to ExoPlayer 1.5.9. - Added security system if an element lasts longer than it's supposed duration. 2.50.64: - Killing "com.amlogic.SubTitleService" when you start IPTV. - Managing the "don't play if recordset empty" checkbox for designs. - MeteoST displays day time (from sunrise to sunset). 2.50.63: - Added new weather parameters: UV, wind speed and direction, rain chance and humidity. - Weather +0 is now the actual weather. - Reactivated ExoPlayer. - Reverted to ExoPlayer 1.5.6. 2.50.62 - Disabled ExoPlayer. 2.50.61 - New webservice registration system (findDevice) to respect schedule levels at install and when offline. - Big improvement in XML loading times. - Weather now works natively in containers (special mode designs). - Added language info to debug. - Updated to ExoPlayer 1.5.9. 2.50.60 - Animation can now be in recordsets. 2.50.59 - Fixed Timezone display in debug window. - Full reset via everyWhere command (RAZ) now also erases the watchdog log. - Debugview: Displaying more info about ExoPlayer. - Fixed recordset file names with user variables. - Improved speed of container pages génération. 2.50.58 - Fixed stupid Tecbase carriage return problem. 2.50.57 - Updated to ExoPlayer 1.5.8. - DynamicWeb Autoclosedelay now stops the page. - Fixed language for images - base languages are now only EN, FR and DE. - Fixed loading to ignore qrcode: and appicon:. 2.50.56 - IPTV is now only blocking updates while watching TV. - Fixed timeblock management. 2.50.55 - Added a focus request for the IPTV channel grid overlay for Android 5+. - Implementation of the multiple choice question system in designs. - Javascript fix: TVTools.getVar now also returns user variables. 2.50.54 - Fixed a crash with the back key in IPRADIO mode. - Some tweaks in databases for weather, but not finished yet. 2.50.53 - Menu key is completely disabled in IPTV/RADIO mode. - The Back key can now be used to exit the channel grid overlay. - You now need to press "Back" 5 times, each being less than one second from the previous, to get the "Password to quit" dialog box. 2.50.52 - IPTV channel grid overlay has a gray almost opaque background again. - Fixed management of color of selectable text in interactive designs. 2.50.51 - Fixed language page so it leaves even if selected language is the same. - Fixed channel overlay management in MultiStream. - Interface should be more responsive since I'm reacting on "onKeyDown" now instead of "onKeyUp". 2.50.50 - Added support for command "StartIPRadio". 2.50.49 - Changed the way timeblocks are managed so that it will still play if the player date is wrong. 2.50.48 - Fixed TV channel grid crash on Android 4.4. 2.50.46 - Preloading databases during startup to enhance response time. 2.50.45 - Fixed crashing when there's no channel logo. 2.50.44 - TV Channel Grid overlay improvements. - Restored usage of ExoPlayer for video URI starting with "file://" 2.50.43 - Reinforced security for invalid .ini files: - You can no longer change the device name from the .ini editor in everyWhere Manager. - Default volume is now 100 and can be set with "DefaultVolume" in the .ini - Database conditional starts no longer blocks on the last valid element if the playlist has only two elements. 2.50.42 - Fixed XML filtering so that it accepts files with weird characters but still retains several essential symbols. - Fixed file naming problems with video streams. - Channel grid in MultiStream (work in progress). 2.50.41 - Manages the aspect ratio parameter for images in designs. - Fixed crashing bug in XML string cleaner if the string is of length 1. 2.50.40 - Changed the way Keyboard Input Command works, it will play the playlist ONCE now and then return to the main list. - WebViews are no longer forced to software layer. 2.50.39 - Language support for pictures in designs. - Now intercepting all configuration changes to avoid the threads being launched twice. 2.50.38 - Play designs even if all recordsets are empty. 2.50.37 - Fixed possible crash during channel change, when reaching the end of the list. - Fixed the case when a design contains recordsets which are never used and therefore the design was never played. 2.50.36 - Fixed IPTV and Multistream system download. - Now properly uses "channels.xml". - Sound should no longer get back to 0 when leaving and returning to TV. 2.50.35 - New IPTV system from flag.txt generating a special internal playlist. - New IPTV "config.xml" supported. - New command "Android/StartIPTV" to start the special IPTV mode. - Multilangage support for images. 2.50.34 - TreeView containers. - Added "SendUDPCommand" command to send an unicast UDP character string + 0x0A + 0x0D to a specific address and port. - Update to ExoPlayer 1.5.7. - Multilanguage support in text fields of designs. 2.50.33 - From this release on, the software uses ExoPlayer for files and MediaPlayer for streams. - Fixed the file lock problems on video files not released by MediaPlayer. - New playlist format, where media files are in ".publish". - Better transition between two pages with containers. - Command "DatabaseConditionalStart" partially supported, checks first recordset and if not empty, plays the design. - "Flying Boxes" containers. 2.50.32 - Also changed video start/stop synchronization in designs to avoid freezes. - Recordset filtering - Values supported: #DAT - Added information about the device hardware in the information/debug page. - Analog clock in Designs using an URL/VLC animation with: clock:(param1=x1,param2=x2,param3=x3,...) Param can be: type=x Not used yet, only the built in type works. hour=x x is added to the actual time (for instance to change timezone). minute=x second=x Same thing for minutes and seconds. 2.50.31 - Replacing \par in Tecbase XMLs with \n. - Better management of download cancelling. 2.50.30 - This release uses VideoView and not ExoPlayer. Releases which use ExoPlayer will be marked as such. - Design pages with a duration of 0 will last until their last container is finished. 2.50.29 - ExoPlayer instead of VideoView for local videos (not in designs yet). - Managing the "<" symbol as key code in designs for the Android "back" command. 2.50.28 - More fixes to the stopPlayback freezes. 2.50.27 - Changed TVWebView : no wide viewport, no overview mode, layout normal and initial scale to 100. - More fixes to the stopPlayback freezes. 2.50.26 - Went back to Android 5.1 compilation. 2.50.25 - Fixes for videos freezing the player. 2.50.24 - Sorting for recordsets finished. - Removed DNS query from download function because some proxies won't let it pass. 2.50.23 - Media downloads can be via HTTPS now. - Web service can also use HTTPS now. - Proper IP address detection on nVidia Shield and other devices with non eth/wlan networks. - Changed code for scrolling/rolling container speed so the speed is independent from the size of the boxes and elements. - Completely rewrote the recordset system. 2.50.22 - Changed the way fonts are updated. 2.50.21 - Script engine and variables are now global. - Player now takes time constraints of elements in schedules into account. - More fixes for video playback stopping in designs. - The application is now a valid "Android TV" apk. - Changed the code for the speed of rollings so that it's no longer dependent of the size of the text box. 2.50.20 - Fixed the possibility of stopPlayblack to be called twice at the same time in a design's video view. 2.50.19 - Additions to #TIM in design text fields now adds or substracts seconds instead of days. 2.50.18 - Debug view and everyWhere information will now warn if a version built for the launcher is run without the launcher. - Fixed html unescaping for when escape code is multiple & for a single &. - #CNTDWN format enhanced. If you only enter hours, minutes and seconds, it counts to the next day, and then the counter reinits to the next day, etc... If you enter a full date, it counts to the date. Examples: #CNTDWN(date="16/12/2015 10:30:00",format="%w weeks %d days %hh hours %mm minutes %ss seconds") Will countdown to the 16 december 2015 at 10:30, displaying weeks, days, hours, minutes and seconds remaining. #CNTDWN(date="12:00:00",format="%hh:%mm:%ss") Will coundown to 12:00 the next day, displaying hours, minutes and seconds. - Multizones now display the media in the main zone in everyWhere Manager. - ELOverlayMedia now loops. 2.50.17 - Remote control navigation now cycles on the borders (e.g. when on the extreme right object, if going right, it will select the extreme left object). - New script command: TVTools.startApplication("name"); Starts an Android application. 2.50.16 - Script variable names now require quotes. E.g.: #VAR("name") - Changed the script API function TVTools.SetVar to TVTools.setVar to respect the method naming conventions. - Scripts are now in UTF-8. 2.50.15 - New design command: #CNTDWN, provides a basic countdown to a specific date. Example: #CNTDWN(date=01/01/2016 00:00:00) 2.50.14 - Fixed the too agressive file cleaning when using designs directly in commands (Keyboard Input Command notably), which generates dynamic playlists that weren't protected by the PlayList Manager. - No longer displaying the "L" in the version in everyWhere Manager (you can still get that info with the right mouse button menu of the device). 2.50.13 - New prefix for image names in designs: "appicon:nnnn", where nnnn is the class of the Android application you want the icon of. - New command in designs: "#APPNAME(nnnn)", where nnnn is the class of the Android application you want the name of. - Javascript scripting engine (RHINO) added for "specific commands" in design objects: For now, only the function "onFocus()", which is called when an object gets the focus during user interaction, is implemented. The TVTools javascript API is contained in the object "TVTools". The function TVTools.SetVar("name","value"); permits to change a variable, which is defined in text fields with "#VAR(name of variable)". - "@" in the "Active Key" of the Interactive options of a design object means it's the icon of an android application, and that if selected, the application should be launched. 2.50.12 - Massive improvements of tactile and remote control interactivity and navigation. 2.50.11 - New command: OverlayMedia, to play a design or a group in an overlay over the normal content. 2.50.10 - Fixed bug with custom splash bitmap being recycled. - Fixed bug of animations (GIF, etc...) no longer being loaded with new filename system. - New Command: LaunchApp, to launch an Android application. 2.50.9 - Displays launcher version in debug view and everyWhere informations. - Managing the case when the flags in two different schedule levels are the same (same date and same content). Yes, it happened. - Removed the launcher mode in the manifest for TVSlide when using TVLauncher so that TVSlide no longer advertises itself as a launcher, to avoid the reappearing of the "Select Launcher" dialog on next reboot. - TVSlide Version now has "L" at the end if TVSlide is built for use with TVLauncher. - Enhanced design remote control interactivity. 2.50.8 - New download/play tasks management. Now the only task to start playback is the clock task. - New parameters in the .ini: ErrorTolerance = x (default: 5) x being the amount of file download failures tolerated to determine if the download of a new publication is valid or not. Be aware that any missing file will be replaced by transparent or black on screen. The number of failures will be reported to the webservice and displayed in the Error column of everyWhere Manager. Language = xxxxx Changes the language for the application only (not the system). Default is the system setting. Accepts strings like "en_US" or "fr_FR". TimeZone = xxxxx Changes the timezone of the system. Defaults to "Europe/Paris". - Configuration directory on the server is now "TVTSlide/.TVSlide-Config". - If the image "tvsplashscreen.jpg" is present in the configuration directory, it will be used as initializing/loading screen instead of the default TVTools logo. This allows server specific splash screens. - qrcode in designs now accepts user variables. 2.50.7 - New parameter in the.ini: PreloadDays = x (default: 2) x being the amount of days preloaded when the schedule level is in week day or full daily mode. - Native (mode "special") support for QRCodes in designs. - Initializing/Loading screen has been changed to a more sober TVTools logo on a black background. 2.50.6 - The TVSlideOVImage command now accepts parameters: offset and scale. E.g. offset=(-2,5) scale=(75,75) would display the selected overlay image with an x offset of 2% of the screen size towards the outside, an y offset of 5% towards the inside, and scaled down to 75% of its size in both width and height. 2.50 - Fixed the memory leak bug that was due to Android not correctly freeing views forced to have a hardware surface.