Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,14 @@ jobs:
"build-tools;$build_tools" \
"ndk;$ndk"

- name: Test Vesper settings and theme lifecycle
working-directory: work
run: >-
./gradlew :Signal-Android:testWebsiteProdReleaseUnitTest
--tests 'org.thoughtcrime.securesms.keyvalue.VesperSettingsValuesTest'
--tests 'org.thoughtcrime.securesms.profiles.manage.EditProfileActivityThemeLifecycleTest'
--stacktrace

- name: Build release APKs
working-directory: work
run: ./gradlew :Signal-Android:assembleWebsiteProdRelease --stacktrace
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,14 @@ jobs:
"build-tools;$build_tools" \
"ndk;$ndk"

- name: Test Vesper settings and theme lifecycle
working-directory: work
run: >-
./gradlew :Signal-Android:testWebsiteProdReleaseUnitTest
--tests 'org.thoughtcrime.securesms.keyvalue.VesperSettingsValuesTest'
--tests 'org.thoughtcrime.securesms.profiles.manage.EditProfileActivityThemeLifecycleTest'
--stacktrace

- name: Build release APKs
working-directory: work
run: ./gradlew :Signal-Android:assembleWebsiteProdRelease --stacktrace
Expand Down
195 changes: 87 additions & 108 deletions patches/0001-feat-add-Material-You-dynamic-theming.patch

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Vesper Materializer <vesper-materializer@users.noreply.github.com>
Date: Fri, 21 Aug 2026 14:14:19 +0000
Subject: [PATCH 02/24] fix: adapt dynamic theme to inline media send
Subject: [PATCH 02/27] fix: adapt dynamic theme to inline media send

Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com>
---
Expand Down
2 changes: 1 addition & 1 deletion patches/0003-feat-allow-disabling-debug-logs.patch
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Vesper Materializer <vesper-materializer@users.noreply.github.com>
Date: Thu, 6 Aug 2026 07:44:38 +0000
Subject: [PATCH 03/24] feat: allow disabling debug logs
Subject: [PATCH 03/27] feat: allow disabling debug logs

Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com>
---
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Vesper Materializer <vesper-materializer@users.noreply.github.com>
Date: Sat, 15 Aug 2026 08:31:14 +0000
Subject: [PATCH 04/24] feat: optionally preserve remotely deleted messages
Subject: [PATCH 04/27] feat: optionally preserve remotely deleted messages

Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com>
---
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: amber <amber@flourish.ch>
Date: Sat, 25 Jul 2026 18:30:42 +0100
Subject: [PATCH 05/24] feat: finish Vesper settings and help surfaces
Subject: [PATCH 05/27] feat: finish Vesper settings and help surfaces

Adapted from Molly work by Oscar Mira and other Molly contributors.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Vesper Materializer <vesper-materializer@users.noreply.github.com>
Date: Thu, 6 Aug 2026 07:45:10 +0000
Subject: [PATCH 06/24] feat: add installable debug build variant
Subject: [PATCH 06/27] feat: add installable debug build variant

Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com>
---
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Vesper Materializer <vesper-materializer@users.noreply.github.com>
Date: Sat, 15 Aug 2026 08:31:55 +0000
Subject: [PATCH 07/24] feat: support 16 KB devices without MobileCoin payments
Subject: [PATCH 07/27] feat: support 16 KB devices without MobileCoin payments

Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com>
---
Expand Down
24 changes: 12 additions & 12 deletions patches/0008-fix-refine-Vesper-conversation-appearance.patch
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Vesper Materializer <vesper-materializer@users.noreply.github.com>
Date: Sat, 15 Aug 2026 08:32:16 +0000
Subject: [PATCH 08/24] fix: refine Vesper conversation appearance
Subject: [PATCH 08/27] fix: refine Vesper conversation appearance

Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com>
---
.../settings/app/help/HelpSettingsFragment.kt | 30 +---------------
.../V2ConversationItemTextOnlyViewHolder.kt | 5 +--
.../securesms/keyvalue/SettingsValues.java | 2 +-
.../securesms/keyvalue/SettingsValues.kt | 2 +-
.../reactions/ReactionsConversationView.java | 35 +++++++++++++++++--
4 files changed, 38 insertions(+), 34 deletions(-)

