Latest posts from Codename One.
Blog

Block Copy/Paste & Faster Performance on iOS
I discussed both of these last week but we’ve made some progress that warrants a dedicated post. We added a new feature that allows you to block copy & paste on a text component either globally or on a case by case basis. This is helpful for highly sensitive applications. This feature was previously restricted to Android but is now available to iOS as well with no change required to your code. ...

TIP: Use Android Gradle Dependencies in Native Code
Integrating a native OS library isn’t hard but it sometimes requires some juggling. Most instructions target developers working with xcode or Android Studio & you need to twist your head around them. In Android the steps for integration in most modern libraries include a gradle dependency. E.g. we recently published a library that added support for Intercom. The native Android integration instructions for the library looked like this: Add the following dependency to your app’s build.gradle file: ...

Questions of the Week 41
We are releasing a small Eclipse update today, it’s small because it isn’t a full release that includes the latest features/libraries but rather a minor bug fix to the previous release which was missing the UWP build target. One of the biggest changes this week is the fix for the build performance issue mentioned below. It might also speed up general app performance for some use cases! The biggest change this week is the support for peer component Z-ordering on practically all platforms, this completely changes the use cases for Codename One and we intend to take full advantage of these new capabilities moving forward. ...

Intercom Support
We use intercom.io for our website support system you can see it as the chat button on the bottom right of the page. The true value of this tool is in it’s ability to deliver a unified interface everywhere, normally this stretches into native mobile apps as well. As a result we decided to port the native intercom device API to Codename One so it will be easy to deploy everywhere. ...

Disable Screenshot, Copy & Paste
Continuing our security trend from the past month we have a couple of new features for Android security that allow us to block the user from taking a screenshot or copying & pasting data from fields. Notice that these features might fail on jailbroken devices so you might want to check for jailbreak/rooting first. Blocking screenshots is an Android specific feature that can’t be implemented on iOS. This is implemented by classifying the app window as secure and you can do that via the build hint android.disableScreenshots=true. Once that is added screenshots should no longer work for the app, this might impact other things as well such as the task view etc. ...

Strong Android Certificates
When Android launched RSA1024 with SHA1 was considered strong enough for the foreseeable future, this hasn’t changed completely but the recommendation today is to use stronger cyphers for signing & encrypting as those can be compromised. APK’s are signed as part of the build process when we upload an app to the Google Play Store. This process seems redundant as we generate the signature/certificate ourselves (unlike Apple which generates it for us). However, this is a crucial step as it allows the device to verify upgrades and make sure a new update is from the same original author! ...

TIP: Use Tethering to Simulate Slow Network Connections
I recently had to debug some code on Android Studio and was reminded how awful that IDE really is. IntelliJ is a pretty good IDE but Android Studio is remarkably slow even for trivial projects… One of the things that make it slow (besides RAM usage) is the approach of downloading everything it needs dynamically. This might be unnoticeable on Googles fast networks where this probably runs instantly. But on my fast home network this was painfully slow. ...

Questions of the Week 40
Today we have the first weekly release since the 3.6 release and as such it is choke full of changes which is natural given that we skipped a release and had a lot of code pending to “post release”. So please be vigilant especially if you use peer components and let us know about potential regressions ASAP. an anonymous poster asked a recurring question that we still don’t have a great answer for, how to capture timed video. This is possible to do with audio using the MediaManager but it can’t be done with video which can only use Capture. However, thanks to the new PeerComponent work we might expose low level camera API’s including video/picture capture with viewfinder etc. ...

Z-Order Peers in iOS & JavaScript
Just last week I mentioned the effort we were taking to bring the z-ordered peer components into other platforms and I’m pretty happy to report that tomorrows update should include support for iOS & the JavaScript ports for z-ordering. What this means is that peer components (e.g. maps, videos, browser etc.) can reside below a component in the Codename One hierarchy and won’t always be on top as it is now. This opens up Codename One for a huge set of use cases and makes building some types of apps (e.g. Maps) much easier! ...

Can Execute Hint
Display.canExecute(url) provides us with a generic tool to test the availability of a feature before executing a command. This is very useful for inter-app communications and allows us to achieve various things such as launching Google Map instead of Apple Maps on iOS. Lets say I want to navigate using Google Maps if it’s installed in iOS but if not I’ll settle for Apple Maps I can do something like this: ...

Jailbreak/Rooting Detection
iOS & Android are walled gardens which is both a blessing and a curse. Looking at the bright side the walled garden aspect of locked down devices means the devices are more secure by nature. E.g. on a PC that was compromised I can detect the banking details of a user logging into a bank. But on a phone it would be much harder due to the deep process isolation. ...

TIP: Customize Tabs Behavior
The Tabs component isn’t our first attempt at the the multi-tab UI and as such we made a lot of changes to the logic to facilitate a level of flexibility that can answer most use cases e.g. Tabs that can be closed with an X on the top right section or span multiple rows. Most developers are oblivious to this capability which is a shame, it is indeed a bit obscure. The code below demonstrates multi-line tabs: ...