many refactorings, adds dependency injection with dagger, still don't know how to do dependency injection on unit tests.