Expand Down Expand Up @@ -120,19 +120,19 @@ index 24cc490730..a21a43e16b 100644
conversationContext.clickListener.onItemClick(getMultiselectPartForLatestTouch())
}
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java
index bc085dd4a3..f57d6f1724 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java
@@ -264,7 +264,7 @@ public final class SettingsValues extends SignalStoreValues {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.kt
index abf3e450c0..55e740629d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.kt
@@ -209,7 +209,7 @@ class SettingsValues internal constructor(store: KeyValueStore, context: Context
}

public boolean isDynamicColorsEnabled() {
- return getBoolean(DYNAMIC_COLORS_ENABLED, false);
+ return getBoolean(DYNAMIC_COLORS_ENABLED, true);
}
val isDynamicColorsEnabled: Boolean
- get() = getBoolean(DYNAMIC_COLORS_ENABLED, false)
+ get() = getBoolean(DYNAMIC_COLORS_ENABLED, true)

public int getMessageFontSize() {
val isIgnoreRemoteDeleteEnabled: Boolean
get() = getBoolean(IGNORE_REMOTE_DELETE, false)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java
index f984e9acd3..7378fbc511 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Vesper Materializer <vesper-materializer@users.noreply.github.com>
Date: Sat, 15 Aug 2026 08:32:53 +0000
Subject: [PATCH 09/24] chore: clarify licensing and interface copy
Subject: [PATCH 09/27] chore: clarify licensing and interface copy

Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com>
---
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Vesper Materializer <vesper-materializer@users.noreply.github.com>
Date: Sat, 15 Aug 2026 08:33:23 +0000
Subject: [PATCH 10/24] fix: make Vesper build identity deterministic
Subject: [PATCH 10/27] fix: make Vesper build identity deterministic

Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com>
---
Expand Down
121 changes: 46 additions & 75 deletions patches/0011-feat-complete-Vesper-theme-controls.patch
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Vesper Materializer <vesper-materializer@users.noreply.github.com>
Date: Thu, 6 Aug 2026 07:45:11 +0000
Subject: [PATCH 11/24] feat: complete Vesper theme controls
Subject: [PATCH 11/27] feat: complete Vesper theme controls

Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com>
---
Expand All @@ -12,7 +12,7 @@ Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com
.../app/privacy/PrivacySettingsState.kt | 1 -
.../app/privacy/PrivacySettingsViewModel.kt | 6 -
.../conversation/colors/ChatColorsPalette.kt | 2 +-
.../securesms/keyvalue/SettingsValues.java | 11 +
.../securesms/keyvalue/SettingsValues.kt | 9 +
.../DynamicConversationSettingsTheme.java | 5 +
.../util/DynamicDarkActionBarTheme.java | 5 +
.../util/DynamicDarkToolbarTheme.java | 5 +
Expand All @@ -23,8 +23,6 @@ Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com
.../util/DynamicRegistrationTheme.java | 5 +
.../securesms/util/DynamicTheme.java | 23 +-
.../wallpaper/crop/WallpaperCropActivity.java | 6 +
.../camera_send_button_background.xml | 2 +-
.../camera_send_button_background.xml | 4 +-
.../main/res/drawable/compose_background.xml | 4 +-
.../drawable/exo_icon_play_ultramarine.xml | 2 +-
.../image_editor_hud_clear_all_background.xml | 4 +-
Expand All @@ -38,7 +36,7 @@ Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com
.../res/values/signal_original_themes.xml | 474 ++++++++++++++++++
app/src/main/res/values/themes.xml | 6 +-
.../core/ui/compose/theme/SignalTheme.kt | 90 +++-
33 files changed, 709 insertions(+), 147 deletions(-)
31 files changed, 704 insertions(+), 144 deletions(-)
create mode 100644 app/src/main/res/values/signal_original_themes.xml

diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/appearance/AppearanceSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/appearance/AppearanceSettingsFragment.kt
Expand Down Expand Up @@ -103,10 +101,10 @@ index d65ba284d3..1e5aff2866 100644
val messageFontSize: Int,
val language: String,
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/appearance/AppearanceSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/appearance/AppearanceSettingsViewModel.kt
index e7fb539d5c..dac3ee2c57 100644
index 131b3f3426..fd74f0a97b 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/appearance/AppearanceSettingsViewModel.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/appearance/AppearanceSettingsViewModel.kt
@@ -26,6 +26,11 @@ class AppearanceSettingsViewModel : ViewModel() {
@@ -27,6 +27,11 @@ class AppearanceSettingsViewModel : ViewModel() {
SplashScreenUtil.setSplashScreenThemeIfNecessary(activity, theme)
}

Expand All @@ -117,15 +115,15 @@ index e7fb539d5c..dac3ee2c57 100644
+
fun setLanguage(language: String) {
store.update { it.copy(language = language) }
SignalStore.settings.language = language
@@ -41,6 +46,7 @@ class AppearanceSettingsViewModel : ViewModel() {
PlainTextKeyValueStore.language = language
@@ -42,6 +47,7 @@ class AppearanceSettingsViewModel : ViewModel() {
private fun getState(): AppearanceSettingsState {
return AppearanceSettingsState(
SignalStore.settings.theme,
+ SignalStore.settings.isVesperThemeEnabled,
SignalStore.settings.isDynamicColorsEnabled,
SignalStore.settings.messageFontSize,
SignalStore.settings.language,
PlainTextKeyValueStore.language,
diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt
index 0f84457801..f2c088ebe6 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt
Expand Down Expand Up @@ -350,42 +348,40 @@ index b61464abe2..6f62d279c1 100644
)

// endregion
diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java
index f57d6f1724..dbf8127ffb 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java
@@ -42,6 +42,7 @@ public final class SettingsValues extends SignalStoreValues {
diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.kt
index f63a089142..9ec5ec4be3 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.kt
@@ -36,6 +36,7 @@ class SettingsValues internal constructor(store: KeyValueStore, context: Context
const val THREAD_TRIM_ENABLED = "pref_trim_threads"

public static final String THEME = "settings.theme";
public static final String DYNAMIC_COLORS_ENABLED = "settings.dynamicColors";
+ public static final String VESPER_THEME_ENABLED = "settings.vesperTheme";
public static final String MESSAGE_FONT_SIZE = "settings.message.font.size";
public static final String LANGUAGE = "settings.language";
public static final String PREFER_SYSTEM_EMOJI = "settings.use.system.emoji";
@@ -139,6 +140,7 @@ public final class SettingsValues extends SignalStoreValues {
LANGUAGE,
THEME,
DYNAMIC_COLORS_ENABLED,
+ VESPER_THEME_ENABLED,
MESSAGE_FONT_SIZE,
PREFER_SYSTEM_EMOJI,
ENTER_KEY_SENDS,
@@ -267,6 +269,15 @@ public final class SettingsValues extends SignalStoreValues {
return getBoolean(DYNAMIC_COLORS_ENABLED, true);
}
const val DYNAMIC_COLORS_ENABLED = "settings.dynamicColors"
+ const val VESPER_THEME_ENABLED = "settings.vesperTheme"
private const val IGNORE_REMOTE_DELETE = "settings.ignore.remote.delete"
const val THEME = "settings.theme"
const val MESSAGE_FONT_SIZE = "settings.message.font.size"
@@ -116,6 +117,7 @@ class SettingsValues internal constructor(store: KeyValueStore, context: Context
THREAD_TRIM_ENABLED,
THEME,
DYNAMIC_COLORS_ENABLED,
+ VESPER_THEME_ENABLED,
IGNORE_REMOTE_DELETE,
MESSAGE_FONT_SIZE,
PREFER_SYSTEM_EMOJI,
@@ -209,6 +211,13 @@ class SettingsValues internal constructor(store: KeyValueStore, context: Context
val isDynamicColorsEnabled: Boolean
get() = getBoolean(DYNAMIC_COLORS_ENABLED, true)

+ public boolean isVesperThemeEnabled() {
+ return getBoolean(VESPER_THEME_ENABLED, true);
+ }
+
+ public void setVesperThemeEnabled(boolean enabled) {
+ putBoolean(VESPER_THEME_ENABLED, enabled);
+ onConfigurationSettingChanged.postValue(THEME);
+ }
+ var isVesperThemeEnabled: Boolean
+ get() = getBoolean(VESPER_THEME_ENABLED, true)
+ set(value) {
+ putBoolean(VESPER_THEME_ENABLED, value)
+ configurationSettingChanged.postValue(THEME)
+ }
+
public int getMessageFontSize() {
return getInteger(MESSAGE_FONT_SIZE, TextSecurePreferences.getMessageBodyTextSize(AppDependencies.getApplication()));
}
val isIgnoreRemoteDeleteEnabled: Boolean
get() = getBoolean(IGNORE_REMOTE_DELETE, false)

diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/DynamicConversationSettingsTheme.java b/app/src/main/java/org/thoughtcrime/securesms/util/DynamicConversationSettingsTheme.java
index 25a4de392a..78a7dbde46 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/DynamicConversationSettingsTheme.java
Expand Down Expand Up @@ -578,31 +574,6 @@ index 13d64fe03e..4d4e9b99d6 100644
+ }
}
}
diff --git a/app/src/main/res/drawable-v21/camera_send_button_background.xml b/app/src/main/res/drawable-v21/camera_send_button_background.xml
index df91cfd220..54b6abcff6 100644
--- a/app/src/main/res/drawable-v21/camera_send_button_background.xml
+++ b/app/src/main/res/drawable-v21/camera_send_button_background.xml
@@ -11,7 +11,7 @@

<item>
<shape android:shape="oval" >
- <solid android:color="@color/core_ultramarine"/>
+ <solid android:color="?attr/colorPrimary"/>
</shape>
</item>
</ripple>
diff --git a/app/src/main/res/drawable/camera_send_button_background.xml b/app/src/main/res/drawable/camera_send_button_background.xml
index 7bcb1e9d44..d42c4edfbb 100644
--- a/app/src/main/res/drawable/camera_send_button_background.xml
+++ b/app/src/main/res/drawable/camera_send_button_background.xml
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
- <solid android:color="@color/core_ultramarine"/>
-</shape>
\ No newline at end of file
+ <solid android:color="?attr/colorPrimary"/>
+</shape>
diff --git a/app/src/main/res/drawable/compose_background.xml b/app/src/main/res/drawable/compose_background.xml
index 583b389025..64f21f4ded 100644
--- a/app/src/main/res/drawable/compose_background.xml
Expand Down Expand Up @@ -694,7 +665,7 @@ index d58facf745..fd13072f77 100644
\ No newline at end of file
+</shape>
diff --git a/app/src/main/res/layout/v2_conversation_fragment.xml b/app/src/main/res/layout/v2_conversation_fragment.xml
index 100be3be57..e923326045 100644
index a09ad5b378..bc1ec771cf 100644
--- a/app/src/main/res/layout/v2_conversation_fragment.xml
+++ b/app/src/main/res/layout/v2_conversation_fragment.xml
@@ -104,13 +104,13 @@
Expand Down Expand Up @@ -1344,10 +1315,10 @@ index bbe42c1f7c..4b698938a3 100644
<item name="fullScreenDialogStyle">@style/Signal.DayNight.Dialog.FullScreen</item>
<item name="fixedRoundedCornerBottomSheetStyle">@style/Widget.Signal.FixedRoundedCorners</item>
diff --git a/core/ui/src/main/java/org/signal/core/ui/compose/theme/SignalTheme.kt b/core/ui/src/main/java/org/signal/core/ui/compose/theme/SignalTheme.kt
index d284847ea6..183e031e82 100644
index 38cc3755ee..ba48f6801d 100644
--- a/core/ui/src/main/java/org/signal/core/ui/compose/theme/SignalTheme.kt
+++ b/core/ui/src/main/java/org/signal/core/ui/compose/theme/SignalTheme.kt
@@ -222,6 +222,71 @@ private val darkColorScheme = darkColorScheme(
@@ -226,6 +226,71 @@ private val darkColorScheme = darkColorScheme(
outline = Color(0xFF5D5D66)
)

Expand Down Expand Up @@ -1419,7 +1390,7 @@ index d284847ea6..183e031e82 100644
@Composable
fun SignalTheme(
isDarkMode: Boolean = LocalConfiguration.current.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES,
@@ -231,7 +296,8 @@ fun SignalTheme(
@@ -235,7 +300,8 @@ fun SignalTheme(
) {
val context = LocalContext.current
val maySupportDynamicColor = Build.VERSION.SDK_INT >= 31
Expand All @@ -1429,7 +1400,7 @@ index d284847ea6..183e031e82 100644

// API 31-33's Compose fallback is more saturated than the platform resource
// palette. Use the same resources for XML and Compose.
@@ -243,10 +309,12 @@ fun SignalTheme(
@@ -247,10 +313,12 @@ fun SignalTheme(
if (isDarkMode) systemAlignedDarkColorScheme() else systemAlignedLightColorScheme()
}
}
Expand All @@ -1445,7 +1416,7 @@ index d284847ea6..183e031e82 100644
val snackbarColors = snackbarColors(colorScheme)

ProvideIncognitoKeyboard(enabled = incognitoKeyboardEnabled) {
@@ -355,7 +423,13 @@ private fun isThemeUsingDynamicColors(context: Context): Boolean {
@@ -359,7 +427,13 @@ private fun isThemeUsingDynamicColors(context: Context): Boolean {
typedValue.data != 0
}

Expand All @@ -1460,7 +1431,7 @@ index d284847ea6..183e031e82 100644
return when {
isDynamic -> lightExtendedColors.copy(
colorSurface1 = colorScheme.surfaceContainerLow,
@@ -364,8 +438,10 @@ private fun extendedColors(colorScheme: ColorScheme, isDarkMode: Boolean, isDyna
@@ -368,8 +442,10 @@ private fun extendedColors(colorScheme: ColorScheme, isDarkMode: Boolean, isDyna
colorSurface4 = colorScheme.surfaceContainerHighest,
colorSurface5 = if (isDarkMode) colorScheme.surfaceBright else colorScheme.surfaceDim
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Vesper Materializer <vesper-materializer@users.noreply.github.com>
Date: Thu, 6 Aug 2026 07:45:11 +0000
Subject: [PATCH 12/24] fix: stabilize identity and media controls
Subject: [PATCH 12/27] fix: stabilize identity and media controls

Signed-off-by: Vesper Materializer <vesper-materializer@users.noreply.github.com>
---
Expand Down
Loading
Loading