diff --git a/app/src/main/java/app/revanced/manager/MainActivity.kt b/app/src/main/java/app/revanced/manager/MainActivity.kt
index c847260e..7b6dbd2a 100644
--- a/app/src/main/java/app/revanced/manager/MainActivity.kt
+++ b/app/src/main/java/app/revanced/manager/MainActivity.kt
@@ -81,6 +81,7 @@ class MainActivity : ComponentActivity() {
)
val theme by vm.prefs.theme.getAsState()
val dynamicColor by vm.prefs.dynamicColor.getAsState()
+ val pureBlackTheme by vm.prefs.pureBlackTheme.getAsState()
EventEffect(vm.legacyImportActivityFlow) {
try {
@@ -91,7 +92,8 @@ class MainActivity : ComponentActivity() {
ReVancedManagerTheme(
darkTheme = theme == Theme.SYSTEM && isSystemInDarkTheme() || theme == Theme.DARK,
- dynamicColor = dynamicColor
+ dynamicColor = dynamicColor,
+ pureBlackTheme = pureBlackTheme
) {
ReVancedManager(vm)
}
diff --git a/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt b/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt
index b9363df6..ef69c3e2 100644
--- a/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt
+++ b/app/src/main/java/app/revanced/manager/domain/manager/PreferencesManager.kt
@@ -9,6 +9,7 @@ class PreferencesManager(
context: Context
) : BasePreferencesManager(context, "settings") {
val dynamicColor = booleanPreference("dynamic_color", true)
+ val pureBlackTheme = booleanPreference("pure_black_theme", false)
val theme = enumPreference("theme", Theme.SYSTEM)
val api = stringPreference("api_url", "https://api.revanced.app")
diff --git a/app/src/main/java/app/revanced/manager/ui/screen/settings/GeneralSettingsScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/settings/GeneralSettingsScreen.kt
index 16dc0a65..4fc00c17 100644
--- a/app/src/main/java/app/revanced/manager/ui/screen/settings/GeneralSettingsScreen.kt
+++ b/app/src/main/java/app/revanced/manager/ui/screen/settings/GeneralSettingsScreen.kt
@@ -1,6 +1,7 @@
package app.revanced.manager.ui.screen.settings
import android.os.Build
+import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -96,6 +97,14 @@ fun GeneralSettingsScreen(
description = R.string.dynamic_color_description
)
}
+ AnimatedVisibility(theme != Theme.LIGHT) {
+ BooleanItem(
+ preference = prefs.pureBlackTheme,
+ coroutineScope = coroutineScope,
+ headline = R.string.pure_black_theme,
+ description = R.string.pure_black_theme_description
+ )
+ }
}
}
}
diff --git a/app/src/main/java/app/revanced/manager/ui/theme/Theme.kt b/app/src/main/java/app/revanced/manager/ui/theme/Theme.kt
index 17c89a5c..376c1b39 100644
--- a/app/src/main/java/app/revanced/manager/ui/theme/Theme.kt
+++ b/app/src/main/java/app/revanced/manager/ui/theme/Theme.kt
@@ -80,6 +80,7 @@ private val LightColorScheme = lightColorScheme(
fun ReVancedManagerTheme(
darkTheme: Boolean,
dynamicColor: Boolean,
+ pureBlackTheme: Boolean,
content: @Composable () -> Unit
) {
val colorScheme = when {
@@ -93,6 +94,10 @@ fun ReVancedManagerTheme(
darkTheme -> DarkColorScheme
else -> LightColorScheme
+ }.let {
+ if (darkTheme && pureBlackTheme)
+ it.copy(background = Color.Black, surface = Color.Black)
+ else it
}
val view = LocalView.current
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f131066e..d9a7c6a0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -86,6 +86,8 @@
View the contributors of ReVanced
Dynamic color
Adapt colors to the wallpaper
+ Pure black theme
+ Use pure black backgrounds for dark theme
Theme
Choose between light or dark theme
Safeguards