RxJava toList – completes only after onComplete is called

 mGetActiveHubUpdatesInteractor.getActiveHubUpdates()
                .filter(Optional::isPresent)
                .firstOrError()
                .map(Optional::get)
                .flatMap(activeHub ->
                        mGetActiveHubEventsInteractor.getActiveHubEvents(activeHub, startTime,
                                endTime))
                .flattenAsObservable(list -> list)
                .map(mActiveHubEventUiMapper::toUiActiveHubEvent)
                .toList()
                .subscribe(this::populateEvents, this::handleError);
Continue reading “RxJava toList – completes only after onComplete is called”

Applying Clean Architecture in Android

Short Intro

For 4 months now I have been implementing “clean architecture” in my current project. The project is huge, more than 17 Android developers work on it including me, so it is important to apply an architecture that works for all of us. I will not talk about what “clean architecture” is, but I will directly dive into the code and explain step by step the purpose of the layers that we have and what each layer is about.

Continue reading “Applying Clean Architecture in Android”

It’s 21st century – Stop using EVENTBUS!

Do you still use it!? Have you used it? I mean the EventBus. If the answer is NO, then you are either a new developer who started Android recently or you had the wonderful opportunity to not meet this three-headed monster. What I am talking about? Let’s make a brieft visit of the Android development history.

Continue reading “It’s 21st century – Stop using EVENTBUS!”

Mockito verify input parameter was called with a given value

Edit 23.04.2018
According to this issue, Mockito cannot capture var-args still.

There is a very easy way to verify a method has been called with the right parameter in Mockito. All you need to do is use captors, to capture the actual argument. Here is how you can use them:

 
ArgumentCaptor argument = ArgumentCaptor.forClass(RuleEntity.class);
 verify(mRulesRepository).createRule(argument.capture());
 assertEquals(1,argument.getValue().getRules().get(0).getTriggers().size())

Simple it is, just a quick reminder for starters.

Test push notifications on Android without a server

How I used to do it

The biggest problem I have with push notifications and especially GCM is testing them. Every time I want to test a notification, I would create a sample project in Google Developers Console, use the JSON there and then use Postman to send HTTP requests to the device, after obtaining the device registration id and the token for the project.

Continue reading “Test push notifications on Android without a server”

EditText in CollapsingToolbar with NestedScrollView won’t scroll when the keyboard is open

The problem

What we currently have

  • CoordinatorLayout with CollapsingToolbar inside
  • The CollapsingToolbar has an ordinary Toolbar inside that displays text
  • A NestedScrollView with multiple EditText fields inside of it which actually pushes the CollapsingToolbar to collapse when you try to enter something in the EditText
Continue reading “EditText in CollapsingToolbar with NestedScrollView won’t scroll when the keyboard is open”