Blog Archives

Android at #io16

(As usually…) It has been a while since my last blog post 🙂

This time I’m coming back just to tell you briefly about Google I/O 2016!
Last time it was back in 2013 when I went with my friend Massimo and since then a lot of things have changed. The Android platform got a lot more mature and my impression is that Google started to focus more on simplifying the developer life while still gaining a lot of new data.

I’m not gonna talk about VR, Artificial Intelligence and Machine Learning. These are really cool technologies but my developer heart still belongs to an Android made of custom UIs, Content Providers, messy fragments, multi-threading, memory constraints,… and… why not… Android Studio!

It’s kind of funny because back in 2013 when Tor Norbye and Xavier Ducrohet announced Android Studio starting to ditch support for Eclipse, I was a bit upset. After few months, I started to appreciate IntelliJ and all the efforts that the Android Developer Tools Team made in order to have a first class Android IDE integration/experience.

…but this is the past!!! Without forgetting about being dwarfs standing on the giants shoulders, let’s focus on the present and what’s ahead of us! 🙂

This Google I/O 2016 came with a lot of news:

  • Android N will support native Multi Window with Drag&Drop capabilities.
  • ConstraintLayout: not a RelativeLayout, not a FrameLayout, not a LinearLayout, not a PercentageBlaBlaLayout,… but a completely new ViewGroup that comes with a full integration in a new layout editor for Android Studio. The power of this new tools is based on the promises of flattening drastically the View hierarchy creating constrains between Views and parents! 🙂
  • Java8 support + Jack Compiler
  • An APK analyzer to inspect generated APKs and help you try to remove un-necessary and/or un-optimized resources
  • Instant Apps is a new feature that will allow you to modularize more your application allowing the user to download just a single use case of your app, without having to install a full APK. Even if it might look a bit strange, this tool could be really handy when it comes to introduce your service to new users, engaging them little by little.
  • Android Wear 2.0: even if it comes as a preview, it will have a new enhanced user interaction and more immersive experiences.
    • Watch Faces will support more than just time and battery info. There will be a chance to support more complicated(complications) data that will provide useful info to the user.
    • Notification will come with a new interaction style and paradigm.
  • Firebase: this is kind of hard to describe. The most simplest description that comes in my mind is “A magic box that contains a lot of tools to help you build better apps.  All these kind of little things those are taking a lot of time when developing new features in your apps will become definitely a lot easier. A/B testing, analytics, syncing, login, GCM,… have been bundled and connected(not all of them) togheter into Firebase, giving you a simple way to check and maintain them.

…there is definitely a lot more and you can check it out on the Google I/O 2016 Youtube channel!

I hope you’re gonna enjoy some of the pics I took over there 🙂

This slideshow requires JavaScript.

Cheers,
Simone

P.S.:
..if you live in UK, have a long weekend! 🙂

Miscellaneous (part 6)

Being at the last step of our Android Wear journey suggests us to make some assumptions and considerations on how to take advantage of this new platform in real scenarios. Beside this, we are going to have a brief look at some of the missing elements that we did not touch before, focusing our attention on answering the questions those might have risen in the mind of the readers while going through the entire path.

Read the rest of this entry

Pimp my Wear (part 4)

In “Colonizing Wearables”, after a first attempt of running the existing handheld version of the Books application on a smartwatch, we ended up creating a simple Android Wear module that displays the number of available book entries. This has been done not only to discover more about Android Wear, but because a handheld app should not be just ported to a wearable device. During our journey, we have introduced few of the new UI components offered by the wear support library. Among them, WatchViewStub has allowed us to handle different screen shapes, figuring out at runtime the type of display. We also had a chance to understand the reason why and how the wearable module has to be included into the handheld build. Therefore, the goal of this part is to evolve the previous module into something that can be easily used by user and that tries to follow as much as possible the android wear design patterns.

Read the rest of this entry

Colonizing Wearables (part 3)

In “Landing on Wearables” we have approached wearables devices extending our existing app’s notifications and explaining briefly how to bind them to our development machine for debugging purposes. Now it is time to study more in deep what we can achieve directly on a device running Android Wear, understanding the constraints and the possibilities that the platform introduces. We will continue to keep as reference the Books application previously developed and we will try to create an Android Wear module.

Read the rest of this entry

Landing on Wearables (part 2)

