diff --git a/CHANGELOG.md b/CHANGELOG.md
index a8cc477c1..5173006d5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,7 @@
#### What's New
- Added ability to rewind/skip tracks by swiping back/forward
+- Added support for demo release type
## 3.2.1
diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt
index 648424458..3613d96c6 100644
--- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt
+++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt
@@ -607,6 +607,7 @@ constructor(
is ReleaseType.Soundtrack -> AlbumGrouping.SOUNDTRACKS
is ReleaseType.Mix -> AlbumGrouping.DJMIXES
is ReleaseType.Mixtape -> AlbumGrouping.MIXTAPES
+ is ReleaseType.Demo -> AlbumGrouping.DEMOS
}
}
}
@@ -709,6 +710,7 @@ constructor(
SOUNDTRACKS(R.string.lbl_soundtracks),
DJMIXES(R.string.lbl_mixes),
MIXTAPES(R.string.lbl_mixtapes),
+ DEMOS(R.string.lbl_demos),
APPEARANCES(R.string.lbl_appears_on),
LIVE(R.string.lbl_live_group),
REMIXES(R.string.lbl_remix_group),
diff --git a/app/src/main/java/org/oxycblt/auxio/music/info/ReleaseType.kt b/app/src/main/java/org/oxycblt/auxio/music/info/ReleaseType.kt
index 24260912b..3fe45b202 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/info/ReleaseType.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/info/ReleaseType.kt
@@ -143,6 +143,18 @@ sealed interface ReleaseType {
get() = R.string.lbl_mixtape
}
+ /**
+ * A demo. These are usually [EP]-sized releases of music made to promote an Artist or a future
+ * release.
+ */
+ data object Demo : ReleaseType {
+ override val refinement: Refinement?
+ get() = null
+
+ override val stringRes: Int
+ get() = R.string.lbl_demo
+ }
+
/** A specification of what kind of performance a particular release is. */
enum class Refinement {
/** A release consisting of a live performance */
@@ -220,6 +232,7 @@ sealed interface ReleaseType {
type.equals("dj-mix", true) -> Mix
type.equals("live", true) -> convertRefinement(Refinement.LIVE)
type.equals("remix", true) -> convertRefinement(Refinement.REMIX)
+ type.equals("demo", true) -> Demo
else -> convertRefinement(null)
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 31700900b..5f8eed478 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -63,6 +63,10 @@
Mixtapes
Mixtape
+
+ Demo
+
+ Demos
DJ Mixes
diff --git a/app/src/test/java/org/oxycblt/auxio/music/info/ReleaseTypeTest.kt b/app/src/test/java/org/oxycblt/auxio/music/info/ReleaseTypeTest.kt
index 9ca019a40..1294e3daf 100644
--- a/app/src/test/java/org/oxycblt/auxio/music/info/ReleaseTypeTest.kt
+++ b/app/src/test/java/org/oxycblt/auxio/music/info/ReleaseTypeTest.kt
@@ -36,6 +36,7 @@ class ReleaseTypeTest {
assertEquals(ReleaseType.Soundtrack, ReleaseType.parse(listOf("album", "soundtrack")))
assertEquals(ReleaseType.Mix, ReleaseType.parse(listOf("album", "dj-mix")))
assertEquals(ReleaseType.Mixtape, ReleaseType.parse(listOf("album", "mixtape/street")))
+ assertEquals(ReleaseType.Demo, ReleaseType.parse(listOf("album", "demo")))
}
@Test