NeoMAD 3.8 release notes

April 7, 2015

New features

SQLite database

The com.neomades.database package provides SQLite database API in order to store and read data in local SQLite databases (in the device).

Network queries

The com.neomades.content package is a network library that makes networking for applications easier and most importantly, faster. It simplifies RPC-type operations used to populate a UI, such as fetching a page of search results as structured data.

This package is not suitable for large download or streaming operations, since com.neomades.content holds all responses in memory during parsing. For large download operations, HttpRequest must be used.

Note: the new RSSReaderExample sample application provides a working example of how to use this package.

Event bus

com.neomades.event is an event bus designed to decouple different parts of your application while still allowing them to communicate efficiently.

Note: the new RSSReaderExample sample application provides a working example of how to use this package.

Android 5.0

Applications built for the ANDROID target with ActionBar enabled use the “Material Design” theme.

Android Reference Libraries

It’s now possible to use external Android Reference Libraries provided as projects (like Facebook, Google Play Services, …) in NeoMAD projects. The URS provides a new tag <specific><android><project> to declare them. The <project> tag has a path attribute to specify the location of the external project.

Log

The com.neomades.util.Log class allows to log traces with different levels of severity (INFO, WARN, DEBUG, ERROR).

Other new features and enhancements

  • NeoMAD is now compatible with JRE 1.8.
  • New classes and methods:
    • com.neomades.platform.ApplicationDelegate: intented to be used in specific-code in order to get access to the native lifecycle of the application
    • com.neomades.graphics.Density: convert values between dp units and pixel units
    • com.neomades.ui.listeners.ListScrollListener: listen to changes in the scroll position of a ListView
    • Application.isCreated() and Application.isStarted()
    • Controller.getScreenCount(): get the number of screens in the back stack
    • scrollToPosition() and scrollToLeft() in ListView and HorizontalListView: manage scroll position
    • MenuItem.setTextColor(): change the color of the text of a MenuItem
    • MenuItem.setVisible() and MenuItem.isVisible(): manage the visibility of a MenuItem
    • Screen.getOrientation(): get the device orientation
    • Screen.setBackground(): change the background of a Screen
    • Screen.setTitleKeepNativeCase(): enable custom string case on title
    • ScrollView.scrollTo(): manage scroll position
    • StringUtils.replaceAll(): replace strings using regular expression
    • View.runOnUiThread(): run a task in the UI thread from a View
  • Improve the speed of:
    • FileInputStream and FileOutputStream
    • String.getBytes()
  • Windows Phone and Windows 8:
    • Now, when building for the Windows Phone and Windows 8 targets, 2 binaries are generated (x86 and ARM). The x86 version is for simulator or PC, the ARM version is for phones and tablets.
    • The value of the applicationidentifier tag is used for Windows 8 as Application Store identifier. If not set, the package name of the application is used instead.
    • Signature for Windows Store has been implemented. It is possible to declare a <windows> tag inside the <signature> tag in the URS file. This tag contains two mandatory attributes: packageCertificateKeyFile for .pfx file and packageCertificateThumbprint.
    • RichTextLabel is now supported on Windows Phone and Windows 8.
    • GridView is now supported on Windows Phone and Windows 8.
    • Pull-To-Refresh is now supported on Windows Phone.
    • ProgressBar is now supported on Windows Phone.
    • EditMode.CAP_WORD and EditMode.AUTOCORRECT_OFF are now supported by TextArea and TextField on Windows Phone.
    • Application.setForcedTheme() is now supported on Windows 8.
    • The support of ListView and HorizontalListView has been improved, they are now using the best native component (ListBox, LongListSelector, ListView) for each Windows platform and version.

Compatibility changes

  • WINDOWSPHONE71 to WINDOWSPHONE78 targets have been removed. Please use the WINDOWSPHONE80 target instead.
  • The deprecated ANDROID22 to ANDROID40 targets have been removed.
  • Applications built for the ANDROID target with ActionBar enabled have a new look & feel for Android devices 4.0 and later (“Material Design” look & feel, new Android ActionBar).
  • Android SDK requirements have been changed: now NeoMAD needs SDK Platform with API level 21, Android SDK Tools revision 24 and Android SDK Build-tools revision 21 or later.
  • The View.setBackgroundColor(null) and View.setBackgroundImage(null) method calls will throw a NullPointerException. To reset the background of a View call setBackground(null).

