Skip to content

enesky/Doodle

Repository files navigation

Doodle Icon

License Renovate Lint Checks & Build

API Kotlin JVM

Just doodling around

Trying to apply best practices for later usages :)

Doodle demonstrates modern Android development with Jetpack (Compose, ViewModel, Room, Credential Manager), Coroutines, Flow, Koin and Material Design based on MVVM, Clean and Multi-Module architecture.

Screenshots

Sign In Screen Home Screen Details Screen -Top Details Screen -Bottom

Multi Module Dependency Graph

Module Dependency Graph

Tech stack & Open-source libraries

  • Minimum SDK level 24
  • Kotlin based, Compose for UI Toolkit, Coroutines + Flow for asynchronous jobs.
  • Jetpack
    • Compose: Android’s recommended modern toolkit for building native UI.
    • Android Architecture Components: Collection of libraries that help you design robust, testable, and maintainable apps.
      • Coroutines: Concurrency design pattern that you can use on Android to simplify code that executes asynchronously.
      • Stateflow: StateFlow is a state-holder observable flow that emits the current and new state updates to its collectors.
      • Flow: A flow is an asynchronous version of a Sequence, a type of collection whose values are lazily produced.
      • Navigation with Compose: Navigation component for Compose.
      • DataStore: Jetpack DataStore is a data storage solution that allows you to store key-value pairs or typed objects with protocol buffers. DataStore uses Kotlin coroutines and Flow to store data asynchronously, consistently, and transactionally.
    • Firebase
    • Credential Manager API: Unifies the sign-in interface across authentication methods, making it clearer and easier for users to sign into apps, regardless of the method they choose.
    • Architecture
      • Multi-Module Architecture with lots of customized convention plugins (build_logic - app - core - feature)
      • MVVM Architecture (View - DataBinding - ViewModel - Model)
      • Clean Architecture approach (Data - Domain - Presentation(ui))
    • Koin: for dependency injection.
    • Retrofit2 & OkHttp3: Construct the REST APIs and paging network data.
    • ksp: Kotlin Symbol Processing API.
    • Material-Components: Material design components for building ripple animation, and CardView.
    • Coil for async image loading library
    • Detekt for static code analysis with compose specific rules
    • Spotless and Ktlint for lint check and auto formatting
    • RenovateBot for auto dependency update tool
    • GitHub Actions for simple ci pipeline
    • GitHooks for running static analysis and code formatters before commit and push actions
    • LeakCanary for leak detection on runtime
    • Chucker for network inspector on debug builds

How to run Doodle locally

  • In order to run the app, you need to add these to your local.properties file in the root folder of the project.
  doodle.api.url="https://api.jikan.moe/v4/"
  doodle.api.key="sample api key" #Jikan API doesn't require an API key, but I'm using it as an example for later usages.
  • Ktlint should be added using brew
 brew install ktlint

Open API

Jikan API

Jikan (時間) is an open-source PHP & REST API for the “most active online anime + manga community and database” — MyAnimeList.net. It parses the website to satisfy the need for an API. Jikan is a free, open-source API.

Used endpoints:

Top Anime
Anime Details
Anime Characters

License:

/*
 *                          Copyright 2023
 *            Designed and developed by Enes Kamil Yılmaz
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *           http:https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

(back to top)