(
56 | durationMillis = durationMillis,
57 | easing = EmphasizedAccelerateEasing
58 | )
59 |
60 | @OptIn(ExperimentalSharedTransitionApi::class)
61 | val DefaultBoundsTransform = BoundsTransform { _, _ ->
62 | tween(easing = EmphasizedEasing, durationMillis = DURATION)
63 | }
64 |
65 | @OptIn(ExperimentalAnimationSpecApi::class, ExperimentalSharedTransitionApi::class)
66 | val SearchFABBoundsTransform = BoundsTransform { initialBounds, targetBounds ->
67 | keyframes {
68 | durationMillis = DURATION_ENTER_SHORT
69 | initialBounds at 0 using ArcMode.ArcBelow using MotionEasingStandard
70 | targetBounds at DURATION_ENTER_SHORT using ArcMode.ArcAbove using MotionEasingStandard
71 | }
72 | }
73 |
74 |
--------------------------------------------------------------------------------
/app/src/main/java/pl/lambada/songsync/util/ui/MotionConstants.kt:
--------------------------------------------------------------------------------
1 | package pl.lambada.songsync.util.ui
2 |
3 | /*
4 | * Copyright 2021 SOUP
5 | *
6 | * Licensed under the Apache License, Version 2.0 (the "License");
7 | * you may not use this file except in compliance with the License.
8 | * You may obtain a copy of the License at
9 | *
10 | * https://www.apache.org/licenses/LICENSE-2.0
11 | *
12 | * Unless required by applicable law or agreed to in writing, software
13 | * distributed under the License is distributed on an "AS IS" BASIS,
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | * See the License for the specific language governing permissions and
16 | * limitations under the License.
17 | */
18 |
19 |
20 | import androidx.compose.ui.unit.Dp
21 | import androidx.compose.ui.unit.dp
22 |
23 | object MotionConstants {
24 | const val DefaultMotionDuration: Int = 300
25 | const val DefaultFadeInDuration: Int = 150
26 | const val DefaultFadeOutDuration: Int = 75
27 | val DefaultSlideDistance: Dp = 30.dp
28 |
29 | const val DURATION = 600
30 | const val DURATION_ENTER = 400
31 | const val DURATION_ENTER_SHORT = 300
32 | const val DURATION_EXIT = 200
33 | const val DURATION_EXIT_SHORT = 100
34 |
35 | const val InitialOffset = 0.10f
36 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v31/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v31/ic_notification.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v31/ic_song.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notification.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_song.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
11 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v31/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v31/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/resources.properties:
--------------------------------------------------------------------------------
1 | unqualifiedResLocale = en-US
--------------------------------------------------------------------------------
/app/src/main/res/values-pl/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v31/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #EADDFF
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/backup_rules.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/data_extraction_rules.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
11 |
12 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/file_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/build.gradle.kts:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | SongSync is a simple Android app to download lyrics for songs in your music library.
Features:
- Download lyrics for whole music library with a single click
- Download lyrics for individual songs in your music library
- Embed lyrics directly to songs
- Download lyrics from various providers
- Search for lyrics for songs not in your music library (and download them)
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot1.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot2.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot3.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot4.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot5.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | Android app to download lyrics for songs in your music library.
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | ## For more details on how to configure your build environment visit
2 | # http://www.gradle.org/docs/current/userguide/build_environment.html
3 | #
4 | # Specifies the JVM arguments used for the daemon process.
5 | # The setting is particularly useful for tweaking memory settings.
6 | # Default value: -Xmx1024m -XX:MaxPermSize=256m
7 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
8 | #
9 | # When configured, Gradle will run in incubating parallel mode.
10 | # This option should only be used with decoupled projects. For more details, visit
11 | # https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects
12 | # org.gradle.parallel=true
13 | #Wed May 22 20:46:42 IRST 2024
14 | android.nonFinalResIds=false
15 | android.nonTransitiveRClass=true
16 | android.useAndroidX=true
17 | kotlin.code.style=official
18 | org.gradle.jvmargs=-Xmx2048M -Dkotlin.daemon.jvm.options\="-Xmx2048M" -Dfile.encoding\=UTF-8 --add-opens=java.base/java.lang=ALL-UNNAMED
19 | org.gradle.unsafe.configuration-cache=true
20 |
--------------------------------------------------------------------------------
/gradle/libs.versions.toml:
--------------------------------------------------------------------------------
1 | [versions]
2 | accompanist-systemuicontroller = "0.34.0"
3 | accompanist-permissions = "0.34.0"
4 | agp = "8.7.1"
5 | coil-compose = "2.7.0"
6 | kotlin = "2.0.0"
7 | core-ktx = "1.13.1"
8 | material3 = "1.3.0"
9 | kotlinx-coroutines-android = "1.8.1"
10 | kotlinx-serialization-json = "1.6.3"
11 | lifecycle-runtime-ktx = "2.8.6"
12 | activity-compose = "1.9.3"
13 | compose-bom = "2024.10.00"
14 | compose-animation = "1.7.4"
15 | material-icons-extended = "1.7.4"
16 | navigation-compose = "2.8.3"
17 | navigation-runtime-ktx = "2.8.3"
18 | preference = "1.2.1"
19 | ktor = "2.3.6"
20 | datastore = "1.1.1"
21 | taglib = "1.0.0-alpha18"
22 | kotlin-onetimepassword = "2.4.1"
23 |
24 | [libraries]
25 | accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist-permissions" }
26 | accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist-systemuicontroller" }
27 | androidx-material-icons-extended = { module = "androidx.compose.material:material-icons-extended", version.ref = "material-icons-extended" }
28 | androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigation-compose" }
29 | coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil-compose" }
30 | core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core-ktx" }
31 | kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines-android" }
32 | kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" }
33 | lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycle-runtime-ktx" }
34 | activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activity-compose" }
35 | compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" }
36 | androidx-compose-animation = { group = "androidx.compose.animation", name = "animation", version.ref = "compose-animation" }
37 | ui = { group = "androidx.compose.ui", name = "ui" }
38 | ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
39 | ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
40 | material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material3" }
41 | androidx-navigation-runtime-ktx = { group = "androidx.navigation", name = "navigation-runtime-ktx", version.ref = "navigation-runtime-ktx" }
42 | androidx-preference = { group = "androidx.preference", name = "preference-ktx", version.ref = "preference" }
43 | ktor-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" }
44 | ktor-cio = { group = "io.ktor", name = "ktor-client-cio", version.ref = "ktor" }
45 | datastore-preferences = { group = "androidx.datastore", name = "datastore-preferences", version.ref = "datastore" }
46 | taglib = { group = "com.github.Kyant0", name = "taglib", version.ref = "taglib" }
47 | kotlin-onetimepassword = { group = "dev.turingcomplete", name = "kotlin-onetimepassword", version.ref = "kotlin-onetimepassword" }
48 |
49 | [plugins]
50 | androidApplication = { id = "com.android.application", version.ref = "agp" }
51 | kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
52 | serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
53 | parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" }
54 | compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
55 |
56 | [bundles]
57 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Apr 28 09:48:17 IRST 2024
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
5 | zipStoreBase=GRADLE_USER_HOME
6 | zipStorePath=wrapper/dists
7 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%" == "" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%" == "" set DIRNAME=.
29 | set APP_BASE_NAME=%~n0
30 | set APP_HOME=%DIRNAME%
31 |
32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34 |
35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37 |
38 | @rem Find java.exe
39 | if defined JAVA_HOME goto findJavaFromJavaHome
40 |
41 | set JAVA_EXE=java.exe
42 | %JAVA_EXE% -version >NUL 2>&1
43 | if "%ERRORLEVEL%" == "0" goto execute
44 |
45 | echo.
46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47 | echo.
48 | echo Please set the JAVA_HOME variable in your environment to match the
49 | echo location of your Java installation.
50 |
51 | goto fail
52 |
53 | :findJavaFromJavaHome
54 | set JAVA_HOME=%JAVA_HOME:"=%
55 | set JAVA_EXE=%JAVA_HOME%\bin\java.exe
56 |
57 | if exist "%JAVA_EXE%" goto execute
58 |
59 | echo.
60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61 | echo.
62 | echo Please set the JAVA_HOME variable in your environment to match the
63 | echo location of your Java installation.
64 |
65 | goto fail
66 |
67 | :execute
68 | @rem Setup the command line
69 |
70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
71 |
72 | @rem Execute Gradle
73 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
74 |
75 | :end
76 | @rem End local scope for the variables with windows NT shell
77 | if "%ERRORLEVEL%"=="0" goto mainEnd
78 |
79 | :fail
80 | @rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
81 | @rem the _cmd.exe /c_ return code!
82 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
83 | exit /b 1
84 |
85 | :mainEnd
86 | if "%OS%"=="Windows_NT" endlocal
87 |
88 | :omega
89 |
--------------------------------------------------------------------------------
/screenshots/screenshot1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/screenshots/screenshot1.png
--------------------------------------------------------------------------------
/screenshots/screenshot2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/screenshots/screenshot2.png
--------------------------------------------------------------------------------
/screenshots/screenshot3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/screenshots/screenshot3.png
--------------------------------------------------------------------------------
/screenshots/screenshot4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/screenshots/screenshot4.png
--------------------------------------------------------------------------------
/screenshots/screenshot5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Lambada10/SongSync/e1dbdb9d1cddc08d059f568f92bcbc4622048604/screenshots/screenshot5.png
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | gradlePluginPortal()
6 | maven("https://jitpack.io")
7 | }
8 | }
9 | dependencyResolutionManagement {
10 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
11 | repositories {
12 | google()
13 | mavenCentral()
14 | maven("https://jitpack.io")
15 | }
16 | }
17 |
18 | rootProject.name = "SongSync"
19 | include(":app")
--------------------------------------------------------------------------------