haiminhtran810 / github-client

Experimental architecture app with example usage intended to be a showcase, test and skeleton app.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

github-client

Experimental architecture app with example usage intended to be a showcase, test and skeleton app.

Build Status

Screenshot 2020-11-15 at 13 38 02

Topics demonstrated

  • Modularised app with flat structure: :app -> :feature* -> *-api with a graph height of 2.
  • Build time tracking with reporting to Mixpanel - see this PR.
  • Modularisation statistics reporting to Mixpanel - see this PR.
  • UI tests on Firebase Test Lab results reporting to Mixpanel - see this PR.
  • Core features (Analytics, Configuration, Crash reporting, Networking, Logging, Deep Linking) are behing simple pure Kotlin interfaces to achieve convenient core interfaces.
  • Features are composed together within AppComponent in plugin based manner. Each feature contributes by Dagger module. To add a feature only module and Gradle dependency lines are needed.
  • Plugin based composition of features and modules contributing to collection of "plugins" - see: OnAppCreate, or LinkLauncher
  • Android Architectue Components LiveData and ViewModel are used to connect Activities with app logic
  • Deep Link navigation used across the app - Article
  • UI Instrumentation testing using Espresso and mocking network layer to achieve isolation OkReplay See ReplayHttpComponent
  • All core services have its lightweight fake implementation. See Fakes
  • Dependency replacement in test is done by Dagger components in TestUITestApp
  • RxJava is used for threading everywhere, allowing proper idling of UI tests. Also AppSchedulers dependency makes all threading testable.
  • Push is implemented by using Firebase Cloud Messaging. See PushActionCommand. Thanks to deep link navigation app can be controlled remotely by executing deep links - LaunchDeepLinkCommand : PushActionCommand
  • Push integration is tested end to end through UI test - see this PR.
  • Navigator pattern to be able to easily navigate without Context
  • TopActivityProvider to avoid having Context dependencie everywhere and to be able to have cleaner pure Kotlin interfaces
  • Uses LiveData-Testing to test ViewModel. Article
  • Example usage of module graph assertion - see here.
  • Tests are run on Firebase Test Lab. See PR
  • Release publishing by Triple-T/google-play-publisher plugin
  • Enforced ownership of remote configuration and analytics events - Details on PR. More on why these need to be explicitly owned on this article.

About

Experimental architecture app with example usage intended to be a showcase, test and skeleton app.

License:Apache License 2.0


Languages

Language:Kotlin 100.0%