Skip to content

Soreh is a simple compose demo app based on modern Android application tech-stacks and CLEAN architecture. In Soreh app you can find superheroes and villains from different publishers and their statistics.

Notifications You must be signed in to change notification settings

AnEstevez/Soreh

Repository files navigation

Soreh

Soreh is a simple compose demo app based on modern Android application tech-stacks and CLEAN architecture.
In Soreh app you can find superheroes and villains from different publishers and their statistics.


             

             

Features

  • Four screens
    • Main - A carousel showing 10 random characters
    • Search - A screen to search by name, with filters and different sorting criteria (FlowRow and Material3 components: SearchBar, BottomSheetScaffold, FilterChip, RangeSlider, ExposedDropdownMenuBox, ExposedDropdownMenu, DropdownMenuItem)
    • Tops - The top 10 of the most complete characters of some of the most important publishers/universes
    • Favorites - A screen to save your favorite characters
  • Splash screen that remains until the worker completes the network caching
  • Single source of truth (Room)
  • Unidirectional Data Flow
  • Error handling (Result)
  • SnackbarHost - To show errors on the screen
  • Offline mode
  • User events in ItemUIState
  • Day/Night theme
  • Pager custom transitions
  • Pager indicator custom transitions
  • Dynamic background color - Based on the dominant colors of the character images.
  • Implicit intents - To view or share the complete info of a character
  • CLEAN Architecture - UI, Domain and Data layer (google way)
  • Multi-module project. One module per CLEAN Architecture layer
  • Firebase Analytics with CompositionLocalProvider
  • Firebase Crashlytics integrated with Timber
  • Baseline Profiles - By shipping a Baseline Profile in an app or library, Android Runtime (ART) can optimize specified code paths through Ahead-of-Time (AOT) compilation, providing performance enhancements for every new user and every app update.
  • Unit Tests
    • Repository
    • ViewModel
  • Integration tests with fake data sources.
  • Instrumentation Tests with Hilt
    • End-to-end for "Search" feature
    • Worker

Preview

Pager Transition, Dynamic Background Color & Implicit Intent



Pager & Pager Indicator Transition



Search with Filters & Sorting Criteria



Splash Screen & Carousel



Tech stack & Open-source libraries

  • Jetpack Compose - Android's modern toolkit for building native UI.
  • Firebase Analytics - Google Analytics for Firebase provides free, unlimited reporting on up to 500 distinct events. The SDK automatically captures certain key events and user properties, and you can define your own custom events to measure the things that uniquely matter to your business.
  • Firebase Crashlytics - Firebase Crashlytics, a real time crash reporting tool, helps you prioritize and fix your most pervasive app crashes based on the impact on real users.
  • Splash Screen - SplashScreen API lets apps launch with animation, including an into-app motion at launch, a splash screen showing your app icon, and a transition to your app itself.
  • ViewModel - State Holder. Responsible for the production of UI state, contains the necessary logic for that task.
  • Lifecycle - Lifecycle-aware components.
  • Navigation Compose - The Navigation component provides support for Jetpack Compose applications. You can navigate between composables while taking advantage of the Navigation component’s infrastructure and features.
  • WorkManager - The WorkManager API makes it easy to schedule deferrable, asynchronous tasks that must be run reliably.
  • Room - Database.
  • Kotlin Coroutines - A concurrency design pattern to simplify code that executes asynchronously.
  • Kotlin Flows - In coroutines, a flow is a type that can emit multiple values sequentially, as opposed to suspend functions that return only a single value. For example, you can use a flow to receive live updates from a database.
  • Dagger-Hilt - Dependency injection.
  • Coil - An image loading library for Android backed by Kotlin Coroutines.
  • Retrofit2 & Moshi - REST API consumption.
  • MockWebServer - A scriptable web server for testing HTTP clients.
  • Timber - A logger with a small, extensible API which provides utility on top of Android's normal Log class.
  • ComposeLoading - Loading spinners in Android Jetpack Compose.
  • Placeholder - A library which provides a modifier for display 'placeholder' UI while content is loading.
  • Compose Material Design 3 components - Modular and customizable Material Design UI components for Android.
  • Mockito - Mocking framework for unit tests.
  • Turbine - A small testing library for kotlinx.coroutines Flow.
  • Leakcanary - A memory leak detection library.

Architecture

CLEAN Architecture




MVVM Architecture & Repository Pattern




Network Caching




API

The SuperHero API exposes SuperHeroes and Villians data from all universes under a single REST API.
Soreh uses the SuperHero API. Get your API_KEY SuperHeroAPI and paste it to the gradle.properties file to try the app.