Compare commits

..

681 Commits

Author SHA1 Message Date
Nite
1f9de0be7e Merge branch 'feature/cache-fix' into 'develop'
Fixed cache space cleanup

Closes #1284

See merge request ultrasonic/ultrasonic!1206
2025-04-14 16:47:12 +00:00
Nite
550c486077 Fixed cache space cleanup 2025-04-14 16:47:11 +00:00
Nite
006c554456 Merge branch 'feature/bunch-of-fixes' into 'develop'
Fixed DI to make the widget work

See merge request ultrasonic/ultrasonic!1204
2025-04-11 17:48:08 +00:00
Nite
6443881193 Fixed DI to make the widget work 2025-04-11 17:48:08 +00:00
Nite
a98693bbdb Merge branch 'feature/dependency-update' into 'develop'
Updated libraries to latest version

See merge request ultrasonic/ultrasonic!1202
2025-04-11 08:07:16 +00:00
Nite
03e555eb27
Updated libraries to latest version 2025-04-11 09:58:16 +02:00
Nite
ef73d89491 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1196
2025-04-08 16:05:55 +00:00
josé m
4ad789d20b
Translated using Weblate (Galician)
Currently translated at 100.0% (425 of 425 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/gl/
2025-04-04 15:47:10 +02:00
Nite
7c163c237a Merge branch 'feature/min-sdk-26' into 'develop'
Updated Min SDK to 26

Closes #1319

See merge request ultrasonic/ultrasonic!1195
2025-04-04 12:55:13 +00:00
Nite
38432a3cdc Updated Min SDK to 26 2025-04-04 12:55:13 +00:00
Nite
53aee22794 Merge branch 'renovate/jackson-monorepo' into 'develop'
Update dependency com.fasterxml.jackson.module:jackson-module-kotlin to v2.18.3

See merge request ultrasonic/ultrasonic!1183
2025-04-04 10:11:01 +00:00
Nite
9880f15017 Merge branch 'renovate/major-koin' into 'develop'
Update koin to v4 (major)

See merge request ultrasonic/ultrasonic!1194
2025-04-04 09:36:19 +00:00
Renovate Bot
0fc836cf83 Update koin to v4 (major) 2025-04-04 09:36:19 +00:00
Nite
6eb20d1c0b Merge branch 'renovate/gradle-8.x' into 'develop'
Update dependency gradle to v8.13

See merge request ultrasonic/ultrasonic!1186
2025-04-04 09:16:51 +00:00
Renovate Bot
1f9c9505d7 Update dependency gradle to v8.13 2025-04-04 09:16:50 +00:00
Nite
2487d24371 Merge branch 'renovate/apachecodecs' into 'develop'
Update dependency commons-codec:commons-codec to v1.18.0

See merge request ultrasonic/ultrasonic!1185
2025-04-04 08:48:20 +00:00
Nite
c27b3759b1 Merge branch 'renovate/junit5-monorepo' into 'develop'
Update dependency org.junit.vintage:junit-vintage-engine to v5.12.1

See merge request ultrasonic/ultrasonic!1188
2025-04-04 08:45:58 +00:00
Nite
481f4e0347 Merge branch 'renovate/mockitokotlin' into 'develop'
Update dependency org.mockito.kotlin:mockito-kotlin to v5.4.0

See merge request ultrasonic/ultrasonic!1189
2025-04-04 08:31:59 +00:00
Renovate Bot
a9b47f5aef Update dependency org.mockito.kotlin:mockito-kotlin to v5.4.0 2025-04-04 08:31:59 +00:00
Renovate Bot
b53bb38631 Update dependency org.junit.vintage:junit-vintage-engine to v5.12.1 2025-04-04 08:31:27 +00:00
Renovate Bot
a2a42e06b0 Update dependency commons-codec:commons-codec to v1.18.0 2025-04-04 08:31:24 +00:00
Nite
adf5b95243 Merge branch 'renovate/mockito-monorepo' into 'develop'
Update dependency org.mockito:mockito-core to v5.16.1

See merge request ultrasonic/ultrasonic!1190
2025-04-04 08:18:46 +00:00
Nite
3d82b3935d Merge branch 'renovate/robolectric' into 'develop'
Update dependency org.robolectric:robolectric to v4.14.1

See merge request ultrasonic/ultrasonic!1191
2025-04-04 08:14:40 +00:00
Nite
7ee66e51e8 Merge branch 'renovate/kotlinx-coroutines-monorepo' into 'develop'
Update kotlinx-coroutines monorepo to v1.10.1

See merge request ultrasonic/ultrasonic!1192
2025-04-04 08:00:49 +00:00
Nite
b126cd594a Merge branch 'renovate/retrofit-monorepo' into 'develop'
Update retrofit monorepo to v2.11.0

See merge request ultrasonic/ultrasonic!1193
2025-04-04 07:52:58 +00:00
Renovate Bot
31f654ee2f Update retrofit monorepo to v2.11.0 2025-04-03 19:31:45 +00:00
Renovate Bot
42c8edc6e7 Update kotlinx-coroutines monorepo to v1.10.1 2025-04-03 19:31:41 +00:00
Renovate Bot
8f7c7c33ff Update dependency org.robolectric:robolectric to v4.14.1 2025-04-03 18:31:59 +00:00
Renovate Bot
c105c0d02d Update dependency org.mockito:mockito-core to v5.16.1 2025-04-03 18:31:51 +00:00
Nite
e74fb3795a Merge branch 'renovate/rxjava' into 'develop'
Update dependency io.reactivex.rxjava3:rxjava to v3.1.10

See merge request ultrasonic/ultrasonic!1182
2025-04-03 17:50:54 +00:00
Nite
80923ca8ac Merge branch 'renovate/detekt' into 'develop'
Update dependency io.gitlab.arturbosch.detekt:detekt-gradle-plugin to v1.23.8

See merge request ultrasonic/ultrasonic!1179
2025-04-03 17:44:18 +00:00
Nite
f2fa530047 Merge branch 'renovate/koin' into 'develop'
Update koin to v3.5.6

See merge request ultrasonic/ultrasonic!1172
2025-04-03 17:36:58 +00:00
Óscar García Amor
4cb6ab031b
Fixes translations linting 2025-04-03 09:25:00 +02:00
Óscar García Amor
2d224e5f84
Merge remote-tracking branch 'weblate/develop' into develop 2025-04-03 09:08:13 +02:00
Adolfo Jayme Barrientos
5a653bebb2
Translated using Weblate (Portuguese)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2025-04-03 09:06:40 +02:00
ssantos
5566cb05ab
Translated using Weblate (Portuguese)
Currently translated at 97.8% (413 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2025-04-03 09:02:00 +02:00
Adolfo Jayme Barrientos
7ee7aa23be
Translated using Weblate (Japanese)
Currently translated at 98.8% (417 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/ja/
2025-04-03 08:58:30 +02:00
Adolfo Jayme Barrientos
5a2ae50c74
Translated using Weblate (Galician)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/gl/
2025-04-03 08:58:30 +02:00
Adolfo Jayme Barrientos
62d7e6bb6d
Translated using Weblate (Norwegian Bokmål)
Currently translated at 83.1% (351 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/nb_NO/
2025-04-03 08:58:30 +02:00
Adolfo Jayme Barrientos
5266fc0b0f
Translated using Weblate (Spanish)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2025-04-03 08:58:30 +02:00
Adolfo Jayme Barrientos
612925bc7d
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 68.0% (287 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hant/
2025-04-03 08:58:30 +02:00
Adolfo Jayme Barrientos
81499a1b37
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 98.8% (417 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hans/
2025-04-03 08:58:30 +02:00
Adolfo Jayme Barrientos
27fc8462d1
Translated using Weblate (Russian)
Currently translated at 82.2% (347 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/ru/
2025-04-03 08:58:28 +02:00
Adolfo Jayme Barrientos
f3e205a452
Translated using Weblate (Portuguese)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2025-04-03 08:58:04 +02:00
Adolfo Jayme Barrientos
84374f8c13
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt_BR/
2025-04-03 08:58:04 +02:00
Adolfo Jayme Barrientos
5e8bf249f8
Translated using Weblate (Polish)
Currently translated at 98.8% (417 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pl/
2025-04-03 08:58:04 +02:00
Adolfo Jayme Barrientos
3913e676b7
Translated using Weblate (Dutch)
Currently translated at 95.0% (401 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/nl/
2025-04-03 08:58:02 +02:00
Adolfo Jayme Barrientos
a70ee39403
Translated using Weblate (Italian)
Currently translated at 63.0% (266 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/it/
2025-04-03 08:57:21 +02:00
Adolfo Jayme Barrientos
05bd9f0d2c
Translated using Weblate (Hungarian)
Currently translated at 77.9% (329 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/hu/
2025-04-03 08:57:21 +02:00
Adolfo Jayme Barrientos
4d9388f8fe
Translated using Weblate (French)
Currently translated at 96.4% (407 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/fr/
2025-04-03 08:57:21 +02:00
Adolfo Jayme Barrientos
8acd7da959
Translated using Weblate (German)
Currently translated at 99.0% (418 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/de/
2025-04-03 08:57:21 +02:00
Adolfo Jayme Barrientos
c909848ed5
Translated using Weblate (Czech)
Currently translated at 75.5% (319 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/cs/
2025-04-03 08:57:18 +02:00
Adolfo Jayme Barrientos
e5c8e874e3
Translated using Weblate (English)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/en/
2025-04-03 08:56:27 +02:00
Paulo Schopf
9d5caed73d
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt_BR/
2025-04-03 08:56:27 +02:00
Walton Henry (WaltonH)
292086e9d6
Translated using Weblate (Hungarian)
Currently translated at 77.9% (329 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/hu/
2025-04-03 08:56:20 +02:00
josé m
5639fcfb8b
Translated using Weblate (Galician)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/gl/
2025-04-03 08:54:39 +02:00
Paulo Schopf
ce39da4b79
Translated using Weblate (Portuguese)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2025-04-03 08:54:39 +02:00
ssantos
4e89672d15
Translated using Weblate (Portuguese)
Currently translated at 99.5% (420 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2025-04-03 08:54:39 +02:00
ssantos
6725ef5a2c
Translated using Weblate (Portuguese)
Currently translated at 97.8% (413 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2025-04-03 08:54:39 +02:00
Renovate Bot
680cc90871 Update dependency io.gitlab.arturbosch.detekt:detekt-gradle-plugin to v1.23.8 2025-04-02 20:31:32 +00:00
Nite
c19dc125a9 Merge branch 'renovate/ktlintgradle' into 'develop'
Update dependency org.jlleitschuh.gradle:ktlint-gradle to v12.1.1

See merge request ultrasonic/ultrasonic!1166
2025-04-02 19:32:20 +00:00
Renovate Bot
be8fa3c0d1 Update dependency com.fasterxml.jackson.module:jackson-module-kotlin to v2.18.3 2025-04-02 19:31:22 +00:00
Renovate Bot
312a97d664 Update dependency io.reactivex.rxjava3:rxjava to v3.1.10 2025-04-02 19:31:16 +00:00
Renovate Bot
fca954102a Update dependency org.jlleitschuh.gradle:ktlint-gradle to v12.1.1 2025-04-02 19:25:01 +00:00
Nite
9e078b4879 Merge branch 'feature/unified-rating' into 'develop'
Updated rating to be able to use the 5 star and heart rating together

Closes #440, #1231, and #1250

See merge request ultrasonic/ultrasonic!1133
2025-04-02 19:02:33 +00:00
Nite
46e85c27a2 Updated rating to be able to use the 5 star and heart rating together 2025-04-02 19:02:30 +00:00
Adolfo Jayme Barrientos
1124cef382
Translated using Weblate (Japanese)
Currently translated at 98.8% (417 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/ja/
2025-03-22 18:44:12 +01:00
Adolfo Jayme Barrientos
01ebf6e1aa
Translated using Weblate (Galician)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/gl/
2025-03-22 18:44:11 +01:00
Adolfo Jayme Barrientos
b65050ae85
Translated using Weblate (Norwegian Bokmål)
Currently translated at 83.1% (351 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/nb_NO/
2025-03-22 18:44:11 +01:00
Adolfo Jayme Barrientos
ddec1d7bdc
Translated using Weblate (Spanish)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2025-03-22 18:44:11 +01:00
Adolfo Jayme Barrientos
888d34aeb9
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 68.0% (287 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hant/
2025-03-22 18:44:11 +01:00
Adolfo Jayme Barrientos
0fb3d8aeca
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 98.8% (417 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hans/
2025-03-22 18:44:11 +01:00
Adolfo Jayme Barrientos
c56913733f
Translated using Weblate (Russian)
Currently translated at 82.2% (347 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/ru/
2025-03-22 18:44:11 +01:00
Adolfo Jayme Barrientos
76c61e1866
Translated using Weblate (Portuguese)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2025-03-22 18:44:11 +01:00
Adolfo Jayme Barrientos
810bb9ddd1
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt_BR/
2025-03-22 18:44:10 +01:00
Adolfo Jayme Barrientos
68a2123293
Translated using Weblate (Polish)
Currently translated at 98.8% (417 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pl/
2025-03-22 18:44:10 +01:00
Adolfo Jayme Barrientos
4221b18e09
Translated using Weblate (Dutch)
Currently translated at 95.0% (401 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/nl/
2025-03-22 18:44:10 +01:00
Adolfo Jayme Barrientos
e7ed066eed
Translated using Weblate (Italian)
Currently translated at 63.0% (266 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/it/
2025-03-22 18:44:10 +01:00
Adolfo Jayme Barrientos
1301f7e116
Translated using Weblate (Hungarian)
Currently translated at 77.9% (329 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/hu/
2025-03-22 18:44:10 +01:00
Adolfo Jayme Barrientos
63b064b021
Translated using Weblate (French)
Currently translated at 96.4% (407 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/fr/
2025-03-22 18:44:10 +01:00
Adolfo Jayme Barrientos
a9be77aa75
Translated using Weblate (German)
Currently translated at 99.0% (418 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/de/
2025-03-22 18:44:10 +01:00
Adolfo Jayme Barrientos
fc7dcc9f77
Translated using Weblate (Czech)
Currently translated at 75.5% (319 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/cs/
2025-03-22 18:44:10 +01:00
Adolfo Jayme Barrientos
48461f82a8
Translated using Weblate (English)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/en/
2025-03-22 18:44:09 +01:00
Paulo Schopf
81ea86fd01
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt_BR/
2024-10-31 15:24:51 +01:00
Walton Henry (WaltonH)
8803f4444e
Translated using Weblate (Hungarian)
Currently translated at 77.9% (329 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/hu/
2024-04-23 21:07:11 +02:00
Renovate Bot
38a97b2b91 Update koin to v3.5.6 2024-04-12 07:32:05 +00:00
josé m
6e7bcc4362
Translated using Weblate (Galician)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/gl/
2024-02-20 19:02:07 +01:00
Paulo Schopf
c12224e811
Translated using Weblate (Portuguese)
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2024-01-09 13:06:11 +01:00
ssantos
b8ef3cd177
Translated using Weblate (Portuguese)
Currently translated at 99.5% (420 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2024-01-07 17:06:12 +00:00
ssantos
2de773e5de
Translated using Weblate (Portuguese)
Currently translated at 97.8% (413 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2023-12-19 17:09:57 +00:00
birdbird
fe5b63ad1f Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1165
2023-12-06 10:52:51 +00:00
Paulo Schopf
4aff5857fd
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (422 of 422 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt_BR/
2023-12-05 22:06:55 +00:00
birdbird
a0d26cb3e7 Merge branch 'renovate/media3' into 'develop'
Update media3 to v1.2.0

See merge request ultrasonic/ultrasonic!1153
2023-12-04 16:40:18 +00:00
tzugen
639ef03bce
Adapt to media 1.2.0 2023-12-04 17:33:18 +01:00
Renovate Bot
b855e4bbe7
Update media3 to v1.2.0 2023-12-04 17:32:37 +01:00
birdbird
b83e349f5c Merge branch 'refactor2' into 'develop'
Update copyright in recently edited files

See merge request ultrasonic/ultrasonic!1164
2023-12-04 15:19:09 +00:00
birdbird
abad0438e3 Update copyright in recently edited files 2023-12-04 15:19:09 +00:00
birdbird
30f02c7eac Merge branch 'room2' into 'develop'
Adapt to room changes

See merge request ultrasonic/ultrasonic!1163
2023-12-04 10:01:42 +00:00
tzugen
64f1c3e172
Adapt to room changes 2023-12-04 10:49:35 +01:00
birdbird
f7f1f40668 Merge branch 'renovate/mockito-monorepo' into 'develop'
Update dependency org.mockito:mockito-core to v5.8.0

See merge request ultrasonic/ultrasonic!1161
2023-12-03 19:45:41 +00:00
birdbird
6519945c7b Merge branch 'renovate/major-ktlintgradle' into 'develop'
Update dependency org.jlleitschuh.gradle:ktlint-gradle to v12

See merge request ultrasonic/ultrasonic!1162
2023-12-03 19:45:20 +00:00
Renovate Bot
94979aeaab Update dependency org.jlleitschuh.gradle:ktlint-gradle to v12 2023-12-03 19:45:20 +00:00
Renovate Bot
37e43b73a7 Update dependency org.mockito:mockito-core to v5.8.0 2023-12-03 14:31:46 +00:00
birdbird
2cf2cf31c4 Merge branch 'exep' into 'develop'
Avoid two exceptions

See merge request ultrasonic/ultrasonic!1159
2023-12-03 14:12:11 +00:00
birdbird
9736ae451a Avoid two exceptions 2023-12-03 14:12:10 +00:00
birdbird
26331c1a07 Merge branch 'renovate/ksp' into 'develop'
Update dependency com.google.devtools.ksp to v1.9.21-1.0.15

See merge request ultrasonic/ultrasonic!1146
2023-12-03 14:06:06 +00:00
birdbird
35ffe9ef10 Merge branch 'renovate/room' into 'develop'
Update room to v2.6.1

See merge request ultrasonic/ultrasonic!1157
2023-12-03 14:06:01 +00:00
birdbird
976400d0e1 Merge branch 'renovate/mockitokotlin' into 'develop'
Update dependency org.mockito.kotlin:mockito-kotlin to v5.2.1

See merge request ultrasonic/ultrasonic!1160
2023-12-03 14:05:41 +00:00
Renovate Bot
d2ef76a2c5 Update dependency org.mockito.kotlin:mockito-kotlin to v5.2.1 2023-12-03 10:32:00 +00:00
Renovate Bot
c0926b1e13 Update room to v2.6.1 2023-12-03 10:31:56 +00:00
Renovate Bot
bf5d41ab30 Update dependency com.google.devtools.ksp to v1.9.21-1.0.15 2023-12-03 10:31:52 +00:00
birdbird
e2716a5965 Merge branch 'renovate/junit5-monorepo' into 'develop'
Update dependency org.junit.vintage:junit-vintage-engine to v5.10.1

See merge request ultrasonic/ultrasonic!1149
2023-12-03 09:31:41 +00:00
birdbird
8351f1dc0a Merge branch 'renovate/gradleplugin' into 'develop'
Update dependency com.android.tools.build:gradle to v8.2.0

See merge request ultrasonic/ultrasonic!1150
2023-12-03 09:31:40 +00:00
birdbird
90997d5f4c Merge branch 'renovate/activity' into 'develop'
Update dependency androidx.activity:activity-ktx to v1.8.1

See merge request ultrasonic/ultrasonic!1151
2023-12-03 09:31:31 +00:00
birdbird
747f071f2f Merge branch 'renovate/jackson' into 'develop'
Update dependency com.fasterxml.jackson.module:jackson-module-kotlin to v2.16.0

See merge request ultrasonic/ultrasonic!1152
2023-12-03 09:31:20 +00:00
birdbird
9e76308cf2 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1158
2023-12-03 09:30:45 +00:00
josé m
c452030fe1
Translated using Weblate (Galician)
Currently translated at 27.9% (119 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/gl/
2023-12-03 10:30:03 +01:00
birdbird
dbbeac6084 Merge branch 'renovate/gradle-8.x' into 'develop'
Update dependency gradle to v8.5

See merge request ultrasonic/ultrasonic!1156
2023-12-03 09:29:52 +00:00
birdbird
d56ec198a1 Merge branch 'renovate/detekt' into 'develop'
Update dependency io.gitlab.arturbosch.detekt:detekt-gradle-plugin to v1.23.4

See merge request ultrasonic/ultrasonic!1155
2023-12-03 09:29:47 +00:00
birdbird
13238dfdc0 Merge branch 'renovate/kotlin-monorepo' into 'develop'
Update kotlin monorepo to v1.9.21

See merge request ultrasonic/ultrasonic!1154
2023-12-03 09:29:40 +00:00
Renovate Bot
8063814bdc Update dependency com.android.tools.build:gradle to v8.2.0 2023-11-30 18:32:19 +00:00
Renovate Bot
3d8abdc65b Update dependency gradle to v8.5 2023-11-29 14:33:08 +00:00
Renovate Bot
4832876e54 Update dependency io.gitlab.arturbosch.detekt:detekt-gradle-plugin to v1.23.4 2023-11-26 12:31:21 +00:00
Renovate Bot
a0b0409930 Update kotlin monorepo to v1.9.21 2023-11-23 12:31:20 +00:00
Renovate Bot
8e6e9d4e8e Update dependency com.fasterxml.jackson.module:jackson-module-kotlin to v2.16.0 2023-11-16 01:31:37 +00:00
Renovate Bot
ee6d03db35 Update dependency androidx.activity:activity-ktx to v1.8.1 2023-11-15 18:31:49 +00:00
Renovate Bot
364270d338 Update dependency org.junit.vintage:junit-vintage-engine to v5.10.1 2023-11-05 17:31:25 +00:00
birdbird
a4dc06fa8a Merge branch 'renovate/detekt' into 'develop'
Update dependency io.gitlab.arturbosch.detekt:detekt-gradle-plugin to v1.23.3

See merge request ultrasonic/ultrasonic!1145
2023-11-03 10:35:44 +00:00
birdbird
5c94d995d4 Merge branch 'renovate/robolectric' into 'develop'
Update dependency org.robolectric:robolectric to v4.11.1

See merge request ultrasonic/ultrasonic!1143
2023-11-03 10:35:41 +00:00
birdbird
366da1c30c Merge branch 'renovate/kotlin-monorepo' into 'develop'
Update kotlin monorepo to v1.9.20

See merge request ultrasonic/ultrasonic!1144
2023-11-03 10:35:40 +00:00
birdbird
e893510e79 Merge branch 'renovate/navigation' into 'develop'
Update navigation to v2.7.5

See merge request ultrasonic/ultrasonic!1147
2023-11-03 10:35:34 +00:00
birdbird
67b359999e Merge branch 'renovate/mockito-monorepo' into 'develop'
Update dependency org.mockito:mockito-core to v5.7.0

See merge request ultrasonic/ultrasonic!1148
2023-11-03 10:35:29 +00:00
Renovate Bot
01569647f7 Update dependency org.mockito:mockito-core to v5.7.0 2023-11-02 20:31:40 +00:00
Renovate Bot
3ee20113ae Update navigation to v2.7.5 2023-11-01 17:31:36 +00:00
Renovate Bot
6edff7e053 Update dependency org.robolectric:robolectric to v4.11.1 2023-10-31 19:35:46 +00:00
Renovate Bot
70cc124818 Update dependency io.gitlab.arturbosch.detekt:detekt-gradle-plugin to v1.23.3 2023-10-31 16:31:16 +00:00
Renovate Bot
98bf943a86 Update kotlin monorepo to v1.9.20 2023-10-30 20:31:18 +00:00
birdbird
58944bb0fd Merge branch 'renovate/room' into 'develop'
Update room to v2.6.0

See merge request ultrasonic/ultrasonic!1138
2023-10-27 14:21:50 +00:00
Renovate Bot
397e1b6ecc Update room to v2.6.0 2023-10-27 14:21:50 +00:00
birdbird
71336b3c9f Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1139
2023-10-27 14:01:51 +00:00
Óscar García Amor
cd47bcf082
Translated using Weblate (Spanish)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2023-10-27 11:12:57 +00:00
birdbird
4fb5d2a437 Merge branch 'wifiPerf' into 'develop'
Address wifi deprecation

See merge request ultrasonic/ultrasonic!1142
2023-10-27 11:12:46 +00:00
tzugen
e8bf5a38b7
Address wifi deprecation 2023-10-27 13:06:27 +02:00
birdbird
ddfaf520e5 Merge branch 'wifiPerf' into 'develop'
Add a ClearJukebox method

See merge request ultrasonic/ultrasonic!1141
2023-10-27 11:00:01 +00:00
tzugen
4d1c7464b9
Add a ClearJukebox method 2023-10-27 12:32:22 +02:00
birdbird
42c6eac97f Merge branch 'renovate/okhttp-monorepo' into 'develop'
Update okhttp monorepo to v4.12.0

See merge request ultrasonic/ultrasonic!1140
2023-10-20 09:23:43 +00:00
Renovate Bot
2ae0a27588 Update okhttp monorepo to v4.12.0 2023-10-19 23:31:28 +00:00
birdbird
f2e8c0c331 Merge branch 'renovate/ktlintgradle' into 'develop'
Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.6.1

See merge request ultrasonic/ultrasonic!1131
2023-10-18 11:57:24 +00:00
birdbird
7ce522fd15 Merge branch 'renovate/jackson' into 'develop'
Update dependency com.fasterxml.jackson.module:jackson-module-kotlin to v2.15.3

See merge request ultrasonic/ultrasonic!1132
2023-10-18 11:57:10 +00:00
birdbird
170c61ef84 Merge branch 'renovate/mockito-monorepo' into 'develop'
Update dependency org.mockito:mockito-core to v5.6.0

See merge request ultrasonic/ultrasonic!1129
2023-10-18 11:56:51 +00:00
birdbird
87fdf94e61 Merge branch 'renovate/colorpicker' into 'develop'
Update dependency com.github.skydoves:colorpickerview to v2.3.0

See merge request ultrasonic/ultrasonic!1125
2023-10-18 11:56:00 +00:00
birdbird
fffe245df5 Merge branch 'renovate/materialdesign' into 'develop'
Update dependency com.google.android.material:material to v1.10.0

See merge request ultrasonic/ultrasonic!1128
2023-10-18 11:55:19 +00:00
birdbird
95194bed3e Merge branch 'renovate/gradle-8.x' into 'develop'
Update dependency gradle to v8.4

See merge request ultrasonic/ultrasonic!1127
2023-10-18 11:53:45 +00:00
birdbird
a9467e2fd8 Merge branch 'renovate/navigation' into 'develop'
Update navigation to v2.7.4

See merge request ultrasonic/ultrasonic!1126
2023-10-18 11:51:49 +00:00
birdbird
4b99fdb788 Merge branch 'master' into 'develop'
Merge back from master

See merge request ultrasonic/ultrasonic!1137
2023-10-18 11:51:16 +00:00
birdbird
727e53e096 Merge branch '480' into 'master'
Release 4.8.0

See merge request ultrasonic/ultrasonic!1124
2023-10-18 10:56:51 +00:00
tzugen
69fc9b955a
RC 4.8.0 2023-10-18 12:48:32 +02:00
tzugen
601d0ccdaa
Merge remote-tracking branch 'origin/develop' into 480 2023-10-18 12:44:01 +02:00
birdbird
b19b1fb65a Merge branch 'coroutineLegacy' into 'develop'
Migrate remaining Java Code and modernize it

See merge request ultrasonic/ultrasonic!1136
2023-10-18 10:19:12 +00:00
birdbird
442f622b35 Migrate remaining Java Code and modernize it 2023-10-18 10:19:10 +00:00
birdbird
de523a6451 Merge branch 'refactorScopes' into 'develop'
Refactor Koin, Scopes & Lifecycles

See merge request ultrasonic/ultrasonic!1130
2023-10-14 19:09:26 +00:00
birdbird
17260878ac Refactor Koin, Scopes & Lifecycles 2023-10-14 19:09:26 +00:00
Renovate Bot
c6d26cdd67 Update dependency com.fasterxml.jackson.module:jackson-module-kotlin to v2.15.3 2023-10-13 02:31:21 +00:00
Renovate Bot
458fe5c36e Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.6.1 2023-10-10 15:31:32 +00:00
Renovate Bot
f388aaf4d8 Update dependency org.mockito:mockito-core to v5.6.0 2023-10-06 15:31:34 +00:00
Renovate Bot
6ddff58afb Update dependency com.google.android.material:material to v1.10.0 2023-10-05 18:31:28 +00:00
Renovate Bot
1e176f995a Update dependency gradle to v8.4 2023-10-04 21:32:34 +00:00
Renovate Bot
22c61258cc Update navigation to v2.7.4 2023-10-04 17:31:13 +00:00
Renovate Bot
288a1ad1c2 Update dependency com.github.skydoves:colorpickerview to v2.3.0 2023-10-02 12:31:29 +00:00
birdbird
823465d6fd Merge branch 'enhancement/star-outline' into 'develop'
Created outline for rating star images

Closes #885

See merge request ultrasonic/ultrasonic!1120
2023-10-01 16:56:39 +00:00
tzugen
0786b634e5
Merge remote-tracking branch 'origin/enhancement/star-outline' into 4.8.0 2023-10-01 18:49:19 +02:00
tzugen
7f4f944d79
Merge remote-tracking branch 'origin/develop' into 4.8.0 2023-09-30 14:12:59 +02:00
birdbird
264c84d540 Merge branch 'renovate/gradleplugin' into 'develop'
Update dependency com.android.tools.build:gradle to v8.1.2

See merge request ultrasonic/ultrasonic!1121
2023-09-30 08:47:21 +00:00
Renovate Bot
e48c823de0 Update dependency com.android.tools.build:gradle to v8.1.2 2023-09-30 08:31:34 +00:00
birdbird
79f503beb3 Merge branch 'renovate/koin' into 'develop'
Update koin to v3.5.0

See merge request ultrasonic/ultrasonic!1118
2023-09-30 08:07:10 +00:00
birdbird
34da90ad26 Merge branch 'renovate/ksp' into 'develop'
Update dependency com.google.devtools.ksp to v1.9.10-1.0.13

See merge request ultrasonic/ultrasonic!1113
2023-09-30 08:03:49 +00:00
birdbird
566f780621 Merge branch 'renovate/viewmodelktx' into 'develop'
Update dependency androidx.lifecycle:lifecycle-viewmodel-ktx to v2.6.2

See merge request ultrasonic/ultrasonic!1114
2023-09-30 08:03:33 +00:00
birdbird
c76bce5e94 Merge branch 'renovate/rxjava' into 'develop'
Update dependency io.reactivex.rxjava3:rxjava to v3.1.8

See merge request ultrasonic/ultrasonic!1122
2023-09-30 08:03:09 +00:00
birdbird
27f0ee3a03 Merge branch 'renovate/ktlintgradle' into 'develop'
Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.6.0

See merge request ultrasonic/ultrasonic!1119
2023-09-30 08:03:01 +00:00
birdbird
a1c21da7a6 Merge branch 'renovate/androidxcore' into 'develop'
Update dependency androidx.core:core-ktx to v1.12.0

See merge request ultrasonic/ultrasonic!1117
2023-09-30 08:02:58 +00:00
birdbird
401ea0fcf1 Merge branch 'renovate/androidsupport' into 'develop'
Update dependency androidx.annotation:annotation to v1.7.0

See merge request ultrasonic/ultrasonic!1116
2023-09-30 08:02:55 +00:00
birdbird
c062345f5e Merge branch 'renovate/navigation' into 'develop'
Update navigation to v2.7.3

See merge request ultrasonic/ultrasonic!1115
2023-09-30 08:02:47 +00:00
birdbird
516cc94772 Merge branch 'mergeBack' into 'develop'
Merge master to dev

See merge request ultrasonic/ultrasonic!1123
2023-09-30 08:01:57 +00:00
birdbird
104df418cc Merge master to dev 2023-09-30 08:01:56 +00:00
Renovate Bot
5755363f2e Update dependency io.reactivex.rxjava3:rxjava to v3.1.8 2023-09-29 09:31:24 +00:00
Nite
5167f9e45e
Created outline for rating star images 2023-09-25 17:38:22 +02:00
Renovate Bot
7a24be4b98 Update navigation to v2.7.3 2023-09-20 17:31:48 +00:00
Renovate Bot
f9bafa93da Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.6.0 2023-09-18 20:31:51 +00:00
Renovate Bot
8c7e8a8ae0 Update koin to v3.5.0 2023-09-13 08:31:46 +00:00
Renovate Bot
76f16cc9f1 Update dependency androidx.core:core-ktx to v1.12.0 2023-09-06 18:31:57 +00:00
Renovate Bot
907c94096b Update dependency androidx.annotation:annotation to v1.7.0 2023-09-06 18:31:55 +00:00
Renovate Bot
f6ad5be3e0 Update dependency androidx.lifecycle:lifecycle-viewmodel-ktx to v2.6.2 2023-09-06 17:31:37 +00:00
Renovate Bot
db0f3b21e1 Update dependency com.google.devtools.ksp to v1.9.10-1.0.13 2023-08-24 09:31:42 +00:00
birdbird
709dff1a81 Merge branch 'back' into 'develop'
Sync master and develop

See merge request ultrasonic/ultrasonic!1112
2023-08-24 06:32:44 +00:00
birdbird
d2ed058d31 Sync master and develop 2023-08-24 06:32:43 +00:00
birdbird
7ad16ad92c Merge branch 'renovate/navigation' into 'develop'
Update navigation to v2.7.1

See merge request ultrasonic/ultrasonic!1110
2023-08-24 06:27:42 +00:00
Renovate Bot
8ab3b2634d Update navigation to v2.7.1 2023-08-23 17:08:15 +00:00
birdbird
3349da6809 Merge branch 'renovate/rxjava' into 'develop'
Update dependency io.reactivex.rxjava3:rxjava to v3.1.7

See merge request ultrasonic/ultrasonic!1109
2023-08-23 15:03:37 +00:00
Renovate Bot
e581776e43 Update dependency io.reactivex.rxjava3:rxjava to v3.1.7 2023-08-23 12:31:51 +00:00
birdbird
f292dc667e Merge branch 'renovate/kotlin-monorepo' into 'develop'
Update kotlin monorepo to v1.9.10

See merge request ultrasonic/ultrasonic!1108
2023-08-23 11:02:43 +00:00
birdbird
7b8d1dec9b Merge branch '471' into 'master'
Release canditate 4.7.1

See merge request ultrasonic/ultrasonic!1107
2023-08-23 11:00:30 +00:00
Renovate Bot
2d943edd61 Update kotlin monorepo to v1.9.10 2023-08-23 10:31:43 +00:00
birdbird
86464ba137 Merge branch 'renovate/mockito-monorepo' into 'develop'
Update dependency org.mockito:mockito-core to v5.5.0

See merge request ultrasonic/ultrasonic!1104
2023-08-23 09:47:51 +00:00
tzugen
f2b47a257d
Release 4.7.1 2023-08-23 11:47:21 +02:00
birdbird
09e87ce8a0
Disable a lint 2023-08-23 11:47:21 +02:00
birdbird
490461f840 Merge branch 'renovate/ksp' into 'develop'
Update dependency com.google.devtools.ksp to v1.9.0-1.0.13

See merge request ultrasonic/ultrasonic!1093
2023-08-23 09:45:59 +00:00
Renovate Bot
fb123d926d Update dependency com.google.devtools.ksp to v1.9.0-1.0.13 2023-08-23 09:45:59 +00:00
Alex Katlein
d2a98a3022
Utilize CarConnection to determine whether to set repeat mode to ALL 2023-08-23 10:57:26 +02:00
Renovate Bot
896c946a5a Update dependency org.mockito:mockito-core to v5.5.0 2023-08-22 13:31:52 +00:00
birdbird
560b593fcb Merge branch 'renovate/mockitokotlin' into 'develop'
Update dependency org.mockito.kotlin:mockito-kotlin to v5.1.0

See merge request ultrasonic/ultrasonic!1099
2023-08-22 12:46:00 +00:00
birdbird
fe9bce334a Merge branch 'renovate/gradle-8.x' into 'develop'
Update dependency gradle to v8.3

See merge request ultrasonic/ultrasonic!1101
2023-08-22 12:45:47 +00:00
birdbird
6af4d31aa3 Merge branch 'renovate/gradleplugin' into 'develop'
Update dependency com.android.tools.build:gradle to v8.1.1

See merge request ultrasonic/ultrasonic!1102
2023-08-22 12:45:20 +00:00
birdbird
0ec2bb4fce Merge branch 'renovate/media3' into 'develop'
Update media3 to v1.1.1

See merge request ultrasonic/ultrasonic!1100
2023-08-22 12:45:03 +00:00
birdbird
7f1dc14a4f Merge branch 'renovate/ktlintgradle' into 'develop'
Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.5.1

See merge request ultrasonic/ultrasonic!1096
2023-08-22 12:44:45 +00:00
birdbird
8b2843410f Merge branch 'disableALint' into 'develop'
Disable a lint

See merge request ultrasonic/ultrasonic!1105
2023-08-22 10:08:53 +00:00
birdbird
deef540ddc Disable a lint 2023-08-22 10:08:53 +00:00
Renovate Bot
cd101aef2a Update dependency com.android.tools.build:gradle to v8.1.1 2023-08-22 09:31:49 +00:00
birdbird
72bf0085b4 Merge branch 'fix/1263-no-repeat-all-outside-Auto' into 'develop'
Utilize CarConnection to determine whether to set repeat mode to ALL

Closes #1263

See merge request ultrasonic/ultrasonic!1098
2023-08-22 08:49:04 +00:00
birdbird
bfb7c85eac Merge branch 'master' into 'develop'
Merge back from release

See merge request ultrasonic/ultrasonic!1103
2023-08-22 08:14:06 +00:00
birdbird
0a3717f448 Merge back from release 2023-08-22 08:14:06 +00:00
Renovate Bot
fa3ca57a4e Update dependency gradle to v8.3 2023-08-17 07:32:56 +00:00
Renovate Bot
002a3250e4 Update media3 to v1.1.1 2023-08-16 12:32:00 +00:00
Renovate Bot
ab10d39f75 Update dependency org.mockito.kotlin:mockito-kotlin to v5.1.0 2023-08-09 20:31:51 +00:00
Alex Katlein
82f6758649
Utilize CarConnection to determine whether to set repeat mode to ALL 2023-08-09 21:17:41 +02:00
Renovate Bot
979fb116e8 Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.5.1 2023-08-07 19:31:40 +00:00
birdbird
ae97ded344 Merge branch 'kotlin' into 'develop'
Migrate more files to Kotlin

See merge request ultrasonic/ultrasonic!1094
2023-08-05 15:10:25 +00:00
birdbird
71d45c89fb Migrate more files to Kotlin 2023-08-05 15:10:25 +00:00
birdbird
76a5705b2b Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1095
2023-08-05 14:34:06 +00:00
birdbird
6b000bc90f
Translated using Weblate (German)
Currently translated at 99.3% (426 of 429 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/de/
2023-08-04 14:03:57 +02:00
birdbird
b87203bfe4 Merge branch '470' into 'master'
4.7.0 Release canditate

See merge request ultrasonic/ultrasonic!1091
2023-08-03 16:31:12 +00:00
tzugen
818cb96eb5
Release 4.7.0 2023-08-03 18:25:02 +02:00
tzugen
e9fdbd924b
Don't skip around when doing "Play Next" while music is playing 2023-08-03 14:28:22 +02:00
Alex Katlein
a0b9e738a5
Using android.R.color.transparent instead of empty drawable for the placeholder
- For some reason Android Auto displays a square with a white fill color where the empty space should be
- Got rid of empty drawable
2023-08-02 19:43:55 +02:00
birdbird
0dcdd94149 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1092
2023-08-02 08:29:01 +00:00
gallegonovato
410e4d9d96
Translated using Weblate (Spanish)
Currently translated at 100.0% (429 of 429 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2023-08-01 19:07:35 +02:00
birdbird
68567731ad Merge branch 'renovate/gradleplugin' into 'develop'
Update dependency com.android.tools.build:gradle to v8.1.0

See merge request ultrasonic/ultrasonic!1083
2023-07-31 14:37:48 +00:00
birdbird
75ecfce1df Merge branch 'toast' into 'develop'
Add a toast when adding tracks to the playlist, allow pinning when offline

See merge request ultrasonic/ultrasonic!1089
2023-07-31 14:37:33 +00:00
tzugen
ddf8ce7029
Migrate from KAPT to KSP 2023-07-31 14:47:35 +02:00
Renovate Bot
f99fb1c92a
Update dependency com.android.tools.build:gradle to v8.1.0 2023-07-31 14:46:58 +02:00
tzugen
7fcb58963c
Show Pin button also when offline 2023-07-31 12:47:49 +02:00
tzugen
f89b2da30d
More more functions to InsertionMode pattern,
show a Toast when adding tracks to the playlist.
2023-07-31 12:40:37 +02:00
tzugen
691bfbe594
Merge remote-tracking branch 'origin/master' into mergeBack 2023-07-31 11:32:10 +02:00
birdbird
7061b7a324 Merge branch 'renovate/kotlinxcoroutines' into 'develop'
Update kotlinxCoroutines to v1.7.3

See merge request ultrasonic/ultrasonic!1082
2023-07-31 09:14:45 +00:00
birdbird
6bc520d551 Merge branch 'renovate/preferences' into 'develop'
Update dependency androidx.preference:preference to v1.2.1

See merge request ultrasonic/ultrasonic!1084
2023-07-31 09:14:34 +00:00
birdbird
ff20c671a2 Merge branch 'renovate/koin' into 'develop'
Update koin to v3.4.3

See merge request ultrasonic/ultrasonic!1086
2023-07-31 09:14:23 +00:00
birdbird
37935a5f86 Merge branch '463' into 'master'
Release candidate 4.6.3

See merge request ultrasonic/ultrasonic!1081
2023-07-30 14:02:12 +00:00
Renovate Bot
1f6df202b9 Update koin to v3.4.3 2023-07-28 08:31:49 +00:00
Renovate Bot
06496ddf37 Update dependency androidx.preference:preference to v1.2.1 2023-07-26 17:31:46 +00:00
Renovate Bot
509e33ac20 Update kotlinxCoroutines to v1.7.3 2023-07-25 16:31:46 +00:00
tzugen
6bc09854ac
Fix wrong thread in throttled observers 2023-07-25 12:11:26 +02:00
tzugen
fc637166bb
Fix inject 2023-07-24 23:20:44 +02:00
birdbird
6eb7c9d25c Merge branch 'modernize' into 'develop'
Modernize code after media3 1.1.0 update

See merge request ultrasonic/ultrasonic!1077
2023-07-24 21:08:01 +00:00
birdbird
0492b0fa6f Modernize code after media3 1.1.0 update 2023-07-24 21:08:01 +00:00
birdbird
acbaae9f14 Merge branch 'feature/android-auto-shuffle-repeat' into 'develop'
Added custom buttons for shuffling the current queue and setting repeat mode

Closes #883

See merge request ultrasonic/ultrasonic!1075
2023-07-24 19:20:21 +00:00
Alex Katlein
77c1329be5 Added custom buttons for shuffling the current queue and setting repeat mode 2023-07-24 19:20:21 +00:00
birdbird
aefdadbbd5 Merge branch 'renovate/gradle-8.x' into 'develop'
Update dependency gradle to v8.2.1

See merge request ultrasonic/ultrasonic!1076
2023-07-24 19:20:05 +00:00
birdbird
29a1527d24 Merge branch 'renovate/junit5-monorepo' into 'develop'
Update dependency org.junit.vintage:junit-vintage-engine to v5.10.0

See merge request ultrasonic/ultrasonic!1079
2023-07-24 19:19:51 +00:00
tzugen
18fd8f64c6
Release 4.6.3
Features:
- Search is accessible through a new icon on the main screen
- Modernize Back Handling
- Reenable R8 Code minification
- Add a "Play Random Songs" shortcut

Bug fixes:
- Fix a few crashes
- Avoid triggering a bug in Supysonic
- Readd the "Star" button to the Now Playing screen
- Fix a rare crash when shuffling playlists with duplicate entries
- Fix a crash when choosing "Play next" on an empty playlist.
- Tracks buttons flash a scrollbar sometimes in Android 13
- Fix EndlessScrolling in genre listing
- Couldn't delete a track when shuffle was active
2023-07-24 21:16:26 +02:00
birdbird
4f55a2a4a5
Fix an exception when removeIncompleteTracksFromPlaylist() could be called on the wrong thread. 2023-07-24 21:09:39 +02:00
birdbird
1fa5f4c2f8
Fix unpin 2023-07-24 21:07:19 +02:00
birdbird
2a9bf9dd29 Merge branch 'fixException' into 'develop'
Fix an exception when removeIncompleteTracksFromPlaylist() could be called on the wrong thread.

See merge request ultrasonic/ultrasonic!1078
2023-07-24 18:57:29 +00:00
birdbird
a04517de90 Fix an exception when removeIncompleteTracksFromPlaylist() could be called on the wrong thread. 2023-07-24 18:57:29 +00:00
birdbird
21e4293adb Merge branch 'root' into 'develop'
Avoid rare NPE

See merge request ultrasonic/ultrasonic!1073

(cherry picked from commit 7209779b64820572910059fdd24342bb73734b54)

ecee57e1 Avoid rare NPE
2023-07-24 18:55:27 +00:00
birdbird
358af365d2 Merge branch 'fixUnpin' into 'develop'
Fix unpin

Closes #1259

See merge request ultrasonic/ultrasonic!1074
2023-07-24 18:38:09 +00:00
birdbird
62ba16eedd Fix unpin 2023-07-24 18:38:08 +00:00
Renovate Bot
e7825fc90c Update dependency org.junit.vintage:junit-vintage-engine to v5.10.0 2023-07-23 13:31:45 +00:00
Renovate Bot
1fba65ed3a Update dependency gradle to v8.2.1 2023-07-10 12:32:41 +00:00
birdbird
7209779b64 Merge branch 'root' into 'develop'
Avoid rare NPE

See merge request ultrasonic/ultrasonic!1073
2023-07-06 20:49:29 +00:00
tzugen
ecee57e166
Avoid rare NPE 2023-07-06 18:05:16 +02:00
birdbird
288f72b972 Merge branch 'renovate/koin' into 'develop'
Update koin to v3.4.2

See merge request ultrasonic/ultrasonic!923
2023-07-06 15:46:47 +00:00
Renovate Bot
6be96ee8c9 [ROBOTEST] Update koin to v3.4.2 2023-07-06 15:46:47 +00:00
birdbird
65dd30eaa8 Merge branch 'supy' into 'develop'
Fix a bug introduced in 725d9281

See merge request ultrasonic/ultrasonic!1072
2023-07-06 15:42:15 +00:00
tzugen
698360b77a
Release 4.6.2
Features:
- Search is accessible through a new icon on the main screen
- Modernize Back Handling
- Reenable R8 Code minification
- Add a "Play Random Songs" shortcut

Bug fixes:
- Avoid triggering a bug in Supysonic
- Readd the "Star" button to the Now Playing screen
- Fix a rare crash when shuffling playlists with duplicate entries
- Fix a crash when choosing "Play next" on an empty playlist.
- Tracks buttons flash a scrollbar sometimes in Android 13
- Fix EndlessScrolling in genre listing
- Couldn't delete a track when shuffle was active
2023-07-06 17:36:37 +02:00
tzugen
b57b799feb
Fix a bug introduced in 725d9281 2023-07-06 17:33:48 +02:00
tzugen
2436537609
Fix a bug introduced in 725d9281 2023-07-06 17:26:33 +02:00
birdbird
96ac6fcac7 Merge branch 'fix/android-auto-nested-directories' into 'develop'
Properly handling nested directory structures in Android Auto

Closes #1256

See merge request ultrasonic/ultrasonic!1067
2023-07-06 15:11:02 +00:00
Alex Katlein
9fa80d206b Properly handling nested directory structures in Android Auto 2023-07-06 15:11:02 +00:00
birdbird
8990b4d622 Merge branch 'renovate/media3' into 'develop'
Update media3 to v1.1.0

See merge request ultrasonic/ultrasonic!1070
2023-07-06 15:06:49 +00:00
Renovate Bot
211af57e8b Update media3 to v1.1.0 2023-07-06 15:06:49 +00:00
birdbird
9fd2a91f15 Merge branch 'renovate/kotlinxcoroutines' into 'develop'
Update kotlinxCoroutines to v1.7.2

See merge request ultrasonic/ultrasonic!1066
2023-07-06 14:32:40 +00:00
birdbird
c85e2ef3f4 Merge branch 'renovate/gradle-8.x' into 'develop'
Update dependency gradle to v8.2

See merge request ultrasonic/ultrasonic!1068
2023-07-06 14:32:33 +00:00
birdbird
8ab840023a Merge branch 'renovate/ktlintgradle' into 'develop'
Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.5.0

See merge request ultrasonic/ultrasonic!1069
2023-07-06 14:32:28 +00:00
Renovate Bot
db278afe4a Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.5.0 2023-07-03 22:32:22 +00:00
Renovate Bot
d08711eb0c Update dependency gradle to v8.2 2023-06-30 18:33:00 +00:00
Renovate Bot
500ffa8009 Update kotlinxCoroutines to v1.7.2 2023-06-29 13:31:51 +00:00
birdbird
7124939467 [ROBOTEST] Update .gitlab-ci.yml file 2023-06-29 13:09:51 +00:00
tzugen
4a21db2f73
Release 4.6.1
Features:
- Search is accessible through a new icon on the main screen
- Modernize Back Handling
- Reenable R8 Code minification
- Add a "Play Random Songs" shortcut

Bug fixes:
- Readd the "Star" button to the Now Playing screen
- Fix a rare crash when shuffling playlists with duplicate entries
- Fix a crash when choosing "Play next" on an empty playlist.
- Tracks buttons flash a scrollbar sometimes in Android 13
- Fix EndlessScrolling in genre listing
- Couldn't delete a track when shuffle was active
- Upgrade material to 1.9.0
2023-06-28 20:05:37 +02:00
birdbird
fe555c076d Merge branch '461' into 'master'
4.6.1 Release canditate

See merge request ultrasonic/ultrasonic!1065
2023-06-27 10:21:53 +00:00
tzugen
b40b0048da
4.6.1 Release canditate 2023-06-27 12:11:53 +02:00
birdbird
e08acc27a7 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1063
2023-06-27 09:12:47 +00:00
Óscar García Amor
c032d32e02
Translated using Weblate (Galician)
Currently translated at 13.3% (57 of 428 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/gl/
2023-06-27 10:23:03 +02:00
Óscar García Amor
f202febb4d
Translated using Weblate (Spanish)
Currently translated at 100.0% (428 of 428 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2023-06-27 10:23:03 +02:00
Óscar García Amor
69b83fe538
Translated using Weblate (Spanish)
Currently translated at 100.0% (428 of 428 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2023-06-27 10:23:03 +02:00
birdbird
c42439ef69 Merge branch 'shuffleCrash2' into 'develop'
Prevent a media3 crash

See merge request ultrasonic/ultrasonic!1064
2023-06-27 08:22:57 +00:00
birdbird
d420f70225 Prevent a media3 crash 2023-06-27 08:22:57 +00:00
birdbird
843cf8eb28 Merge branch 'stableIds' into 'develop'
Don't assume Stable ids for playlist

See merge request ultrasonic/ultrasonic!1062
2023-06-26 17:10:06 +00:00
birdbird
9b9e552b95 Don't assume Stable ids for playlist 2023-06-26 17:10:05 +00:00
birdbird
c3c241466c Merge branch 'hideSearch' into 'develop'
Hide search in now playing screen

Closes #1254 and #1255

See merge request ultrasonic/ultrasonic!1061
2023-06-26 16:33:11 +00:00
birdbird
e8c56b1a06 Hide search in now playing screen 2023-06-26 16:33:11 +00:00
birdbird
aa3f44cdb0 Merge branch 'mas' into 'develop'
Sync master to develop

See merge request ultrasonic/ultrasonic!1060
2023-06-23 10:44:34 +00:00
tzugen
f28fb5dbf3
Merge remote-tracking branch 'origin/master' into mas 2023-06-23 12:43:07 +02:00
birdbird
45f4ad5ab0 Merge branch 'renovate/room' into 'develop'
Update room to v2.5.2

See merge request ultrasonic/ultrasonic!1058
2023-06-23 09:55:33 +00:00
birdbird
8d241c17c8 Merge branch 'renovate/apachecodecs' into 'develop'
Update dependency commons-codec:commons-codec to v1.16.0

See merge request ultrasonic/ultrasonic!1057
2023-06-23 09:54:40 +00:00
birdbird
cc17b28be7 Merge branch 'renovate/ktlintgradle' into 'develop'
Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.4.2

See merge request ultrasonic/ultrasonic!1056
2023-06-23 09:54:20 +00:00
birdbird
e391746625 Add some more devices for robotest 2023-06-23 09:52:13 +00:00
Renovate Bot
ae306e6eb3 Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.4.2 2023-06-22 20:31:51 +00:00
Renovate Bot
11a30a15d9 Update room to v2.5.2 2023-06-21 21:31:42 +00:00
Renovate Bot
dc4e85b21d Update dependency commons-codec:commons-codec to v1.16.0 2023-06-21 18:31:46 +00:00
birdbird
3da9097c6b [ROBO] Correct apk path 2023-06-20 10:13:36 +00:00
birdbird
24fb2e4f43 [ROBO] Use higher privileged key, specify project 2023-06-20 09:29:00 +00:00
birdbird
8469a099b0 [ROBO] test 2023-06-20 08:44:38 +00:00
birdbird
ea2048babf Enable [ROBO] annotation to manually trigger a robo test 2023-06-20 08:43:44 +00:00
birdbird
f3152c5e4d allow failure for now for the robotest 2023-06-20 06:48:06 +00:00
birdbird
8b7fd123b7 Merge branch 'renovate/mockito-monorepo' into 'develop'
Update dependency org.mockito:mockito-core to v5.4.0

See merge request ultrasonic/ultrasonic!1053
2023-06-18 15:10:05 +00:00
birdbird
c5fb4e25a3 Merge branch 'develop' into 'master'
Fixup 4.6.0

See merge request ultrasonic/ultrasonic!1055
2023-06-18 14:04:26 +00:00
birdbird
162ae4dfac Fixup 4.6.0 2023-06-18 14:04:26 +00:00
birdbird
df3dc4221f Don't run sign step when merging dev into master 2023-06-18 13:55:16 +00:00
birdbird
ecfa17762c Update .gitlab-ci.yml file 2023-06-18 13:45:20 +00:00
birdbird
1df8b0bb41 Merge branch 'cleartext' into 'develop'
Reallow cleartext communication

See merge request ultrasonic/ultrasonic!1054
2023-06-18 13:42:57 +00:00
birdbird
fbec7610f3 [SkipCI] Rename step 2023-06-18 13:00:37 +00:00
birdbird
e6441f1344 CI: Try to merge two steps to remove code duplication 2023-06-18 12:58:17 +00:00
birdbird
9a2a959972 Add RoboTest when releasing 2023-06-18 12:44:27 +00:00
tzugen
f931c906c0
Reallow cleartext communication 2023-06-18 14:11:57 +02:00
Renovate Bot
ed1191937b Update dependency org.mockito:mockito-core to v5.4.0 2023-06-18 10:31:42 +00:00
birdbird
1d17274e00 Merge branch 'develop' into 'master'
Release 4.6.0

See merge request ultrasonic/ultrasonic!1052
2023-06-16 18:02:50 +00:00
birdbird
e86bdca3eb Release 4.6.0 2023-06-16 16:17:09 +00:00
birdbird
ffdc43b6bf Correct release note 4.6.0 2023-06-16 16:16:14 +00:00
birdbird
5c173f39f1 Merge branch 'master' into 'develop'
Master

See merge request ultrasonic/ultrasonic!1051
2023-06-16 16:15:14 +00:00
birdbird
7e8467f852 Add release note for 4.6.0 2023-06-16 16:13:00 +00:00
birdbird
ae7a200144 Merge branch 'fixAppend' into 'develop'
Fix EndlessScrolling in genre listings

Closes #1223

See merge request ultrasonic/ultrasonic!1050
2023-06-14 14:26:14 +00:00
birdbird
623564c28d Fix EndlessScrolling in genre listings 2023-06-14 14:26:14 +00:00
birdbird
971ed705fa Merge branch 'search' into 'develop'
Move search button in to main Topbar menu

Closes #1247

See merge request ultrasonic/ultrasonic!1048
2023-06-14 12:07:13 +00:00
birdbird
725d9281bf Move search button in to main Topbar menu 2023-06-14 12:07:13 +00:00
birdbird
8b9dc294c1 Merge branch 'enable-user-cert-authorities' into 'develop'
Enable User-installed certificate authorities

Closes #1249

See merge request ultrasonic/ultrasonic!1049
2023-06-14 11:56:29 +00:00
Enrico
429c7d2473 Enable User-installed certificate authorities 2023-06-14 11:56:29 +00:00
birdbird
ab50be3784 Merge branch 'highlightColor2' into 'develop'
Make track view transparent by default

See merge request ultrasonic/ultrasonic!1046
2023-06-09 11:36:57 +00:00
birdbird
83fae89763 Make track view transparent by default 2023-06-09 11:36:56 +00:00
birdbird
1f68a59af9 Merge branch 'highlightColor' into 'develop'
Fix highlight color

See merge request ultrasonic/ultrasonic!1045
2023-06-09 09:05:16 +00:00
birdbird
e1be29a6a8 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1043
2023-06-09 08:12:54 +00:00
gallegonovato
ab16c45e54
Translated using Weblate (Spanish)
Currently translated at 100.0% (428 of 428 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2023-06-09 09:57:52 +02:00
birdbird
024b2e8edb Merge branch 'shuffle' into 'develop'
Small fixes for shuffle

Closes #1244 and #1248

See merge request ultrasonic/ultrasonic!1044
2023-06-09 07:57:40 +00:00
birdbird
c04f90a6ac Small fixes for shuffle 2023-06-09 07:57:34 +00:00
tzugen
240e7fd8fb
Fix highlight color 2023-06-09 09:56:42 +02:00
birdbird
3de3844e75 Merge branch 'renovate/kotlin-monorepo' into 'develop'
Update kotlin monorepo to v1.8.22

See merge request ultrasonic/ultrasonic!1042
2023-06-07 21:24:51 +00:00
Renovate Bot
01c8092cac Update kotlin monorepo to v1.8.22 2023-06-07 19:31:38 +00:00
birdbird
a9494626bb Merge branch 'ImprovePlaylistView' into 'develop'
Improve current playing song visibility

See merge request ultrasonic/ultrasonic!1037
2023-06-06 19:20:11 +00:00
tzugen
ec852b0e74
Use elevation 2023-06-06 21:12:44 +02:00
birdbird
1fe13e84ce Merge branch 'renovate/ktlintgradle' into 'develop'
Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.4.0

See merge request ultrasonic/ultrasonic!1040
2023-06-06 15:30:48 +00:00
Renovate Bot
d8cb11808c Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.4.0 2023-06-06 14:31:51 +00:00
birdbird
35334c93cc Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1039
2023-06-06 09:42:20 +00:00
aorinngoDo
a98f50412f
Translated using Weblate (Japanese)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/ja/
2023-06-06 11:24:22 +02:00
Batman
b0e8ddfa66
Translated using Weblate (Polish)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pl/
2023-06-06 11:24:22 +02:00
Maxence G
c18f07362f
Translated using Weblate (French)
Currently translated at 97.6% (416 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/fr/
2023-06-06 11:24:22 +02:00
birdbird
26e9fcd40f Merge branch 'AddShortcutCapability' into 'develop'
Start implementing "Play Random Songs" as a shortcut

See merge request ultrasonic/ultrasonic!950
2023-06-06 09:24:15 +00:00
Maxmystere
b2498367b1 Start implementing "Play Random Songs" as a shortcut 2023-06-06 09:24:15 +00:00
birdbird
f68eee5233 Merge branch 'material190' into 'develop'
Upgrade material to 1.9.0

See merge request ultrasonic/ultrasonic!1009
2023-06-06 09:21:12 +00:00
tzugen
fd22c0f8b5
Add little dropdown icon to server selector header to show interactivity. 2023-06-06 10:52:00 +02:00
tzugen
bfe24e5dfd
Modernize backhandling to support predictive back handling 2023-06-06 10:51:33 +02:00
Maxence G
63296829a8
Lint 2023-06-04 23:00:09 +02:00
Maxence G
dc9b261c48
Improve current playing song visibility
Disable scroll animation because not visible and causing bugs on first interaction
2023-06-04 22:51:44 +02:00
tzugen
bfec814b43
Upgrade material to 1.9.0 2023-06-04 13:21:22 +02:00
birdbird
03d06896e9 Update Default.md 2023-06-04 07:08:22 +00:00
birdbird
5a4989186e Merge branch 'fixButtons' into 'develop'
Hide tiny scrollbars on buttons on Android 13

See merge request ultrasonic/ultrasonic!1036
2023-06-03 09:55:17 +00:00
birdbird
eb380b9af9 Merge branch 'r8' into 'develop'
Reenable R8

See merge request ultrasonic/ultrasonic!1026
2023-06-03 09:52:15 +00:00
birdbird
01124c8ecf Update Release.md 2023-06-03 09:37:00 +00:00
tzugen
365067f1a0
Merge branch '450' into 4502 2023-06-03 11:31:38 +02:00
birdbird
6a97636c7a [SkipCI] Template 2023-06-03 09:21:51 +00:00
tzugen
eb3aa0d202
Release 4.5.0 2023-06-03 11:11:53 +02:00
birdbird
53ea17d2b9 [SkipCI] Move template 2023-06-03 09:02:34 +00:00
birdbird
a1e339f850 [skipCI] Update Release.md 2023-06-03 08:59:40 +00:00
birdbird
4809317c63 Add release template -SkipCI 2023-06-03 08:58:47 +00:00
birdbird
c5c0497716 Merge branch 'renovate/major-mockitokotlin' into 'develop'
Update dependency org.mockito.kotlin:mockito-kotlin to v5

See merge request ultrasonic/ultrasonic!1034
2023-06-02 06:38:28 +00:00
Renovate Bot
79ac73020b Update dependency org.mockito.kotlin:mockito-kotlin to v5 2023-06-01 21:31:52 +00:00
birdbird
d9dfef4016 Merge branch 'playAll' into 'develop'
Fix playing all tracks when the selection has no id

See merge request ultrasonic/ultrasonic!1033
2023-06-01 21:29:26 +00:00
tzugen
3bd3607220
Remove unused fragment param 2023-06-01 23:21:43 +02:00
tzugen
e35a33edde
Use App context when toasting from background tasks,
use App context to resolve error messages
2023-06-01 23:16:17 +02:00
tzugen
c1013f6b80
Fix play all in Track collection random view 2023-06-01 23:16:17 +02:00
birdbird
21a27c691d Merge branch 'renovate/detekt' into 'develop'
Update dependency io.gitlab.arturbosch.detekt:detekt-gradle-plugin to v1.23.0

See merge request ultrasonic/ultrasonic!1029
2023-06-01 08:48:58 +00:00
Renovate Bot
25f3ff0bd3 Update dependency io.gitlab.arturbosch.detekt:detekt-gradle-plugin to v1.23.0 2023-06-01 08:48:58 +00:00
birdbird
4feb84bd83 Merge branch 'gradle' into 'develop'
Apply assistant changes to gradle file

See merge request ultrasonic/ultrasonic!1032
2023-06-01 08:39:14 +00:00
tzugen
4c049671db
Apply assistant changes to gradle file 2023-06-01 10:31:36 +02:00
birdbird
3a1251dd2a Merge branch 'renovate/gradleplugin' into 'develop'
Update dependency com.android.tools.build:gradle to v8.0.2

See merge request ultrasonic/ultrasonic!1030
2023-06-01 08:01:00 +00:00
birdbird
8dd7758bc6 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!1027
2023-06-01 07:59:17 +00:00
gallegonovato
296308cebf
Translated using Weblate (Spanish)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2023-05-29 10:11:15 +02:00
Newson Parker
45ca0966fd
Translated using Weblate (Chinese (Traditional))
Currently translated at 69.0% (294 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hant/
2023-05-29 10:11:15 +02:00
Newson Parker
77d3f8c11b
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hans/
2023-05-29 10:11:15 +02:00
birdbird
7a453dbd30 Correct transition reason 2023-05-29 08:11:09 +00:00
Renovate Bot
0a6a12c70a Update dependency com.android.tools.build:gradle to v8.0.2 2023-05-24 19:31:38 +00:00
Óscar García Amor
448fdb70b0 Merge branch 'newid' into 'develop'
Changes applicationId for GitLab builds

See merge request ultrasonic/ultrasonic!1028
2023-05-23 11:02:19 +00:00
Óscar García Amor
5e4ec56ae7
Changes applicationId for GitLab builds 2023-05-23 12:54:54 +02:00
birdbird
8c42700676 Merge branch 'thread' into 'develop'
Ensure correct thread when accepting a rating

See merge request ultrasonic/ultrasonic!1025
2023-05-21 13:08:19 +00:00
tzugen
22fda501f4
Ensure correct thread when accepting a rating 2023-05-21 15:00:41 +02:00
tzugen
556d3bb90d
Reenable R8 2023-05-21 15:00:04 +02:00
birdbird
0f18b20fa3 Merge branch 'cur' into 'develop'
Merge 4.4.1 to dev

See merge request ultrasonic/ultrasonic!1024
2023-05-21 12:18:11 +00:00
birdbird
a8961e8e96 Merge 4.4.1 to dev 2023-05-21 12:18:11 +00:00
birdbird
291528a309 Merge branch 'selectQuality' into 'develop'
Add setting to control the max bitrate when pinning

Closes #894

See merge request ultrasonic/ultrasonic!1022
2023-05-20 19:38:21 +00:00
birdbird
2a7cdbeded Merge branch 'fixStars' into 'develop'
Fix StarRating when setting a rating through AutoMediaController

See merge request ultrasonic/ultrasonic!1023
2023-05-20 19:37:27 +00:00
birdbird
c09739cea4 Fix StarRating when setting a rating through AutoMediaController 2023-05-20 19:37:27 +00:00
tzugen
315271390f
Add setting to control the max bitrate when pinning 2023-05-20 21:28:28 +02:00
birdbird
2df8d049d0 Merge branch 'Binder' into 'develop'
Refactor rating controls in Session

Closes #1235

See merge request ultrasonic/ultrasonic!1020
2023-05-20 14:32:27 +00:00
birdbird
0643b1bd1c Refactor rating controls in Session 2023-05-20 14:32:27 +00:00
birdbird
2b1291ae51 Merge branch 'userdata' into 'develop'
Add hasFragileUserData=true

See merge request ultrasonic/ultrasonic!1021
2023-05-20 13:38:13 +00:00
birdbird
5ec0d8a96b Add hasFragileUserData=true 2023-05-20 13:38:12 +00:00
birdbird
71168983b6 Merge branch 'cast' into 'develop'
Use the JukeboxPlayer as a Player instead of an Controller

See merge request ultrasonic/ultrasonic!1019
2023-05-19 21:37:31 +00:00
birdbird
bdcb1a505b Use the JukeboxPlayer as a Player instead of an Controller 2023-05-19 21:37:31 +00:00
birdbird
94f29d270c Merge branch '441' into 'master'
Release 4.4.1

See merge request ultrasonic/ultrasonic!1018
2023-05-18 20:28:13 +00:00
birdbird
98a61954a3 Release 4.4.1 2023-05-18 20:28:13 +00:00
birdbird
238d91c167 Merge branch 'renovate/media3' into 'develop'
Update media3 to v1.0.2

See merge request ultrasonic/ultrasonic!1013
2023-05-18 13:45:04 +00:00
birdbird
376748b298 Merge branch 'detekt' into 'develop'
Use default locations for Detekt config and baseline.

See merge request ultrasonic/ultrasonic!1017
2023-05-18 10:54:16 +00:00
birdbird
13091948ea Use default locations for Detekt config and baseline. 2023-05-18 10:54:16 +00:00
birdbird
0cfd8e8240 Merge branch 'prefs' into 'develop'
Modernize Activity launching to set custom cache location

See merge request ultrasonic/ultrasonic!1015
2023-05-18 10:32:17 +00:00
birdbird
7a17936855 Modernize Activity launching to set custom cache location 2023-05-18 10:32:17 +00:00
birdbird
1d7328c03e Merge branch 'kotlim' into 'develop'
Apply suggested Kotlin Gradle updates

See merge request ultrasonic/ultrasonic!1016
2023-05-18 10:29:10 +00:00
birdbird
76da209c6d Merge branch 'renovate/robolectric' into 'develop'
Update dependency org.robolectric:robolectric to v4.10.3

See merge request ultrasonic/ultrasonic!1014
2023-05-18 10:26:19 +00:00
tzugen
ddd9c29d7a
Apply suggested Kotlin Gradle updates 2023-05-18 12:22:40 +02:00
Renovate Bot
fe696943a4 Update dependency org.robolectric:robolectric to v4.10.3 2023-05-17 21:32:36 +00:00
Renovate Bot
a5bfc08264 Update media3 to v1.0.2 2023-05-17 17:31:43 +00:00
birdbird
4c2c7252c3 Merge branch 'showLoading' into 'develop'
Add loading indicator to playlist view

See merge request ultrasonic/ultrasonic!1011
2023-05-16 18:54:13 +00:00
tzugen
b5dd0fdca2
Add loading indicator to playlist view 2023-05-16 20:39:17 +02:00
birdbird
a7ee33c7c0 Merge branch 'id3' into 'develop'
Clarify the naming around the ID3 settings and methods,

See merge request ultrasonic/ultrasonic!1010
2023-05-16 18:09:04 +00:00
birdbird
7b56017844 Clarify the naming around the ID3 settings and methods, 2023-05-16 18:09:03 +00:00
birdbird
0fb345dd24 Merge branch 'revertMaterial' into 'develop'
Revert Material to 1.8.0

See merge request ultrasonic/ultrasonic!1008
2023-05-16 15:58:21 +00:00
tzugen
4faf2db11f
Revert Material to 1.8.0 2023-05-16 17:56:14 +02:00
birdbird
c118bd70f9 Update README.md 2023-05-16 15:47:03 +00:00
birdbird
b0e850d17e Merge branch 'playlistSorting' into 'develop'
Don't sort playlists even when Sort by Disc is activated

Closes #1229

See merge request ultrasonic/ultrasonic!1007
2023-05-16 10:42:25 +00:00
tzugen
a97c6e15e9
Don't sort playlists even when Sort by Disc is activated 2023-05-16 09:59:20 +02:00
birdbird
d084a35316 Merge branch 'blue' into 'develop'
Fix missing bluetooth permissions

Closes #791

See merge request ultrasonic/ultrasonic!1006
2023-05-16 07:37:37 +00:00
birdbird
e8bfa5dc04 Fix missing bluetooth permissions 2023-05-16 07:37:36 +00:00
birdbird
e729e3b063 Merge branch 'renovate/kotlinxcoroutines' into 'develop'
Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-android to v1.7.1

See merge request ultrasonic/ultrasonic!1003
2023-05-15 08:20:16 +00:00
Renovate Bot
8337f4a7e4 Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-android to v1.7.1 2023-05-15 08:20:16 +00:00
birdbird
0ae32c3cfc Merge branch 'renovate/okhttp' into 'develop'
Update okhttp to v4.11.0

See merge request ultrasonic/ultrasonic!976
2023-05-15 08:08:44 +00:00
birdbird
49f3bd27ed Merge branch 'renovate/materialdesign' into 'develop'
Update dependency com.google.android.material:material to v1.9.0

See merge request ultrasonic/ultrasonic!990
2023-05-15 08:03:28 +00:00
birdbird
1acfa917c9 Merge branch 'renovate/androidxcore' into 'develop'
Update dependency androidx.core:core-ktx to v1.10.1

See merge request ultrasonic/ultrasonic!1001
2023-05-15 08:03:14 +00:00
birdbird
9786cf2abf Merge branch '440' into 'master'
Release 4.4.0

See merge request ultrasonic/ultrasonic!1005
2023-05-15 07:15:56 +00:00
birdbird
537d65affc Release 4.4.0 2023-05-15 07:15:56 +00:00
birdbird
5ab2ec08f0 Merge branch 'fixCI' into 'develop'
Use fixed version of the CI image

See merge request ultrasonic/ultrasonic!1002
2023-05-14 14:28:06 +00:00
birdbird
e21477a5ee Use fixed version of the CI image 2023-05-14 14:28:05 +00:00
Renovate Bot
5daeddcc63 Update okhttp to v4.11.0 2023-05-11 05:32:21 +00:00
Renovate Bot
70d02f4493 Update dependency com.google.android.material:material to v1.9.0 2023-05-11 05:32:15 +00:00
Renovate Bot
58de991d64 Update dependency androidx.core:core-ktx to v1.10.1 2023-05-10 17:32:09 +00:00
birdbird
90ffa32246 Merge branch 'FixIDNull' into 'develop'
Fix the warning 'ID must not be null'

See merge request ultrasonic/ultrasonic!999
2023-05-09 10:08:13 +00:00
birdbird
3d94de9e46 Merge branch 'mergeback' into 'develop'
Mergeback

See merge request ultrasonic/ultrasonic!1000
2023-05-09 10:05:18 +00:00
birdbird
50aa2d0a2d Mergeback 2023-05-09 10:05:18 +00:00
tzugen
0e2171b872
Fix the warning 'ID must not be null' 2023-05-09 11:48:10 +02:00
birdbird
2c3f43f139 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!997
2023-05-09 09:34:35 +00:00
birdbird
fd8afe0231 Merge branch 'RefactorContextActions' into 'develop'
Use Coroutines for triggering the download or playback of music through the context menus

See merge request ultrasonic/ultrasonic!998
2023-05-09 09:34:15 +00:00
birdbird
cd982814cf Use Coroutines for triggering the download or playback of music through the context menus 2023-05-09 09:34:15 +00:00
gallegonovato
338fb618b9
Translated using Weblate (Spanish)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2023-05-08 17:52:45 +02:00
birdbird
842cb36ecb Merge branch 'RevertJackson' into 'develop'
Revert Jackson to 2.13.5 for compatibility with older APIs

See merge request ultrasonic/ultrasonic!993
2023-05-07 15:24:16 +00:00
birdbird
e06b8bc22e Merge branch 'FixExceptions' into 'develop'
Fix a bunch of Exceptions collected through Play Store reporting

See merge request ultrasonic/ultrasonic!994
2023-05-07 15:23:57 +00:00
birdbird
82fb45bd55 Fix a bunch of Exceptions collected through Play Store reporting 2023-05-07 15:23:57 +00:00
birdbird
3a39902c4c Merge branch '434-master' into 'master'
Release 4.3.4

See merge request ultrasonic/ultrasonic!995
2023-05-07 15:23:38 +00:00
birdbird
88364b15d6 Release 4.3.4 2023-05-07 15:23:38 +00:00
tzugen
751b946092
Revert Jackson to 2.13.5 for compatibility with older APIs 2023-05-07 12:57:15 +02:00
birdbird
39085f68b1 Merge branch 'renovate/kotlinxguava' into 'develop'
Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-guava to v1.7.0

See merge request ultrasonic/ultrasonic!992
2023-05-07 10:51:05 +00:00
Renovate Bot
1beb67c497 Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-guava to v1.7.0 2023-05-07 10:32:39 +00:00
birdbird
2ba001894a Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!985
2023-05-07 10:21:22 +00:00
Kaiyang Wu
0650ce0bba
Translated using Weblate (Chinese (Traditional))
Currently translated at 54.2% (231 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hant/
2023-05-07 11:56:24 +02:00
Kaiyang Wu
218f144848
Translated using Weblate (Chinese (Traditional))
Currently translated at 53.0% (226 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hant/
2023-05-07 11:56:24 +02:00
Kaiyang Wu
83c9c188e9
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hans/
2023-05-07 11:56:24 +02:00
birdbird
a4e8a7f94d Merge branch 'renovate/mockito-monorepo' into 'develop'
Update dependency org.mockito:mockito-core to v5.3.1

See merge request ultrasonic/ultrasonic!956
2023-05-07 09:56:19 +00:00
Renovate Bot
4f5d503ceb Update dependency org.mockito:mockito-core to v5.3.1 2023-05-07 09:56:19 +00:00
birdbird
381e2e4b86 Merge branch 'renovate/kotlinxcoroutines' into 'develop'
Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-android to v1.7.0

See merge request ultrasonic/ultrasonic!991
2023-05-07 09:49:19 +00:00
birdbird
2a90fe4aab Merge branch 'master' into 'develop'
Merge changes from master back to dev. (4.3.3 release)

See merge request ultrasonic/ultrasonic!989
2023-05-07 09:47:24 +00:00
birdbird
f37301e738 Merge changes from master back to dev. (4.3.3 release) 2023-05-07 09:47:24 +00:00
tzugen
4e9cea87a8
Hide tiny scrollbars on buttons on Android 13 2023-05-07 11:39:33 +02:00
birdbird
fca5ffaa0c Merge branch 'correctDefaults' into 'develop'
Correctly enable Artists pictures by default (was enabled in Settings mit not in Code)

See merge request ultrasonic/ultrasonic!988
2023-05-07 09:33:54 +00:00
Renovate Bot
a0314a865c Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-android to v1.7.0 2023-05-07 09:32:30 +00:00
birdbird
5da9a2819c Merge branch 'ratingManager' into 'develop'
Introduce a RatingManager that takes care of receiving and passing ratings...

See merge request ultrasonic/ultrasonic!981
2023-05-07 09:27:24 +00:00
birdbird
2a02c94c8f Introduce a RatingManager that takes care of receiving and passing ratings... 2023-05-07 09:27:24 +00:00
tzugen
96073125ca
Correctly enable Artists pictures by default (was enabled in Settings mit not in Code) 2023-05-07 11:19:01 +02:00
birdbird
58bd663ac0 Merge branch 'renovate/junit5-monorepo' into 'develop'
Update dependency org.junit.vintage:junit-vintage-engine to v5.9.3

See merge request ultrasonic/ultrasonic!983
2023-05-07 09:16:04 +00:00
birdbird
e689193df1 Merge branch 'renovate/robolectric' into 'develop'
Update dependency org.robolectric:robolectric to v4.10.2

See merge request ultrasonic/ultrasonic!987
2023-05-07 09:15:26 +00:00
birdbird
1aa388d48f Merge branch 'renovate/kotlin-monorepo' into 'develop'
Update kotlin monorepo to v1.8.21

See merge request ultrasonic/ultrasonic!980
2023-05-07 09:15:13 +00:00
birdbird
8f84020cfa Merge branch 'renovate/kluent' into 'develop'
Update kluent to v1.73

See merge request ultrasonic/ultrasonic!984
2023-05-07 09:14:39 +00:00
birdbird
db88ff8431 Merge branch 'renovate/ktlintgradle' into 'develop'
Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.3.2

See merge request ultrasonic/ultrasonic!982
2023-05-07 09:14:12 +00:00
birdbird
2d1642170a Merge branch 'renovate/gradleplugin' into 'develop'
Update dependency com.android.tools.build:gradle to v8.0.1

See merge request ultrasonic/ultrasonic!986
2023-05-07 09:14:03 +00:00
Renovate Bot
0cb7952943 Update dependency org.robolectric:robolectric to v4.10.2 2023-05-04 19:32:12 +00:00
Renovate Bot
d750c84606 Update dependency com.android.tools.build:gradle to v8.0.1 2023-05-01 16:32:12 +00:00
Renovate Bot
7abca537c9 Update kluent to v1.73 2023-04-29 14:32:22 +00:00
Renovate Bot
ca2c5483c0 Update dependency org.junit.vintage:junit-vintage-engine to v5.9.3 2023-04-26 07:32:20 +00:00
Renovate Bot
7b414a3a23 Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.3.2 2023-04-25 14:32:15 +00:00
Renovate Bot
10767d2d5b Update kotlin monorepo to v1.8.21 2023-04-25 05:32:25 +00:00
Óscar García Amor
404c7c05d5
Merge branch 'flamingo' 2023-04-24 15:54:48 +02:00
birdbird
0b2c8eccfe Merge branch '433' into 'master'
433

See merge request ultrasonic/ultrasonic!979
2023-04-24 11:37:53 +00:00
birdbird
4882037098 433 2023-04-24 11:37:53 +00:00
birdbird
138db03667 Merge branch 'fixContext' into 'develop'
Fix missing context

See merge request ultrasonic/ultrasonic!977
2023-04-23 10:12:42 +00:00
tzugen
f59e039c49
Fix missing context 2023-04-23 11:55:08 +02:00
birdbird
e0679f99cf Merge branch 'renovate/gradle-8.x' into 'develop'
Update dependency gradle to v8.1.1

See merge request ultrasonic/ultrasonic!974
2023-04-22 10:25:18 +00:00
birdbird
ffb78b166b Merge branch 'rmJitpack' into 'develop'
Remove Jitpack repo (was from custom media3 build)

See merge request ultrasonic/ultrasonic!975
2023-04-22 09:51:43 +00:00
tzugen
5fcbf59e0e
Remove Jitpack repo (was from custom media3 build) 2023-04-22 11:25:31 +02:00
Renovate Bot
e62b8972e7 Update dependency gradle to v8.1.1 2023-04-21 13:34:02 +00:00
birdbird
322457910c Merge branch 'renovate/media3' into 'develop'
Update media3 to v1.0.1

See merge request ultrasonic/ultrasonic!971
2023-04-20 12:05:48 +00:00
Renovate Bot
e9b602890a Update media3 to v1.0.1 2023-04-20 11:34:31 +00:00
birdbird
08d3618eb3 Merge branch 'fixShuffle' into 'develop'
Fix shuffle

Closes #876 and #877

See merge request ultrasonic/ultrasonic!966
2023-04-20 11:25:25 +00:00
birdbird
4f59c4d3ad Fix shuffle 2023-04-20 11:25:25 +00:00
birdbird
9ca5a9257d Merge branch 'gradle8' into 'develop'
Update Gradle plugin to v8

See merge request ultrasonic/ultrasonic!973
2023-04-20 11:24:28 +00:00
birdbird
6694d6f60b Update Gradle plugin to v8 2023-04-20 11:24:28 +00:00
birdbird
df7ff21cc9 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!972
2023-04-20 07:30:35 +00:00
Eryk Michalak
732d44cb73
Translated using Weblate (Polish)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pl/
2023-04-20 08:37:09 +02:00
birdbird
76eb89f5eb Merge branch 'flamingo' into 'develop'
Sets compileJava target to 17 to work with Flamingo

See merge request ultrasonic/ultrasonic!969
2023-04-20 06:37:03 +00:00
birdbird
185762e164 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!968
2023-04-19 09:24:36 +00:00
Óscar García Amor
33e4913761
Sets compileJava target to 17 to work with Flamingo 2023-04-18 14:34:05 +02:00
Kaiyang Wu
aede9be97c
Translated using Weblate (Chinese (Traditional))
Currently translated at 49.7% (212 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hant/
2023-04-17 21:49:30 +02:00
Kaiyang Wu
97556a36e5
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hans/
2023-04-17 21:49:30 +02:00
birdbird
fb970ffb80 Merge branch 'renovate/gradle-8.x' into 'develop'
Update dependency gradle to v8.1

See merge request ultrasonic/ultrasonic!957
2023-04-17 15:57:52 +00:00
birdbird
6de6cda7a4 Merge branch 'renovate/robolectric' into 'develop'
Update dependency org.robolectric:robolectric to v4.10

See merge request ultrasonic/ultrasonic!955
2023-04-17 15:56:50 +00:00
birdbird
5eed5c70b5 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!967
2023-04-17 15:56:28 +00:00
Óscar García Amor
6e1078a256
Translated using Weblate (Galician)
Currently translated at 6.3% (27 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/gl/
2023-04-16 12:49:02 +02:00
Óscar García Amor
c6c58262af Merge branch 'galician' into 'develop'
Adds galician to supported languages list

See merge request ultrasonic/ultrasonic!965
2023-04-15 10:24:03 +00:00
Óscar García Amor
2df89f4d81
Adds galician to supported languages list 2023-04-15 12:15:37 +02:00
Óscar García Amor
e83026f29a Merge branch 'norwegian' into 'develop'
Adds norwegian to supported languages list

See merge request ultrasonic/ultrasonic!964
2023-04-15 10:13:49 +00:00
Óscar García Amor
233e4f7a67
Adds norwegian to supported languages list 2023-04-15 12:05:56 +02:00
Óscar García Amor
dba12d147f Merge branch 'big-in-japan' into 'develop'
Adds japanese to supported languages list

See merge request ultrasonic/ultrasonic!963
2023-04-15 10:02:35 +00:00
Óscar García Amor
ccdd994756
Adds japanese to supported languages list 2023-04-15 11:53:13 +02:00
Óscar García Amor
dfcac45669 Merge branch 'changelog' into 'develop'
Translates changelog to spanish

See merge request ultrasonic/ultrasonic!962
2023-04-15 09:14:04 +00:00
Óscar García Amor
f72fc1885c Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!961
2023-04-15 09:04:43 +00:00
Óscar García Amor
db40d95215
Translates changelog to spanish 2023-04-15 11:02:09 +02:00
aorinngoDo
c2f4b58088
Translated using Weblate (Japanese)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/ja/
2023-04-14 17:52:47 +02:00
birdbird
82d2596c66 Merge branch '432' into 'develop'
Release 4.3.2

See merge request ultrasonic/ultrasonic!960
2023-04-14 12:06:09 +00:00
oiu
ccd7f5881d
Release 4.3.2 2023-04-14 14:03:44 +02:00
birdbird
c7edfbcae6 Merge branch 'StrictMode' into 'develop'
Fix a bunch of StrictMode warnings by executing methods on the right threads

See merge request ultrasonic/ultrasonic!958
2023-04-14 08:01:54 +00:00
tzugen
b1839c9562
Fix a bunch of StrictMode warnings by executing methods on the right threads 2023-04-13 16:20:45 +02:00
Renovate Bot
dbef8307ea Update dependency gradle to v8.1 2023-04-12 12:34:09 +00:00
Renovate Bot
ee52070925 Update dependency org.robolectric:robolectric to v4.10 2023-04-11 16:32:18 +00:00
Óscar García Amor
a406b8d211 Merge branch 'changelog' into 'develop'
Translate changelog to spanish

See merge request ultrasonic/ultrasonic!954
2023-04-11 15:04:07 +00:00
Óscar García Amor
367c1508b5
Translate changelog to spanish 2023-04-11 16:52:06 +02:00
Óscar García Amor
e5fce6a832 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!953
2023-04-11 14:32:06 +00:00
Weblate
6b5c96ea74 Translations update from Hosted Weblate 2023-04-11 14:32:06 +00:00
Óscar García Amor
d2faad60ca
Adds missing newline EOF 2023-04-11 16:06:48 +02:00
birdbird
2d7c26f13d Merge branch 'Changelog' into 'develop'
Format changelog correctly

See merge request ultrasonic/ultrasonic!952
2023-04-11 13:43:15 +00:00
tzugen
116e5aa4cf
Format changelog correctly 2023-04-11 15:33:59 +02:00
birdbird
3e8f45a073 Merge branch 'release431' into 'develop'
Release 4.3.1

See merge request ultrasonic/ultrasonic!951
2023-04-11 06:15:27 +00:00
birdbird
8090d4e039 Release 4.3.1 2023-04-11 06:15:27 +00:00
birdbird
9ca29cd11b Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!947
2023-04-10 11:28:22 +00:00
Mahoo Huang
76af2ffcc1
Translated using Weblate (Chinese (Simplified))
Currently translated at 96.7% (412 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/zh_Hans/
2023-04-10 13:26:31 +02:00
birdbird
82d554a900 Merge branch 'fixExceptions' into 'develop'
Fix two exceptions

See merge request ultrasonic/ultrasonic!949
2023-04-10 11:26:28 +00:00
birdbird
c70fcd7447 Fix two exceptions 2023-04-10 11:26:27 +00:00
birdbird
297f71a8c8 Merge branch 'SearchFix' into 'develop'
Search fix

See merge request ultrasonic/ultrasonic!948
2023-04-10 11:08:04 +00:00
birdbird
8c00388dc7 Search fix 2023-04-10 11:08:04 +00:00
birdbird
d92203ada6 Merge branch 'renovate/room' into 'develop'
Update room to v2.5.1

See merge request ultrasonic/ultrasonic!938
2023-04-06 10:07:03 +00:00
birdbird
f8d24a943d Merge branch 'renovate/androidxcore' into 'develop'
Update dependency androidx.core:core-ktx to v1.10.0

See merge request ultrasonic/ultrasonic!946
2023-04-06 10:06:53 +00:00
Renovate Bot
a1e84183d6 Update dependency androidx.core:core-ktx to v1.10.0 2023-04-05 17:32:19 +00:00
Óscar García Amor
2b339ccc7d
Bump version to 4.3.0 2023-04-04 15:58:24 +02:00
birdbird
893ae7fb1e Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!945
2023-04-03 07:26:31 +00:00
Tim Schneeberger
a828b19cce
Translated using Weblate (German)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/de/
2023-04-01 22:40:07 +02:00
birdbird
13f296b5ed Merge branch 'fixSomeStrictMode' into 'develop'
Fix some strict mode

See merge request ultrasonic/ultrasonic!944
2023-04-01 12:06:34 +00:00
birdbird
aa2c460529 Fix some strict mode 2023-04-01 12:06:34 +00:00
Renovate Bot
61b3b671a5 Update room to v2.5.1 2023-03-31 13:40:39 +00:00
birdbird
76d2fcdcc3 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!941
2023-03-31 13:10:30 +00:00
gallegonovato
2fe8e5f229
Translated using Weblate (Spanish)
Currently translated at 100.0% (426 of 426 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2023-03-31 14:36:35 +02:00
birdbird
4dcd495c96 Merge branch 'renovate/kotlin-monorepo' into 'develop'
Update kotlin monorepo to v1.8.20

See merge request ultrasonic/ultrasonic!943
2023-03-31 12:36:30 +00:00
birdbird
6fe9f730e3 Merge branch 'renovate/viewmodelktx' into 'develop'
Update dependency androidx.lifecycle:lifecycle-viewmodel-ktx to v2.6.1

See merge request ultrasonic/ultrasonic!937
2023-03-31 12:35:58 +00:00
birdbird
cb781cb76d Merge branch 'dumpConfig' into 'develop'
Dump settings to log when file logging is enabled

Closes #891

See merge request ultrasonic/ultrasonic!934
2023-03-31 12:35:07 +00:00
Renovate Bot
037519a5d3 Update kotlin monorepo to v1.8.20 2023-03-30 10:33:53 +00:00
birdbird
586b4f16e7 Merge branch 'autoFix' into 'develop'
Implement Auto requestMetadata.searchQuery

Closes #827

See merge request ultrasonic/ultrasonic!926
2023-03-24 19:13:19 +00:00
birdbird
1f9afd92b6 Implement Auto requestMetadata.searchQuery 2023-03-24 19:13:18 +00:00
birdbird
64d6605c2a Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!940
2023-03-24 17:28:20 +00:00
Allan Nordhøy
e2593406fa
Translated using Weblate (Norwegian Bokmål)
Currently translated at 85.6% (363 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/nb_NO/
2023-03-23 22:00:18 +01:00
birdbird
8647ea20f7 Merge branch 'ci-rename' into 'develop'
Rename CI steps for clarity

See merge request ultrasonic/ultrasonic!939
2023-03-23 07:50:27 +00:00
birdbird
eddb5947d3 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!936
2023-03-23 07:42:14 +00:00
Renovate Bot
9ac48946f5 Update dependency androidx.lifecycle:lifecycle-viewmodel-ktx to v2.6.1 2023-03-23 07:32:39 +00:00
birdbird
32e907905e Rename CI steps for clarity 2023-03-23 07:23:20 +00:00
Allan Nordhøy
7e9dfb0c72
Translated using Weblate (Norwegian Bokmål)
Currently translated at 66.5% (282 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/nb_NO/
2023-03-23 08:02:02 +01:00
Allan Nordhøy
4c9e0aaf87
Translated using Weblate (Norwegian Bokmål)
Currently translated at 65.5% (278 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/nb_NO/
2023-03-23 08:02:02 +01:00
gallegonovato
d0b3371958
Translated using Weblate (Spanish)
Currently translated at 100.0% (424 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2023-03-23 08:02:02 +01:00
Allan Nordhøy
b406ec8d07
Translated using Weblate (English)
Currently translated at 100.0% (424 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/en/
2023-03-23 08:02:02 +01:00
birdbird
2255816a1b Use our new registry url 2023-03-23 07:01:57 +00:00
birdbird
70f7d20fea Remove assembleDebug step, it's not needed 2023-03-23 06:56:26 +00:00
birdbird
5a9ca9f565 Merge branch 'renovate/media3' into 'develop'
Update media3 to v1.0.0

See merge request ultrasonic/ultrasonic!935
2023-03-22 12:57:29 +00:00
Renovate Bot
db97b03224 Update media3 to v1.0.0 2023-03-22 10:32:43 +00:00
tzugen
2ebb333a6e
Dump settings to log when file logging is enabled 2023-03-21 18:41:28 +01:00
birdbird
c72c6354e3 Merge branch 'weblate' into 'develop'
Migrates translations to Weblate

See merge request ultrasonic/ultrasonic!932
2023-03-21 11:14:57 +00:00
birdbird
7a70c4565c Merge branch 'npeFix' into 'develop'
Add logging for potential NPE

See merge request ultrasonic/ultrasonic!933
2023-03-21 09:04:55 +00:00
tzugen
be55eb514c
Add logging for potential NPE 2023-03-21 09:55:11 +01:00
Óscar García Amor
0a81df23e7
Migrates translations to Weblate 2023-03-21 08:46:06 +01:00
birdbird
46ad240306 Merge branch 'improveCI2' into 'develop'
Skip cache in sign step

See merge request ultrasonic/ultrasonic!931
2023-03-20 09:12:49 +00:00
birdbird
d3151d934a Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!929
2023-03-20 09:12:26 +00:00
birdbird
0ad68f1f11 Skip cache in sign step 2023-03-20 09:09:45 +00:00
Allan Nordhøy
724c7856d9
Translated using Weblate (Norwegian Bokmål)
Currently translated at 15.5% (66 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/nb_NO/
2023-03-20 09:37:24 +01:00
ssantos
36db1f7799
Translated using Weblate (Portuguese)
Currently translated at 99.7% (423 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2023-03-20 09:37:24 +01:00
J. Lavoie
b4613c3b38
Translated using Weblate (Italian)
Currently translated at 65.5% (278 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/it/
2023-03-20 09:37:24 +01:00
J. Lavoie
6ed8504d32
Translated using Weblate (French)
Currently translated at 99.7% (423 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/fr/
2023-03-20 09:37:24 +01:00
J. Lavoie
9c2ac56435
Translated using Weblate (German)
Currently translated at 96.2% (408 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/de/
2023-03-20 09:37:24 +01:00
birdbird
61e25e3c26 Merge branch 'improveCI' into 'develop'
Improve CI

See merge request ultrasonic/ultrasonic!930
2023-03-20 08:37:20 +00:00
birdbird
9c2eece929 Improve CI 2023-03-20 08:37:19 +00:00
birdbird
145bcec047 Reenable all CI steps 2023-03-19 11:17:16 +00:00
birdbird
efd840e5fe Enable Gitlab CI for MR 2023-03-19 11:08:43 +00:00
birdbird
d9ff239b03 Print Project ID 2023-03-19 10:57:54 +00:00
birdbird
6f808c4ebc Disable circleCI 2023-03-19 10:54:05 +00:00
birdbird
a43d2351ae Update .gitlab-ci.yml file 2023-03-19 09:32:30 +00:00
birdbird
839633c2f0 Cleanup 2023-03-19 09:25:06 +00:00
birdbird
f6b43fd2fd New try with only-pulling cache 2023-03-19 09:19:13 +00:00
birdbird
735e3225f8 Update .gitlab-ci.yml file 2023-03-19 09:17:00 +00:00
birdbird
386bfd884c Update .gitlab-ci.yml file 2023-03-19 09:14:23 +00:00
birdbird
03ff59c0b8 Update .gitlab-ci.yml file 2023-03-19 09:07:35 +00:00
birdbird
28f06c0b09 Update .gitlab-ci.yml file 2023-03-19 09:01:18 +00:00
birdbird
2933e0d801 Update .gitlab-ci.yml file 2023-03-19 08:56:28 +00:00
birdbird
318d362b77 Update .gitlab-ci.yml file 2023-03-19 08:53:17 +00:00
birdbird
1b1914e7ad Update .gitlab-ci.yml file 2023-03-19 08:46:48 +00:00
birdbird
ae853d8d4a Update .gitlab-ci.yml file 2023-03-19 08:35:14 +00:00
birdbird
f840149275 Update .gitlab-ci.yml file 2023-03-19 08:30:55 +00:00
birdbird
990479e37d Debug cache content 2023-03-19 08:29:53 +00:00
birdbird
5e7837b4b9 Debug cache content 2023-03-19 08:28:11 +00:00
birdbird
a53b2bc2c0 Try to use smaller image for Gitlab runner 2023-03-19 08:08:36 +00:00
birdbird
c0536353eb Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!928
2023-03-18 10:58:28 +00:00
Allan Nordhøy
e9b288cb6e
Translated using Weblate (Norwegian Bokmål)
Currently translated at 8.2% (35 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/nb_NO/
2023-03-17 00:39:31 +01:00
birdbird
9a4f1bfc60 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!927
2023-03-15 12:59:38 +00:00
ssantos
924ad71855
Translated using Weblate (Portuguese)
Currently translated at 99.7% (423 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2023-03-14 22:38:07 +01:00
Óscar García Amor
a7d0855f7a
Bump version to 4.2.2 2023-03-13 11:09:30 +01:00
Óscar García Amor
a6b1b32074
Fixes Transifex pipeline
Transifex has changed the client from Python to Go and the API level so
the old client has stopped working.
2023-03-13 10:08:23 +01:00
Óscar García Amor
f14fff0e83 Merge branch 'revert-68a6b885' into 'develop'
Revert "Migrates translations to Weblate"

See merge request ultrasonic/ultrasonic!925
2023-03-13 07:45:53 +00:00
Óscar García Amor
218954d4d9 Revert "Migrates translations to Weblate" 2023-03-13 07:45:53 +00:00
birdbird
38c07297c7 Merge branch 'renovate/mockito-monorepo' into 'develop'
Update mockito monorepo to v5.2.0

See merge request ultrasonic/ultrasonic!924
2023-03-12 18:46:28 +00:00
tzugen
0a5420e20d
Don't always play shuffled playlist on first track 2023-03-12 19:44:03 +01:00
Renovate Bot
7ccd45e11d Update mockito monorepo to v5.2.0 2023-03-09 20:32:52 +00:00
birdbird
df9aff309a Merge branch 'fixJukebox2' into 'develop'
Fix crashes with Jukebox

See merge request ultrasonic/ultrasonic!922
2023-03-09 12:58:41 +00:00
tzugen
1c5d7fe214
Fix crashes with Jukebox 2023-03-09 13:15:12 +01:00
birdbird
97cd7db177 Merge branch 'renovate/gradle-8.x' into 'develop'
Update dependency gradle to v8

See merge request ultrasonic/ultrasonic!915
2023-03-09 07:47:58 +00:00
Renovate Bot
8cbf73fc03 Update dependency gradle to v8 2023-03-09 07:47:58 +00:00
birdbird
62eab235b8 Merge branch 'renovate/ktlintgradle' into 'develop'
Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.3.1

See merge request ultrasonic/ultrasonic!907
2023-03-09 07:46:02 +00:00
birdbird
106a5faa37 Merge branch 'renovate/jackson' into 'develop'
Update dependency com.fasterxml.jackson.module:jackson-module-kotlin to v2.14.2

See merge request ultrasonic/ultrasonic!908
2023-03-09 07:45:58 +00:00
birdbird
96abcf70da Merge branch 'renovate/gradleplugin' into 'develop'
Update dependency com.android.tools.build:gradle to v7.4.2

See merge request ultrasonic/ultrasonic!910
2023-03-09 07:45:38 +00:00
birdbird
d1e4cf3d46 Merge branch 'renovate/gradle-7.x' into 'develop'
Update dependency gradle to v7.6.1

See merge request ultrasonic/ultrasonic!918
2023-03-09 07:45:29 +00:00
Renovate Bot
393965e9eb Update dependency org.jlleitschuh.gradle:ktlint-gradle to v11.3.1 2023-03-09 07:33:09 +00:00
Renovate Bot
1e125235bf Update dependency com.fasterxml.jackson.module:jackson-module-kotlin to v2.14.2 2023-03-09 07:32:59 +00:00
Renovate Bot
040588b98c Update dependency com.android.tools.build:gradle to v7.4.2 2023-03-09 07:32:58 +00:00
Renovate Bot
3b35ad6f8c Update dependency gradle to v7.6.1 2023-03-08 21:35:08 +00:00
birdbird
12d142eaf8 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!914
2023-03-08 21:26:27 +00:00
J. Lavoie
0ee3e1313a
Translated using Weblate (French)
Currently translated at 94.5% (401 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/fr/
2023-03-08 22:24:27 +01:00
J. Lavoie
21f06cdac2
Translated using Weblate (German)
Currently translated at 95.9% (407 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/de/
2023-03-08 22:24:27 +01:00
Óscar García Amor
64931dc6fd
Translated using Weblate (Portuguese)
Currently translated at 76.4% (324 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/pt/
2023-03-08 22:24:27 +01:00
Óscar García Amor
5ef5c714e9
Added translation using Weblate (Norwegian Bokmål) 2023-03-08 22:24:27 +01:00
birdbird
fac6570f93 Merge branch 'renovate/androidsupport' into 'develop'
Update dependency androidx.annotation:annotation to v1.6.0

See merge request ultrasonic/ultrasonic!917
2023-03-08 21:24:22 +00:00
birdbird
24b9b060b0 Merge branch 'renovate/viewmodelktx' into 'develop'
Update dependency androidx.lifecycle:lifecycle-viewmodel-ktx to v2.6.0

See merge request ultrasonic/ultrasonic!921
2023-03-08 21:24:00 +00:00
Renovate Bot
c5472cbb1b Update dependency androidx.lifecycle:lifecycle-viewmodel-ktx to v2.6.0 2023-03-08 18:33:22 +00:00
birdbird
278192cc5a Merge branch 'renovate/kotlin-monorepo' into 'develop'
Update kotlin monorepo to v1.8.10

See merge request ultrasonic/ultrasonic!911
2023-03-08 18:16:32 +00:00
birdbird
50b4e93f66 Merge branch 'fixSearch' into 'develop'
Fix search

See merge request ultrasonic/ultrasonic!920
2023-03-08 18:16:10 +00:00
birdbird
0f41d6bdd8 Fix search 2023-03-08 18:16:10 +00:00
Renovate Bot
155e9e43c6 Update kotlin monorepo to v1.8.10 2023-03-08 17:33:45 +00:00
Renovate Bot
ca5c5a8a4a Update dependency androidx.annotation:annotation to v1.6.0 2023-03-08 17:33:42 +00:00
birdbird
93f2d716a0 Merge branch 'up' into 'develop'
Up

See merge request ultrasonic/ultrasonic!919
2023-03-08 17:22:50 +00:00
birdbird
5d996fa816 Up 2023-03-08 17:22:49 +00:00
birdbird
bde6dd3708 Merge branch 'renovate/cimg-android-2023.x' into 'develop'
Update cimg/android Docker tag to v2023

See merge request ultrasonic/ultrasonic!916
2023-03-08 13:10:45 +00:00
Óscar García Amor
68a6b885ae
Migrates translations to Weblate 2023-02-16 10:09:13 +01:00
Renovate Bot
df0c42224b Update cimg/android Docker tag to v2023 2023-02-15 11:37:46 +00:00
Óscar García Amor
a32a15e6f5 Merge branch 'weblate-ultrasonic-app' into 'develop'
Translations update from Hosted Weblate

See merge request ultrasonic/ultrasonic!913
2023-02-12 10:48:25 +00:00
Óscar García Amor
b8839195fd
Translated using Weblate (Spanish)
Currently translated at 100.0% (424 of 424 strings)

Translation: Ultrasonic/app
Translate-URL: https://hosted.weblate.org/projects/ultrasonic/app/es/
2023-02-11 17:00:18 +01:00
birdbird
103b127dcf Merge branch 'renovate/materialdesign' into 'develop'
Update dependency com.google.android.material:material to v1.7.0

See merge request ultrasonic/ultrasonic!872
2023-01-20 14:45:12 +00:00
Renovate Bot
c8f6e2c7fb Update dependency com.google.android.material:material to v1.7.0 2023-01-20 14:45:12 +00:00
birdbird
eb8ae44124 Merge branch 'renovate/gradleplugin' into 'develop'
Update dependency com.android.tools.build:gradle to v7.4.0

See merge request ultrasonic/ultrasonic!902
2023-01-20 14:27:31 +00:00
Renovate Bot
da4139dabc Update dependency com.android.tools.build:gradle to v7.4.0 2023-01-20 14:27:31 +00:00
birdbird
854ef5ad60 Merge branch 'renovate/room' into 'develop'
Update room to v2.5.0

See merge request ultrasonic/ultrasonic!901
2023-01-20 13:14:47 +00:00
Renovate Bot
e5f1454675 Update room to v2.5.0 2023-01-20 13:14:47 +00:00
birdbird
ce78635d54 Merge branch 'renovate/junit5-monorepo' into 'develop'
Update dependency org.junit.vintage:junit-vintage-engine to v5.9.2

See merge request ultrasonic/ultrasonic!900
2023-01-20 13:14:05 +00:00
Renovate Bot
9b15279ed7 Update dependency org.junit.vintage:junit-vintage-engine to v5.9.2 2023-01-20 12:33:17 +00:00
birdbird
3be49689e6 Merge branch 'renovate/rxjava' into 'develop'
Update dependency io.reactivex.rxjava3:rxjava to v3.1.6

See merge request ultrasonic/ultrasonic!905
2023-01-20 12:26:49 +00:00
birdbird
229abcd622 Merge branch 'renovate/major-mockito-monorepo' into 'develop'
Update mockito monorepo to v5 (major)

See merge request ultrasonic/ultrasonic!904
2023-01-20 12:26:29 +00:00
Renovate Bot
5c3acd3e04 Update mockito monorepo to v5 (major) 2023-01-20 12:26:29 +00:00
Renovate Bot
a0182c4882 Update dependency io.reactivex.rxjava3:rxjava to v3.1.6 2023-01-18 09:33:10 +00:00
Nite
a9e73094f7 Merge branch 'fix/saf-download' into 'develop'
Fixed SAF file creation to ignore mime type

Closes #872

See merge request ultrasonic/ultrasonic!903
2023-01-13 20:48:11 +00:00
Nite
8d43717a5e Fixed SAF file creation to ignore mime type 2023-01-13 20:48:11 +00:00
Nite
2da16c7046 Merge branch 'fix/missing-names' into 'develop'
Fixed missing preloadCountNames, removed unused "remove song" menu item

See merge request ultrasonic/ultrasonic!899
2023-01-07 10:51:05 +00:00
Nite
ad22bcc956
Fixed missing preloadCountNames, removed unused "remove song" menu item 2023-01-07 11:47:10 +01:00
Nite
ffdd5df82d Merge branch 'ready/useFlow2' into 'develop'
Retrieve server features in parallel, retrieve Jukebox capabilities as server feature.

Closes #829

See merge request ultrasonic/ultrasonic!886
2023-01-06 19:20:25 +00:00
birdbird
7dea620e66 Retrieve server features in parallel, retrieve Jukebox capabilities as server feature. 2023-01-06 19:20:25 +00:00
tzugen
2fafebee42
Fix a crash 2023-01-05 08:50:48 +01:00
Nite
dd5bcba69c Merge branch 'fix/service-stop' into 'develop'
Fixed restarting after player service stop

Closes #858

See merge request ultrasonic/ultrasonic!898
2023-01-04 13:43:15 +00:00
Nite
9319be2d5a
Fixed restarting after player service stop 2023-01-04 14:33:19 +01:00
Nite
10c9095f5f Merge branch 'fix/podcast-title' into 'develop'
Fixed podcast titles

Closes #861

See merge request ultrasonic/ultrasonic!897
2023-01-02 20:36:29 +00:00
Nite
f4cb12f00f
Fixed podcast titles 2023-01-02 21:33:38 +01:00
Nite
dd8766d1ef Merge branch 'fix/server-address' into 'develop'
Fixed server editor to remove invalid spaces and slashes from the end of the address

See merge request ultrasonic/ultrasonic!896
2023-01-02 20:02:18 +00:00
Nite
794a7b805d
Fixed server editor to remove invalid spaces and slashes from the end of the address 2023-01-02 20:53:06 +01:00
Nite
5fd8705978 Merge branch 'fix/jukebox' into 'develop'
Fixed jukebox throwing NotImplementedError

Closes #863

See merge request ultrasonic/ultrasonic!895
2023-01-02 11:29:10 +00:00
Nite
8366fff648
Fixed jukebox throwing NotImplementedError 2023-01-02 12:25:28 +01:00
Nite
0603ecb1a6 Merge branch 'renovate/mockito-monorepo' into 'develop'
Update mockito monorepo to v4.11.0

See merge request ultrasonic/ultrasonic!894
2023-01-02 10:36:13 +00:00
Nite
d4375e1d55 Merge branch 'renovate/robolectric' into 'develop'
Update dependency org.robolectric:robolectric to v4.9.2

See merge request ultrasonic/ultrasonic!892
2023-01-02 10:14:34 +00:00
Nite
568922261d Merge branch 'renovate/koin' into 'develop'
Update koin to v3.3.2

See merge request ultrasonic/ultrasonic!888
2023-01-02 10:00:12 +00:00
Renovate Bot
2e9f591ab0 Update koin to v3.3.2 2023-01-02 10:00:11 +00:00
Renovate Bot
33b36177fa Update mockito monorepo to v4.11.0 2022-12-28 13:33:11 +00:00
Renovate Bot
f4fff7986b Update dependency org.robolectric:robolectric to v4.9.2 2022-12-28 00:33:12 +00:00
334 changed files with 10273 additions and 8030 deletions

View File

@ -1,224 +0,0 @@
version: 2.1
parameters:
memory-config:
type: string
default: "-Xmx3200m -Xms256m -XX:MaxMetaspaceSize=1g"
memory-config-debug:
type: string
default: "-Xmx3200m -Xms256m -XX:MaxMetaspaceSize=1g -verbose:gc -Xlog:gc*"
jobs:
Done in GitLab CI:
docker:
- image: busybox:stable
steps:
- run:
name: Done in GitLab CI
command: echo This build will be done in GitLab CI
Check Style:
docker:
- image: cimg/android:2022.12.1
working_directory: ~/ultrasonic
environment:
JVM_OPTS: << pipeline.parameters.memory-config >>
JAVA_TOOL_OPTIONS: << pipeline.parameters.memory-config >>
GRADLE_OPTS: << pipeline.parameters.memory-config >>
steps:
- checkout
- restore_cache:
keys:
- ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
- ultrasonic-{{ .Branch }}
- ultrasonic
- run:
name: Check Style
command: ./gradlew -Pqc ktlintCheck
- save_cache:
paths:
- ~/.gradle
key: ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
Static Analysis:
docker:
- image: cimg/android:2022.12.1
working_directory: ~/ultrasonic
environment:
JVM_OPTS: << pipeline.parameters.memory-config >>
JAVA_TOOL_OPTIONS: << pipeline.parameters.memory-config >>
GRADLE_OPTS: << pipeline.parameters.memory-config >>
steps:
- checkout
- restore_cache:
keys:
- ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
- ultrasonic-{{ .Branch }}
- ultrasonic
- run:
name: Check Style
command: ./gradlew -Pqc detekt
- save_cache:
paths:
- ~/.gradle
key: ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
Lint:
docker:
- image: cimg/android:2022.12.1
working_directory: ~/ultrasonic
environment:
JVM_OPTS: << pipeline.parameters.memory-config >>
JAVA_TOOL_OPTIONS: << pipeline.parameters.memory-config >>
GRADLE_OPTS: << pipeline.parameters.memory-config >>
steps:
- checkout
- restore_cache:
keys:
- ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
- ultrasonic-{{ .Branch }}
- ultrasonic
- run:
name: Lint
command: ./gradlew :ultrasonic:lintRelease
- save_cache:
paths:
- ~/.gradle
key: ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
Unit Tests:
docker:
- image: cimg/android:2022.12.1
working_directory: ~/ultrasonic
environment:
JVM_OPTS: << pipeline.parameters.memory-config >>
JAVA_TOOL_OPTIONS: << pipeline.parameters.memory-config >>
GRADLE_OPTS: << pipeline.parameters.memory-config >>
steps:
- checkout
- restore_cache:
keys:
- ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
- ultrasonic-{{ .Branch }}
- ultrasonic
- run:
name: Check Style
command: ./gradlew ciTest testDebugUnitTest
- save_cache:
paths:
- ~/.gradle
key: ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
Assemble Debug:
docker:
- image: cimg/android:2022.12.1
working_directory: ~/ultrasonic
environment:
JVM_OPTS: << pipeline.parameters.memory-config >>
JAVA_TOOL_OPTIONS: << pipeline.parameters.memory-config >>
GRADLE_OPTS: << pipeline.parameters.memory-config >>
steps:
- checkout
- restore_cache:
keys:
- ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
- ultrasonic-{{ .Branch }}
- ultrasonic
- run:
name: Assemble Debug
command: ./gradlew assembleDebug
- save_cache:
paths:
- ~/.gradle
key: ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
Assemble Release:
docker:
- image: cimg/android:2022.12.1
working_directory: ~/ultrasonic
environment:
JVM_OPTS: << pipeline.parameters.memory-config >>
JAVA_TOOL_OPTIONS: << pipeline.parameters.memory-config >>
GRADLE_OPTS: << pipeline.parameters.memory-config >>
steps:
- checkout
- restore_cache:
keys:
- ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
- ultrasonic-{{ .Branch }}
- ultrasonic
- run:
name: Assemble Release
command: ./gradlew assembleRelease
- save_cache:
paths:
- ~/.gradle
key: ultrasonic-{{ .Branch }}-{{ checksum "gradle/libs.versions.toml" }}
- store_artifacts:
path: ultrasonic/build/outputs/apk/release/ultrasonic-release-unsigned.apk
destination: ultrasonic-release-unsigned
workflows:
version: 2
Check and Build:
jobs:
- Done in GitLab CI:
filters:
branches:
only:
- develop
- master
tags:
only: /.*/
- Check Style:
filters:
branches:
ignore:
- develop
- master
tags:
ignore: /.*/
- Static Analysis:
filters:
branches:
ignore:
- develop
- master
tags:
ignore: /.*/
- Lint:
filters:
branches:
ignore:
- develop
- master
tags:
ignore: /.*/
- Unit Tests:
filters:
branches:
ignore:
- develop
- master
tags:
ignore: /.*/
- Assemble Debug:
requires:
- Check Style
- Static Analysis
- Lint
- Unit Tests
filters:
branches:
ignore:
- develop
- master
tags:
ignore: /.*/
- Assemble Release:
requires:
- Check Style
- Static Analysis
- Lint
- Unit Tests
filters:
branches:
ignore:
- develop
- master
tags:
ignore: /.*/

2
.editorconfig Normal file
View File

@ -0,0 +1,2 @@
[*.{kt,kts}]
ktlint_code_style = android_studio

1
.gitignore vendored
View File

@ -18,6 +18,7 @@ out/
# Gradle files
.gradle/
.kotlin/
build/
# Local configuration file (sdk path, etc)

View File

@ -1,7 +1,9 @@
default:
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/cimg/android:2022.12.1
cache:
key: ${CI_COMMIT_REF_SLUG}
image: registry.gitlab.com/ultrasonic/ci-android:1.2.0
cache: &global_cache
key:
files:
- gradle/wrapper/gradle-wrapper.properties
paths:
- .gradle/
@ -15,84 +17,79 @@ variables:
PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/Ultrasonic/${CI_COMMIT_TAG}"
PACKAGE_APK: "ultrasonic-${CI_COMMIT_TAG}.apk"
PACKAGE_APK_IDSIG: "ultrasonic-${CI_COMMIT_TAG}.apk.idsig"
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
# The project id of https://gitlab.com/ultrasonic/ultrasonic/
ROOT_PROJECT_ID: 37671564
stages:
- Check
- Assemble
- Translations
- APK
- Build
- Sign APK
- Publish
- Release
Check Style:
stage: Check
script: ./gradlew -Pqc ktlintCheck
cache:
# inherit all global cache settings
<<: *global_cache
policy: pull
rules:
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != "37671564"
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != $ROOT_PROJECT_ID
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
Static Analysis:
stage: Check
script: ./gradlew -Pqc detekt
cache:
# inherit all global cache settings
<<: *global_cache
policy: pull
rules:
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != "37671564"
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != $ROOT_PROJECT_ID
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
Lint:
stage: Check
script: ./gradlew :ultrasonic:lintRelease
cache:
# inherit all global cache settings
<<: *global_cache
policy: pull-push
rules:
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != "37671564"
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != $ROOT_PROJECT_ID
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
Unit Tests:
stage: Check
script: ./gradlew ciTest testDebugUnitTest
cache:
# inherit all global cache settings
<<: *global_cache
policy: pull-push
rules:
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != "37671564"
Assemble Debug:
stage: Assemble
script: ./gradlew assembleDebug
rules:
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != "37671564"
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != $ROOT_PROJECT_ID
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
Assemble Release:
stage: Assemble
script: ./gradlew assembleRelease
stage: Build
script:
- sed -i 's/applicationId \"org.moire.ultrasonic\"/applicationId "org.moire.ultrasonic.gitlab"/' ultrasonic/build.gradle
- ./gradlew assembleRelease
artifacts:
name: ultrasonic-release-unsigned-${CI_COMMIT_SHA}
paths:
- ultrasonic/build/outputs/apk/release/ultrasonic-release-unsigned.apk
rules:
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != "37671564"
Push Translations:
stage: Translations
image: cimg/python:3.11
script:
- python -m venv ~/venv
- . ~/venv/bin/activate
- pip install transifex-client
- echo $'[https://www.transifex.com]\nhostname = https://www.transifex.com\nusername = api\npassword = '"${TRANSIFEX_PASSWORD}"$'\n' > ~/.transifexrc
- tx push -s
rules:
- if: $CI_COMMIT_REF_NAME == "develop" && $CI_PROJECT_ID == "37671564"
Generate Signed Develop APK:
stage: APK
script:
- openssl aes-256-cbc -K ${ULTRASONIC_KEYSTORE_KEY} -iv ${ULTRASONIC_KEYSTORE_IV} -in ultrasonic-keystore.enc -out ultrasonic-keystore -d
- mkdir -p ${CI_PROJECT_DIR}/ultrasonic-release
- ${ANDROID_HOME}/build-tools/*/zipalign -v 4 ultrasonic/build/outputs/apk/release/ultrasonic-release-unsigned.apk ${CI_PROJECT_DIR}/ultrasonic-release/ultrasonic-${CI_COMMIT_SHA}.apk
- ${ANDROID_HOME}/build-tools/*/apksigner sign --verbose --ks ${CI_PROJECT_DIR}/ultrasonic-keystore --ks-pass pass:${ULTRASONIC_KEYSTORE_STOREPASS} --key-pass pass:${ULTRASONIC_KEYSTORE_KEYPASS} ${CI_PROJECT_DIR}/ultrasonic-release/ultrasonic-${CI_COMMIT_SHA}.apk
- ${ANDROID_HOME}/build-tools/*/apksigner verify --verbose ${CI_PROJECT_DIR}/ultrasonic-release/ultrasonic-${CI_COMMIT_SHA}.apk
artifacts:
name: ultrasonic-${CI_COMMIT_SHA}
paths:
- ultrasonic-release/
rules:
- if: $CI_COMMIT_REF_NAME == "develop" && $CI_PROJECT_ID == "37671564"
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_TAG || $CI_PROJECT_ID != $ROOT_PROJECT_ID
# We generate a signed package for each commit to develop as well as when making a release.
# Since the develop signed apk are not persistent they can be downloaded for around 3 weeks before Gitlab deletes them.
Generate Signed APK:
stage: APK
stage: Sign APK
# We don't need the gradle cache here
cache: []
script:
- openssl aes-256-cbc -K ${ULTRASONIC_KEYSTORE_KEY} -iv ${ULTRASONIC_KEYSTORE_IV} -in ultrasonic-keystore.enc -out ultrasonic-keystore -d
- mkdir -p ${CI_PROJECT_DIR}/ultrasonic-release
@ -100,11 +97,17 @@ Generate Signed APK:
- ${ANDROID_HOME}/build-tools/*/apksigner sign --verbose --ks ${CI_PROJECT_DIR}/ultrasonic-keystore --ks-pass pass:${ULTRASONIC_KEYSTORE_STOREPASS} --key-pass pass:${ULTRASONIC_KEYSTORE_KEYPASS} ${CI_PROJECT_DIR}/ultrasonic-release/${PACKAGE_APK}
- ${ANDROID_HOME}/build-tools/*/apksigner verify --verbose ${CI_PROJECT_DIR}/ultrasonic-release/${PACKAGE_APK}
artifacts:
name: ultrasonic-${CI_COMMIT_TAG}
name: $PACKAGE_APK
paths:
- ultrasonic-release/
rules:
- if: $CI_COMMIT_TAG && $CI_PROJECT_ID == "37671564"
# Run when releasing a new tag
- if: $CI_COMMIT_TAG && $CI_PROJECT_ID == $ROOT_PROJECT_ID
# Or when adding a new commit to develop (but never inside merge events)
- if: $CI_COMMIT_REF_NAME == "develop" && $CI_PROJECT_ID == $ROOT_PROJECT_ID && $CI_PIPELINE_SOURCE != "merge_request_event"
variables:
PACKAGE_APK: ultrasonic-${CI_COMMIT_SHA}.apk
Publish Signed APK:
stage: Publish
@ -115,7 +118,7 @@ Publish Signed APK:
- |
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file ultrasonic-release/${PACKAGE_APK_IDSIG} "${PACKAGE_REGISTRY_URL}/${PACKAGE_APK_IDSIG}"
rules:
- if: $CI_COMMIT_TAG && $CI_PROJECT_ID == "37671564"
- if: $CI_COMMIT_TAG && $CI_PROJECT_ID == $ROOT_PROJECT_ID
Release:
stage: Release
@ -125,4 +128,24 @@ Release:
--assets-link "{\"name\":\"${PACKAGE_APK}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${PACKAGE_APK}\"}" \
--assets-link "{\"name\":\"${PACKAGE_APK_IDSIG}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${PACKAGE_APK_IDSIG}\"}"
rules:
- if: $CI_COMMIT_TAG && $CI_PROJECT_ID == "37671564"
- if: $CI_COMMIT_TAG && $CI_PROJECT_ID == $ROOT_PROJECT_ID
RoboTest:
stage: Release
image: gcr.io/google.com/cloudsdktool/google-cloud-cli:latest
# We don't need the gradle cache here
cache: []
script:
- curl --silent "https://gitlab.com/gitlab-org/incubation-engineering/mobile-devops/download-secure-files/-/raw/main/installer" | bash
- gcloud auth activate-service-account --key-file .secure_files/firebase-key.json
- gcloud firebase test android run --project ultrasonic-61089 --type robo --app ultrasonic-release/${PACKAGE_APK} --robo-directives click:button1= --device model=Nexus6,version=21,locale=en,orientation=portrait --device model=Pixel3,version=28,locale=fr,orientation=landscape
rules:
# Run when releasing a new tag
- if: $CI_COMMIT_TAG && $CI_PROJECT_ID == $ROOT_PROJECT_ID
# or when requested by using [ROBO] inside the commit message and merging to develop
# Would be nice to be able to run it in a MR as well, but currently not possible
# Because it would not have access to the protected keys.
- if: $CI_COMMIT_MESSAGE =~ /^\[ROBO\].*/ && $CI_PROJECT_ID == $ROOT_PROJECT_ID && $CI_COMMIT_REF_NAME == "develop" && $CI_PIPELINE_SOURCE != "merge_request_event"
variables:
PACKAGE_APK: ultrasonic-${CI_COMMIT_SHA}.apk

View File

@ -1,4 +1,3 @@
<!-- Please describe your changes here -->
----------------------------------------------------------------------------
@ -7,8 +6,6 @@
- [ ] I ran `./gradlew -Pqc ktlintCheck`, `./gradlew -Pqc detekt` and
`./gradlew :ultrasonic:lintRelease` and no problems found. See
[CONTRIBUTING](CONTRIBUTING.md) for further information.
- [ ] I'm using my own branch in my local copy. Ej, I want to merge
`myuser/ultrasonic:my-new-contribution` into `develop`.
- [ ] All commits [are
signed](https://docs.gitlab.com/ee/user/project/repository/gpg_signed_commits/).
- [ ] I agree to release my code and all other changes of this MR under the

View File

@ -0,0 +1,10 @@
#### Before merge:
- [ ] MR is targetting the master branch
- [ ] **Squash commits must be disabled!**
- [ ] RoboTests (5 physical, 10 virtual) on a Release apk return no errors
- [ ] Release notes present
#### After merge
- [ ] ``git fetch``
- [ ] Create an annotated and signed tag: ``git tag -sa``
- [ ] Push the tag to git:``git push --tags``

View File

@ -1,11 +1,6 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JetCodeStyleSettings>
<option name="PACKAGES_TO_USE_STAR_IMPORTS">
<value />
</option>
<option name="NAME_COUNT_TO_USE_STAR_IMPORT" value="2147483647" />
<option name="NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS" value="2147483647" />
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">

2
.idea/compiler.xml generated
View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" />
<bytecodeTargetLevel target="21" />
</component>
</project>

View File

@ -1,7 +1,7 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Reformat" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<inspection_tool class="Reformat" enabled="false" level="WEAK WARNING" enabled_by_default="false">
<option name="processChangedFilesOnly" value="true" />
</inspection_tool>
</profile>

View File

@ -1,10 +0,0 @@
[main]
host = https://www.transifex.com
lang_map = nl_NL:nl,pl_PL:pl,fr_CA:fr-rCA,pt_BR:pt-rBR,pt_PT:pt,zh_CN:zh-rCN,zh_HK:zh-rHK,zh_TW:zh-rTW,da_DK:da-rDK,de_DE:de,tr_TR:tr,fr_FR:fr,es_ES:es,hu_HU:hu,sv_SE:sv-rSE,bg_BG:bg,el_GR:el,kn_IN:kn-rIN,cs_CZ:cs,sr:sr,he:iw,id:in,lt_LT:lt,km_KH:km-rKH,th_TH:th,ru_RU:ru,it_IT:it
[ultrasonic.app]
file_filter = ultrasonic/src/main/res/values-<lang>/strings.xml
source_file = ultrasonic/src/main/res/values/strings.xml
source_lang = en
type = ANDROID

View File

@ -11,7 +11,7 @@ issue](https://gitlab.com/ultrasonic/ultrasonic/issues/new).
## Contributing Translations
Interested in help to translate Ultrasonic? You can contribute in our
[Transifex team](https://www.transifex.com/ultrasonic/ultrasonic/).
[Weblate team](https://hosted.weblate.org/projects/ultrasonic/).
## Contributing Code

View File

@ -31,12 +31,6 @@ If you want to use the version downloaded from F-Droid or from GitLab with
First, see if your issue havent been yet reported [here][issues], otherwise
open [a new issue][newissue].
### Known (not our) bugs
If you are using *Madsonic 5.1.X* several sections of Ultrasonic will not
work. This is caused by bad implementation of Subsonic API by Madsonic. For
more info about this you can read [this bug][madbug].
## Contributing
See [CONTRIBUTING](CONTRIBUTING.md).
@ -62,7 +56,6 @@ Full text of the license is available in the [LICENSE](LICENSE) file and
[wikiaa]: https://gitlab.com/ultrasonic/ultrasonic/-/wikis/Using-Ultrasonic-with-Android-Auto
[issues]: https://gitlab.com/ultrasonic/ultrasonic/-/issues
[newissue]: https://gitlab.com/ultrasonic/ultrasonic/-/issues/new
[madbug]: https://gitlab.com/ultrasonic/ultrasonic/-/issues/129
[subsonic]: http://www.subsonic.org/
[subapi]: http://www.subsonic.org/pages/api.jsp
[airsonic]: https://github.com/airsonic-advanced/airsonic-advanced

View File

@ -1,3 +1,5 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
apply from: 'gradle/versions.gradle'
@ -10,8 +12,8 @@ buildscript {
repositories {
google()
mavenCentral()
maven { url "https://plugins.gradle.org/m2/" }
maven { url 'https://jitpack.io' }
gradlePluginPortal()
maven { url = "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath libs.gradle
@ -27,25 +29,32 @@ allprojects {
buildscript {
repositories {
mavenCentral()
gradlePluginPortal()
google()
}
}
repositories {
mavenCentral()
gradlePluginPortal()
google()
maven { url 'https://jitpack.io' }
}
// Set Kotlin JVM target to the same for all subprojects
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
tasks.withType(KotlinCompile).configureEach {
kotlinOptions {
jvmTarget = "1.8"
jvmTarget = "21"
}
}
tasks.withType(JavaCompile).tap {
configureEach {
options.compilerArgs.add("-Xlint:deprecation")
}
}
}
wrapper {
gradleVersion(libs.versions.gradle.get())
distributionType("all")
}
gradleVersion = libs.versions.gradle.get()
distributionType = "all"
}

View File

@ -52,7 +52,11 @@ style:
active: true
ForbiddenComment:
active: true
values: ['FIXME:', 'STOPSHIP:']
comments:
- reason: 'Forbidden FIXME todo marker in comment, please fix the problem.'
value: 'FIXME:'
- reason: 'Forbidden STOPSHIP todo marker in comment, please address the problem before shipping the code.'
value: 'STOPSHIP:'
WildcardImport:
active: true
MaxLineLength:
@ -66,6 +70,8 @@ style:
active: false
ReturnCount:
max: 5
ForbiddenImport:
imports: ['android.app.AlertDialog']
comments:
active: true

View File

@ -1,12 +1,20 @@
plugins {
alias libs.plugins.ksp
}
apply from: bootstrap.androidModule
apply plugin: 'kotlin-kapt'
dependencies {
implementation libs.core
implementation libs.roomRuntime
implementation libs.roomKtx
kapt libs.room
ksp libs.room
}
android {
namespace 'org.moire.ultrasonic.subsonic.domain'
namespace = 'org.moire.ultrasonic.subsonic.domain'
compileOptions {
sourceCompatibility JavaVersion.VERSION_21
targetCompatibility JavaVersion.VERSION_21
}
}

View File

@ -31,7 +31,7 @@ data class Album(
override var genre: String? = null,
override var starred: Boolean = false,
override var path: String? = null,
override var closeness: Int = 0,
override var closeness: Int = 0
) : MusicDirectory.Child() {
override var isDirectory = true
override var isVideo = false

View File

@ -13,10 +13,7 @@ class MusicDirectory : ArrayList<MusicDirectory.Child>() {
var name: String? = null
@JvmOverloads
fun getChildren(
includeDirs: Boolean = true,
includeFiles: Boolean = true
): List<Child> {
fun getChildren(includeDirs: Boolean = true, includeFiles: Boolean = true): List<Child> {
if (includeDirs && includeFiles) {
return toList()
}

View File

@ -13,5 +13,5 @@ data class PodcastsChannel(
private const val serialVersionUID = -4160515427075433798L
}
override fun toString(): String = name.toString()
override fun toString(): String = title.toString()
}

View File

@ -1,5 +1,14 @@
plugins {
alias libs.plugins.ksp
}
apply from: bootstrap.kotlinModule
java {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
dependencies {
api libs.retrofit
api libs.jacksonConverter
@ -13,7 +22,6 @@ dependencies {
testImplementation libs.kotlinJunit
testImplementation libs.mockito
testImplementation libs.mockitoInline
testImplementation libs.mockitoKotlin
testImplementation libs.kluent
testImplementation libs.mockWebServer

View File

@ -8,7 +8,8 @@ import org.moire.ultrasonic.api.subsonic.rules.MockWebServerRule
* Base class for integration tests for [SubsonicAPIClient] class.
*/
abstract class SubsonicAPIClientTest {
@JvmField @Rule val mockWebServerRule = MockWebServerRule()
@JvmField @Rule
val mockWebServerRule = MockWebServerRule()
protected lateinit var config: SubsonicClientConfiguration
protected lateinit var client: SubsonicAPIClient

View File

@ -11,7 +11,8 @@ import org.moire.ultrasonic.api.subsonic.rules.MockWebServerRule
* Base class for testing [okhttp3.Interceptor] implementations.
*/
abstract class BaseInterceptorTest {
@Rule @JvmField val mockWebServerRule = MockWebServerRule()
@Rule @JvmField
val mockWebServerRule = MockWebServerRule()
lateinit var client: OkHttpClient

View File

@ -92,7 +92,13 @@ internal class ApiVersionCheckWrapper(
checkVersion(V1_4_0)
checkParamVersion(musicFolderId, V1_12_0)
return api.search2(
query, artistCount, artistOffset, albumCount, albumOffset, songCount, musicFolderId
query,
artistCount,
artistOffset,
albumCount,
albumOffset,
songCount,
musicFolderId
)
}
@ -108,7 +114,13 @@ internal class ApiVersionCheckWrapper(
checkVersion(V1_8_0)
checkParamVersion(musicFolderId, V1_12_0)
return api.search3(
query, artistCount, artistOffset, albumCount, albumOffset, songCount, musicFolderId
query,
artistCount,
artistOffset,
albumCount,
albumOffset,
songCount,
musicFolderId
)
}
@ -228,7 +240,13 @@ internal class ApiVersionCheckWrapper(
checkParamVersion(estimateContentLength, V1_8_0)
checkParamVersion(converted, V1_14_0)
return api.stream(
id, maxBitRate, format, timeOffset, videoSize, estimateContentLength, converted
id,
maxBitRate,
format,
timeOffset,
videoSize,
estimateContentLength,
converted
)
}
@ -335,8 +353,9 @@ internal class ApiVersionCheckWrapper(
private fun checkVersion(expectedVersion: SubsonicAPIVersions) {
// If it is true, it is probably the first call with this server
if (!isRealProtocolVersion) return
if (currentApiVersion < expectedVersion)
if (currentApiVersion < expectedVersion) {
throw ApiNotSupportedException(currentApiVersion)
}
}
private fun checkParamVersion(param: Any?, expectedVersion: SubsonicAPIVersions) {

View File

@ -54,6 +54,9 @@ interface SubsonicAPIDefinition {
@GET("ping.view")
fun ping(): Call<SubsonicResponse>
@GET("ping.view")
suspend fun pingSuspend(): SubsonicResponse
@GET("getLicense.view")
fun getLicense(): Call<LicenseResponse>
@ -87,10 +90,7 @@ interface SubsonicAPIDefinition {
): Call<SubsonicResponse>
@GET("setRating.view")
fun setRating(
@Query("id") id: String,
@Query("rating") rating: Int
): Call<SubsonicResponse>
fun setRating(@Query("id") id: String, @Query("rating") rating: Int): Call<SubsonicResponse>
@GET("getArtist.view")
fun getArtist(@Query("id") id: String): Call<GetArtistResponse>
@ -155,8 +155,7 @@ interface SubsonicAPIDefinition {
@Query("public") public: Boolean? = null,
@Query("songIdToAdd") songIdsToAdd: List<String>? = null,
@Query("songIndexToRemove") songIndexesToRemove: List<Int>? = null
):
Call<SubsonicResponse>
): Call<SubsonicResponse>
@GET("getPodcasts.view")
fun getPodcasts(
@ -164,6 +163,12 @@ interface SubsonicAPIDefinition {
@Query("id") id: String? = null
): Call<GetPodcastsResponse>
@GET("getPodcasts.view")
suspend fun getPodcastsSuspend(
@Query("includeEpisodes") includeEpisodes: Boolean? = null,
@Query("id") id: String? = null
): GetPodcastsResponse
@GET("getLyrics.view")
fun getLyrics(
@Query("artist") artist: String? = null,
@ -218,10 +223,7 @@ interface SubsonicAPIDefinition {
@Streaming
@GET("getCoverArt.view")
fun getCoverArt(
@Query("id") id: String,
@Query("size") size: Long? = null
): Call<ResponseBody>
fun getCoverArt(@Query("id") id: String, @Query("size") size: Long? = null): Call<ResponseBody>
@Streaming
@GET("stream.view")
@ -261,6 +263,9 @@ interface SubsonicAPIDefinition {
@GET("getShares.view")
fun getShares(): Call<SharesResponse>
@GET("getShares.view")
suspend fun getSharesSuspend(): SharesResponse
@GET("createShare.view")
fun createShare(
@Query("id") idsToShare: List<String>,
@ -292,15 +297,24 @@ interface SubsonicAPIDefinition {
@GET("getUser.view")
fun getUser(@Query("username") username: String): Call<GetUserResponse>
@GET("getUser.view")
suspend fun getUserSuspend(@Query("username") username: String): GetUserResponse
@GET("getChatMessages.view")
fun getChatMessages(@Query("since") since: Long? = null): Call<ChatMessagesResponse>
@GET("getChatMessages.view")
suspend fun getChatMessagesSuspend(@Query("since") since: Long? = null): ChatMessagesResponse
@GET("addChatMessage.view")
fun addChatMessage(@Query("message") message: String): Call<SubsonicResponse>
@GET("getBookmarks.view")
fun getBookmarks(): Call<BookmarksResponse>
@GET("getBookmarks.view")
suspend fun getBookmarksSuspend(): BookmarksResponse
@GET("createBookmark.view")
fun createBookmark(
@Query("id") id: String,
@ -314,6 +328,9 @@ interface SubsonicAPIDefinition {
@GET("getVideos.view")
fun getVideos(): Call<VideosResponse>
@GET("getVideos.view")
suspend fun getVideosSuspend(): VideosResponse
@GET("getAvatar.view")
fun getAvatar(@Query("username") username: String): Call<ResponseBody>
}

View File

@ -29,10 +29,12 @@ enum class SubsonicAPIVersions(val subsonicVersions: String, val restApiVersion:
V1_13_0("5.3", "1.13.0"),
V1_14_0("6.0", "1.14.0"),
V1_15_0("6.1", "1.15.0"),
V1_16_0("6.1.2", "1.16.0");
V1_16_0("6.1.2", "1.16.0")
;
companion object {
@JvmStatic @Throws(IllegalArgumentException::class)
@JvmStatic
@Throws(IllegalArgumentException::class)
fun getClosestKnownClientApiVersion(apiVersion: String): SubsonicAPIVersions {
val versionComponents = apiVersion.split(".")
@ -41,8 +43,11 @@ enum class SubsonicAPIVersions(val subsonicVersions: String, val restApiVersion:
try {
val majorVersion = versionComponents[0].toInt()
val minorVersion = versionComponents[1].toInt()
val patchVersion = if (versionComponents.size > 2) versionComponents[2].toInt()
else 0
val patchVersion = if (versionComponents.size > 2) {
versionComponents[2].toInt()
} else {
0
}
when (majorVersion) {
1 -> when {

View File

@ -48,7 +48,10 @@ class VersionAwareJacksonConverterFactory(
retrofit: Retrofit
): Converter<*, RequestBody>? {
return jacksonConverterFactory?.requestBodyConverter(
type, parameterAnnotations, methodAnnotations, retrofit
type,
parameterAnnotations,
methodAnnotations,
retrofit
)
}
@ -63,7 +66,7 @@ class VersionAwareJacksonConverterFactory(
}
}
class VersionAwareResponseBodyConverter<T> (
class VersionAwareResponseBodyConverter<T>(
private val notifier: (SubsonicAPIVersions) -> Unit = {},
private val adapter: ObjectReader
) : Converter<ResponseBody, T> {

View File

@ -6,6 +6,7 @@ import okhttp3.Interceptor.Chain
import okhttp3.Response
internal const val SOCKET_READ_TIMEOUT_DOWNLOAD = 30 * 1000
// Allow 20 seconds extra timeout pear MB offset.
internal const val TIMEOUT_MILLIS_PER_OFFSET_BYTE = 0.02

View File

@ -23,7 +23,8 @@ enum class AlbumListType(val typeName: String) {
SORTED_BY_ARTIST("alphabeticalByArtist"),
STARRED("starred"),
BY_YEAR("byYear"),
BY_GENRE("byGenre");
BY_GENRE("byGenre")
;
override fun toString(): String {
return typeName

View File

@ -16,7 +16,8 @@ enum class JukeboxAction(val action: String) {
CLEAR("clear"),
REMOVE("remove"),
SHUFFLE("shuffle"),
SET_GAIN("setGain");
SET_GAIN("setGain")
;
override fun toString(): String {
return action

View File

@ -10,7 +10,8 @@ class BookmarksResponse(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("bookmarks") private val bookmarksWrapper = BookmarkWrapper()
@JsonProperty("bookmarks")
private val bookmarksWrapper = BookmarkWrapper()
val bookmarkList: List<Bookmark> get() = bookmarksWrapper.bookmarkList
}

View File

@ -10,7 +10,8 @@ class ChatMessagesResponse(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("chatMessages") private val wrapper = ChatMessagesWrapper()
@JsonProperty("chatMessages")
private val wrapper = ChatMessagesWrapper()
val chatMessages: List<ChatMessage> get() = wrapper.messagesList
}

View File

@ -10,7 +10,8 @@ class GenresResponse(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("genres") private val genresWrapper = GenresWrapper()
@JsonProperty("genres")
private val genresWrapper = GenresWrapper()
val genresList: List<Genre> get() = genresWrapper.genresList
}

View File

@ -11,7 +11,8 @@ class GetAlbumList2Response(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("albumList2") private val albumWrapper2 = AlbumWrapper2()
@JsonProperty("albumList2")
private val albumWrapper2 = AlbumWrapper2()
val albumList: List<Album>
get() = albumWrapper2.albumList

View File

@ -10,7 +10,8 @@ class GetAlbumListResponse(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("albumList") private val albumWrapper = AlbumWrapper()
@JsonProperty("albumList")
private val albumWrapper = AlbumWrapper()
val albumList: List<Album>
get() = albumWrapper.albumList

View File

@ -10,7 +10,8 @@ class GetPodcastsResponse(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("podcasts") private val channelsWrapper = PodcastChannelWrapper()
@JsonProperty("podcasts")
private val channelsWrapper = PodcastChannelWrapper()
val podcastChannels: List<PodcastChannel>
get() = channelsWrapper.channelsList

View File

@ -10,7 +10,8 @@ class GetRandomSongsResponse(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("randomSongs") private val songsWrapper = RandomSongsWrapper()
@JsonProperty("randomSongs")
private val songsWrapper = RandomSongsWrapper()
val songsList
get() = songsWrapper.songsList

View File

@ -10,7 +10,8 @@ class GetSongsByGenreResponse(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("songsByGenre") private val songsByGenreList = SongsByGenreWrapper()
@JsonProperty("songsByGenre")
private val songsByGenreList = SongsByGenreWrapper()
val songsList get() = songsByGenreList.songsList
}

View File

@ -11,11 +11,13 @@ class JukeboxResponse(
error: SubsonicError?,
var jukebox: JukeboxStatus = JukeboxStatus()
) : SubsonicResponse(status, version, error) {
@JsonSetter("jukeboxStatus") fun setJukeboxStatus(jukebox: JukeboxStatus) {
@JsonSetter("jukeboxStatus")
fun setJukeboxStatus(jukebox: JukeboxStatus) {
this.jukebox = jukebox
}
@JsonSetter("jukeboxPlaylist") fun setJukeboxPlaylist(jukebox: JukeboxStatus) {
@JsonSetter("jukeboxPlaylist")
fun setJukeboxPlaylist(jukebox: JukeboxStatus) {
this.jukebox = jukebox
}
}

View File

@ -10,7 +10,8 @@ class MusicFoldersResponse(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("musicFolders") private val wrapper = MusicFoldersWrapper()
@JsonProperty("musicFolders")
private val wrapper = MusicFoldersWrapper()
val musicFolders get() = wrapper.musicFolders
}

View File

@ -10,7 +10,8 @@ class SharesResponse(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("shares") private val wrappedShares = SharesWrapper()
@JsonProperty("shares")
private val wrappedShares = SharesWrapper()
val shares get() = wrappedShares.share
}

View File

@ -20,7 +20,8 @@ open class SubsonicResponse(
) {
@JsonDeserialize(using = Status.Companion.StatusJsonDeserializer::class)
enum class Status(val jsonValue: String) {
OK("ok"), ERROR("failed");
OK("ok"),
ERROR("failed");
companion object {
fun getStatusFromJson(jsonValue: String) =

View File

@ -10,7 +10,8 @@ class VideosResponse(
version: SubsonicAPIVersions,
error: SubsonicError?
) : SubsonicResponse(status, version, error) {
@JsonProperty("videos") private val videosWrapper = VideosWrapper()
@JsonProperty("videos")
private val videosWrapper = VideosWrapper()
val videosList: List<MusicDirectoryChild> get() = videosWrapper.videosList
}

View File

@ -18,7 +18,9 @@ class ProxyPasswordInterceptorTest {
private val proxyInterceptor = ProxyPasswordInterceptor(
V1_12_0,
mockPasswordHexInterceptor, mockPasswordMd5Interceptor, false
mockPasswordHexInterceptor,
mockPasswordMd5Interceptor,
false
)
@Test
@ -40,8 +42,10 @@ class ProxyPasswordInterceptorTest {
@Test
fun `Should use hex password if forceHex is true`() {
val interceptor = ProxyPasswordInterceptor(
V1_16_0, mockPasswordHexInterceptor,
mockPasswordMd5Interceptor, true
V1_16_0,
mockPasswordHexInterceptor,
mockPasswordMd5Interceptor,
true
)
interceptor.intercept(mockChain)

View File

@ -1,27 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<SmellBaseline>
<ManuallySuppressedIssues/>
<CurrentIssues>
<ID>ImplicitDefaultLocale:EditServerFragment.kt$EditServerFragment.&lt;no name provided>$String.format( "%s %s", resources.getString(R.string.settings_connection_failure), getErrorMessage(error) )</ID>
<ID>ImplicitDefaultLocale:FileLoggerTree.kt$FileLoggerTree$String.format("Failed to write log to %s", file)</ID>
<ID>ImplicitDefaultLocale:FileLoggerTree.kt$FileLoggerTree$String.format("Log file rotated, logging into file %s", file?.name)</ID>
<ID>ImplicitDefaultLocale:FileLoggerTree.kt$FileLoggerTree$String.format("Logging into file %s", file?.name)</ID>
<ID>ImplicitDefaultLocale:ShareHandler.kt$ShareHandler$String.format("%d:%s", timeSpanAmount, timeSpanType)</ID>
<ID>LongMethod:EditServerFragment.kt$EditServerFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)</ID>
<ID>LongMethod:NavigationActivity.kt$NavigationActivity$override fun onCreate(savedInstanceState: Bundle?)</ID>
<ID>LongMethod:PlaylistsFragment.kt$PlaylistsFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean</ID>
<ID>LongMethod:ShareHandler.kt$ShareHandler$private fun showDialog( fragment: Fragment, shareDetails: ShareDetails, swipe: SwipeRefreshLayout?, cancellationToken: CancellationToken, additionalId: String? )</ID>
<ID>LongMethod:SharesFragment.kt$SharesFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean</ID>
<ID>LongParameterList:ServerRowAdapter.kt$ServerRowAdapter$( private var context: Context, passedData: Array&lt;ServerSetting>, private val model: ServerSettingsModel, private val activeServerProvider: ActiveServerProvider, private val manageMode: Boolean, private val serverDeletedCallback: ((Int) -> Unit), private val serverEditRequestedCallback: ((Int) -> Unit) )</ID>
<ID>MagicNumber:ActiveServerProvider.kt$ActiveServerProvider$8192</ID>
<ID>MagicNumber:JukeboxMediaPlayer.kt$JukeboxMediaPlayer$0.05f</ID>
<ID>MagicNumber:JukeboxMediaPlayer.kt$JukeboxMediaPlayer$50</ID>
<ID>MagicNumber:RESTMusicService.kt$RESTMusicService$206</ID>
<ID>NestedBlockDepth:DownloadHandler.kt$DownloadHandler$private fun downloadRecursively( fragment: Fragment, id: String, name: String?, isShare: Boolean, isDirectory: Boolean, save: Boolean, append: Boolean, autoPlay: Boolean, shuffle: Boolean, background: Boolean, playNext: Boolean, unpin: Boolean, isArtist: Boolean )</ID>
<ID>TooGenericExceptionCaught:FileLoggerTree.kt$FileLoggerTree$x: Throwable</ID>
<ID>TooGenericExceptionCaught:JukeboxMediaPlayer.kt$JukeboxMediaPlayer$x: Throwable</ID>
<ID>TooGenericExceptionCaught:JukeboxMediaPlayer.kt$JukeboxMediaPlayer.TaskQueue$x: Throwable</ID>
<ID>TooManyFunctions:RESTMusicService.kt$RESTMusicService : MusicService</ID>
<ID>UtilityClassWithPublicConstructor:FragmentTitle.kt$FragmentTitle</ID>
</CurrentIssues>
</SmellBaseline>

View File

@ -0,0 +1,14 @@
Bug fixes
- #831: Version 4.1.1 and develop: 'jukebox on/off' no longer shown in 'Now Playing'.
- #850: ArrayIndexOutOfBoundsException.
- #858: Playlist is empty on relauch.
- #861: Podcast titles all shown as "null".
- #863: Ultrasonic crashes on startup when pointed to subsonic demo server.
- #864: Ultrasonic sends invalid URLs when Server Address ends in '/'.
- #867: Ultrasonic shouldn't crash when deleting a playlist.
- #872: Ultrasonic should handle custom cache location without creating multiple copies of a track.
- #886: Jukebox crashes since 4.2.1.
Enhancements
- #829: isJukeBoxAvailable is called on every visit of PlayerFragment.
- #854: Remove Videos menu option for servers which don't support it.

View File

@ -0,0 +1,7 @@
Bug fixes
- #831: Version 4.1.1 and develop: 'jukebox on/off' no longer shown in 'Now Playing'.
Enhancements
- #827: Make app full compliant Android Auto to publish in Play Store.
- #878: "Play shuffled" option for playlists always begins with the first track.
- #891: Dump config to log file when logging is enabled.

View File

@ -0,0 +1,4 @@
Bug fixes
- Fix a crash when a ID3 tag date is in a wrong format.
- Fix a crash on API 31 (newest Android).
- Fix empty search results.

View File

@ -0,0 +1,2 @@
Bug fixes
- Fix a crash when downloading the album art.

View File

@ -0,0 +1,8 @@
Bug fixes
- Fix various crashes
Changes since 4.2.0
- #827: Make app full compliant Android Auto to publish in Play Store.
- #878: "Play shuffled" option for playlists always begins with the first track.
- #891: Dump config to log file when logging is enabled.
- #854: Remove Videos menu option for servers which don't support it.

View File

@ -0,0 +1,8 @@
Bug fixes
- Fix more exceptions
Changes since 4.2.0
- #827: Make app full compliant Android Auto to publish in Play Store.
- #878: "Play shuffled" option for playlists always begins with the first track.
- #891: Dump config to log file when logging is enabled.
- #854: Remove Videos menu option for servers which don't support it.

View File

@ -0,0 +1,10 @@
Features:
- This releases focuses on shuffled playback. The view of the playlist will now present itself in the order it will actually play. You can toggle the shuffle mode to create a new order, while the past playback history will be preserved.
- Use Coroutines for triggering the download or playback of music through the context menus
- Enable Artists pictures by Default
Bug fixes:
- Remove an unhelpful popup that "ID must be set"
- Shuffle mode doesn't always play all tracks
- Shuffle mode starts with the first track most of the time

View File

@ -0,0 +1,10 @@
Features:
- This releases focuses on shuffled playback. The view of the playlist will now present itself in the order it will actually play. You can toggle the shuffle mode to create a new order, while the past playback history will be preserved.
- Use Coroutines for triggering the download or playback of music through the context menus
- Enable Artists pictures by Default
Bug fixes:
- Remove an unhelpful popup that "ID must be set"
- Shuffle mode doesn't always play all tracks
- Shuffle mode starts with the first track most of the time

View File

@ -0,0 +1,10 @@
Features:
- Revamp management of ratings. Tracks can be starred from the notification in Android 13, and the changes will show up everywhere immediately.
- Add a setting to control the maximum bitrate when pinning music (can be used to avoid downloading lossless files like flac).
- Modernize the Jukebox player.
- The hardware keys can be used to set the Jukebox volume.
- The current playlist shows a spinner when loading takes some time
Bug fixes:
- Request correct bluetooth permission on Android 13 (needed to pause/play on connect)
- Update dependencies (OkHttp, Material)

View File

@ -0,0 +1,12 @@
Features:
- Search is accesible through a new icon on the main screen
- Modernize Back Handling
- Reenable R8 Code minification
- Add a "Play Random Songs" shortcut
Bug fixes:
- Tracks buttons flash a scrollbar sometimes in Android 13
- Fix EndlessScrolling in genre listing
- Couldn't delete a track when shuffle was active
- Upgrade material to 1.9.0

View File

@ -0,0 +1,15 @@
Features:
- Search is accessible through a new icon on the main screen
- Modernize Back Handling
- Reenable R8 Code minification
- Add a "Play Random Songs" shortcut
Bug fixes:
- Readd the "Star" button to the Now Playing screen
- Fix a rare crash when shuffling playlists with duplicate entries
- Fix a crash when choosing "Play next" on an empty playlist.
- Tracks buttons flash a scrollbar sometimes in Android 13
- Fix EndlessScrolling in genre listing
- Couldn't delete a track when shuffle was active
- Upgrade material to 1.9.0

View File

@ -0,0 +1,15 @@
Features:
- Search is accessible through a new icon on the main screen
- Modernize Back Handling
- Reenable R8 Code minification
- Add a "Play Random Songs" shortcut
Bug fixes:
- Avoid triggering a bug in Supysonic
- Readd the "Star" button to the Now Playing screen
- Fix a rare crash when shuffling playlists with duplicate entries
- Fix a crash when choosing "Play next" on an empty playlist.
- Tracks buttons flash a scrollbar sometimes in Android 13
- Fix EndlessScrolling in genre listing
- Couldn't delete a track when shuffle was active

View File

@ -0,0 +1,15 @@
Features:
- Search is accessible through a new icon on the main screen
- Modernize Back Handling
- Reenable R8 Code minification
- Add a "Play Random Songs" shortcut
Bug fixes:
- Fix a few crashes
- Avoid triggering a bug in Supysonic
- Readd the "Star" button to the Now Playing screen
- Fix a rare crash when shuffling playlists with duplicate entries
- Fix a crash when choosing "Play next" on an empty playlist.
- Tracks buttons flash a scrollbar sometimes in Android 13
- Fix EndlessScrolling in genre listing
- Couldn't delete a track when shuffle was active

View File

@ -0,0 +1,9 @@
### Features
- Added custom buttons for shuffling the current queue and setting repeat mode (Android Auto)
- Properly handling nested directory structures (Android Auto)
- Add a toast when adding tracks to the playlist
- Allow pinning when offline
### Dependencies
- Update koin
- Update media3 to v1.1.0

View File

@ -0,0 +1,12 @@
### Fixes
- Fix a bug in 4.7.0 that repeat mode was activated by default.
### Features
- Added custom buttons for shuffling the current queue and setting repeat mode (Android Auto)
- Properly handling nested directory structures (Android Auto)
- Add a toast when adding tracks to the playlist
- Allow pinning when offline
### Dependencies
- Update koin
- Update media3 to v1.1.0

View File

@ -0,0 +1,5 @@
### Features
- Improved display of rating stars
- Completely modernize all older code parts
- Updates for Android 14
- Update dependencies

View File

@ -1,17 +1,17 @@
Ultrasonic is a Subsonic (and compatible servers) client to Android. You can use Ultrasonic to connect with your server and listen music.
Main features:
* Thin
* Fast
* Dark and light theme
* Small size & fast
* Material You theme with dark and light variants
* Multiple server support
* Offline Mode
* Download tracks for offline playback
* Bookmarks
* Playlists on server
* Ramdom play
* Shuffled playback
* Jukebox mode
* Server chat
* And much more!!!
* And much more!!
Note: Ultrasonic uses semantic release versions. Releases with a zero in the last digit introduce new features or significant changes, all other releases focus on fixing bugs.
The source code is available with GPL license in GitLab: https://gitlab.com/ultrasonic/ultrasonic
If you have any issue, please post in: https://gitlab.com/ultrasonic/ultrasonic/issues

View File

@ -0,0 +1,14 @@
Corrección de errores
- #831: Versión 4.1.1 y desarrollo: 'jukebox encender/apagar' ya no se muestra en 'Reproduciendo ahora'.
- #850: ArrayIndexOutOfBoundsException.
- #858: La lista de reproducción está vacía.
- #861: Los títulos de los podcasts se muestran como "null".
- #863: Ultrasonic se bloquea al inicio cuando se apunta al servidor de demostración subsonic.
- #864: Ultrasonic envía URLs inválidas cuando la dirección del servidor termina en '/'.
- #867: Ultrasonic no debería bloquearse al borrar una lista de reproducción.
- #872: Ultrasonic debería manejar la ubicación de caché personalizada sin crear múltiples copias de una pista.
- #886: Jukebox se bloquea desde 4.2.1.
Mejoras
- #829: isJukeBoxAvailable se llama en cada visita de PlayerFragment.
- #854: Eliminar la opción de menú Videos para servidores que no la soportan.

View File

@ -0,0 +1,7 @@
Corrección de errores
- #831: Versión 4.1.1 y desarrollo: 'jukebox on/off' ya no se muestra en 'Reproduciendo ahora'.
Mejoras
- #827: Hacer aplicación completamente compatible con Android Auto para publicar en Play Store.
- #878: "Reproducir aleatoriamente" ya no siempre comienza con la primera pista.
- #891: Volcado de configuración al archivo de registro cuando el registro está habilitado.

View File

@ -0,0 +1,4 @@
Corrección de errores
- Corrección de un fallo cuando la fecha de una etiqueta ID3 tiene un formato incorrecto.
- Corrección de un fallo en la API 31 (versión de Android más reciente).
- Corrección de resultados de búsqueda vacíos.

View File

@ -0,0 +1,2 @@
Corrección de errores
- Corrección de un fallo al descargar la carátula del álbum.

View File

@ -4,10 +4,22 @@ org.gradle.configureondemand=true
org.gradle.caching=true
org.gradle.jvmargs=-Xmx2g -XX:+UseParallelGC
kotlin.incremental=true
kotlin.caching.enabled=true
kotlin.incremental.usePreciseJavaTracking=true
android.useAndroidX=true
android.enableJetifier=false
# This properties enables transitive Resource classes, which decreases build time,
# but could lead to problems referencing Resources. Set them to false if needed.
android.nonTransitiveRClass=true
android.nonFinalResIds=true
# This config was suggested by Android Studio to reduce build time
# It can be removed if it makes problems
org.gradle.unsafe.configuration-cache=true
# TODO Renable on day (check that Retrofit, Jackson, and Imageloader are working)
android.enableR8.fullMode=true

View File

@ -1,44 +1,46 @@
[versions]
# You need to run ./gradlew wrapper after updating the version
gradle = "7.5.1"
gradle = "8.13"
navigation = "2.5.3"
gradlePlugin = "7.3.1"
androidxcore = "1.9.0"
ktlint = "0.43.2"
ktlintGradle = "11.0.0"
detekt = "1.22.0"
preferences = "1.2.0"
media3 = "f3e450e783"
navigation = "2.8.9"
gradlePlugin = "8.9.1"
androidxcar = "1.4.0"
androidxcore = "1.16.0"
ktlint = "1.0.1"
ktlintGradle = "12.2.0"
detekt = "1.23.8"
preferences = "1.2.1"
media3 = "1.6.1"
androidSupport = "1.5.0"
materialDesign = "1.6.1"
constraintLayout = "2.1.4"
androidSupport = "1.9.1"
materialDesign = "1.12.0"
constraintLayout = "2.2.1"
activity = "1.10.1"
multidex = "2.0.1"
room = "2.4.3"
kotlin = "1.7.22"
kotlinxCoroutines = "1.6.4-native-mt"
kotlinxGuava = "1.6.4"
viewModelKtx = "2.5.1"
room = "2.7.0"
kotlin = "2.1.20"
ksp = "2.1.20-2.0.0"
kotlinxCoroutines = "1.10.2"
viewModelKtx = "2.8.7"
swipeRefresh = "1.1.0"
retrofit = "2.9.0"
jackson = "2.14.1"
okhttp = "4.10.0"
koin = "3.2.2"
retrofit = "2.11.0"
jackson = "2.18.3"
okhttp = "4.12.0"
koin = "4.0.4"
picasso = "2.8"
junit4 = "4.13.2"
junit5 = "5.9.1"
mockito = "4.10.0"
mockitoKotlin = "4.1.0"
kluent = "1.72"
apacheCodecs = "1.15"
robolectric = "4.9.1"
junit5 = "5.12.2"
mockito = "5.17.0"
mockitoKotlin = "5.4.0"
kluent = "1.73"
apacheCodecs = "1.18.0"
robolectric = "4.14.1"
timber = "5.0.1"
fastScroll = "2.0.1"
colorPicker = "2.2.4"
rxJava = "3.1.5"
colorPicker = "2.3.0"
rxJava = "3.1.10"
rxAndroid = "3.0.2"
multiType = "4.3.0"
@ -48,6 +50,7 @@ kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin"
ktlintGradle = { module = "org.jlleitschuh.gradle:ktlint-gradle", version.ref = "ktlintGradle" }
detekt = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" }
car = { module = "androidx.car.app:app", version.ref = "androidxcar" }
core = { module = "androidx.core:core-ktx", version.ref = "androidxcore" }
design = { module = "com.google.android.material:material", version.ref = "materialDesign" }
annotations = { module = "androidx.annotation:annotation", version.ref = "androidSupport" }
@ -63,17 +66,18 @@ navigationFragmentKtx = { module = "androidx.navigation:navigation-fragment-kt
navigationUiKtx = { module = "androidx.navigation:navigation-ui-ktx", version.ref = "navigation" }
navigationFeature = { module = "androidx.navigation:navigation-dynamic-features-fragment", version.ref = "navigation" }
navigationSafeArgs = { module = "androidx.navigation:navigation-safe-args-gradle-plugin", version.ref = "navigation"}
activity = { module = "androidx.activity:activity-ktx", version.ref = "activity" }
preferences = { module = "androidx.preference:preference", version.ref = "preferences" }
media3common = { module = "com.github.androidx.media:media3-common", version.ref = "media3" }
media3exoplayer = { module = "com.github.androidx.media:media3-exoplayer", version.ref = "media3" }
media3datasource = { module = "com.github.androidx.media:media3-datasource", version.ref = "media3" }
media3okhttp = { module = "com.github.androidx.media:media3-datasource-okhttp", version.ref = "media3" }
media3session = { module = "com.github.androidx.media:media3-session", version.ref = "media3" }
media3common = { module = "androidx.media3:media3-common", version.ref = "media3" }
media3exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3" }
media3datasource = { module = "androidx.media3:media3-datasource", version.ref = "media3" }
media3okhttp = { module = "androidx.media3:media3-datasource-okhttp", version.ref = "media3" }
media3session = { module = "androidx.media3:media3-session", version.ref = "media3" }
swipeRefresh = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "swipeRefresh" }
kotlinStdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
kotlinReflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
kotlinxCoroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" }
kotlinxGuava = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-guava", version.ref = "kotlinxGuava"}
kotlinxGuava = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-guava", version.ref = "kotlinxCoroutines"}
retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
gsonConverter = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" }
jacksonConverter = { module = "com.squareup.retrofit2:converter-jackson", version.ref = "retrofit" }
@ -95,9 +99,11 @@ junitVintage = { module = "org.junit.vintage:junit-vintage-engine", v
kotlinJunit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" }
mockitoKotlin = { module = "org.mockito.kotlin:mockito-kotlin", version.ref = "mockitoKotlin" }
mockito = { module = "org.mockito:mockito-core", version.ref = "mockito" }
mockitoInline = { module = "org.mockito:mockito-inline", version.ref = "mockito" }
kluent = { module = "org.amshove.kluent:kluent", version.ref = "kluent" }
kluentAndroid = { module = "org.amshove.kluent:kluent-android", version.ref = "kluent" }
mockWebServer = { module = "com.squareup.okhttp3:mockwebserver", version.ref = "okhttp" }
apacheCodecs = { module = "commons-codec:commons-codec", version.ref = "apacheCodecs" }
robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectric" }
[plugins]
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }

View File

@ -1,5 +1,5 @@
ext.versions = [
minSdk : 21,
minSdk : 26,
targetSdk : 33,
compileSdk : 33,
]
compileSdk : 35,
]

Binary file not shown.

View File

@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -2,9 +2,9 @@
* This module provides a base for for submodules which depend on the Android runtime
*/
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'org.jetbrains.kotlin.android'
apply from: "${project.rootDir}/gradle_scripts/code_quality.gradle"
apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.devtools.ksp'
android {
compileSdkVersion versions.compileSdk
@ -16,9 +16,8 @@ android {
}
compileOptions {
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
sourceSets {

View File

@ -25,11 +25,8 @@ if (isCodeQualityEnabled) {
// Builds the AST in parallel. Rules are always executed in parallel.
// Can lead to speedups in larger projects.
parallel = true
baseline = file("${rootProject.projectDir}/detekt-baseline.xml")
config = files("${rootProject.projectDir}/detekt-config.yml")
}
}
tasks.detekt.jvmTarget = "1.8"
tasks.detekt.jvmTarget = "17"
}
}

View File

@ -2,7 +2,7 @@
* This module provides a base for for pure kotlin modules
*/
apply plugin: 'kotlin'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.devtools.ksp'
apply from: "${project.rootDir}/gradle_scripts/code_quality.gradle"
sourceSets {
@ -12,7 +12,6 @@ sourceSets {
test.resources.srcDirs += "${projectDir}/src/integrationTest/resources"
}
dependencies {
api libs.kotlinStdlib

33
gradlew vendored
View File

@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@ -83,10 +85,8 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# 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
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
@ -133,10 +133,13 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
@ -144,7 +147,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
@ -152,7 +155,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
@ -197,11 +200,15 @@ if "$cygwin" || "$msys" ; then
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
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,
# 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.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \

22
gradlew.bat vendored
View File

@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@ -43,11 +45,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail

View File

@ -1,6 +1,9 @@
plugins {
alias libs.plugins.ksp
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'org.jetbrains.kotlin.android'
apply plugin: "androidx.navigation.safeargs.kotlin"
apply from: "../gradle_scripts/code_quality.gradle"
@ -9,12 +12,12 @@ android {
defaultConfig {
applicationId "org.moire.ultrasonic"
versionCode 111
versionName "4.2.1"
versionCode 130
versionName "4.8.0"
minSdkVersion versions.minSdk
targetSdkVersion versions.targetSdk
resConfigs 'cs', 'de', 'en', 'es', 'fr', 'hu', 'it', 'nl', 'pl', 'pt', 'pt-rBR', 'ru', 'zh-rCN', 'zh-rTW'
resourceConfigurations += ['cs', 'de', 'en', 'es', 'fr', 'gl', 'hu', 'it', 'ja', 'nb-rNO', 'nl', 'pl', 'pt', 'pt-rBR', 'ru', 'zh-rCN', 'zh-rTW']
}
bundle.language.enableSplit = false
@ -31,10 +34,10 @@ android {
'minify/proguard-kotlin.pro'
}
debug {
minifyEnabled false
multiDexEnabled true
testCoverageEnabled true
applicationIdSuffix ".debug"
minifyEnabled = false
multiDexEnabled = true
testCoverageEnabled = true
applicationIdSuffix = '.debug'
}
}
@ -50,41 +53,43 @@ android {
}
kotlinOptions {
jvmTarget = "1.8"
jvmTarget = "21"
}
buildFeatures {
viewBinding true
dataBinding true
viewBinding = true
dataBinding = true
buildConfig = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_21
targetCompatibility JavaVersion.VERSION_21
}
kapt {
arguments {
arg("room.schemaLocation", "$rootDir/ultrasonic/schemas".toString())
}
ksp {
arg("room.schemaLocation", "$rootDir/ultrasonic/schemas")
}
lint {
baseline = file("lint-baseline.xml")
abortOnError true
warningsAsErrors true
disable 'IconMissingDensityFolder', 'VectorPath'
ignore 'MissingTranslation', 'UnusedQuantity', 'MissingQuantity'
abortOnError = true
warningsAsErrors = true
warning 'ImpliedQuantity'
disable 'IconMissingDensityFolder', 'VectorPath'
disable 'MissingTranslation', 'UnusedQuantity', 'MissingQuantity'
disable 'ObsoleteLintCustomCheck'
textReport true
checkDependencies true
// We manage dependencies on Gitlab with RenovateBot
disable 'GradleDependency'
disable 'AndroidGradlePluginVersion'
textReport = true
checkDependencies = true
}
namespace 'org.moire.ultrasonic'
namespace = 'org.moire.ultrasonic'
}
tasks.withType(Test) {
tasks.withType(Test).configureEach {
useJUnitPlatform()
}
@ -96,6 +101,7 @@ dependencies {
exclude group: "com.android.support"
}
implementation libs.car
implementation libs.core
implementation libs.design
implementation libs.multidex
@ -128,7 +134,7 @@ dependencies {
implementation libs.rxAndroid
implementation libs.multiType
kapt libs.room
ksp libs.room
testImplementation libs.kotlinReflect
testImplementation libs.junit
@ -136,11 +142,9 @@ dependencies {
testImplementation libs.kotlinJunit
testImplementation libs.kluent
testImplementation libs.mockito
testImplementation libs.mockitoInline
testImplementation libs.mockitoKotlin
testImplementation libs.robolectric
implementation libs.timber
}

View File

@ -0,0 +1,19 @@
<?xml version="1.0" ?>
<SmellBaseline>
<ManuallySuppressedIssues></ManuallySuppressedIssues>
<CurrentIssues>
<ID>ImplicitDefaultLocale:FileLoggerTree.kt$FileLoggerTree$String.format("Failed to write log to %s", file)</ID>
<ID>ImplicitDefaultLocale:FileLoggerTree.kt$FileLoggerTree$String.format("Log file rotated, logging into file %s", file?.name)</ID>
<ID>ImplicitDefaultLocale:FileLoggerTree.kt$FileLoggerTree$String.format("Logging into file %s", file?.name)</ID>
<ID>ImplicitDefaultLocale:ShareHandler.kt$ShareHandler$String.format("%d:%s", timeSpanAmount, timeSpanType)</ID>
<ID>LongMethod:EditServerFragment.kt$EditServerFragment$override fun onViewCreated(view: View, savedInstanceState: Bundle?)</ID>
<ID>LongMethod:NavigationActivity.kt$NavigationActivity$override fun onCreate(savedInstanceState: Bundle?)</ID>
<ID>LongMethod:PlaylistsFragment.kt$PlaylistsFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean</ID>
<ID>LongMethod:SharesFragment.kt$SharesFragment$override fun onContextItemSelected(menuItem: MenuItem): Boolean</ID>
<ID>MagicNumber:ActiveServerProvider.kt$ActiveServerProvider$8192</ID>
<ID>MagicNumber:JukeboxMediaPlayer.kt$JukeboxMediaPlayer$50</ID>
<ID>MagicNumber:RESTMusicService.kt$RESTMusicService$206</ID>
<ID>TooGenericExceptionCaught:JukeboxMediaPlayer.kt$JukeboxMediaPlayer.TaskQueue$x: Throwable</ID>
<ID>TooManyFunctions:RESTMusicService.kt$RESTMusicService : MusicService</ID>
</CurrentIssues>
</SmellBaseline>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<issues format="6" by="lint 7.3.1" type="baseline" client="gradle" dependencies="true" name="AGP (7.3.1)" variant="all" version="7.3.1">
<issues format="6" by="lint 8.0.1" type="baseline" client="gradle" dependencies="true" name="AGP (8.0.1)" variant="all" version="8.0.1">
<issue
id="PluralsCandidate"
@ -8,7 +8,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
<location
file="src/main/res/values/strings.xml"
line="153"
line="151"
column="5"/>
</issue>
@ -16,58 +16,14 @@
id="TrustAllX509TrustManager"
message="`checkClientTrusted` is empty, which could cause insecure network traffic due to trusting arbitrary TLS/SSL certificates presented by peers">
<location
file="org/moire/ultrasonic/api/subsonic/SubsonicAPIClient$allowSelfSignedCertificates$trustManager$1.class"/>
file="../core/subsonic-api/build/libs/subsonic-api.jar"/>
</issue>
<issue
id="TrustAllX509TrustManager"
message="`checkServerTrusted` is empty, which could cause insecure network traffic due to trusting arbitrary TLS/SSL certificates presented by peers">
<location
file="org/moire/ultrasonic/api/subsonic/SubsonicAPIClient$allowSelfSignedCertificates$trustManager$1.class"/>
</issue>
<issue
id="ExportedContentProvider"
message="Exported content providers can provide access to potentially sensitive data"
errorLine1=" &lt;provider"
errorLine2=" ~~~~~~~~">
<location
file="src/main/AndroidManifest.xml"
line="128"
column="10"/>
</issue>
<issue
id="ExportedContentProvider"
message="Exported content providers can provide access to potentially sensitive data"
errorLine1=" &lt;provider"
errorLine2=" ~~~~~~~~">
<location
file="src/main/AndroidManifest.xml"
line="133"
column="10"/>
</issue>
<issue
id="ExportedReceiver"
message="Exported receiver does not require permission"
errorLine1=" &lt;receiver android:name=&quot;.receiver.UltrasonicIntentReceiver&quot;"
errorLine2=" ~~~~~~~~">
<location
file="src/main/AndroidManifest.xml"
line="88"
column="10"/>
</issue>
<issue
id="ExportedService"
message="Exported service does not require permission"
errorLine1=" &lt;service android:name=&quot;.playback.PlaybackService&quot;"
errorLine2=" ~~~~~~~">
<location
file="src/main/AndroidManifest.xml"
line="77"
column="10"/>
file="../core/subsonic-api/build/libs/subsonic-api.jar"/>
</issue>
<issue
@ -114,61 +70,6 @@
column="1"/>
</issue>
<issue
id="UnusedResources"
message="The resource `R.drawable.media3_notification_small_icon` appears to be unused"
errorLine1="&lt;vector xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;"
errorLine2="^">
<location
file="src/main/res/drawable/media3_notification_small_icon.xml"
line="1"
column="1"/>
</issue>
<issue
id="Autofill"
message="Missing `autofillHints` attribute"
errorLine1=" &lt;EditText"
errorLine2=" ~~~~~~~~">
<location
file="src/main/res/layout/chat.xml"
line="33"
column="10"/>
</issue>
<issue
id="Autofill"
message="Missing `autofillHints` attribute"
errorLine1=" &lt;EditText"
errorLine2=" ~~~~~~~~">
<location
file="src/main/res/layout/save_playlist.xml"
line="9"
column="6"/>
</issue>
<issue
id="Autofill"
message="Missing `autofillHints` attribute"
errorLine1=" &lt;EditText"
errorLine2=" ~~~~~~~~">
<location
file="src/main/res/layout/share_details.xml"
line="29"
column="10"/>
</issue>
<issue
id="Autofill"
message="Missing `autofillHints` attribute"
errorLine1=" &lt;EditText"
errorLine2=" ~~~~~~~~">
<location
file="src/main/res/layout/time_span_dialog.xml"
line="28"
column="10"/>
</issue>
<issue
id="LabelFor"
message="Missing accessibility label: provide either a view with an `android:labelFor` that references this view or provide an `android:hint`"

View File

@ -1,5 +1,4 @@
#### From Jackson
-keepattributes *Annotation*,EnclosingMethod,Signature
-keepnames class com.fasterxml.jackson.** {
*;

View File

@ -1,8 +1,14 @@
-dontobfuscate
### Don't remove subsonic api serializers/entities
-keep class org.moire.ultrasonic.api.subsonic.response.** { *; }
-keep class org.moire.ultrasonic.api.subsonic.models.** { *; }
-keep class org.moire.ultrasonic.api.subsonic.** { *; }
## Don't remove the domain models
-keep class org.moire.ultrasonic.domain.** { *; }
## Don't remove the imageloader
-keep class org.moire.ultrasonic.imageloader.** { *; }
-keep class org.moire.ultrasonic.provider.AlbumArtContentProvider { *; }
## Don't remove NowPlayingFragment
-keep class org.moire.ultrasonic.fragment.NowPlayingFragment { *; }

View File

@ -1,10 +1,41 @@
#### From retrofit
# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
# EnclosingMethod is required to use InnerClasses.
-keepattributes Signature, InnerClasses, EnclosingMethod
# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain service method parameters.
-keepclassmembernames,allowobfuscation interface * {
# Retrofit does reflection on method and parameter annotations.
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations
# Keep annotation default values (e.g., retrofit2.http.Field.encoded).
-keepattributes AnnotationDefault
# Retain service method parameters when optimizing.
-keepclassmembers,allowshrinking,allowobfuscation interface * {
@retrofit2.http.* <methods>;
}
# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
# Ignore JSR 305 annotations for embedding nullability information.
-dontwarn javax.annotation.**
# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.
-dontwarn kotlin.Unit
# Top-level functions that can only be used by Kotlin.
-dontwarn retrofit2.KotlinExtensions
-dontwarn retrofit2.KotlinExtensions$*
# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy
# and replaces all potential values with null. Explicitly keeping the interfaces prevents this.
-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface <1>
# Keep generic signature of Call, Response (R8 full mode strips signatures from non-kept items).
-keep,allowobfuscation,allowshrinking interface retrofit2.Call
-keep,allowobfuscation,allowshrinking class retrofit2.Response
# With R8 full mode generic signatures are stripped for classes that are not
# kept. Suspend functions are wrapped in continuations where the type argument
# is used.
-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation

View File

@ -0,0 +1,136 @@
{
"formatVersion": 1,
"database": {
"version": 6,
"identityHash": "9d28146ad3086d9c761f25ca007a96ce",
"entities": [
{
"tableName": "ServerSetting",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `index` INTEGER NOT NULL, `name` TEXT NOT NULL, `url` TEXT NOT NULL, `color` INTEGER, `userName` TEXT NOT NULL, `password` TEXT NOT NULL, `jukeboxByDefault` INTEGER NOT NULL, `allowSelfSignedCertificate` INTEGER NOT NULL, `forcePlainTextPassword` INTEGER NOT NULL, `musicFolderId` TEXT, `minimumApiVersion` TEXT, `chatSupport` INTEGER, `bookmarkSupport` INTEGER, `shareSupport` INTEGER, `podcastSupport` INTEGER, `jukeboxSupport` INTEGER, `videoSupport` INTEGER)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "index",
"columnName": "index",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "name",
"columnName": "name",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "url",
"columnName": "url",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "color",
"columnName": "color",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "userName",
"columnName": "userName",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "password",
"columnName": "password",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "jukeboxByDefault",
"columnName": "jukeboxByDefault",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "allowSelfSignedCertificate",
"columnName": "allowSelfSignedCertificate",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "forcePlainTextPassword",
"columnName": "forcePlainTextPassword",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "musicFolderId",
"columnName": "musicFolderId",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "minimumApiVersion",
"columnName": "minimumApiVersion",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "chatSupport",
"columnName": "chatSupport",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "bookmarkSupport",
"columnName": "bookmarkSupport",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "shareSupport",
"columnName": "shareSupport",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "podcastSupport",
"columnName": "podcastSupport",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "jukeboxSupport",
"columnName": "jukeboxSupport",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "videoSupport",
"columnName": "videoSupport",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"id"
],
"autoGenerate": true
},
"indices": [],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '9d28146ad3086d9c761f25ca007a96ce')"
]
}
}

View File

@ -3,15 +3,17 @@
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="auto">
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-sdk tools:overrideLibrary="androidx.car.app" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
@ -20,18 +22,23 @@
android:xlargeScreens="true"/>
<application
android:allowBackup="true"
android:fullBackupContent="@xml/backup_descriptor"
android:dataExtractionRules="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:theme="@style/Theme.Material3.DynamicColors.Dark"
android:name=".app.UApp"
android:allowBackup="true"
android:dataExtractionRules="@xml/backup_rules"
android:enableOnBackInvokedCallback="true"
android:fullBackupContent="@xml/backup_descriptor"
android:hasFragileUserData="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/common.appname"
android:usesCleartextTraffic="true"
android:supportsRtl="false"
android:networkSecurityConfig="@xml/network_security_config"
android:preserveLegacyExternalStorage="true"
tools:ignore="UnusedAttribute">
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="false"
android:theme="@style/Theme.Material3.DynamicColors.Dark"
android:usesCleartextTraffic="true"
tools:ignore="UnusedAttribute"
tools:targetApi="q">
<!-- Add for API 34 android:enableOnBackInvokedCallBack="true" -->
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
@ -66,18 +73,12 @@
android:exported="false">
</service>
<service
android:name=".service.JukeboxMediaPlayer"
android:label="Ultrasonic Jukebox Media Player Service"
android:foregroundServiceType="mediaPlayback"
android:exported="false">
</service>
<!-- Needs to be exported: https://android.googlesource.com/platform/developers/build/+/4de32d4/prebuilts/gradle/MediaBrowserService/README.md -->
<service android:name=".playback.PlaybackService"
<service android:name=".service.PlaybackService"
android:label="@string/common.appname"
android:foregroundServiceType="mediaPlayback"
android:exported="true">
android:exported="true"
tools:ignore="ExportedService">
<intent-filter>
<action android:name="androidx.media3.session.MediaLibraryService" />
@ -86,7 +87,8 @@
</service>
<receiver android:name=".receiver.UltrasonicIntentReceiver"
android:exported="true">
android:exported="true"
tools:ignore="ExportedReceiver">
<intent-filter>
<action android:name="org.moire.ultrasonic.CMD_TOGGLEPAUSE"/>
<action android:name="org.moire.ultrasonic.CMD_PLAY"/>
@ -107,6 +109,12 @@
<action android:name="android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED"/>
</intent-filter>
</receiver>
<receiver android:name="androidx.media3.session.MediaButtonReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
<receiver
android:name=".provider.UltrasonicAppWidgetProvider"
android:label="Ultrasonic"
@ -119,21 +127,16 @@
android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info"/>
</receiver>
<receiver android:name=".receiver.MediaButtonIntentReceiver"
android:exported="true">
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.MEDIA_BUTTON"/>
</intent-filter>
</receiver>
<provider
android:name=".provider.SearchSuggestionProvider"
android:authorities="${applicationId}.provider.SearchSuggestionProvider"
android:exported="true" />
android:exported="true"
tools:ignore="ExportedContentProvider" />
<provider
android:name=".provider.AlbumArtContentProvider"
android:authorities="${applicationId}.provider.AlbumArtContentProvider"
android:exported="true" />
android:exported="true"
tools:ignore="ExportedContentProvider" />
</application>
</manifest>

View File

@ -1,298 +0,0 @@
package org.moire.ultrasonic.fragment;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import org.moire.ultrasonic.R;
import org.moire.ultrasonic.data.ActiveServerProvider;
import org.moire.ultrasonic.domain.ChatMessage;
import org.moire.ultrasonic.service.MusicService;
import org.moire.ultrasonic.service.MusicServiceFactory;
import org.moire.ultrasonic.util.BackgroundTask;
import org.moire.ultrasonic.util.CancellationToken;
import org.moire.ultrasonic.util.FragmentBackgroundTask;
import org.moire.ultrasonic.util.Settings;
import org.moire.ultrasonic.util.Util;
import org.moire.ultrasonic.view.ChatAdapter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import kotlin.Lazy;
import static org.koin.java.KoinJavaComponent.inject;
import com.google.android.material.button.MaterialButton;
/**
* Provides online chat functionality
*/
public class ChatFragment extends Fragment {
private ListView chatListView;
private EditText messageEditText;
private MaterialButton sendButton;
private Timer timer;
private volatile static Long lastChatMessageTime = (long) 0;
private static final ArrayList<ChatMessage> messageList = new ArrayList<>();
private CancellationToken cancellationToken;
private SwipeRefreshLayout swipeRefresh;
private final Lazy<ActiveServerProvider> activeServerProvider = inject(ActiveServerProvider.class);
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
Util.applyTheme(this.getContext());
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.chat, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
swipeRefresh = view.findViewById(R.id.chat_refresh);
swipeRefresh.setEnabled(false);
cancellationToken = new CancellationToken();
messageEditText = view.findViewById(R.id.chat_edittext);
sendButton = view.findViewById(R.id.chat_send);
sendButton.setOnClickListener(view1 -> sendMessage());
chatListView = view.findViewById(R.id.chat_entries_list);
chatListView.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
chatListView.setStackFromBottom(true);
String serverName = activeServerProvider.getValue().getActiveServer().getName();
String userName = activeServerProvider.getValue().getActiveServer().getUserName();
String title = String.format("%s [%s@%s]", getResources().getString(R.string.button_bar_chat), userName, serverName);
FragmentTitle.Companion.setTitle(this, title);
setHasOptionsMenu(true);
messageEditText.setImeActionLabel("Send", KeyEvent.KEYCODE_ENTER);
messageEditText.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2)
{
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
{
}
@Override
public void afterTextChanged(Editable editable)
{
sendButton.setEnabled(!Util.isNullOrWhiteSpace(editable.toString()));
}
});
messageEditText.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE || (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN))
{
sendMessage();
return true;
}
return false;
});
load();
timerMethod();
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.chat, menu);
super.onCreateOptionsMenu(menu, inflater);
}
/*
* Listen for option item selections so that we receive a notification
* when the user requests a refresh by selecting the refresh action bar item.
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Check if user triggered a refresh:
if (item.getItemId() == R.id.menu_refresh) {
// Start the refresh background task.
load();
return true;
}
// User didn't trigger a refresh, let the superclass handle this action
return super.onOptionsItemSelected(item);
}
@Override
public void onResume()
{
super.onResume();
if (!messageList.isEmpty())
{
ListAdapter chatAdapter = new ChatAdapter(getContext(), messageList);
chatListView.setAdapter(chatAdapter);
}
if (timer == null)
{
timerMethod();
}
}
@Override
public void onPause()
{
super.onPause();
if (timer != null)
{
timer.cancel();
timer = null;
}
}
@Override
public void onDestroyView() {
cancellationToken.cancel();
super.onDestroyView();
}
private void timerMethod()
{
int refreshInterval = Settings.getChatRefreshInterval();
if (refreshInterval > 0)
{
timer = new Timer();
timer.schedule(new TimerTask()
{
@Override
public void run()
{
getActivity().runOnUiThread(() -> load());
}
}, refreshInterval, refreshInterval);
}
}
private void sendMessage()
{
if (messageEditText != null)
{
final String message;
Editable text = messageEditText.getText();
if (text == null)
{
return;
}
message = text.toString();
if (!Util.isNullOrWhiteSpace(message))
{
messageEditText.setText("");
BackgroundTask<Void> task = new FragmentBackgroundTask<Void>(getActivity(), false, swipeRefresh, cancellationToken)
{
@Override
protected Void doInBackground() throws Throwable
{
MusicService musicService = MusicServiceFactory.getMusicService();
musicService.addChatMessage(message);
return null;
}
@Override
protected void done(Void result)
{
load();
}
};
task.execute();
}
}
}
private synchronized void load()
{
BackgroundTask<List<ChatMessage>> task = new FragmentBackgroundTask<List<ChatMessage>>(getActivity(), false, swipeRefresh, cancellationToken)
{
@Override
protected List<ChatMessage> doInBackground() throws Throwable
{
MusicService musicService = MusicServiceFactory.getMusicService();
return musicService.getChatMessages(lastChatMessageTime);
}
@Override
protected void done(List<ChatMessage> result)
{
if (result != null && !result.isEmpty())
{
// Reset lastChatMessageTime if we have a newer message
for (ChatMessage message : result)
{
if (message.getTime() > lastChatMessageTime)
{
lastChatMessageTime = message.getTime();
}
}
// Reverse results to show them on the bottom
Collections.reverse(result);
messageList.addAll(result);
ListAdapter chatAdapter = new ChatAdapter(getContext(), messageList);
chatListView.setAdapter(chatAdapter);
}
}
@Override
protected void error(Throwable error) {
// Stop the timer in case of an error, otherwise it may repeat the error message forever
if (timer != null)
{
timer.cancel();
timer = null;
}
super.error(error);
}
};
task.execute();
}
}

View File

@ -1,37 +0,0 @@
/*
This file is part of Subsonic.
Subsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Subsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2010 (C) Sindre Mehus
*/
package org.moire.ultrasonic.provider;
import android.content.SearchRecentSuggestionsProvider;
/**
* Provides search suggestions based on recent searches.
*
* @author Sindre Mehus
*/
public class SearchSuggestionProvider extends SearchRecentSuggestionsProvider
{
public static final String AUTHORITY = SearchSuggestionProvider.class.getName();
public static final int MODE = DATABASE_MODE_QUERIES;
public SearchSuggestionProvider()
{
setupSuggestions(AUTHORITY, MODE);
}
}

View File

@ -1,100 +0,0 @@
/*
This file is part of Subsonic.
Subsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Subsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2010 (C) Sindre Mehus
*/
package org.moire.ultrasonic.receiver;
import android.annotation.SuppressLint;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import org.moire.ultrasonic.util.Constants;
import org.moire.ultrasonic.util.Settings;
import timber.log.Timber;
/**
* Resume or pause playback on Bluetooth A2DP connect/disconnect.
*
* @author Sindre Mehus
*/
@SuppressLint("MissingPermission")
public class BluetoothIntentReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
int state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1);
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
String action = intent.getAction();
String name = device != null ? device.getName() : "Unknown";
String address = device != null ? device.getAddress() : "Unknown";
Timber.d("A2DP State: %d; Action: %s; Device: %s; Address: %s", state, action, name, address);
boolean actionBluetoothDeviceConnected = false;
boolean actionBluetoothDeviceDisconnected = false;
boolean actionA2dpConnected = false;
boolean actionA2dpDisconnected = false;
if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action))
{
actionBluetoothDeviceConnected = true;
}
else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action) || BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED.equals(action))
{
actionBluetoothDeviceDisconnected = true;
}
if (state == android.bluetooth.BluetoothA2dp.STATE_CONNECTED) actionA2dpConnected = true;
else if (state == android.bluetooth.BluetoothA2dp.STATE_DISCONNECTED) actionA2dpDisconnected = true;
boolean resume = false;
boolean pause = false;
switch (Settings.getResumeOnBluetoothDevice())
{
case Constants.PREFERENCE_VALUE_ALL: resume = actionA2dpConnected || actionBluetoothDeviceConnected;
break;
case Constants.PREFERENCE_VALUE_A2DP: resume = actionA2dpConnected;
break;
}
switch (Settings.getPauseOnBluetoothDevice())
{
case Constants.PREFERENCE_VALUE_ALL: pause = actionA2dpDisconnected || actionBluetoothDeviceDisconnected;
break;
case Constants.PREFERENCE_VALUE_A2DP: pause = actionA2dpDisconnected;
break;
}
if (resume)
{
Timber.i("Connected to Bluetooth device %s address %s, resuming playback.", name, address);
context.sendBroadcast(new Intent(Constants.CMD_RESUME_OR_PLAY).setPackage(context.getPackageName()));
}
if (pause)
{
Timber.i("Disconnected from Bluetooth device %s address %s, requesting pause.", name, address);
context.sendBroadcast(new Intent(Constants.CMD_PAUSE).setPackage(context.getPackageName()));
}
}
}

View File

@ -1,38 +0,0 @@
package org.moire.ultrasonic.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import timber.log.Timber;
import org.moire.ultrasonic.service.MediaPlayerLifecycleSupport;
import kotlin.Lazy;
import static org.koin.java.KoinJavaComponent.inject;
public class UltrasonicIntentReceiver extends BroadcastReceiver
{
private Lazy<MediaPlayerLifecycleSupport> lifecycleSupport = inject(MediaPlayerLifecycleSupport.class);
@Override
public void onReceive(Context context, Intent intent)
{
String intentAction = intent.getAction();
Timber.i("Received Ultrasonic Intent: %s", intentAction);
try
{
lifecycleSupport.getValue().receiveIntent(intent);
if (isOrderedBroadcast())
{
abortBroadcast();
}
}
catch (Exception x)
{
// Ignored.
}
}
}

View File

@ -1,53 +0,0 @@
package org.moire.ultrasonic.service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import org.moire.ultrasonic.app.UApp;
import timber.log.Timber;
/**
* Monitors the state of the mobile's external storage
*/
public class ExternalStorageMonitor
{
private BroadcastReceiver ejectEventReceiver;
private boolean externalStorageAvailable = true;
public void onCreate(final Runnable ejectedCallback)
{
// Stop when SD card is ejected.
ejectEventReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
externalStorageAvailable = Intent.ACTION_MEDIA_MOUNTED.equals(intent.getAction());
if (!externalStorageAvailable)
{
Timber.i("External media is ejecting. Stopping playback.");
ejectedCallback.run();
}
else
{
Timber.i("External media is available.");
}
}
};
IntentFilter ejectFilter = new IntentFilter(Intent.ACTION_MEDIA_EJECT);
ejectFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
ejectFilter.addDataScheme("file");
UApp.Companion.applicationContext().registerReceiver(ejectEventReceiver, ejectFilter);
}
public void onDestroy()
{
UApp.Companion.applicationContext().unregisterReceiver(ejectEventReceiver);
}
public boolean isExternalStorageAvailable() { return externalStorageAvailable; }
}

View File

@ -1,50 +0,0 @@
package org.moire.ultrasonic.service;
import timber.log.Timber;
import org.moire.ultrasonic.data.ActiveServerProvider;
import org.moire.ultrasonic.domain.Track;
/**
* Scrobbles played songs to Last.fm.
*
* @author Sindre Mehus
* @version $Id$
*/
public class Scrobbler
{
private String lastSubmission;
private String lastNowPlaying;
public void scrobble(final Track song, final boolean submission)
{
if (song == null || !ActiveServerProvider.Companion.isScrobblingEnabled()) return;
final String id = song.getId();
// Avoid duplicate registrations.
if (submission && id.equals(lastSubmission)) return;
if (!submission && id.equals(lastNowPlaying)) return;
if (submission) lastSubmission = id;
else lastNowPlaying = id;
new Thread(String.format("Scrobble %s", song))
{
@Override
public void run()
{
MusicService service = MusicServiceFactory.getMusicService();
try
{
service.scrobble(id, submission);
Timber.i("Scrobbled '%s' for %s", submission ? "submission" : "now playing", song);
}
catch (Exception x)
{
Timber.i(x, "Failed to scrobble'%s' for %s", submission ? "submission" : "now playing", song);
}
}
}.start();
}
}

View File

@ -1,12 +0,0 @@
package org.moire.ultrasonic.service;
/**
* Abstract class for supplying items to a consumer
* @param <T> The type of the item supplied
*/
public abstract class Supplier<T>
{
public abstract T get();
}

View File

@ -1,72 +0,0 @@
/*
This file is part of Subsonic.
Subsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Subsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2009 (C) Sindre Mehus
*/
package org.moire.ultrasonic.util;
import android.app.Activity;
import android.os.Handler;
/**
* @author Sindre Mehus
*/
public abstract class BackgroundTask<T> implements ProgressListener
{
private final Activity activity;
private final Handler handler;
public BackgroundTask(Activity activity)
{
this.activity = activity;
handler = new Handler();
}
protected Activity getActivity()
{
return activity;
}
protected Handler getHandler()
{
return handler;
}
public abstract void execute();
protected abstract T doInBackground() throws Throwable;
protected abstract void done(T result);
protected void error(Throwable error)
{
CommunicationError.handleError(error, activity);
}
protected String getErrorMessage(Throwable error)
{
return CommunicationError.getErrorMessage(error, activity);
}
@Override
public abstract void updateProgress(final String message);
@Override
public void updateProgress(int messageId)
{
updateProgress(activity.getResources().getString(messageId));
}
}

View File

@ -1,89 +0,0 @@
package org.moire.ultrasonic.util;
import android.app.Activity;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
/**
* @author Sindre Mehus
* @version $Id$
*/
public abstract class FragmentBackgroundTask<T> extends BackgroundTask<T>
{
private final boolean changeProgress;
private final SwipeRefreshLayout swipe;
private final CancellationToken cancel;
public FragmentBackgroundTask(Activity activity, boolean changeProgress,
SwipeRefreshLayout swipe, CancellationToken cancel)
{
super(activity);
this.changeProgress = changeProgress;
this.swipe = swipe;
this.cancel = cancel;
}
@Override
public void execute()
{
if (changeProgress)
{
if (swipe != null) swipe.setRefreshing(true);
}
new Thread()
{
@Override
public void run()
{
try
{
final T result = doInBackground();
if (cancel.isCancellationRequested())
{
return;
}
getHandler().post(new Runnable()
{
@Override
public void run()
{
if (changeProgress)
{
if (swipe != null) swipe.setRefreshing(false);
}
done(result);
}
});
}
catch (final Throwable t)
{
if (cancel.isCancellationRequested())
{
return;
}
getHandler().post(new Runnable()
{
@Override
public void run()
{
if (changeProgress)
{
if (swipe != null) swipe.setRefreshing(false);
}
error(t);
}
});
}
}
}.start();
}
@Override
public void updateProgress(final String message)
{
}
}

View File

@ -1,76 +0,0 @@
package org.moire.ultrasonic.util;
import android.app.Activity;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
/**
* @author Sindre Mehus
* @version $Id$
*/
public abstract class LoadingTask<T> extends BackgroundTask<T>
{
private final SwipeRefreshLayout swipe;
private final CancellationToken cancel;
public LoadingTask(Activity activity, SwipeRefreshLayout swipe, CancellationToken cancel)
{
super(activity);
this.swipe = swipe;
this.cancel = cancel;
}
@Override
public void execute()
{
swipe.setRefreshing(true);
new Thread()
{
@Override
public void run()
{
try
{
final T result = doInBackground();
if (cancel.isCancellationRequested())
{
return;
}
getHandler().post(new Runnable()
{
@Override
public void run()
{
swipe.setRefreshing(false);
done(result);
}
});
}
catch (final Throwable t)
{
if (cancel.isCancellationRequested())
{
return;
}
getHandler().post(new Runnable()
{
@Override
public void run()
{
swipe.setRefreshing(false);
error(t);
}
});
}
}
}.start();
}
@Override
public void updateProgress(final String message)
{
}
}

View File

@ -1,160 +0,0 @@
/*
This file is part of Subsonic.
Subsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Subsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2009 (C) Sindre Mehus
*/
package org.moire.ultrasonic.util;
import android.app.Activity;
import android.app.AlertDialog;
import org.moire.ultrasonic.R;
import timber.log.Timber;
/**
* @author Sindre Mehus
*/
public abstract class ModalBackgroundTask<T> extends BackgroundTask<T>
{
private final AlertDialog progressDialog;
private Thread thread;
private final boolean finishActivityOnCancel;
private boolean cancelled;
public ModalBackgroundTask(Activity activity, boolean finishActivityOnCancel)
{
super(activity);
this.finishActivityOnCancel = finishActivityOnCancel;
progressDialog = createProgressDialog();
}
public ModalBackgroundTask(Activity activity)
{
this(activity, true);
}
private AlertDialog createProgressDialog()
{
AlertDialog.Builder builder = new InfoDialog.Builder(getActivity());
builder.setTitle(R.string.background_task_wait);
builder.setMessage(R.string.background_task_loading);
builder.setOnCancelListener(dialogInterface -> cancel());
builder.setPositiveButton(R.string.common_cancel, (dialogInterface, i) -> cancel());
return builder.create();
}
@Override
public void execute()
{
cancelled = false;
progressDialog.show();
thread = new Thread()
{
@Override
public void run()
{
try
{
final T result = doInBackground();
if (cancelled)
{
progressDialog.dismiss();
return;
}
getHandler().post(new Runnable()
{
@Override
public void run()
{
try
{
progressDialog.dismiss();
}
catch (Exception e)
{
// nothing
}
done(result);
}
});
}
catch (final Throwable t)
{
if (cancelled)
{
return;
}
getHandler().post(new Runnable()
{
@Override
public void run()
{
try
{
progressDialog.dismiss();
}
catch (Exception e)
{
// nothing
}
error(t);
}
});
}
}
};
thread.start();
}
protected void cancel()
{
cancelled = true;
if (thread != null)
{
thread.interrupt();
}
if (finishActivityOnCancel)
{
getActivity().finish();
}
}
protected boolean isCancelled()
{
return cancelled;
}
@Override
protected void error(Throwable error)
{
Timber.w(error);
new ErrorDialog(getActivity(), getErrorMessage(error), getActivity(), finishActivityOnCancel);
}
@Override
public void updateProgress(final String message)
{
getHandler().post(() -> progressDialog.setMessage(message));
}
}

View File

@ -1,29 +0,0 @@
/*
This file is part of Subsonic.
Subsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Subsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2009 (C) Sindre Mehus
*/
package org.moire.ultrasonic.util;
/**
* @author Sindre Mehus
*/
public interface ProgressListener
{
void updateProgress(String message);
void updateProgress(int messageId);
}

View File

@ -1,16 +0,0 @@
package org.moire.ultrasonic.util;
import org.moire.ultrasonic.domain.Track;
import java.util.List;
/**
* Created by Josh on 12/17/13.
*/
public class ShareDetails
{
public String Description;
public boolean ShareOnServer;
public long Expiration;
public List<Track> Entries;
}

View File

@ -1,39 +0,0 @@
/*
This file is part of Subsonic.
Subsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Subsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2009 (C) Sindre Mehus
*/
package org.moire.ultrasonic.util;
import android.os.Binder;
/**
* @author Sindre Mehus
*/
public class SimpleServiceBinder<S> extends Binder
{
private final S service;
public SimpleServiceBinder(S service)
{
this.service = service;
}
public S getService()
{
return service;
}
}

View File

@ -1,38 +0,0 @@
package org.moire.ultrasonic.util;
import android.content.Context;
import android.util.AttributeSet;
import androidx.preference.DialogPreference;
import org.moire.ultrasonic.R;
/**
* Created by Joshua Bahnsen on 12/22/13.
*/
public class TimeSpanPreference extends DialogPreference
{
Context context;
public TimeSpanPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
this.context = context;
setPositiveButtonText(android.R.string.ok);
setNegativeButtonText(android.R.string.cancel);
setDialogIcon(null);
}
public String getText()
{
String persisted = getPersistedString("");
if (!"".equals(persisted))
{
return persisted.replace(':', ' ');
}
return this.context.getResources().getString(R.string.time_span_disabled);
}
}

View File

@ -1,159 +0,0 @@
package org.moire.ultrasonic.view;
import android.content.Context;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.text.util.Linkify;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import org.moire.ultrasonic.R;
import org.moire.ultrasonic.data.ActiveServerProvider;
import org.moire.ultrasonic.domain.ChatMessage;
import org.moire.ultrasonic.imageloader.ImageLoader;
import org.moire.ultrasonic.subsonic.ImageLoaderProvider;
import java.text.DateFormat;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
import kotlin.Lazy;
import static org.koin.java.KoinJavaComponent.inject;
public class ChatAdapter extends ArrayAdapter<ChatMessage>
{
private final Context context;
private final List<ChatMessage> messages;
private static final String phoneRegex = "1?\\W*([2-9][0-8][0-9])\\W*([2-9][0-9]{2})\\W*([0-9]{4})";
private static final Pattern phoneMatcher = Pattern.compile(phoneRegex);
private final Lazy<ActiveServerProvider> activeServerProvider = inject(ActiveServerProvider.class);
private final Lazy<ImageLoaderProvider> imageLoaderProvider = inject(ImageLoaderProvider.class);
public ChatAdapter(Context context, List<ChatMessage> messages)
{
super(context, R.layout.chat_item, messages);
this.context = context;
this.messages = messages;
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int position) {
return false;
}
@Override
public int getCount()
{
return messages.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ChatMessage message = this.getItem(position);
ViewHolder holder;
int layout;
String messageUser = message.getUsername();
Date messageTime = new java.util.Date(message.getTime());
String messageText = message.getMessage();
String me = activeServerProvider.getValue().getActiveServer().getUserName();
layout = messageUser.equals(me) ? R.layout.chat_item_reverse : R.layout.chat_item;
if (convertView == null)
{
convertView = inflateView(layout, parent);
holder = createViewHolder(layout, convertView);
}
else
{
holder = (ViewHolder) convertView.getTag();
if (!holder.chatMessage.equals(message))
{
convertView = inflateView(layout, parent);
holder = createViewHolder(layout, convertView);
}
}
holder.chatMessage = message;
DateFormat timeFormat = android.text.format.DateFormat.getTimeFormat(context);
String messageTimeFormatted = String.format("[%s]", timeFormat.format(messageTime));
ImageLoader imageLoader = imageLoaderProvider.getValue().getImageLoader();
if (holder.avatar != null && !TextUtils.isEmpty(messageUser))
{
imageLoader.loadAvatarImage(holder.avatar, messageUser);
}
holder.username.setText(messageUser);
holder.message.setText(messageText);
holder.time.setText(messageTimeFormatted);
return convertView;
}
private View inflateView(int layout, ViewGroup parent)
{
return LayoutInflater.from(context).inflate(layout, parent, false);
}
private static ViewHolder createViewHolder(int layout, View convertView)
{
ViewHolder holder = new ViewHolder();
holder.layout = layout;
TextView usernameView;
TextView timeView;
TextView messageView;
ImageView imageView;
if (convertView != null)
{
usernameView = (TextView) convertView.findViewById(R.id.chat_username);
timeView = (TextView) convertView.findViewById(R.id.chat_time);
messageView = (TextView) convertView.findViewById(R.id.chat_message);
imageView = (ImageView) convertView.findViewById(R.id.chat_avatar);
messageView.setMovementMethod(LinkMovementMethod.getInstance());
Linkify.addLinks(messageView, Linkify.ALL);
Linkify.addLinks(messageView, phoneMatcher, "tel:");
holder.avatar = imageView;
holder.message = messageView;
holder.username = usernameView;
holder.time = timeView;
convertView.setTag(holder);
}
return holder;
}
private static class ViewHolder
{
int layout;
ImageView avatar;
TextView message;
TextView username;
TextView time;
ChatMessage chatMessage;
}
}

View File

@ -1,110 +0,0 @@
/*
This file is part of Subsonic.
Subsonic is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Subsonic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
Copyright 2010 (C) Sindre Mehus
*/
package org.moire.ultrasonic.view;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.SectionIndexer;
import android.widget.TextView;
import org.moire.ultrasonic.R;
import org.moire.ultrasonic.domain.Genre;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
/**
* @author Sindre Mehus
*/
public class GenreAdapter extends ArrayAdapter<Genre> implements SectionIndexer
{
private final LayoutInflater layoutInflater;
// Both arrays are indexed by section ID.
private final Object[] sections;
private final Integer[] positions;
public GenreAdapter(Context context, List<Genre> genres)
{
super(context, R.layout.list_item_generic, genres);
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Collection<String> sectionSet = new LinkedHashSet<String>(30);
List<Integer> positionList = new ArrayList<Integer>(30);
for (int i = 0; i < genres.size(); i++)
{
Genre genre = genres.get(i);
String index = genre.getIndex();
if (!sectionSet.contains(index))
{
sectionSet.add(index);
positionList.add(i);
}
}
sections = sectionSet.toArray(new Object[0]);
positions = positionList.toArray(new Integer[0]);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View rowView = convertView;
if (rowView == null) {
rowView = layoutInflater.inflate(R.layout.list_item_generic, parent, false);
}
((TextView) rowView).setText(getItem(position).getName());
return rowView;
}
@Override
public Object[] getSections()
{
return sections;
}
@Override
public int getPositionForSection(int section)
{
return positions[section];
}
@Override
public int getSectionForPosition(int pos)
{
for (int i = 0; i < sections.length - 1; i++)
{
if (pos < positions[i + 1])
{
return i;
}
}
return sections.length - 1;
}
}

View File

@ -1,56 +0,0 @@
package org.moire.ultrasonic.view;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import org.moire.ultrasonic.R;
import org.moire.ultrasonic.domain.Share;
import java.util.List;
/**
* @author Sindre Mehus
*/
public class ShareAdapter extends ArrayAdapter<Share>
{
private final Context context;
public ShareAdapter(Context context, List<Share> Shares)
{
super(context, R.layout.share_list_item, Shares);
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
Share entry = getItem(position);
ShareView view;
if (convertView instanceof ShareView)
{
ShareView currentView = (ShareView) convertView;
ViewHolder viewHolder = (ViewHolder) convertView.getTag();
view = currentView;
view.setViewHolder(viewHolder);
}
else
{
view = new ShareView(context);
view.setLayout();
}
view.setShare(entry);
return view;
}
static class ViewHolder
{
TextView url;
TextView description;
}
}

Some files were not shown because too many files have changed in this diff Show More