Points-of-interest icon indicating copy to clipboard operation
Points-of-interest copied to clipboard

Android application: Clean Architecture with Jetpack Compose and many more.

Alt text

Points of interest

Gather and organize everything that matters

This application allows users to easily receive and organize shared data, such as links, text, and images. Create your points of interests easily with minimalistic interface:

  • Use wizard to automatically parse link content
  • Create your own custom categories
  • Leave a message for yourself from future. The app also allows for easy searching and filtering of stored information, making it easy to find the information you need quickly.

Current version of application is offline only. It is a work in progress. So stay tuned for future updates.

This app was created to showcase the latest technology in android development. This application is implemented entirely using Kotlin and Jetpack Compose.

APK / BUILD

APK - Debug v1.0 You can also clone project and build debug version. Note: Google Sign-In will not be fully functional in this case

Screenshots

Alt text

Architecture

This application follows the classic SOLID based clean architecture approach. This approach differs from official architecture guidance, but it is actively used by many developers. With this approach, the amount of boilerplate code increases, in favor of standardization and scalability.

Modularization

The Points of interests application follows modularization strategy know as "by layer". Note: For larger projects i would recommend using by layer and by feature strategy.

For more details about modularization: By layer or feature? Why not both?! Guide to Android app modularization

Features

In this project i tried to cover as many interesting learning cases as i could. So this section will describe interesting features and use cases, as well as used technologies

:domain

3rd party libraries:

  • Hilt for dependencies injection
  • Mockito for unit testing of UseCases

Features:

  • Use cases
  • Domain level models
  • Repository interface
  • Unit tests

:data

3rd party libraries and technologies used:

Testing:

Features:

  • Database
  • DI Modules
  • Data repository
  • Data level models
  • DAO
  • Data sources
  • Network calls
  • Unit tests

Learning cases:

  • Room + Kotlin flows
  • Room and Dynamic ORDER BY
  • Room and FTS (full test search): Look how to define models, add entities to the data base, create search query function and perform the search
  • How to parse HTML page with Jsoup
  • How to use Proto DataStore: Look how to setup gradle file: protobuf {} section, define proto models, provide datastore using Hilt, create serializers and finally how to use data store
  • How to test using Hilt and Robolectric
  • How to test using Hilt and Robolectric and Mockito for maximum flexibility
  • How to test Room database using Hilt's @TestInstallIn and Room's inMemoryDatabaseBuilder
  • How to test Jetpack DataStore based datasource using Hilt's @TestInstallIn and TemporaryFolder
  • How to test operations with files using TemporaryFolder

:app (presentation layer)

3rd party libraries and technologies used:

Testing:

Learning cases:

Work in progress, please stay tuned for this section =)

License

Points of interest is distributed under the terms of the Apache License (Version 2.0). See the license for more information.