In “Introduction to Wearables” we had a look at some of the concepts those are the foundations of Android Wear. In this part we are going to skip completely any considerations on that and we’ll have a look at how things work underneath. In particular, we’ll have a look at how to extend existing application’s notifications and how to debug on wearables(this second part will be used for the following tutorials). In order to achieve this, we’ll start with a sample application that runs just on a handheld device and we’ll try step by step to extend it, trying to create a beautiful user experience even on a device running Android Wear. Read the rest of this entry

Introduction to Wearables (part 1)

Wearable devices are definitely one of the most exciting and coolest technologies of 2014 along with drones and smart cars. Hardware producers, software companies and even start-ups are pushing the boundaries beyond what is just being on a handheld device, struggling to open new challenges and attract new customers. Something similar has been already seen when smartphones were just at the beginning of their appearance, but this time the purposes and targets of this technology are a little bit different. It is not just a matter of keeping the user connected with the World outside but it’s more about offering him new services, getting more from/into his life. Sensors can collect data about user activities (heart rate, pedometer, burn calories, sleep hours…) allowing to know more from the user’s context and his behaviors. Embedding them on wearable devices(smartwatches, rings, betls,…) can grant almost a 24 hours coverage, attracting the user to use something that he is already used to wear but with more functionalities and fancier. Read the rest of this entry

[Story Of My Life] London Chapter Two

It looks like that Today it’s my second year anniversary here in London 🙂
I want definitely to be a lot more concise than the past year but at the same time I want to write something that will remain as stone in the path of my life. Read the rest of this entry

First time at #droidconuk :)

Hi all,
at the end of last week, after the Apps World conference, I went to the Droidcon conference here in London. It has been an event full of Android rock stars and full of good speeches like the one of Facebook, ProGuard and Gradle.

This time I don’t want to spend many words but only give some pics from that experience.

This slideshow requires JavaScript.

A new #Android App for @MailOnline

In the last few months the MailOnline mobile team has completely rewritten from the scratch their Android application. Getting rid of the old code, we came across to a lot of iterations and problems those have forced us to re-think the entire background synchronization and the resource management. As one of the Android developer who has developed this version, I’m very proud to say that this version is definitely better, faster and smoother than the prior one.

This slideshow requires JavaScript.

The main features, improvements and changes that you’ll certainly noticed from the screenshots are:

  • Load more articles when you reach the bottom of a channel
  • Swipe down to sync news in the channels page (with progress percentage)
  • Swipe between different channels
  • A new drawer menu that will appear swiping from the left edge of your screen (enable in settings)
  • Share and comments feedback inside the articles
  • Shortcuts from article to main channels
  • Filters on data and image sync
  • Different priority and order for channels (based on your preferences)
  • Enriched FAQs screens

There’s still always something new to do and to improve but this can be consider a really good app that will allow thousands and thousands of people to read their favorite news paper.

Thanks,
Simone

#Java @nnotations

“Annotations, a form of metadata, provide data about a program that is not part of the program itself. Annotations have no direct effect on the operation of the code they annotate.

Java Tutorial – Oracle (Sun)

Definition:

public @interface <name>{

<type> <method_name>();

<type> <method_name>() default <value>;

}

  • @Retention annotation specifies how the marked annotation is stored:
    • RetentionPolicy.SOURCE – The marked annotation is retained only in the source level and is ignored by the compiler.
    • RetentionPolicy.CLASS – The marked annotation is retained by the compiler at compile time, but is ignored by the Java Virtual Machine (JVM).
    • RetentionPolicy.RUNTIME – The marked annotation is retained by the JVM so it can be used by the runtime environment.
  • @Target annotation marks another annotation to restrict what kind of Java elements the annotation can be applied to. A target annotation specifies one of the following element types as its value:
    • ElementType.ANNOTATION_TYPE can be applied to an annotation type.
    • ElementType.CONSTRUCTOR can be applied to a constructor.
    • ElementType.FIELD can be applied to a field or property.
    • ElementType.LOCAL_VARIABLE can be applied to a local variable.
    • ElementType.METHOD can be applied to a method-level annotation.
    • ElementType.PACKAGE can be applied to a package declaration.
    • ElementType.PARAMETER can be applied to the parameters of a method.
    • ElementType.TYPE can be applied to any element of a class.
  • @Inherited annotation indicates that the annotation type can be inherited from the super class. (This is not true by default.) When the user queries the annotation type and the class has no annotation for this type, the class’ superclass is queried for the annotation type. This annotation applies only to class declarations.

Read the rest of this entry