Releases: TotalCross/totalcross
v7.1.0
Added
- Added new build options to disable Skia and use our original graphical primitives, resulting in a very smaller libtcvm (~3MB) that also works on OpenBSD. Thanks @erathke for this contribution! #287
Usage:
cmake <source_dir> -DUSE_SKIA=OFF
Changed
- Updated library Axtls from version 1.5.4 to 2.1.5 to include support for TLS 1.2.
Fixed
- Android
- Reverted Android build to target SDK 29 in order to fix support for Android 11.
- Launcher
- Fixed Android deploy on case sensitive systems.
- Simulator
- SSL: Fixed bug on some JDK implementations that would throw IOException on getInputStream after EOF.
v7.0.4
v7.0.3
Highlights
-
Performance boost and reduced binary size on Linux and Android - This was actually our mistake, those targets were being built for debugging since we started using CMake. This release should have performance at least twice as better as the previous releases built with CMake.
-
Build system improvements
- SQLite3 source code removed from our repository, downloading and patching is performed by CMake.
- Android build improved, it should be A LOT faster for most systems.
-
Edit and virtual keyboard performance improvements
Known issues
- Android prebuilt binaries included in this release are broken, skip this release for Android or rebuild the binaries from the sources and replace them locally.
Changed
- Removed Cielo Lio text printing support, reducing the Android binary size. (Let us know if you need this feature back)
Fixed
- Android:
- Fixed launching third party apps using Vm.exec
- Fixed permission for writing on storage for android-29
Starting from target-sdk 29 application should use scoped storage
https://developer.android.com/training/data-storage#scoped-storage
- API:
- MessageBox: fixed NPE during unpop when the MessageBox is created without buttons (i.e. button captions is null) - #304
v7.0.2
v7.0.1
Added
- Added a few tweaks to improve drawing performance:
- Improved color type conversion performance by using compiler specific byte swap functions.
- 🚀 Greatly improved image drawing performance by performing color type conversion only once, instead of letting Skia handle it automatically on every draw operation.
- 🚀 Greatly improved drawing performance for fully opaque images, by skipping alpha channel conversion on draw. Drawing JPEGs and opaque PNGs got over 10 times faster on some tested devices.
- Improved text drawing performance by caching font objects and avoiding unnecessary font loading.
Changed
- Force usage of software graphics on Linux/ARM systems until we find a proper way to detect support for hardware accelerated graphics - #259
Fixed
- Class java.util.Objects would sometimes be not available on the device.
- Segfault during SDL initialization reported in some systems - #263, #265
- Fixed screen not updating on some devices, by refreshing the SDL_Surface on repaint.
- XmlTokenizer was still trying to use the old byte implementation when running on device.
v7.0.0
Welcome to 2021, and our first stable release! Let's get straight to the objectives:
- Huge bug fixes - Many long-standing bugs have been resolved;
- arm64 distribution - Now deploy TotalCross applications for linux arm64 is much easier;
- Skia update - A new room for improvements.
Join our community on the telegram to give feedback about this release!
Huge bug fixes
Our main goal with this version is to keep it as stable as possible. We need a solid foundation for the future of the tool. With that we focus on correcting new and old problems that accompanied us in version 6. The main bugs resolved and that are very important for totalcross stackholders are:
VirtualKeyboard
issues: this component widely used for embedded devices has some bugs that hinder the execution of applications;- Android black screen: now everything works correctly when running the .apk for the first time;
- Build issues: we updated the versions of Android API, Android NDK and Gradle. Fixed bugs related to the build for legacy systems (GLIBC issue). Changes were made to implement CICD with Github Actions.
You can see the full list of issues resolved at the end of the note.
arm64 distribution
As a cross-platform tool we need to pay attention in market changes and one of those that has caught our attention is the adoption of arm64 devices. To meet this demand we are launching a new feature:
Any package made with the
-linux_arm
flag will also result in arm64 artifacts.
As always just transfer the files to your device! You can customize the build for your distro for now the TotalCross/totaldocker
repository can help 😅
Skia update
Our Skia branch was starting to get outdated, so we upgraded to branch m87
in some platforms. They are: linux
(x86_64) and linux_arm
(32v7). This opened the door to a new room of enhancement that we will work along the 7.x.x lifecycle. Some bugs have already been detected and should appear as minors or patches. In the next versions we will have the new Skia on more platforms.
Fixes
We closed the following issues:
- #124
- #140
- #185
- #176
- #180
- #184
- #181
- #193
- #198
- #123
- #179
- #165
- #92
- #190
- #234
- #238
- #236
- #248
- #177
- #235
- #231
- #217
- #189
- #196
- #178
You can see all of these issues in the repository https://github.com/TotalCross/totalcross/issues.
v6.1.1
6.1.1 - October 2020
Hello! This minor release has as main objective:
- Static SDL2 - Brings it back to work properly on Angstrom for target Linux ARM;
- Display env-vars - Configurable displays bounds;
SSLSocketFactory
- ChangeSSLSocketFactory
to always yield aSSLSocket
;- Fixes - Minor bug fixes 🔧.
Join our community on the telegram to give feedback about this release!
Static SDL2
SDL is now statically linked for Linux arm32v7. Some very simple systems do not have the possibility of installing SDL2 in an easy way. On Angström-type systems this required a certain kludge exporting the path to extern .so
with LD_LIBRARY_PATH=<path-to-.so>
. We didn't want it to be hard, that's why the change!
Display env-vars
We now introduce 3 environment variables for execution. Since we do not have an automatic viewport they need to be set up they are:
TC_WIDTH | TC_HEIGHT | TC_FULLSCREEN | |
---|---|---|---|
Description | Size of width in pixels |
Size of height in pixels |
Only do something when comes to false or 0 |
Values | int | int | bool |
You can use them as follows for Linux and Linux ARM platforms:
$ TC_WIDTH=1280 TC_HEIGHT=720 TC_FULLSCREEN=false ./Launcher MyApp
When the fullscreen is deactivated the TC is opened in a window and its logic like:
width -= width*0.09;
height -= height*0.09;
That should change soon. See more in #99.
The syntax #<number> is related to pull request in GitHub repository.
SSLSocketFactory
Should always yields a SSLSocket
when in SSLSocketFactory
. As
SSLSocketFactory
extends SocketFactory
and does not override the
createSocket(String, int)
method, and calls from super classe. As
SocketFactory
yields plain sockets...
This fix just delegates to createSocket(String, int, int)
passing the default
Socket.DEFAULT_OPEN_TIMEOUT
as the open timeout argument. Maybe it should be
better to call new SSLSocket(String, int)
, but this constructor does not
exists yet. See more in #122.
Thanks @jeffque 😃!
Fixes
Corrections were made:
- Launch args not being parsed, i.e., ex.
/density
#94; - SDL didn't work properly in systems without libSDL2-dev,
CreateRenderer()
bug #99; - SDL use
SDL_Surface
instead ofSDL_Renderer
when hardware accelerated graphics is not available; - iOS: Update
youtube-ios-player-helper
from 0.0.16 to 1.0.2. This is required because UIWebView, a component used by this dependency, is deprecated resulting the error ITMS-90809 when uploading the app for the app store; - iOS: fix missing icon files when generating;
- Remove some Sun private libraries are not guaranteed to be available to any JDK besides
the Oracle JDK 8 or previous; - Fix
AnonymousUserData
usage; StringBuffer
adds missingCharSequence
constructor. #135
v6.1.0
6.1.0 - July 2020
Welcome to the July 2020 release (version 6.1.0). We hope you enjoy the updates in this version. The key highlights are:
- Maven plugin new version - your pom.xml file should change;
- KnowCode Compatibility - It is now possible to run Android XMLs Layouts on Linux Arm;
- Virtual Keyboard - New look and animations;
- Using external applications - Through the runtime.exec method;
- Anonymous user statistics - There is now an option to contribute by sending anonymous data;
- Changing the SDL implementation - Removing the SDL code from within the TotalCross SDK and changing the static to dynamic link.
Join our community on the telegram to suggest activities and learn about development for embedded systems.
Maven plugin new version
After the latest Language Support for Java extension updates, some systems had compatibility issues with Java 11. We launched a new version of the TotalCross maven plugin to solve them, the 1.1.6. You must change the following line:
...
<plugin>
<groupId>com.totalcross</groupId>
<artifactId>totalcross-maven-plugin</artifactId>
<!-- This line: -->
<version>1.1.6</version>
<configuration>
<name>${project.name}</name>
<platforms>
...
KnowCode compatibility
In this version, a name tag was added to ContentHandler (Pull request #20), making it possible for KnowCode, a tool that uses a neural network, to convert interface images to XML and TotalCross, allowing it to run on Linux Arm with the same performance as an application built directly with the TotalCross SDK.
Find out how to use KnowCode by clicking here.
Virtual Keyboard
In this milestone some improvements were implemented in the keyboard, which are:
- In Linux Arm the virtual keyboard is enabled by default. To disable it just put
Settings.virtualKeyboard = false
in yourMainWindow
class; - In order to improve performance and make the design cleaner, the ripple effect animation on the keyboard buttons was removed;
- In order to obtain more effective responsiveness, the calculations of width and height were changed, leaving it less dependent on absolute values;
- To make the interface richer, sliding animation was added to the popup and unpopup of the virtual keyboard. You can see these changes in detail in pull requests #40 and #65.
In the images below you can see the visual difference:
Before:
After:
External applications
To allow the use of external libraries in the simplest way possible is one of TotalCross goals. There is a branch in our repository called feature/tcni-rebased
which (still a Proof Of Concept) allows the use of these external libraries
TCNI is a foreign function interface programming framework that enables TotalCross/Java code running in a Java virtual machine to call and be called by native applications and libraries written in other languages such as C, C ++ and assembly.
But while TCNI is not ready to be launched, we have developed a middle ground that allows the use of external applications in TotalCross, through the method runtime.exec()
. This method creates a new process and executes the command you passed in this new process (Pull request #21).
For example, create a python script to access a temperature sensor and with the runtime.exec()
get the return of it, as you can see in this example:
To better understand how it works using a sample application click here.
Anonymous user statistics:
When TotalCross decided to become a free and open source tool, the decision was made to no longer require an activation key from the user, which was previously necessary to differentiate free users from customers. As this removal would imply resolving a series of errors and making many changes, the team decided to generate an eternal and unlimited key and use it as a default, provisionally, until we resolve some pending issues and can go back to this point and withdraw it for good.
So in 6.1.0 we went back to that and removed the activation key, including the class register.java
, as you can see in detail in pull request #53.
And to better track which users preferences when using the TotalCross SDK, we set up the SDK to ask if the developer wants to contribute anonymous data and if the answer is positive, we record parameters for Deploy, timezone, launchers, operating system version and version of TotalCross used.
You can see the details of the implementation in Pull Request #66.
Change in SDL implementation
We chose to remove SDL code from the SDK TotalCross in this version to improve the build organization and allow people to customize the build of their facilities according to their hardware.
In addition, we changed the SDL link from static to dynamic because:
- Allows the distribution to have corrections and be used without having to compile the TC again but the guy needs to install the SDL before TotalCross
- Avoids License compliance problems as FOSSA warns about the SDL license (GPLv3).
For details, see pull requests #23, #24, and #68.
Other changes:
- Reverted scroll flick animation back to a previous version to fix a bug that caused the content to be pulled back after a scroll;
- Fixed creation of TotalCross modules (.tcz files) using Java headless;
- Fixed round border on Container;
- Fixed Switch Bar not being drawn;
- Fixed wrong size returned by
FontMetrics.stringWidth(String s)
on devices that use skia with .ttf file type fonts. - Fixed Torizon/Wayland SDL initialization;
- Fixed FadeAnimation: the animation is now working as intended.