diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..411c07777 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +* text=auto eol=lf + +*.bat text eol=crlf +*.jar binary diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index ac72f0bef..e450294c1 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -7,28 +7,28 @@ on: branches: [ dev ] jobs: - build: - + check: runs-on: ubuntu-latest - + timeout-minutes: 10 steps: - - uses: actions/checkout@v2 - - name: set up JDK 11 - uses: actions/setup-java@v2 - with: - java-version: '11' - distribution: 'temurin' - cache: gradle + - uses: actions/checkout@v3 + - uses: gradle/wrapper-validation-action@v1 + - uses: actions/setup-java@v3 + with: + distribution: 'zulu' + java-version: 17 + - uses: gradle/gradle-build-action@v2 + - name: Lint Android + run: ./gradlew lint - - name: Generate temporary keystore - run: keytool -genkey -v -storetype pkcs12 -keystore store.p12 -storepass android -alias android -keyalg RSA -keysize 2048 -validity 10000 -dname CN=CI - - name: Write retro.properties - run: | - cat >retro.properties < - - -

Retro Music Player 🎵

-
-

-

- - - - - - - - - - - - - - - - - - - - - - -

- -___ - -## 🆕 Material You Design Music Player for Android music lovers - -## ⚠ Join [@retromusiclog](https://telegram.me/retromusiclog) on Telegram for important updates. -___ - -## 📱 Screenshots -### App Themes -| | | | -|:---:|:---:|:---:| -|Clearly white| Kinda dark | Just black| - -### Player screen -| | | | | | -|:---:|:---:|:---:|:---:|:---:| -| Home | Songs | Albums | Artists | Settings | - -### Synced lyrics screen (Over Cover) -| | | | -|:---:|:---:|:---:| -| Synced Over Cover light | Synced Over Cover dark | Synced Over Cover black | - -### Synced lyrics screen (Replace Cover) -| | | | -|:---:|:---:|:---:| -| Synced Replace Cover light | Synced Replace Cover dark | Synced Replace Cover black | - -### 10+ Now playing themes -| || | | | -|:-----: |:-----: |:-----: |:-----: |:-----: | -| Normal | Fit | Flat | Color | Material | - -| || | | | -|:-----: |:-----: |:-----: |:-----: |:-----: | -| Classic | Adaptive | Blur | Tiny | Peek | - -___ - -## 🧭 Navigation never made easier -Self-explanatory interface without overloaded menus. - -## 🎨 Colorful -You can choose between three different main themes: Clearly White, Kinda -Dark and Just Black for AMOLED displays. Select your favorite accent -color from a color palette. - -## 🏠 Home -Where you can view your recently/top played artists, albums and -favorite songs. No other music player has this feature. - -## 📦 Included Features -- Base 3 themes (Clearly White, Kinda Dark and Just Black) -- Chromecast support -- Choose from 10+ now playing themes -- Driving Mode -- Headset/Bluetooth support -- Music duration filter -- Android auto support -- Wallpaper accent picker on Android 8.1+ -- Material You support on Android 12+ -- Monet themed icon support on Android 13+ -- Folder support - Play songs by folder -- Gapless playback -- Volume controls -- Carousel effect for album covers -- Home screen widgets -- Lock screen playback controls -- Lyrics screen (download and sync with music) -- Sleep timer -- Easy drag to sort playlist & play queue -- Tag editor -- Create, edit and import playlists -- Playing queue with reorder -- User profile -- 30+ languages support (help translate the project: [Crowdin](https://crowdin.com/project/retromusicplayer) -- Browse and play your music by songs, albums, artists, playlists and - genre -- Smart Auto Playlists - Recently played, most played and history -- Build your playlist on the go - -We are trying our best to bring you the best user experience. The app is regularly being updated for bug fixes and new features. - -___ - - -## ❓ FAQ -Please read the FAQ [here](https://retromusic.app/faq.html) - -In any case, you find or notice any bugs please report them by creating an issue or by contacting us in the [Telegram help & feedback group](https://t.me/retromusicapp). -If you have any feature suggestions, please create an issue with detailed information or by contacting us in the [Telegram suggestions group](https://t.me/retro_music_suggestion). - -## 🔗 Social links -**Telegram:** https://t.me/retromusicapp
-**Instagram:** https://instagram.com/retromusicapp
-**Crowdin**: https://crowdin.com/project/retromusicplayer
-**Pinterest:** https://pinterest.com/retromusicapp
-**Twitter:** https://twitter.com/retromusicapp
- -## 🗂️ License - -Retro Music Player is released under the GNU General Public License v3.0 -(GPLv3), which can be found [here](LICENSE.md) - - ->Please note: Retro Music Player is an offline music player app. It ->doesn't support music downloading or online music streaming. +

