Scrobble is a wip music tracking and browsing app. It uses the Lastf.fm and spotify APIs to deliver data. The whole UI is created using Jetpack compose.

Overview

Scrobble (WIP, name not final)

Scrobble is a wip music tracking and browsing app. It uses the Lastf.fm API to realize music tracking and browsing and the Spotify API for additional artist artwork.

This app is very much work in progress and still in heavy development. Im building this app to learn Android development using best practises and also cutting edge technologies.

Development Setup

The project requires a version of Android Studio which supports Jetpack Compose. Currently it is supported by Android Studio 4.2 Canary.

API Keys

The app uses various APIs to deliver dynamic data. You need to supply your own API keys for Last.fm and Spotify.

After you obtained the api keys you can provide them to the app by putting the following in the gradle.properties file in your user home:

# Get these from Last.fm
lastfmKey = <insert>
lastFmSecret = <insert>

# Get this from Spotify
spotifyAuth = <insert>

Linux/Mac: ~/.gradle/gradle.properties Windows: C:\Users\USERNAME\.gradle

Architecture

• Dependency Injection: Dagger Hilt

app (User Interface)

• 1 Activity, no Fragments

• UI Toolkit: Jetpack Compose

• Image Loading: Coil

• Viewmodel: Jetpack Viewmodel

database (Local Data Source)

• SQLite abstraction: Jetpack Room

lastfm (Remote Data Source)

• HTTP Client: Retrofit

• Json Parser: Moshi

repo (Repository)

• Data loading & cashing: Store

• Task schedule and execution: Jetpack WorkManager