Fixes

  • iOS:
    • Fix a bug in JSONObject with JSON strings encoded in UTF-8
    • Fix NeoMADSetup to be compatible with JRE 1.7
    • Fix TransCompiler bug with inner classes with declaring class field
    • Fix ScrollView parent to be redrawn when the scroll size has changed
    • Fix FrameLayout: the margins of views inside the layout were not always taken into account, depending of the layout alignment of the view
    • Fix HttpRequest in background thread: sometimes when HTTP responses were very fast, the thread stayed lock and the response never arrived
    • Fix View.setBackgroundImage(Image) and View.setBackgroundColor(Color): they were throwing a NullPointerException if the image or the color was null
    • Fix HttpRequest.setMethod() exception bug with DELETE, TRACE, OPTIONS values
  • Android:
    • Fix HttpRequest auto-redirecting URLs in API Level 4 (e.g. it occurs when HTTP response is “301 Moved Permanently”)
    • Fix FrameLayout: layout alignment of views inside the FrameLayout was broken if the views had a top or left margin
    • Fix Keyboard to be hidden when TextField or TextArea were present in the Screen
    • Fix View.setBackgroundImage(Image) and View.setBackgroundColor(Color): they were throwing a NullPointerException if the image or the color was null
  • Windows Phone and Windows 8:
    • Fix String constructor with byte array: remove ‘0’ characters at the end of created string
    • Fix File root folder in Windows 8
    • Fix File.listFiles(), File.mkdir() and File.mkdirs() in order to use the right separator in Windows 8
    • Fix TextField and TextArea when default text is on and an empty text is set
    • Fix StringUtils.replaceAll(), regular expressions are now supported
    • Fix ImageLabel default layout alignment (HCENTER | VCENTER)
    • Fix Timer.schedule() bug, the corresponding thread was never destructed
    • Fix TextLabel.setLines() and TextLabel.setMaxLines()
    • Fix CustomDialog position: now the screen’s title is under the custom dialog
    • Fix ScrollView.scrollTo() for Windows 8
    • Fix CustomDialog default content alignment for Windows 8
    • Fix Controller.resetScreenStack() for Windows 8
    • Fix SlideScreen default touch areas to be on the edge of the screen
    • Fix TextLabel marquee alignment when its width is shorter than the available width
    • Fix HashTable.equals() method
    • Fix Vector.equals() method
    • Fix ViewPager.destroyPage() to be called with the right page index
    • Fix DatePicker.openChooser() crash when the month of the date was January
    • Fix HashTable.equals() to return true if contents are equals
    • Fix ImageButton.setHeight() to keep forced size
    • Fix ListView without ItemClickListener to remove sink effect
    • Fix ComboBox.openChooser() over dialog to go back to the previous opened dialog
    • Fix ListView and ViewPager scrolling bug with finger
    • Fix Cursor.getColumnName() bug in database
    • Fix Network.isConnected() bug with Ethernet connection
    • Fix TextLabel.setClickListener(): the behaviour was different from the other platform; setting a ClickListener will enable clickable mode
    • Fix TextField.setTextColor() bug
    • Fix WebView bug: in some cases zoom with pinch gesture did not work
    • Fix ImageButton: remove system background color effect when clicking on the button
    • Fix Screen default background color when a forced theme is applied on the Application
    • Fix View.setBackgroundImage(Image) and View.setBackgroundColor(Color): they were throwing a NullPointerException if the image or the color was null
    • Fix ViewPager when more than 5 pages are used
    • Fix memory leaks in screen stack
    • Fix memory leaks in MenuItem
    • Fix memory leaks in ViewPager
  • Eclipse Plugin:
    • Fix bug: if Android SDK path or Windows MSBuild paths were modified in neomad.properties, the new value was not taken into account until Eclipse was restarted
    • Fix bug: layout and background XML wizards did not open if the root of the NeoMAD project was not selected