mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-11 07:29:14 +01:00
pin the android sdk explicitly and apply review fixes
- flake: pin build-tools and platform-tools to 37.0.0 instead of "latest", matching build.gradle.kts - robolectric: run at sdk 35 (targetSdk) and re-record the golden - manifest: allowBackup off, drop not-yet-used permissions - theme: drop no-op status/nav bar colors (edge-to-edge) - deps: kotlin 2.1.20, drop unused deps and test runner - wrapper: regenerate jar from 8.11.1, add distributionSha256Sum - remove stale README
This commit is contained in:
@@ -1,77 +0,0 @@
|
|||||||
<div align="center">
|
|
||||||
|
|
||||||
<img src=".assets/header.png" alt="subtracks logo" width="500"/>
|
|
||||||
|
|
||||||
#
|
|
||||||
|
|
||||||
#### Subtracks is an Android open source music streaming app for [Subsonic-compatible](http://www.subsonic.org/pages/api.jsp) servers ([Subsonic](http://www.subsonic.org/pages/index.jsp), [Navidrome](https://www.navidrome.org/), [Airsonic](https://airsonic.github.io/), and more). It's designed to give you clean and convenient access to your music in the style of modern media players.
|
|
||||||
|
|
||||||

|
|
||||||
[](https://github.com/austinried/subtracks/releases/latest/)
|
|
||||||
[](https://f-droid.org/en/packages/com.subtracks)
|
|
||||||
[](https://github.com/austinried/subtracks/releases/)
|
|
||||||
[](https://github.com/austinried/subtracks/stargazers)
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
## 📱 Screenshots
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<img src="metadata/en-US/images/phoneScreenshots/01_home.png" alt="home" width="200"/>
|
|
||||||
<img src="metadata/en-US/images/phoneScreenshots/02_now-playing.png" alt="now playing" width="200"/>
|
|
||||||
<img src="metadata/en-US/images/phoneScreenshots/03_library-albums.png" alt="library albums" width="200"/>
|
|
||||||
<img src="metadata/en-US/images/phoneScreenshots/04_album.png" alt="album view" width="200"/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
## ⬇️ Download
|
|
||||||
|
|
||||||
<div align="center">
|
|
||||||
<a href="https://play.google.com/store/apps/details?id=com.subtracks"><img src=".assets/google-play-badge.png" width="250"/></a>
|
|
||||||
<a href="https://f-droid.org/en/packages/com.subtracks/"><img src=".assets/f-droid-badge.png" width="250"></a>
|
|
||||||
<a href="https://github.com/austinried/subtracks/releases/"><img src=".assets/github-badge.png" width="250"/></a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
>**Warning**
|
|
||||||
>
|
|
||||||
>Each download source above is signed with a different key, so you cannot switch between them without first uninstalling and then re-installing the app.
|
|
||||||
|
|
||||||
## ✨ Features
|
|
||||||
|
|
||||||
- Album and artist art display by default (full-res in detail/now playing views)
|
|
||||||
- Gapless playback
|
|
||||||
- Mulitple server support
|
|
||||||
- Filterable/sortable album and artist library views
|
|
||||||
- Search artists, albums, and songs
|
|
||||||
- Scrobble support
|
|
||||||
- Max bitrate and buffer size settings
|
|
||||||
- Loop and shuffle playback options
|
|
||||||
- Long-press for context menu shortcuts
|
|
||||||
|
|
||||||
## 🔜 Coming Soon™
|
|
||||||
|
|
||||||
- Offline support
|
|
||||||
- Customizable home screen categories
|
|
||||||
- Browse by folder support (currently only browses by tags)
|
|
||||||
- Multiple music folder awareness
|
|
||||||
- By year/by genre albums filter
|
|
||||||
- Playlist mangement (add/remove/sort/edit)
|
|
||||||
- Queue management (add/remove/sort)
|
|
||||||
- Multi-select actions
|
|
||||||
- Performance & animation improvements
|
|
||||||
- More shuffle play modes
|
|
||||||
|
|
||||||
## ⚙️ Building
|
|
||||||
|
|
||||||
See [Building from source](BUILDING.md).
|
|
||||||
|
|
||||||
## 🔤 Translations
|
|
||||||
|
|
||||||
Want to see Subtracks in your language? Visit the project on [Weblate](https://hosted.weblate.org/engage/subtracks/) to help!
|
|
||||||
|
|
||||||
<a href="https://hosted.weblate.org/engage/subtracks/">
|
|
||||||
<img src="https://hosted.weblate.org/widgets/subtracks/-/subtracks/multi-auto.svg" alt="Translation status" />
|
|
||||||
</a>
|
|
||||||
|
|
||||||
## 📃 License
|
|
||||||
|
|
||||||
[](https://github.com/austinried/subtracks/blob/main/LICENSE)
|
|
||||||
@@ -16,7 +16,6 @@ android {
|
|||||||
targetSdk = 35
|
targetSdk = 35
|
||||||
versionCode = 1
|
versionCode = 1
|
||||||
versionName = "0.1.0"
|
versionName = "0.1.0"
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
@@ -59,11 +58,6 @@ dependencies {
|
|||||||
implementation(libs.androidx.compose.ui.graphics)
|
implementation(libs.androidx.compose.ui.graphics)
|
||||||
implementation(libs.androidx.compose.ui.tooling.preview)
|
implementation(libs.androidx.compose.ui.tooling.preview)
|
||||||
implementation(libs.androidx.compose.material3)
|
implementation(libs.androidx.compose.material3)
|
||||||
implementation(libs.androidx.navigation.compose)
|
|
||||||
implementation(libs.koin.android)
|
|
||||||
implementation(libs.koin.androidx.compose)
|
|
||||||
implementation(libs.kotlinx.coroutines.android)
|
|
||||||
implementation(libs.kotlinx.serialization.json)
|
|
||||||
|
|
||||||
debugImplementation(libs.androidx.compose.ui.tooling)
|
debugImplementation(libs.androidx.compose.ui.tooling)
|
||||||
debugImplementation(libs.androidx.compose.ui.test.manifest)
|
debugImplementation(libs.androidx.compose.ui.test.manifest)
|
||||||
|
|||||||
@@ -2,15 +2,10 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
|
|
||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".SubtracksApp"
|
android:name=".SubtracksApp"
|
||||||
android:allowBackup="true"
|
android:allowBackup="false"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
|
|||||||
@@ -2,7 +2,5 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<style name="Theme.Subtracks" parent="android:Theme.Material.NoActionBar">
|
<style name="Theme.Subtracks" parent="android:Theme.Material.NoActionBar">
|
||||||
<item name="android:windowBackground">@android:color/black</item>
|
<item name="android:windowBackground">@android:color/black</item>
|
||||||
<item name="android:statusBarColor">@android:color/transparent</item>
|
|
||||||
<item name="android:navigationBarColor">@android:color/transparent</item>
|
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
sdk=34
|
sdk=35
|
||||||
|
|||||||
@@ -24,7 +24,8 @@
|
|||||||
};
|
};
|
||||||
android = pkgs.androidenv.composeAndroidPackages {
|
android = pkgs.androidenv.composeAndroidPackages {
|
||||||
platformVersions = [ "35" ];
|
platformVersions = [ "35" ];
|
||||||
buildToolsVersions = [ "latest" ];
|
buildToolsVersions = [ "37.0.0" ];
|
||||||
|
platformToolsVersion = "37.0.0";
|
||||||
includeEmulator = false;
|
includeEmulator = false;
|
||||||
includeSystemImages = false;
|
includeSystemImages = false;
|
||||||
includeNDK = false;
|
includeNDK = false;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[versions]
|
[versions]
|
||||||
agp = "8.7.3"
|
agp = "8.7.3"
|
||||||
kotlin = "2.1.0"
|
kotlin = "2.1.20"
|
||||||
coreKtx = "1.15.0"
|
coreKtx = "1.15.0"
|
||||||
lifecycle = "2.8.7"
|
lifecycle = "2.8.7"
|
||||||
activityCompose = "1.9.3"
|
activityCompose = "1.9.3"
|
||||||
|
|||||||
Vendored
BIN
Binary file not shown.
+1
@@ -1,6 +1,7 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
|
||||||
|
distributionSha256Sum=f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
validateDistributionUrl=true
|
validateDistributionUrl=true
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
@@ -86,7 +86,8 @@ done
|
|||||||
# shellcheck disable=SC2034
|
# shellcheck disable=SC2034
|
||||||
APP_BASE_NAME=${0##*/}
|
APP_BASE_NAME=${0##*/}
|
||||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
|
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
|
||||||
|
' "$PWD" ) || exit
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
MAX_FD=maximum
|
MAX_FD=maximum
|
||||||
@@ -114,7 +115,7 @@ case "$( uname )" in #(
|
|||||||
NONSTOP* ) nonstop=true ;;
|
NONSTOP* ) nonstop=true ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
CLASSPATH="\\\"\\\""
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
# Determine the Java command to use to start the JVM.
|
||||||
@@ -205,7 +206,7 @@ fi
|
|||||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
|
||||||
# Collect all arguments for the java command:
|
# Collect all arguments for the java command:
|
||||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||||
# and any embedded shellness will be escaped.
|
# and any embedded shellness will be escaped.
|
||||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||||
# treated as '${Hostname}' itself on the command line.
|
# treated as '${Hostname}' itself on the command line.
|
||||||
@@ -213,7 +214,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
|||||||
set -- \
|
set -- \
|
||||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||||
-classpath "$CLASSPATH" \
|
-classpath "$CLASSPATH" \
|
||||||
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
org.gradle.wrapper.GradleWrapperMain \
|
||||||
"$@"
|
"$@"
|
||||||
|
|
||||||
# Stop when "xargs" is not available.
|
# Stop when "xargs" is not available.
|
||||||
|
|||||||
Vendored
+2
-2
@@ -70,11 +70,11 @@ goto fail
|
|||||||
:execute
|
:execute
|
||||||
@rem Setup the command line
|
@rem Setup the command line
|
||||||
|
|
||||||
set CLASSPATH=
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
|
||||||
@rem Execute Gradle
|
@rem Execute Gradle
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||||
|
|
||||||
:end
|
:end
|
||||||
@rem End local scope for the variables with windows NT shell
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
|||||||
Reference in New Issue
Block a user