Photo by Duncan Meyer on Unsplash

At Lumen, we grow at a fast pace and constantly adjust and improve our onboarding experience, to provide the best personalized experience for our users. As a result, our onboarding flow became a tangle of spaghetti code of logic and UI scattered across multiple screens.

We will show you how we rebuilt our onboarding logic to allow for dynamic changes no matter how the app evolves.

Photo by Ashim D’Silva:

We all heard of the architecture components library. However, if our app is built with an MVP architecture or MVVM architecture, there are specific barriers to using it.

How can we cross these barriers?

Please note that architecture, in general, is abstract, and apart from some ground rules, it can be applied in different ways. Therefore, read this article as a means of new ideas or approaches rather than a single way to do things.


In the beginning, there was no architecture. Making applications were the name of the game back then.

However, as time passed, there came an understanding…

Photo by Masaaki Komori on Unsplash

Android has many SDKs for various usages, from remote API handling to animations. Adding an SDK to your application, such as Retrofit 2.0, is a no-brainer and is even a recommendation. What about less familiar SDKs? What power can an unfamiliar SDK have over your application? Can an SDK add permissions to your application without you knowing about it?

Having a successful application suddenly displaying permission not related at all to the app, can be disastrous and result in users abandoning it.

Can any SDK insert permission stealthily into our application?

Manifest Permissions

I am using location permission in this article, but…

Photo by Denise Johnson on Unsplash

For every Android developer comes a day where the Android built-in views are not enough. One day your designer or project-manager or client or even you need a unique feature. That single feature embodies a particular view that does not exist naturally in the Android world.

The first and correct instinct is to search for a library that does the trick. However, there comes a time where no library meets our standards, and even if one does, it is not exactly what we need. …


On October 4th, 2017 Google has released the new line of Pixel devices. The headphone jack is dead in the eyes of Google (WHY?!), Google assistant is everywhere, and soon even your fridge will talk to you.

However, something was missing.

Apple released its stunning iPhone X but I was impressed by something else — the Apple watch series 3. Apple introduced a watch with cellular capabilities.

Credits belong to:

You need to add a new API call. Because the server error and API error handling code is usually similar to all the API calls, you just copy paste another call and change its parsing code. We have all done it at one point or another in our Android career.
We have all been bothered by the long never ending list of similarly looking API calls

If you’re looking for a faster to write, cleaner and less bug prone code — tag along.

I will be using Retrofit 2.0. Even if you are not familiar with Retrofit or don’t want…

Just as one will pay attention when entering a road after seeing the sign, so should you when using a new language. Credits belong to


The Java language was built to write once run anywhere. Instead of compiling directly to machine code it compiles to bytecode, and afterward, the JVM translates the language to machine code. This approach allows the hardware to become an abstract layer, freeing the developer from keeping it in mind when developing programs.

When the Android operating system was open for development back in 2009, the programming language to build Android applications was Java.

Fast forward to 2011, JetBrains unveils the Kotlin programming language. Even though it took JetBrains to release the 1.0 stable version of Kotlin 5 years, it caught…

We can spot a few different ViewHolders in this real life RecyclerView grid. Credits belong to:

At one point or another, we have all written an application that displays data in a list form. Whether you were around when ListView was the way to show information in a list or started developing when RecyclerView became the standard for that, you are familiar with RecyclerView and the ViewHolder design pattern.

At this point, you belong to roughly one of two groups when it comes to writing an implementation of an Adapter and ViewHolders.

ViewHolder view class members access from the adapter

Through public access of your ViewHolder view class members, the adapter puts the relevant data inside them during the onBindViewHolder method.

class Adapter {

Generics is one of the best tools you could have in your tool belt. Whether you used generics before or were too afraid to, I welcome you to this generic overview (pun intended).


We will assume that Arrays.toString() does not exist and we need an integer array printing method:

If a double array printing method is required, a simple copy paste action (mastery of software developers) followed by variable type name changes will result in:

Similarly, if a new printing method for string arrays is needed, we could copy-paste and change the variable name types. However…


A Flutter developer by day, a technology enthusiast by night.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store