Skip to content

Commit

Permalink
Release 0.4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
z-huang committed Sep 20, 2022
2 parents d2642a6 + dbf1c3f commit 4e86094
Show file tree
Hide file tree
Showing 388 changed files with 14,200 additions and 6,579 deletions.
37 changes: 17 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<img src="https://raw.githubusercontent.com/z-huang/music/dev/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png" height="72">

Make your own music library with any song on YouTube/YouTube Music.
Make your own music library with any song from YouTube Music.
No ads, free, and simple.

[<img src="https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png" height="80">](https://apt.izzysoft.de/fdroid/index/apk/com.zionhuang.music)
Expand All @@ -15,27 +15,23 @@ No ads, free, and simple.
> **Note 2:** The name of this app is temporary. It will be changed in the future.
> **Note 3:** We are currently making a change about the YouTube library. The development is in `feature/innertube` branch. Issues are put on hold until `feature/innertube` gets merged into `dev` branch.
## Description

With this app, you're like getting a free music streaming service. You can listen to music from YouTube/YouTube Music and build your own library. What's more, songs can be downloaded for offline playback. The metadata of songs and artists are fully editable. You can also create playlists to organize your songs. The aim of _Music_ is to enable everyone to listen to music at no cost by an easy-to-use, practical and ad-free application.

The ability to retrieve information and stream data from YouTube/YouTube Music is provided by [NewPipe Extractor](https://github.com/TeamNewPipe/NewPipeExtractor).
With this app, you're like getting a free music streaming service. You can listen to music from YouTube Music and build your own library. What's more, songs can be downloaded for offline playback. You can also create playlists to organize your songs. The aim of _Music_ is to enable everyone to listen to music at no cost by an easy-to-use, practical and ad-free application.

## Features

### YouTube

- No ads
- Search songs, albums, videos, playlists and channels from YouTube/YouTube Music
- Auto load more songs when playing the last 5 songs in queues from YouTube
- Play songs without ads
- Browse almost any YouTube Music page
- Search songs, albums, videos and playlists from YouTube Music
- Open YouTube Music links

### Library

- Play and save songs from YouTube/YouTube Music
- Save songs, albums and playlists in local database
- Download music for offline playback
- Edit song and artist metadata
- Create playlists in local database
- Edit song title
- Add links to your favorite YouTube Music playlists

### Player

Expand All @@ -49,15 +45,16 @@ The ability to retrieve information and stream data from YouTube/YouTube Music i
## Screenshots

<p float="left">
<img src="https://raw.githubusercontent.com/z-huang/music/dev/screenshots/main.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/screenshots/playlists.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/screenshots/player.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/screenshots/now_playing.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/fastlane/metadata/android/en-US/images/phoneScreenshots/01.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/fastlane/metadata/android/en-US/images/phoneScreenshots/02.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/fastlane/metadata/android/en-US/images/phoneScreenshots/03.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/fastlane/metadata/android/en-US/images/phoneScreenshots/04.jpg" width="170" />
</p>
<p float="left">
<img src="https://raw.githubusercontent.com/z-huang/music/dev/screenshots/search.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/screenshots/search results.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/screenshots/settings.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/fastlane/metadata/android/en-US/images/phoneScreenshots/05.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/fastlane/metadata/android/en-US/images/phoneScreenshots/07.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/fastlane/metadata/android/en-US/images/phoneScreenshots/08.jpg" width="170" />
<img src="https://raw.githubusercontent.com/z-huang/music/dev/fastlane/metadata/android/en-US/images/phoneScreenshots/09.jpg" width="170" />
</p>

## Installation
Expand Down
84 changes: 41 additions & 43 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,24 @@ plugins {
id("dev.rikka.tools.materialthemebuilder")
}

val newpipeVersion: String by rootProject.extra

android {
compileSdk = 31
compileSdk = 32
buildToolsVersion = "30.0.3"
defaultConfig {
applicationId = "com.zionhuang.music"
minSdk = 26
targetSdk = 31
versionCode = 10
versionName = "0.3.3"
targetSdk = 32
versionCode = 11
versionName = "0.4.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments += mapOf("room.schemaLocation" to "$projectDir/schemas")
}
}
}
applicationVariants.all {
resValue("string", "app_version", versionName)
resValue("string", "newpipe_version", newpipeVersion)
}
buildTypes {
getByName("release") {
Expand Down Expand Up @@ -51,7 +53,7 @@ android {
}
kotlinOptions {
jvmTarget = "1.8"
freeCompilerArgs += listOf("-Xopt-in=kotlin.RequiresOptIn")
freeCompilerArgs = freeCompilerArgs + listOf("-opt-in=kotlin.RequiresOptIn")
}
configurations.all {
resolutionStrategy {
Expand All @@ -62,6 +64,10 @@ android {
unitTests.isIncludeAndroidResources = true
unitTests.isReturnDefaultValues = true
}
sourceSets {
// Adds exported schema location as test app assets.
getByName("androidTest").assets.srcDir("$projectDir/schemas")
}
}

materialThemeBuilder {
Expand Down Expand Up @@ -99,63 +105,55 @@ materialThemeBuilder {
}

dependencies {
implementation(fileTree("dir" to "libs", "include" to "*.jar"))
// Kotlin
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.2")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.2")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.2")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.3")
// AndroidX
implementation("androidx.core:core-ktx:1.8.0")
implementation("androidx.appcompat:appcompat:1.4.2")
implementation("androidx.appcompat:appcompat:1.5.1")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.fragment:fragment-ktx:1.4.1")
implementation("androidx.fragment:fragment-ktx:1.5.2")
implementation("androidx.preference:preference-ktx:1.2.0")
implementation("androidx.vectordrawable:vectordrawable:1.1.0")
implementation("androidx.navigation:navigation-runtime-ktx:2.4.2")
implementation("androidx.navigation:navigation-fragment-ktx:2.4.2")
implementation("androidx.navigation:navigation-ui-ktx:2.4.2")
implementation("androidx.lifecycle:lifecycle-extensions:2.2.0")
implementation("androidx.lifecycle:lifecycle-common-java8:2.4.1")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.1")
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.4.1")
implementation("androidx.navigation:navigation-runtime-ktx:2.5.2")
implementation("androidx.navigation:navigation-fragment-ktx:2.5.2")
implementation("androidx.navigation:navigation-ui-ktx:2.5.2")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1")
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.5.1")
implementation("androidx.lifecycle:lifecycle-common-java8:2.5.1")
implementation("androidx.legacy:legacy-support-v4:1.0.0")
implementation("androidx.work:work-runtime-ktx:2.7.1")
implementation("androidx.recyclerview:recyclerview-selection:1.1.0")
implementation("androidx.transition:transition-ktx:1.4.1")
implementation("com.google.android.material:material:1.6.1")
implementation("com.google.android.material:material:1.7.0-rc01")
// Gson
implementation("com.google.code.gson:gson:2.9.0")
// ExoPlayer
implementation("com.google.android.exoplayer:exoplayer:2.17.1")
implementation("com.google.android.exoplayer:extension-mediasession:2.17.1")
implementation("com.google.android.exoplayer:exoplayer:2.18.1")
implementation("com.google.android.exoplayer:extension-mediasession:2.18.1")
// Paging
implementation("androidx.paging:paging-runtime-ktx:3.1.1")
implementation("androidx.test:monitor:1.5.0")
testImplementation("androidx.paging:paging-common-ktx:3.1.1")
implementation("androidx.paging:paging-rxjava3:3.1.1")
// Room
implementation("androidx.room:room-runtime:2.4.2")
kapt("androidx.room:room-compiler:2.4.2")
implementation("androidx.room:room-rxjava3:2.4.2")
implementation("androidx.room:room-ktx:2.4.2")
implementation("androidx.room:room-paging:2.4.2")
testImplementation("androidx.room:room-testing:2.4.2")
// NewPipe Extractor
implementation("com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751")
implementation("com.github.TeamNewPipe:NewPipeExtractor:6a858368c86bc9a55abee586eb6c733e86c26b97")
implementation("androidx.room:room-runtime:2.4.3")
kapt("androidx.room:room-compiler:2.4.3")
implementation("androidx.room:room-rxjava3:2.4.3")
implementation("androidx.room:room-ktx:2.4.3")
implementation("androidx.room:room-paging:2.4.3")
testImplementation("androidx.room:room-testing:2.4.3")
// YouTube API
implementation(project(mapOf("path" to ":innertube")))
// Apache Utils
implementation("org.apache.commons:commons-lang3:3.12.0")
implementation("org.apache.commons:commons-text:1.9")
// OkHttp
implementation("com.squareup.okhttp3:okhttp:4.9.3")
// Glide
implementation("com.github.bumptech.glide:glide:4.13.2")
implementation("com.github.bumptech.glide:annotations:4.13.2")
implementation("com.github.bumptech.glide:okhttp3-integration:4.13.1")
kapt("com.github.bumptech.glide:compiler:4.13.1")
// Jsoup
implementation("org.jsoup:jsoup:1.14.3")
implementation("com.squareup.okhttp3:okhttp:4.10.0")
// Coil
implementation("io.coil-kt:coil:2.2.0")
// Fast Scroll
implementation("me.zhanghai.android.fastscroll:library:1.1.7")
// Markdown
Expand Down
Loading

0 comments on commit 4e86094

Please sign in to comment.