+ + +

Retro Music Player 🎵

+ +

+

+ + + + + + + + + + + + + + + + + + + + + + +

+ +___ + +## 🆕 Material You Design Music Player for Android music lovers + +## ⚠ Join [@retromusiclog](https://telegram.me/retromusiclog) on Telegram for important updates. +___ + +## 📱 Screenshots +### App Themes +| | | | +|:---:|:---:|:---:| +|Clearly white| Kinda dark | Just black| + +### Player screen +| | | | | | +|:---:|:---:|:---:|:---:|:---:| +| Home | Songs | Albums | Artists | Settings | + +### Synced lyrics screen (Over Cover) +| | | | +|:---:|:---:|:---:| +| Synced Over Cover light | Synced Over Cover dark | Synced Over Cover black | + +### Synced lyrics screen (Replace Cover) +| | | | +|:---:|:---:|:---:| +| Synced Replace Cover light | Synced Replace Cover dark | Synced Replace Cover black | + +### 10+ Now playing themes +| || | | | +|:-----: |:-----: |:-----: |:-----: |:-----: | +| Normal | Fit | Flat | Color | Material | + +| || | | | +|:-----: |:-----: |:-----: |:-----: |:-----: | +| Classic | Adaptive | Blur | Tiny | Peek | + +___ + +## 🧭 Navigation never made easier +Self-explanatory interface without overloaded menus. + +## 🎨 Colorful +You can choose between three different main themes: Clearly White, Kinda +Dark and Just Black for AMOLED displays. Select your favorite accent +color from a color palette. + +## 🏠 Home +Where you can view your recently/top played artists, albums and +favorite songs. No other music player has this feature. + +## 📦 Included Features +- Base 3 themes (Clearly White, Kinda Dark and Just Black) +- Chromecast support +- Choose from 10+ now playing themes +- Driving Mode +- Headset/Bluetooth support +- Music duration filter +- Android auto support +- Wallpaper accent picker on Android 8.1+ +- Material You support on Android 12+ +- Monet themed icon support on Android 13+ +- Folder support - Play songs by folder +- Gapless playback +- Volume controls +- Carousel effect for album covers +- Home screen widgets +- Lock screen playback controls +- Lyrics screen (download and sync with music) +- Sleep timer +- Easy drag to sort playlist & play queue +- Tag editor +- Create, edit and import playlists +- Playing queue with reorder +- User profile +- 30+ languages support (help translate the project: [Crowdin](https://crowdin.com/project/retromusicplayer) +- Browse and play your music by songs, albums, artists, playlists and + genre +- Smart Auto Playlists - Recently played, most played and history +- Build your playlist on the go + +We are trying our best to bring you the best user experience. The app is regularly being updated for bug fixes and new features. + +___ + + +## ❓ FAQ +Please read the FAQ [here](https://retromusic.app/faq.html) + +In any case, you find or notice any bugs please report them by creating an issue or by contacting us in the [Telegram help & feedback group](https://t.me/retromusicapp). +If you have any feature suggestions, please create an issue with detailed information or by contacting us in the [Telegram suggestions group](https://t.me/retro_music_suggestion). + +## 🔗 Social links +**Telegram:** https://t.me/retromusicapp
+**Instagram:** https://instagram.com/retromusicapp
+**Crowdin**: https://crowdin.com/project/retromusicplayer
+**Pinterest:** https://pinterest.com/retromusicapp
+**Twitter:** https://twitter.com/retromusicapp
+ +## 🗂️ License + +Retro Music Player is released under the GNU General Public License v3.0 +(GPLv3), which can be found [here](LICENSE.md) + + +>Please note: Retro Music Player is a local music player app. It +>doesn't support music downloading or online music streaming. diff --git a/app/build.gradle b/app/build.gradle index 9f1d1378c..554f875b5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,11 +1,13 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' +apply plugin: 'com.google.devtools.ksp' apply plugin: "androidx.navigation.safeargs.kotlin" apply plugin: 'kotlin-parcelize' android { compileSdk 32 + namespace "code.name.monkey.retromusic" defaultConfig { minSdk 21 @@ -13,29 +15,33 @@ android { vectorDrawables.useSupportLibrary = true - applicationId "code.name.monkey.retromusic" - versionCode 10598 - versionName '6.0.3-beta' + applicationId namespace + versionCode 10597 + versionName '6.0.2-beta' buildConfigField("String", "GOOGLE_PLAY_LICENSING_KEY", "\"${getProperty(getProperties('../public.properties'), 'GOOGLE_PLAY_LICENSE_KEY')}\"") } - signingConfigs { - release { - Properties properties = getProperties('retro.properties') - storeFile file(getProperty(properties, 'storeFile')) - keyAlias getProperty(properties, 'keyAlias') - storePassword getProperty(properties, 'storePassword') - keyPassword getProperty(properties, 'keyPassword') + def signingProperties = getProperties('retro.properties') + def releaseSigning + if (signingProperties != null) { + releaseSigning = signingConfigs.create("release") { + storeFile file(getProperty(signingProperties, 'storeFile')) + keyAlias getProperty(signingProperties, 'keyAlias') + storePassword getProperty(signingProperties, 'storePassword') + keyPassword getProperty(signingProperties, 'keyPassword') } + } else { + releaseSigning = signingConfigs.debug } buildTypes { release { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - signingConfig signingConfigs.release + signingConfig releaseSigning } debug { + signingConfig releaseSigning applicationIdSuffix '.debug' versionNameSuffix ' DEBUG' } @@ -50,7 +56,7 @@ android { } } - buildFeatures{ + buildFeatures { viewBinding true } packagingOptions { @@ -59,6 +65,7 @@ android { } } lint { + abortOnError true warning 'ImpliedQuantity', 'Instantiatable', 'MissingQuantity', 'MissingTranslation' } compileOptions { @@ -68,23 +75,28 @@ android { kotlinOptions { jvmTarget = "1.8" } - + dependenciesInfo { + includeInApk = false + includeInBundle = false + } configurations.all { resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9' } } def getProperties(String fileName) { - final Properties properties = new Properties() + Properties properties = new Properties() def file = rootProject.file(fileName) if (file.exists()) { file.withInputStream { stream -> properties.load(stream) } + } else { + properties = null } return properties } static def getProperty(Properties properties, String name) { - return properties.getProperty(name) ?: "$name missing" + return properties?.getProperty(name) ?: "$name missing" } dependencies { @@ -94,12 +106,12 @@ dependencies { implementation "androidx.appcompat:appcompat:$appcompat_version" implementation 'androidx.annotation:annotation:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.recyclerview:recyclerview:1.3.0-beta01' + implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation "androidx.preference:preference-ktx:$preference_version" implementation "androidx.core:core-ktx:$core_version" implementation 'androidx.palette:palette-ktx:1.0.0' - implementation 'androidx.mediarouter:mediarouter:1.3.1' + implementation 'androidx.mediarouter:mediarouter:1.3.0' //Cast Dependencies normalImplementation 'com.google.android.gms:play-services-cast-framework:21.0.1' //WebServer by NanoHttpd @@ -112,13 +124,13 @@ dependencies { def room_version = '2.5.0-alpha02' implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-ktx:$room_version" - kapt "androidx.room:room-compiler:$room_version" + ksp "androidx.room:room-compiler:$room_version" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" - implementation "androidx.core:core-splashscreen:1.0.0" + implementation "androidx.core:core-splashscreen:1.0.0-rc01" normalImplementation 'com.google.android.play:feature-delivery:2.0.0' normalImplementation 'com.google.android.play:review:2.0.0' @@ -135,11 +147,9 @@ dependencies { implementation "com.afollestad.material-dialogs:input:$material_dialog_version" implementation "com.afollestad.material-dialogs:color:$material_dialog_version" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + implementation 'com.afollestad:material-cab:2.0.1' - def kotlin_coroutines_version = '1.6.4' - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4" def koin_version = '3.2.0' implementation "io.insert-koin:koin-core:$koin_version" @@ -159,6 +169,7 @@ dependencies { implementation "dev.chrisbanes.insetter:insetter:0.6.1" + implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5' implementation 'com.github.Adonai:jaudiotagger:2.3.15' normalImplementation 'com.anjlab.android.iab.v3:library:2.0.3' implementation 'com.r0adkll:slidableactivity:2.1.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f7c9d67fe..8db74d0f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,6 @@ + xmlns:tools="http://schemas.android.com/tools"> (R.id.customactivityoncrash_error_activity_restart_button) + findViewById