Comments
  • Dependency Updates

    Dependency Updates

    This PR updates the following dependencies:

    • Jetpack Compose Beta 8
    • Kotlin 1.5.10
    • Compose ConstraintLayout, Hilt, Navigation, Accompanist
    • AndroidX Activity, AppCompat, Core
    • Dagger
    • Store
    • Turbine
    opened by Sh4dowSoul 0
  • Improve handling of ignored scrobble submissions

    Improve handling of ignored scrobble submissions

    This PR improves the handling of ignored scrobbles by doing the following:

    • Don't try to submit ignored scrobbles more than once (-> mark them as failed locally)
    • Show number of ignored scrobbles on the history screen
    • Try to submit ignored scrobbles again after the user changed some metadata
    • Add new red status indicator to ignored items in history list

    Also refactor SubmissionRepository to improve scrobble submission logic and reuse same logic for scrobble submission from localViewModel.

    enhancement 
    opened by Sh4dowSoul 0
  • Merge development progress

    Merge development progress

    This PR merges the dev progress into main, including:

    1. SingleState redux ProfileScreen
    2. Gradle Updates
    3. New Modularization approach (libraries & features)
    4. Dependency updates
    5. Accompanist SwipeToRefresh
    opened by Sh4dowSoul 0
  • Update Room to 2.3.0

    Update Room to 2.3.0

    This PR updates room to version 2.3 and removes the now unneded enum typeconverters.

    Also remove the EntityWithStatsAndInfo sealed class and move the seperate ArtistDetailEntity, AlbumDetailEntity and TrackDetailEntity models into the details feature module.

    opened by Sh4dowSoul 0
  • Fix Workers not initializing

    Fix Workers not initializing

    This PR fixes an issue which prevented WorkManager Workers to be initilaized. The issue was caused by the removal of the AndroidX Hilt compiler dependency during #61

    opened by Sh4dowSoul 0
  • Update Dependencies

    Update Dependencies

    This PR updates the following dependencies:

    • Activity: 1.3.0-alpha05 -> 1.3.0-alpha07
    • Compose: 1.0.0-beta03 -> 1.0.0-beta06
    • ConstraintLayout Compose: 1.0.0-alpha05 -> 1.0.0-alpha06
    • Hilt: 1.0.0-alpha03 -> 1.0.0
    • Navigation Compose: 1.0.0-alpha09 -> 1.0.0-alpha10
    • Atrium: 0.15.0 -> 0.16.0
    • Store: 4.0.0 -> 4.0.1
    • Accompanist: 0.7.0 -> 0.9.1
    • Dagger: 2.33-beta -> 2.35.1
    • Kotlin: 1.4.31 -> 1.4.32
    • Moshi: 1.11.0 -> 1.12.0

    Also replace the prepackaged composePreferences library with snapshot version from jitpack.

    opened by Sh4dowSoul 0
  • Update refreshVersions to 0.10.0

    Update refreshVersions to 0.10.0

    This PR updates the refreshVersions gradle plugin to version 0.10.0 and use some new features:

    1. Simplified setup
    2. New dependency notations
    3. New versionFor api for declaring compose kotlinCompilerExtensionVersion
    enhancement 
    opened by Sh4dowSoul 0
  • Migrate to new modularization approach based on features and libraries

    Migrate to new modularization approach based on features and libraries

    This PR replaces the modularization by layer with a modularization approach based on features and libraries:

    Old:

    • app
    • common
    • database
    • network (lastfm, spotify, common)
    • repo
    • scrobble
    • ui (one module per screen)

    New:

    1. Libraries:
      • authentication (oauth)
      • compose (shared ui components)
      • core (shared common code)
      • image (image fetching)
      • model (shared common models)
      • network (lastfm, spotify, common)
      • persistence (shared daos, type converters, datastore keys)
      • resources (shared common resources)
      • submission (scrobble submission logic)
    2. Features
      • charts (chart screen)
      • details (artist / album / track detail screens)
      • history (listening history & chached scrobbles screen)
      • profile (user profile and stats screen)
      • scrobble (notification listener & scrobbling)
      • search (search screen)
      • settings (settings screen)

    Each feature module now contains its own vertical slice of the app:

    • Dao Interfaces
    • Api Interfaces
    • Models
    • Mappers
    • Repository
    • ViewModel
    • Ui (Compose)
    opened by Sh4dowSoul 0
  • Merge dev progress

    Merge dev progress

    This PR merges the dev progress into main, including:

    1. SingleState redux ProfileScreen
    2. Gradle Updates
    3. New Modularization approach (libraries & features)
    4. Dependency updates
    5. Accompanist SwipeToRefresh
    opened by Sh4dowSoul 0
  • Improve failed scrobbles handling

    Improve failed scrobbles handling

    Improve handling of failed scrobbles. Currently the app tries to submit them again and again.

    • [x] Don't try to submit a scrobble again after it was ignored once
    • [x] Make number ignored scrobbles visible inside the app
    • [ ] Make it possible to see a list of all currenlty ignored scrobbles
    • [ ] Make it possible to edit and resubmit ignored scrobbles
    opened by Sh4dowSoul 1
Owner
Niklas Schnettler
Niklas Schnettler
Recreation of Spotify UI with Jetpack Compose

SpotifyUiJetpackCompose Recreation of Spotify UI with Jetpack Compose. Screenshots: License I don't own any of the graphics used in this project (Spot

Bogomil Stoyanov 9 Jun 19, 2022
SpotifyCompose - Spotify UI written on Jetpack Compose

SpotifyCompose - Spotify UI written on Jetpack Compose

Ivan Gospodarik 36 Dec 28, 2022
very unstable UNOFFICIAL Spotify client for Android built on librespot-java + Compose

Jetispot not so broken UNOFFICIAL Spotify client for Android Note that this client will NEVER offer any kind of a downloader/offline caching. Don't as

iTaysonLab 192 Jan 2, 2023
A note app created with Jetpack Compose

NoteAppJetpackCompose A note-taking app that is connected to a Ktor RESTApi with local caching, entirely made with Jetpack Compose following MVVM arch

Bogomil Stoyanov 9 Nov 23, 2022
Simple Note App Created with Jetpack Compose for Android

JetNote An app created to learn how to use Jetpack compose. This app uses the MVVM pattern. JetNote allows the user to create new notes and remove the

David F 0 Oct 13, 2022
Advanced coroutine-based Spotify API wrapper for Kotlin.

