Skip to content

mattmook/cv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

3256e20 · Oct 16, 2021

History

52 Commits
Oct 15, 2021
Oct 16, 2021
Oct 16, 2021
Oct 15, 2021
Feb 11, 2021
Oct 15, 2021
Oct 15, 2021
Jan 27, 2021
Feb 13, 2021
Feb 18, 2021
Jan 25, 2021
Jan 27, 2021
Jan 25, 2021
Jan 25, 2021
Feb 19, 2021
Oct 15, 2021
Oct 15, 2021
Jan 27, 2021

Repository files navigation

CV sample app

Overview

The project demonstrates a Kotlin Multiplatform Mobile app with list-detail views.

Only the Android app currently functions. I will implement the iOS app later.

Setup instructions

Open the project in Android Studio 4.1.2, or execute ./gradlew installDebug from the command line.

Run tests and static analysis with ./gradlew check. Run espresso tests with ./gradlew connectedCheck.

Approach

Architecture

The project uses Kotlin Multiplatform Mobile for the shared repository layer of the app. This layer users Ktor for networking and SQLDelight to cache responses in a database.

The Android app is built using MVI with the Orbit MVI library that I co-authored.

Dependency injection is setup using Dagger Hilt.

Views use RecyclerViews and Groupie to help build reusable shared components configured to match a design system.

Animations have been implemented through AnimatedVectorDrawable created using Shape Shifter and MotionLayout.

Testing

ViewModels logic tests use the Orbit Unit Testing module, which allows testing the interactions in isolation.

The network layer has an integration test to verify the contract with the backend.

Future improvements

  • Implement iOS application

  • Investigate MotionLayoutSavedStateViewModel for memory leaks, potentially using lifecycle aware components for binding

  • Additional testing

    • Implement screenshot/interaction tests once Orbit MVI has support
  • Setup CI

  • Add additional content

    • Education section
    • Medium blog posts
    • Conference talks
    • Open-source software
  • Migrate to Jetpack Compose

  • The app currently doesn't log any data or exceptions, and could potentially use Timber.