Let’s say we have an expanding / collapsing toolbar, and we wan’t to add an extra interactive element to it: the title should have an extra chevron next to it, and when you click on the title, it should rotate 180 degrees, and open a popup menu, like this:

The final result of what we want to achieve

It seems easy, on a first glance we would probably have to retrieve the TextView used by the CollapsingToolbarLayout to retrieve the TextView, add a right compound drawable and a click listener, and that’s it, right?

Well, the problem is, that there’s no TextView at all. The relevant code is inside…


If you are using Dagger Hilt on your Android project, you’ve probably seen this exception when opening a screen. It is not really helpful, and you can lose quite some time finding the culprit, so here I list the most common causes I had when I got this exception.

Missing @AndroidEntryPoint on your Fragment / Activity

In each activity and fragment where you inject your ViewModel, you need to annotate the class with this annotation:

@AndroidEntryPoint
class NameInputDialogFragment : Fragment {

val viewModel by viewModels<NameInputViewModel>()
...}

This is quite easy to forget, and happens with even the best of us

Missing @ViewModelInject on ViewModel constructor (now deprecated)

Another frequent thing we forget. Instead…


A colored MediaRouteButton

By default, you have two MediaRoute button styles. A dark and a light variant, which have either a white or ablack icon. But what if you want to style the button to match your app, with a specific color?

The MediaRouteButton allows specifying a custom drawable for the icon, which is great, the only problem is that the default drawable is quite complicated, it has multiple states combined with animations (when it is connecting).

Since the default icon is well-known to most Android users, my idea was to base off my colored icon from that one. …


I have seen some funny images posted about having an electric meter style watch with those rotating numbers, combining the retro feeling of those plates with the modern design of a digital watch.

Since I personally have a Samsung Tizen Watch, I wanted to try out how difficult it can be to make such a watch face. It has been done before by others (see here), I assume in a better and prettier way. This was more about me being curious how difficult it is to develop a watch face, and to get familiar with the Samsung Store.

First of…


Sometimes you see can see those visually pleasing jumping bars when listening to music, which jump higher when the music gets louder. Usually the lefter bars resemble the lower frequencies (the bass), and the righter bars the higher freqs (the treble).

An example visualizer

These animating bars are called a visual equalizer, or visualizer. If you need to show a similar visualizer in your Android app, then you can use Visualizer class, which is part of the Android framework, and is attaches to your AudioTrack. It works as expected, but has a major drawback: it requires the permission to the microphone. …


We at Egeniq were asked by RTL Nederland to make a companion game for their new game show on TV, BankGiro Miljonairs (the dutch version of Who Wants To Be A Millionaire?).
This article will sum up the positive and negative aspects of using Unity while I have worked on this application.

The game contains almost 2,000 questions, to which you have to answer within the given time. The quicker you are, the more points you get. As you get higher and higher on the prize ladder, it gets more difficult. …


During a refactor of our app, we moved some classes and layout files into different flavor configurations. At the end of the refactor, after running a build, we received a build error with the following message:

Cannot resolve type for viewModel
at android.databinding.tool.util.L.printMessage(L.java:134)
at android.databinding.tool.util.L.e(L.java:107)
at android.databinding.tool.expr.Expr.getResolvedType(Expr.java:371)

The error message is quite good and understandable. So the type is wrong for the viewModel variable. Our only problem was, that we use the variable name viewModel in all of our activity and fragment layout files, and there’s no filename or type in the error message. So we could review the files…


The past couple of months we at Egeniq had been working on the brand new Android TV app for Pathé Thuis, a video-on-demand service in the Netherlands, and now that it is finally available on Google Play, I wanted to talk about development for Android TV — what I think about it, things I liked and things I didn’t.

For the full blog. View on https://www.egeniq.com/blog/developing-android-tv-keeping-focused


For one of our customers, we were asked to write an application, which would be used by poultry farmers in African countries to compute an optimal feeding recipe. The farmers would enter the ingredients available on the market and their price. From this, the app would take the nutritional information of each ingredient, and find a mix which would fulfill all nutritional requirements for the feed, and would be the cheapest option as well.

For the full blog. View on https://www.egeniq.com/blog/speed-android-computations-using-renderscript

Daniel Zolnai

Android developer at Egeniq

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