Skip to content
Experimental architecture app with example usage intended to be a showcase, test and skeleton app.
Kotlin
Branch: master
Clone or download
jraska Make some module jvm modules (#211)
* Make some module JVM modules

* Removed some api dependencies
Latest commit feb9a3a Nov 15, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Updates dependencies, small fixes (#203) Oct 27, 2019
.github
app Make some module jvm modules (#211) Nov 15, 2019
buildSrc Add layers highlighting and layers assertions (#210) Nov 10, 2019
core-android Updates dependencies, small fixes (#203) Oct 27, 2019
core-testing Make some module jvm modules (#211) Nov 15, 2019
core Make some module jvm modules (#211) Nov 15, 2019
feature Make some module jvm modules (#211) Nov 15, 2019
gradle/wrapper
lib Make some module jvm modules (#211) Nov 15, 2019
navigation Make some module jvm modules (#211) Nov 15, 2019
.editorconfig Navigation only through deep links, user detail as stream (#5) May 20, 2017
.gitignore
LICENSE Initial commit Mar 1, 2016
README.md Update README.md (#209) Oct 30, 2019
build.gradle
gradle.properties Enable incremental kapt (#177) Sep 10, 2019
gradlew
gradlew.bat Project setup Mar 1, 2016
privacy_policy.md Add privacy policy (#167) Aug 9, 2019
settings.gradle Moving navigation into separate module (#198) Oct 20, 2019

README.md

github-client

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

Build Status

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
  • Dynamic features are implemented. See e.g. :about_entrance_module
  • 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
  • Module Graph generation into Graphviz is implemented together with highlighting longest path in the graph. See [PR #205](https://github.com/jraska/github-client/pull/205}
  • Module Graph measurement is used to assert height of dependency graph. See /buildSrc and PR #205. Adding features by decoration to all screens implemented. See PR #189
You can’t perform that action at this time.