Kotify Advanced coroutine-based Spotify API wrapper for Kotlin. Contens Todo Getting started TODO Rate limits handling. Kotify Http Proxy. Better docu

Juan Luis Caro 4 Jan 2, 2023
Particle clock created with Jetpack Compose framework

Jetpack Compose Particle Clock made with Jetpack Compose This project is inspired by Flutter Particle Clock. License Copyright 2018 Adib Faramarzi. Li

Adib Faramarzi 366 Dec 29, 2022
ComposeAnimations - Collection of nice animations created with Jetpack Compose

CertificateStack.kt CardStackDemo.mp4 SwipeButton.kt SwipeButton.mp4

Anton Shilov 276 Dec 24, 2022
How to use Jetpack Compose’s theming APIs to style your application

Jetpack Compose Theming Codelab This folder contains the source code for the Jetpack Compose Theming codelab. In this codelab you will learn how to us

David Merino 0 Oct 7, 2021
Google CodeLab: learn how to use some Animation APIs in Jetpack Compose.

Compose Animation Codelab This folder contains the source code for the Compose Animation codelab. In this codelab, you will learn how to use some Anim

Ryan Wong 0 Dec 26, 2021
Example Jetpack Compose Android App, that uses the newest mechanisms, like StateFlow, SharedFlow, etc. to manage states and handle events. ViewModel, UI and Screenshot tests included :)

AndroidMVIExample Example Jetpack Compose Android App, that uses the newest mechanisms, like StateFlow, SharedFlow, etc. to manage states and handle e

Patryk Kosieradzki 55 Nov 18, 2022
A simple authentication application using Jetpack compose to illustrate signin and sign up using Mvvm, Kotlin and jetpack compose

Authentication A simple authentication application using Jetpack compose to illustrate signin and sign up using Mvvm, Kotlin and jetpack compose Scree

Felix Kariuki 5 Dec 29, 2022
Jetpack Compose Boids | Flocking Insect 🐜. bird or Fish simulation using Jetpack Compose Desktop 🚀, using Canvas API 🎨

?? ?? ?? Compose flocking Ants(boids) ?? ?? ?? Jetpack compose Boids | Flocking Insect. bird or Fish simulation using Jetpack Compose Desktop ?? , usi

Chetan Gupta 38 Sep 25, 2022
Jetpack-compose-uis - A collection of some UIs using Jetpack Compose. built using Katalog

Jetpack Compose UIs This is a collection of some UIs using Jetpack Compose. It i

Mori Atsushi 3 Dec 15, 2022
This is a sample app(For beginners - App #2) built using Jetpack Compose. It demonstrates the concept of State Hoisting in Jetpack Compose.

JetBMICalculator This is a sample app(For beginners - App #2) built using Jetpack Compose. It demonstrates the concept of State Hoisting in Jetpack Co

BHAVNA THACKER 3 Dec 31, 2022
Gmail clone project, that uses Jetpack Compose to draw UI content for gmail home screen

Gmail clone project, that uses Jetpack Compose to draw UI content for gmail home screen following Udemy course: Android 12 Jetpack Compose Developer Course - From 0 To Hero

SaraAlshamy 3 Sep 2, 2022
Jetpack Compose app gets data from REST API using KTOR Client. Clean Architecture, Dependency Injection...

posts-ktor-client Jetpack Compose app gets data from REST API using KTOR Client. Clean Architecture, Dependency Injection... Posts KTOR Client Demo ap

Raheem 12 Dec 12, 2022
A collection of animations, compositions, UIs using Jetpack Compose. You can say Jetpack Compose cookbook or play-ground if you want!

Why Not Compose! A collection of animations, compositions, UIs using Jetpack Compose. You can say Jetpack Compose cookbook or play-ground if you want!

Md. Mahmudul Hasan Shohag 186 Jan 1, 2023
Jetpack-Compose-Demo - Instagram Profile UI using Jetpack Compose

Jetpack-Compose-Demo Instagram Profile UI using Jetpack Compose

omar 1 Aug 11, 2022