NeoMAD 3.9 release notes

June 15, 2015

New features

Maps API

It is now possible to display map views in the application. The native map provider is used, which is :

  • Google Maps for Android
  • MapKit for iOS
  • Nokia Maps for Windows Phone.

Splash screen

It is now possible to specify custom splash images to show at the start of the application. Splash images are declared using a specific image resource set and a new tag of the urs file. Please refer to the User Guide for more information.

Other new features and enhancements

  • New classes and methods:

    • GestureState and Gesture.getState(): gives information about a gesture’s current state (if the gesture has begun, is moving or is finished)
    • SlideScreen.setLeftShadowEnabled(boolean): enables or disables the shadow over the middle screen when the left menu is opened
    • SlideScreen.setLeftSlidingTouchEnabled(boolean): activates or deactivates the opening of the left panel by dragging the screen with the finger
    • View.setTransformOrigin(float, float): sets the x and y location of the point around which the view will be scaled or rotated when an animation occurs
    • GridView.scrollToTop(): moves the scroll position of the GridView to its first item
    • FrameLayout.bringChildToFront(View): moves the specified view at the top of the FrameLayout
    • ViewPager.setEnabled(boolean), ViewPager.isEnabled(): enables or disables the pager in order to allow or forbid the navigation between pages with the finger
    • ViewPager.setOffScreenPageLimit(int): sets the number of pages that should be buffered at each side of the current page
    • ImageLoader.get(): useful for preloading image for ImageUrlLabel
  • Source file encoding: it is now possible to specify which file encoding is set on source files thanks to the new <srcencoding> tag in the URS. By default, the encoding used is the JVM’s file.encoding property.

  • Support of the Location API for iOS 8 and more The Location API did not work for iOS 8 and more due to a change in the native API between iOS 7 and 8. New methods in the Location API and a new tag in the URS are available to configure the application in order to use the Location API in iOS:

    • <location requestAlwaysDescription="your text" requestWhenInUseDescription="your text" /> in the URS will enable use of Location API in iOS
    • LocationManager.requestAlwaysAuthorization() and LocationManager.requestWhenInUseAuthorization(). One of them must be called before the first use of the location service. They will prompt a message to the user for enabling the location service in the application. The message comes from the <location> tag attributes in the URS.

    Additional classes and methods have been added to follow the location authorization status:

    • AuthorizationStatusListener: allows to listen to changes in the location service authorization
    • LocationManager.setAuthorizationStatusListener(AuthorizationStatusListener): attaches a AuthorizationStatusListener to the LocationManager
  • The value of the <binaryname /> tag of the urs is now used to name the generated projects for all platforms, in addition to changing the name of the .apk, .xap or .ipa like before. Note that this tag is not used to change the title of the application, just the name of the binary file.

Compatibility changes

  • PinchListener.onPinchGestureBegin(Pinch, View) and PinchListener.onPinchGestureEnd(Pinch, View) are now deprecated. They are still called but will be removed in a future release. Use Gesture.getState() from PinchListener.onPinchGesture(Pinch, View) to know if the pinch is beginning or ending.
  • iOS minimum supported SDK version is now iOS 7.0.
  • The Java ME and BlackBerry targets have been removed.


  • The DeviceInfo.IOS_5_0 to DeviceInfo.IOS_6_1 constants have been deprecated and will be removed in the next version of NeoMAD.
  • The Notification.setActionText(String) and Notification.setActionText(int) methods have been deprecated and will be removed in the next version of NeoMAD.


  • Fix ContentManager NullPointerException when the server sets Cache-Control: “no-cache” or “no-store”
  • Fix ContentResponse.isIntermediate() not returning false when the response is coming from the network
  • Fix FileImageCache locked sometimes when used by multiple threads concurrently
  • Fix HttpRequest.isSuccess() bug in order to return true only if http code corresponds to 3XX or 4XX server code.
  • Improve ImageUrlLabel.setImageUrl(String, ImageLoader) performance.
  • Android:
    • Fix SlideScreen: left pane maximum width is now 320dp.
    • Fix Animation.scaleXBy(float) and Animation.scaleYBy(float): applying a scale factor lower than 1 now scales down the view
    • Fix Animation: a wrong factor was applied on scale animations
    • Fix AnimationListener: an exception occurred when starting a new animation from onAnimationEnd(Animation) callback
    • Fix Transition: a black screen appeared in transitions
    • Android reference libraries: fix file that was being removed from the final binary during optimization step.
    • Fix GridView.scrollToTop() that was not always working
  • iOS:
    • Vector.equals(Object): behavior is now the same as in Android, Windows Phone and Windows store apps, Vectors are equal if their content is equal
    • Fix encoding problem in iOS generated project: accented characters in application name were not correctly generated in the final project
    • String.trim(): method now works if there are special characters in the string (like “é”, “&”, “è” etc.)
    • SlideScreen: disable overdraw of left and right panels
    • SlideScreen: fix the white screen showing a short time before the middle screen appears
    • Fix Layout.removeAllViews(): background was removed with the views of the layout
    • Fix Animation.translationX(float), Animation.translationY(float): animation started at a bad position if other layout changes occurred during the animation
    • Fix Animation.rotationX(float) and Animation.rotationY(float): the whole view now stays visible during the animation
    • Fix Animation.rotationX(float) and Animation.rotationY(float): animated view was blurred after animation
    • Fix Animation.scaleX(float) and Animation.scaleY(float): same scale factor can no longer be applied several times on the same view (use Animation.scaleXBy(float) or Animation.scaleYBy(float))
    • Fix Animation.scaleX(float) and Animation.scaleY(float): the first time an animation of this type occurred in a layout, the animated view was not correctly drawn
    • Fix Animation.setStartDelay(long): the start delay was not taken into account if the duration of the animation was 0 ms.
    • WebView: The default background color is now transparent
    • Fix Image instances being mistakenly freed by ImageLabel, causing white images to appear sometimes
    • Fix LocationManager.isLocationEnabledByUser(): the method always returned true even if the user had disabled the location service for the application
    • Fix HttpResponse.getDataString(): the method no longer returns null if called more than once
  • Windows Phone:
    • Fix: applications that require services are no longer rejected by the Windows Phone Store automatic validation process