mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-10 15:11:58 +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
|
||||
versionCode = 1
|
||||
versionName = "0.1.0"
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
@@ -59,11 +58,6 @@ dependencies {
|
||||
implementation(libs.androidx.compose.ui.graphics)
|
||||
implementation(libs.androidx.compose.ui.tooling.preview)
|
||||
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.test.manifest)
|
||||
|
||||
@@ -2,15 +2,10 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<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
|
||||
android:name=".SubtracksApp"
|
||||
android:allowBackup="true"
|
||||
android:allowBackup="false"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
|
||||
@@ -2,7 +2,5 @@
|
||||
<resources>
|
||||
<style name="Theme.Subtracks" parent="android:Theme.Material.NoActionBar">
|
||||
<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>
|
||||
</resources>
|
||||
|
||||
@@ -1 +1 @@
|
||||
sdk=34
|
||||
sdk=35
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
};
|
||||
android = pkgs.androidenv.composeAndroidPackages {
|
||||
platformVersions = [ "35" ];
|
||||
buildToolsVersions = [ "latest" ];
|
||||
buildToolsVersions = [ "37.0.0" ];
|
||||
platformToolsVersion = "37.0.0";
|
||||
includeEmulator = false;
|
||||
includeSystemImages = false;
|
||||
includeNDK = false;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[versions]
|
||||
agp = "8.7.3"
|
||||
kotlin = "2.1.0"
|
||||
kotlin = "2.1.20"
|
||||
coreKtx = "1.15.0"
|
||||
lifecycle = "2.8.7"
|
||||
activityCompose = "1.9.3"
|
||||
|
||||
Vendored
BIN
Binary file not shown.
+1
@@ -1,6 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
|
||||
distributionSha256Sum=f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -86,7 +86,8 @@ done
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# 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.
|
||||
MAX_FD=maximum
|
||||
@@ -114,7 +115,7 @@ case "$( uname )" in #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH="\\\"\\\""
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
@@ -205,7 +206,7 @@ fi
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# 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.
|
||||
# * 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.
|
||||
@@ -213,7 +214,7 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Stop when "xargs" is not available.
|
||||
|
||||
Vendored
+2
-2
@@ -70,11 +70,11 @@ goto fail
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@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
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
|
||||
Reference in New Issue
Block a user