Skip to content

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

License

Notifications You must be signed in to change notification settings

ampeixoto/github-client

 
 

Repository files navigation

github-client

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

Build Status

Screenshot 2020-05-20 at 20 01 04

Topics demonstrated

  • Modularised app with flat structure: :app -> :feature -> :lib -> :core-android -> core.
  • Core features (Analytics, Configuration, Crash reporting, Networking, Logging, Deep Linking) are behing simple pure Kotlin interfaces to achieve convenient simple 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
  • 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.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 100.0%