Rebrand the Android TV app as Wolfskin #16

Merged
justinzeus merged 2 commits from fm/wolfskin-2-rebrand into main 2026-10-22 15:23:03 +02:00
62 changed files with 237 additions and 93 deletions

View file

@ -6,6 +6,8 @@ Licensed under GPL-2.0, the same licence as upstream (see [LICENSE](LICENSE)).
Wolfskin is an Android TV client for one household. It is released through Forgejo releases on this repo, and it tracks upstream by merging each upstream release tag.
The app uses Wolfskin launcher artwork and a lilac-on-`#07070a` theme by default on a fresh install. Existing theme choices and all upstream colour themes remain available under Settings → App theme. Settings → About credits and links to Wholphin by damontecres.
---
# Wholphin - an OSS Android TV client for Jellyfin

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Wholphin (Debug)</string>
<string name="app_name" translatable="false">Wolfskin (Debug)</string>
</resources>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 209 KiB

Before After
Before After

View file

@ -63,7 +63,7 @@ import com.github.damontecres.wholphin.ui.nav.Destination
import com.github.damontecres.wholphin.ui.playback.PlayExternalViewModel
import com.github.damontecres.wholphin.ui.showToast
import com.github.damontecres.wholphin.ui.theme.WholphinTheme
import com.github.damontecres.wholphin.ui.theme.colors.PurpleThemeColors
import com.github.damontecres.wholphin.ui.theme.colors.WolfskinThemeColors
import com.github.damontecres.wholphin.ui.util.ProvideLocalClock
import com.github.damontecres.wholphin.util.DebugLogTree
import com.github.damontecres.wholphin.util.ExceptionHandler
@ -230,7 +230,7 @@ class MainActivity : AppCompatActivity() {
viewModel.appStart(intent)
setContent {
MaterialTheme(colorScheme = PurpleThemeColors.darkScheme) {
MaterialTheme(colorScheme = WolfskinThemeColors.darkScheme) {
Surface(Modifier.fillMaxSize()) {
val userPreferences by userPreferencesService.flow.collectAsState(null)
if (userPreferences == null) {

View file

@ -506,7 +506,7 @@ sealed interface AppPreference<Pref, T> {
val ThemeColors =
AppChoicePreference<AppPreferences, AppThemeColors>(
title = R.string.app_theme,
defaultValue = AppThemeColors.PURPLE,
defaultValue = AppThemeColors.WOLFSKIN,
getter = { it.interfacePreferences.appThemeColors },
setter = { prefs, value ->
prefs.updateInterfacePreferences { appThemeColors = value }

View file

@ -41,6 +41,7 @@ fun WatchedIconBackground(): Color =
when (LocalTheme.current) {
AppThemeColors.UNRECOGNIZED,
AppThemeColors.PURPLE,
AppThemeColors.WOLFSKIN,
AppThemeColors.BLUE,
AppThemeColors.GREEN,
AppThemeColors.ORANGE,
@ -55,6 +56,8 @@ fun WatchedIconBackground(): Color =
@Composable
fun WatchedIconColor(): Color =
when (LocalTheme.current) {
AppThemeColors.WOLFSKIN -> MaterialTheme.colorScheme.onPrimary
AppThemeColors.UNRECOGNIZED,
AppThemeColors.PURPLE,
AppThemeColors.BLUE,

View file

@ -143,6 +143,7 @@ fun sliderActiveColor(focused: Boolean): Color {
return when (theme) {
AppThemeColors.UNRECOGNIZED,
AppThemeColors.PURPLE,
AppThemeColors.WOLFSKIN,
AppThemeColors.BLUE,
AppThemeColors.GREEN,
AppThemeColors.ORANGE,
@ -179,6 +180,7 @@ fun sliderInactiveColor(focused: Boolean): Color {
return when (theme) {
AppThemeColors.UNRECOGNIZED,
AppThemeColors.PURPLE,
AppThemeColors.WOLFSKIN,
-> {
MaterialTheme.colorScheme.border
.copy(alpha = .25f)

View file

@ -769,6 +769,7 @@ fun navItemColor(
when (theme) {
AppThemeColors.UNRECOGNIZED,
AppThemeColors.PURPLE,
AppThemeColors.WOLFSKIN,
AppThemeColors.BLUE,
AppThemeColors.GREEN,
AppThemeColors.ORANGE,

View file

@ -271,6 +271,9 @@ fun PreferencesContent(
.fillMaxWidth()
.padding(top = 8.dp, bottom = 4.dp),
)
if (group.title == R.string.about) {
WolfskinAbout()
}
}
val groupPreferences =
group.preferences +

View file

@ -70,6 +70,7 @@ fun SwitchColors(): SwitchColors {
return when (theme) {
AppThemeColors.UNRECOGNIZED,
AppThemeColors.PURPLE,
AppThemeColors.WOLFSKIN,
AppThemeColors.BLUE,
-> {
SwitchDefaults.colors()

View file

@ -0,0 +1,28 @@
package com.github.damontecres.wholphin.ui.preferences
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text
import com.github.damontecres.wholphin.R
import com.github.damontecres.wholphin.ui.components.TextButton
/** Fork identity and a focusable link to the upstream project. */
@Composable
fun WolfskinAbout() {
val uriHandler = LocalUriHandler.current
val upstreamUrl = stringResource(R.string.wolfskin_upstream_url)
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
Text(
text = stringResource(R.string.app_name_long),
style = MaterialTheme.typography.headlineMedium,
)
TextButton(onClick = { uriHandler.openUri(upstreamUrl) }) {
Text(stringResource(R.string.wolfskin_upstream_credit))
}
}
}

View file

@ -13,9 +13,10 @@ import com.github.damontecres.wholphin.ui.theme.colors.OledThemeColors
import com.github.damontecres.wholphin.ui.theme.colors.OrangeThemeColors
import com.github.damontecres.wholphin.ui.theme.colors.PurpleThemeColors
import com.github.damontecres.wholphin.ui.theme.colors.RedThemeColors
import com.github.damontecres.wholphin.ui.theme.colors.WolfskinThemeColors
val LocalTheme =
compositionLocalOf<AppThemeColors> { AppThemeColors.PURPLE }
compositionLocalOf<AppThemeColors> { AppThemeColors.WOLFSKIN }
fun getThemeColors(appThemeColors: AppThemeColors): ThemeColors =
when (appThemeColors) {
@ -27,13 +28,14 @@ fun getThemeColors(appThemeColors: AppThemeColors): ThemeColors =
AppThemeColors.BOLD_BLUE -> BoldBlueThemeColors
AppThemeColors.RED -> RedThemeColors
AppThemeColors.BROWN -> BrownThemeColors
AppThemeColors.UNRECOGNIZED -> PurpleThemeColors
AppThemeColors.WOLFSKIN -> WolfskinThemeColors
AppThemeColors.UNRECOGNIZED -> WolfskinThemeColors
}
@Composable
fun WholphinTheme(
darkTheme: Boolean = true,
appThemeColors: AppThemeColors = AppThemeColors.PURPLE,
appThemeColors: AppThemeColors = AppThemeColors.WOLFSKIN,
content: @Composable () -> Unit,
) {
val themeColors = getThemeColors(appThemeColors)

View file

@ -0,0 +1,59 @@
package com.github.damontecres.wholphin.ui.theme.colors
import androidx.compose.ui.graphics.Color
import com.github.damontecres.wholphin.ui.theme.ThemeColors
/** Lilac accents on near-black surfaces, with upstream Purple available separately. */
val WolfskinThemeColors =
object : ThemeColors {
private val background = Color(0xFF07070A)
private val lilac = Color(0xFFD2BCFF)
private val onLilac = Color(0xFF241334)
private val container = Color(0xFF382A49)
private val onContainer = Color(0xFFEADCFF)
private val surfaceVariant = Color(0xFF24202D)
override val lightSchemeMaterial = PurpleThemeColors.lightSchemeMaterial
override val lightScheme = PurpleThemeColors.lightScheme
override val darkSchemeMaterial =
PurpleThemeColors.darkSchemeMaterial.copy(
primary = lilac,
onPrimary = onLilac,
primaryContainer = container,
onPrimaryContainer = onContainer,
secondary = lilac,
onSecondary = onLilac,
secondaryContainer = container,
onSecondaryContainer = onContainer,
tertiary = lilac,
onTertiary = onLilac,
tertiaryContainer = container,
onTertiaryContainer = onContainer,
background = background,
surface = background,
surfaceVariant = surfaceVariant,
inversePrimary = Color(0xFF705090),
)
override val darkScheme =
PurpleThemeColors.darkScheme.copy(
primary = lilac,
onPrimary = onLilac,
primaryContainer = container,
onPrimaryContainer = onContainer,
secondary = lilac,
onSecondary = onLilac,
secondaryContainer = container,
onSecondaryContainer = onContainer,
tertiary = lilac,
onTertiary = onLilac,
tertiaryContainer = container,
onTertiaryContainer = onContainer,
background = background,
surface = background,
surfaceVariant = surfaceVariant,
inversePrimary = Color(0xFF705090),
border = lilac.copy(alpha = .75f),
)
}

View file

@ -123,6 +123,7 @@ enum AppThemeColors {
OLED_BLACK = 5;
RED = 6;
BROWN = 7;
WOLFSKIN = 8;
}
enum EdgeStyle{

View file

@ -1,9 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_banner_background"/>
<foreground>
<inset
android:inset="18%"
android:drawable="@mipmap/ic_banner_foreground"/>
</foreground>
</adaptive-icon>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@mipmap/ic_banner_foreground"
android:gravity="fill" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before After
Before After

View file

@ -489,8 +489,8 @@
<string name="content_scale_fill">Vyplnit</string>
<string name="content_scale_fill_width">Vyplnit šířku</string>
<string name="content_scale_fill_height">Vyplnit výšku</string>
<string name="display_preset_default">Výchozí předvolba Wholphin</string>
<string name="display_preset_compact">Wholphin kompaktní</string>
<string name="display_preset_default">Výchozí předvolba Wolfskin</string>
<string name="display_preset_compact">Wolfskin kompaktní</string>
<string name="display_preset_series_thumb">Obrázky náhledů seriálů</string>
<string name="display_preset_episode_thumbnails">Obrázky náhledů epizod</string>
<string name="volume_lowest">Nejnižší</string>

View file

@ -538,8 +538,8 @@
<string name="content_scale_fill">Fyld</string>
<string name="content_scale_fill_width">Fyld bredde</string>
<string name="content_scale_fill_height">Fyld højde</string>
<string name="display_preset_default">Wholphin-standard</string>
<string name="display_preset_compact">Wholphin kompakt</string>
<string name="display_preset_default">Wolfskin-standard</string>
<string name="display_preset_compact">Wolfskin kompakt</string>
<string name="display_preset_series_thumb">Seriens miniaturebilleder</string>
<string name="display_preset_episode_thumbnails">Episode-miniaturebilleder</string>
<string name="volume_lowest">Laveste</string>
@ -637,7 +637,7 @@
<string name="select_all">Vælg alle</string>
<string name="separate_types">Adskil typer</string>
<string name="prefer_logos">Foretræk logoer som titler</string>
<string name="updated_toast">Wholphin er opdateret til %s</string>
<string name="updated_toast">Wolfskin er opdateret til %s</string>
<string name="remove_continue_watching">Fjern fra Fortsæt med at se</string>
<string name="remove_next_up">Fjern serien fra Næste</string>
<string name="view_removed_next_up">Vis serier fjernet fra Næste</string>

View file

@ -511,8 +511,8 @@
<string name="animate">Animieren</string>
<string name="content_scale_fill_width">Breite ausfüllen</string>
<string name="content_scale_fill_height">Höhe ausfüllen</string>
<string name="display_preset_default">Wholphin Standard</string>
<string name="display_preset_compact">Wholphin Kompakt</string>
<string name="display_preset_default">Wolfskin Standard</string>
<string name="display_preset_compact">Wolfskin Kompakt</string>
<string name="volume_lowest">Niedrigste</string>
<string name="volume_low">Niedrig</string>
<string name="volume_medium">Mittel</string>
@ -580,7 +580,7 @@
<string name="continue_string">Fortfahren</string>
<string name="separate_types">Verschiedene Arten</string>
<string name="prefer_logos">Bevorzugt Logo statt Titel anzeigen</string>
<string name="updated_toast">Wholphin aktualisiert auf %s</string>
<string name="updated_toast">Wolfskin aktualisiert auf %s</string>
<string name="remove_continue_watching">Von \"Weiterschauen\" entfernen</string>
<string name="remove_next_up">Serie aus \"Als Nächstes anschauen\" entfernen</string>
<string name="view_more">Mehr anzeigen</string>

View file

@ -599,7 +599,7 @@
<string name="remove_from_queue">Eliminar de la cola</string>
<string name="separate_types">Separar por tipos</string>
<string name="prefer_logos">Preferir logotipos para los títulos</string>
<string name="updated_toast">Wholphin se ha actualizado a la versión %s</string>
<string name="updated_toast">Wolfskin se ha actualizado a la versión %s</string>
<string name="view_more">Ver más</string>
<string name="discover_tv">Descubrir series</string>
<string name="discover_movies">Descubrir películas</string>

View file

@ -535,8 +535,8 @@
<string name="content_scale_fill">Täida</string>
<string name="content_scale_fill_width">Täida laiuses</string>
<string name="content_scale_fill_height">Täida kõrguses</string>
<string name="display_preset_default">Wholphini vaikeseadistus</string>
<string name="display_preset_compact">Wholphini kompaktne vaade</string>
<string name="display_preset_default">Wolfskini vaikeseadistus</string>
<string name="display_preset_compact">Wolfskini kompaktne vaade</string>
<string name="display_preset_series_thumb">Sarja pisipildid</string>
<string name="display_preset_episode_thumbnails">Osa pisipildid</string>
<string name="volume_lowest">Vaikseim</string>
@ -580,7 +580,7 @@
<string name="continue_string">Jätka</string>
<string name="separate_types">Eraldi tüübid</string>
<string name="prefer_logos">Pealkirjade puhul eelista logode kuvamist</string>
<string name="updated_toast">Wholphin on uuendatud versioonini %s</string>
<string name="updated_toast">Wolfskin on uuendatud versioonini %s</string>
<string name="remove_continue_watching">Eemalda „Jätka vaatamist“ valikust</string>
<string name="remove_next_up">Eemalda sari valikust „Järgmisena esitamisel“</string>
<string name="view_removed_next_up">Vaata sarja, mis sai eemaldatud valikust „Järgmisena esitamisel“</string>

View file

@ -507,8 +507,8 @@
<string name="content_scale_fill">Remplir</string>
<string name="content_scale_fill_width">Largeur de remplissage</string>
<string name="content_scale_fill_height">Hauteur de remplissage</string>
<string name="display_preset_default">Wholphin Par défaut</string>
<string name="display_preset_compact">Wholphin Compact</string>
<string name="display_preset_default">Wolfskin Par défaut</string>
<string name="display_preset_compact">Wolfskin Compact</string>
<string name="display_preset_series_thumb">Images miniatures de la série</string>
<string name="display_preset_episode_thumbnails">Images miniatures de l\'épisode</string>
<string name="volume_lowest">Le plus bas</string>
@ -599,7 +599,7 @@
<string name="continue_string">Suivant</string>
<string name="separate_types">Séparer par types</string>
<string name="prefer_logos">Préférer les logos pour les titres</string>
<string name="updated_toast">Wholphin a été mis à jour vers la version %s</string>
<string name="updated_toast">Wolfskin a été mis à jour vers la version %s</string>
<string name="view_more">Voir plus</string>
<string name="discover_tv">Parcourir les séries</string>
<string name="discover_movies">Parcourir les films</string>

View file

@ -593,8 +593,8 @@
<string name="content_scale_fill">Ispuni</string>
<string name="content_scale_fill_width">Ispuni širinu</string>
<string name="content_scale_fill_height">Ispuni visinu</string>
<string name="display_preset_default">Wholphin zadani</string>
<string name="display_preset_compact">Wholphin zbijeni</string>
<string name="display_preset_default">Wolfskin zadani</string>
<string name="display_preset_compact">Wolfskin zbijeni</string>
<string name="display_preset_series_thumb">Slike sličica serije</string>
<string name="display_preset_episode_thumbnails">Slike sličica epizoda</string>
<string name="volume_lowest">Najniža</string>
@ -653,7 +653,7 @@
<string name="select_all">Odaberi sve</string>
<string name="separate_types">Odvojene vrste</string>
<string name="prefer_logos">Preferiraj prikaz logotipa za naslove</string>
<string name="updated_toast">Wholphin ažuriran na %s</string>
<string name="updated_toast">Wolfskin ažuriran na %s</string>
<string name="remove_continue_watching">Ukloni iz \"Nastavi gledanje\"</string>
<string name="remove_next_up">Ukloni seriju iz \"Slijedi\"</string>
<string name="view_removed_next_up">Prikaži serije uklonjene iz \"Slijedi\"</string>

View file

@ -465,8 +465,8 @@
<string name="photos">Foto</string>
<string name="include_types">Sertakan jenis</string>
<string name="include_types_summary">Tampilkan gambar untuk jenis item</string>
<string name="display_preset_default">Wholphin Bawaan</string>
<string name="display_preset_compact">Wholphin Ringkas</string>
<string name="display_preset_default">Wolfskin Bawaan</string>
<string name="display_preset_compact">Wolfskin Ringkas</string>
<string name="display_preset_series_thumb">Gambar Thumbnail Seri</string>
<string name="display_preset_episode_thumbnails">Gambar Thumbnail Episode</string>
<string name="volume_lowest">Terendah</string>
@ -561,7 +561,7 @@
<string name="separate_types">Pisahkan jenis</string>
<string name="go_to_artist">Buka artis</string>
<string name="go_to_album">Buka album</string>
<string name="updated_toast">Wholphin diperbarui ke %s</string>
<string name="updated_toast">Wolfskin diperbarui ke %s</string>
<string name="remove_continue_watching">Hapus dari \"Lanjutkan menonton\"</string>
<string name="remove_next_up">Hapus seri dari \"Berikutnya\"</string>
<string name="view_removed_next_up">Lihat seri yang dihapus dari \"Berikutnya\"</string>

View file

@ -489,8 +489,8 @@
<string name="content_scale_fill">Riempi</string>
<string name="content_scale_fill_width">Riempi larghezza</string>
<string name="content_scale_fill_height">Riempi altezza</string>
<string name="display_preset_default">Wholphin predefinito</string>
<string name="display_preset_compact">Wholphin Compatto</string>
<string name="display_preset_default">Wolfskin predefinito</string>
<string name="display_preset_compact">Wolfskin Compatto</string>
<string name="display_preset_series_thumb">Immagini miniatura serie</string>
<string name="display_preset_episode_thumbnails">Immagini miniatura episodio</string>
<string name="volume_lowest">Minimo</string>
@ -599,7 +599,7 @@
<string name="continue_string">Continua</string>
<string name="separate_types">Tipi separati</string>
<string name="prefer_logos">Preferisci mostrare i loghi per i titoli</string>
<string name="updated_toast">Wholphin aggiornato a %s</string>
<string name="updated_toast">Wolfskin aggiornato a %s</string>
<string name="remove_continue_watching">Rimuovi da Continua a guardare</string>
<string name="remove_next_up">Rimuovi serie da Prossimo</string>
<string name="view_removed_next_up">Visualizza serie rimosse da Prossimo</string>

View file

@ -517,8 +517,8 @@
<string name="content_scale_fill">מתיחה לתצוגה</string>
<string name="content_scale_fill_width">מתיחה לרוחב</string>
<string name="content_scale_fill_height">מתיחה לגובה</string>
<string name="display_preset_default">ברירת המחדל של Wholphin</string>
<string name="display_preset_compact">Wholphin קומפקטי</string>
<string name="display_preset_default">ברירת המחדל של Wolfskin</string>
<string name="display_preset_compact">Wolfskin קומפקטי</string>
<string name="display_preset_series_thumb">תמונות־ממוזערות של סדרה</string>
<string name="display_preset_episode_thumbnails">תמונות־ממוזערות של פרק</string>
<string name="bold_blue">כחול עז</string>
@ -594,7 +594,7 @@
<string name="select_all">בחר הכול</string>
<string name="separate_types">סוגים נפרדים</string>
<string name="prefer_logos">העדף להציג לוגו על פני כותרת</string>
<string name="updated_toast">Wholphin עודכן ל־%s</string>
<string name="updated_toast">Wolfskin עודכן ל־%s</string>
<string name="remove_continue_watching">מחק מהמשך צפייה</string>
<string name="remove_next_up">מחק סדרה מ־\"הבא בתור\"</string>
<string name="view_removed_next_up">הצג סדרות שנמחקו מ־\"הבא בתור\"</string>

View file

@ -483,8 +483,8 @@
<string name="content_scale_fill">Fyll</string>
<string name="content_scale_fill_width">Fyll bredde</string>
<string name="content_scale_fill_height">Fyll høyde</string>
<string name="display_preset_default">Wholphin Standard</string>
<string name="display_preset_compact">Wholphin Kompakt</string>
<string name="display_preset_default">Wolfskin Standard</string>
<string name="display_preset_compact">Wolfskin Kompakt</string>
<string name="display_preset_series_thumb">Serieminiatyrbilder</string>
<string name="display_preset_episode_thumbnails">Episodeminiatyrbilder</string>
<string name="volume_lowest">Lavest</string>
@ -573,7 +573,7 @@
<string name="select_all">Velg alle</string>
<string name="separate_types">Seperate typer</string>
<string name="prefer_logos">Foretrekk å vise logoer for titler</string>
<string name="updated_toast">Wholphin oppdatert til %s</string>
<string name="updated_toast">Wolfskin oppdatert til %s</string>
<string name="remove_continue_watching">Fjern fra fortsett å se</string>
<string name="remove_next_up">Fjern serier fra neste</string>
<string name="view_removed_next_up">Vis serier fjernet fra neste</string>

View file

@ -480,8 +480,8 @@
<string name="content_scale_fill">Vullen</string>
<string name="content_scale_fill_width">Vulbreedte</string>
<string name="content_scale_fill_height">Vulhoogte</string>
<string name="display_preset_default">Wholphin standaard</string>
<string name="display_preset_compact">Wholphin compact</string>
<string name="display_preset_default">Wolfskin standaard</string>
<string name="display_preset_compact">Wolfskin compact</string>
<string name="volume_low">Laag</string>
<string name="volume_medium">Middel</string>
<string name="volume_high">Hoog</string>
@ -603,7 +603,7 @@
<string name="confirm_enable_experimental_title">Experimentele instellingen inschakelen?</string>
<string name="experimental_settings">Experimentele instellingen</string>
<string name="search_and_download_subtitles"><![CDATA[Zoek &amp; download ondertiteling]]></string>
<string name="updated_toast">Wholphin is geüpdatet naar %s</string>
<string name="updated_toast">Wolfskin is geüpdatet naar %s</string>
<string name="last_played">Laatst afgespeeld</string>
<string name="ass_subtitle_mode_exoplayer">Direct afspelen met de ingebouwde ExoPlayer</string>
<string name="ass_subtitle_mode_transcode">Ondertitels inbranden/transcoderen op de server</string>

View file

@ -478,8 +478,8 @@
<string name="content_scale_fill">Fyll</string>
<string name="content_scale_fill_width">Fyll breidde</string>
<string name="content_scale_fill_height">Fyll høgde</string>
<string name="display_preset_default">Wholphin-standard</string>
<string name="display_preset_compact">Wholphin-kompakt</string>
<string name="display_preset_default">Wolfskin-standard</string>
<string name="display_preset_compact">Wolfskin-kompakt</string>
<string name="display_preset_series_thumb">Miniatyrbilete for seriar</string>
<string name="display_preset_episode_thumbnails">Miniatyrbilete for episodar</string>
<string name="volume_lowest">Lågast</string>

View file

@ -386,8 +386,8 @@
<string name="content_scale_fill">Wypełnij</string>
<string name="content_scale_fill_width">Pełna szerokość</string>
<string name="content_scale_fill_height">Pełna wysokość</string>
<string name="display_preset_default">Domyślny Wholphin</string>
<string name="display_preset_compact">Kompaktowy Wholphin</string>
<string name="display_preset_default">Domyślny Wolfskin</string>
<string name="display_preset_compact">Kompaktowy Wolfskin</string>
<string name="display_preset_series_thumb">Miniatury seriali</string>
<string name="display_preset_episode_thumbnails">Zdjęcie odcinków</string>
<string name="volume_lowest">Najniższa</string>
@ -576,7 +576,7 @@
<string name="select_all">Wybierz wszystkie</string>
<string name="separate_types">Oddzielne typy</string>
<string name="prefer_logos">Wyświetlanie logo zamiast tytułu</string>
<string name="updated_toast">Wholphin zaktualizowany do %s</string>
<string name="updated_toast">Wolfskin zaktualizowany do %s</string>
<string name="remove_continue_watching">Usuń z Kontynuuj oglądanie</string>
<string name="remove_next_up">Usuń serial z Następnie</string>
<string name="view_removed_next_up">Zobacz serię usuniętą z Następnie</string>

View file

@ -498,8 +498,8 @@
<string name="content_scale_fill">Preencher</string>
<string name="content_scale_fill_width">Preencher largura</string>
<string name="content_scale_fill_height">Preencher altura</string>
<string name="display_preset_default">Padrão do Wholphin</string>
<string name="display_preset_compact">Wholphin Compacto</string>
<string name="display_preset_default">Padrão do Wolfskin</string>
<string name="display_preset_compact">Wolfskin Compacto</string>
<string name="display_preset_series_thumb">Prévia das imagens das séries</string>
<string name="display_preset_episode_thumbnails">Prévias das imagens do episódio</string>
<string name="volume_lowest">Mais baixo</string>
@ -605,7 +605,7 @@
<string name="select_all">Selecionar todos</string>
<string name="separate_types">Tipos separados</string>
<string name="prefer_logos">Preferir a exibição de logos para títulos</string>
<string name="updated_toast">Wholphin atualizado para %s</string>
<string name="updated_toast">Wolfskin atualizado para %s</string>
<string name="remove_continue_watching">Remover de continuar assistindo</string>
<string name="remove_next_up">Remover série de a seguir</string>
<string name="view_removed_next_up">Ver séries removidas de a seguir</string>

View file

@ -507,8 +507,8 @@
<string name="content_scale_fill">Preencher</string>
<string name="content_scale_fill_width">Preencher largura</string>
<string name="content_scale_fill_height">Preencher altura</string>
<string name="display_preset_default">Padrão do Wholphin</string>
<string name="display_preset_compact">Wholphin Compacto</string>
<string name="display_preset_default">Padrão do Wolfskin</string>
<string name="display_preset_compact">Wolfskin Compacto</string>
<string name="display_preset_series_thumb">Imagens em miniatura da série</string>
<string name="display_preset_episode_thumbnails">Imagens em miniatura do episódio</string>
<string name="volume_lowest">Mínimo</string>
@ -599,7 +599,7 @@
<string name="continue_string">Continuar</string>
<string name="separate_types">Separar por tipos</string>
<string name="prefer_logos">Prefiro mostrar logótipos nos títulos</string>
<string name="updated_toast">Wholphin foi atualizado para %s</string>
<string name="updated_toast">Wolfskin foi atualizado para %s</string>
<string name="remove_continue_watching">Remover de «Continuar a ver»</string>
<string name="remove_next_up">Remover série do «Continuar a ver»</string>
<string name="view_removed_next_up">Ver séries removidas do «Continuar a ver»</string>

View file

@ -605,8 +605,8 @@
<string name="content_scale_fill">Растянуть</string>
<string name="content_scale_fill_width">По ширине</string>
<string name="content_scale_fill_height">По высоте</string>
<string name="display_preset_default">Wholphin по умолчанию</string>
<string name="display_preset_compact">Wholphin компактный</string>
<string name="display_preset_default">Wolfskin по умолчанию</string>
<string name="display_preset_compact">Wolfskin компактный</string>
<string name="display_preset_series_thumb">Миниатюры сериалов</string>
<string name="display_preset_episode_thumbnails">Миниатюры эпизодов</string>
<string name="volume_lowest">Самая низкая</string>
@ -683,7 +683,7 @@
<string name="continue_string">Продолжить</string>
<string name="separate_types">Разделять по типам</string>
<string name="prefer_logos">Показывать логотипы вместо текстовых названий</string>
<string name="updated_toast">Wholphin обновлён до версии %s</string>
<string name="updated_toast">Wolfskin обновлён до версии %s</string>
<string name="remove_continue_watching">Убрать из «Продолжить просмотр»</string>
<string name="remove_next_up">Убрать сериал из «Далее»</string>
<string name="view_removed_next_up">Показать сериалы, убранные из «Далее»</string>

View file

@ -526,8 +526,8 @@
<string name="content_scale_fill">Vyplniť</string>
<string name="content_scale_fill_width">Vyplniť na šírku</string>
<string name="content_scale_fill_height">Vyplniť na výšku</string>
<string name="display_preset_default">Wholphin predvolené</string>
<string name="display_preset_compact">Wholphin kompaktné</string>
<string name="display_preset_default">Wolfskin predvolené</string>
<string name="display_preset_compact">Wolfskin kompaktné</string>
<string name="display_preset_series_thumb">Náhľadové obrázky seriálov</string>
<string name="display_preset_episode_thumbnails">Náhľadové obrázky epizód</string>
<string name="image_type_thumb">Náhľad</string>
@ -662,7 +662,7 @@
<string name="continue_string">Pokračovať</string>
<string name="separate_types">Oddeliť typy</string>
<string name="prefer_logos">Uprednostniť zobrazovanie log namiesto názvov</string>
<string name="updated_toast">Wholphin bol aktualizovaný na verziu %s</string>
<string name="updated_toast">Wolfskin bol aktualizovaný na verziu %s</string>
<string name="remove_continue_watching">Odstrániť z Pokračovať v pozeraní</string>
<string name="remove_next_up">Odstrániť seriál zo sekcie Nasleduje</string>
<string name="view_removed_next_up">Zobraziť seriály odstránené zo sekcie Nasleduje</string>

View file

@ -600,7 +600,7 @@
<string name="select_all">Izberi vse</string>
<string name="separate_types">Ločene vrste</string>
<string name="prefer_logos">Prikazuj logotipe za naslove</string>
<string name="updated_toast">Wholphin posodobljen na %s</string>
<string name="updated_toast">Wolfskin posodobljen na %s</string>
<string name="remove_continue_watching">Odstrani iz nadaljevanja gledanja</string>
<string name="remove_next_up">Odstrani serijo iz nadaljevanja gledanja</string>
<string name="view_removed_next_up">Ogled serije, odstranjene iz naslednjega gledanja</string>

View file

@ -424,8 +424,8 @@
<string name="customize_home_summary">Välj rader och bilder på startsidan</string>
<string name="delete_item">Är du säker på att du vill radera detta objekt?</string>
<string name="discover">Upptäck</string>
<string name="display_preset_compact">Wholphin Kompakt</string>
<string name="display_preset_default">Wholphin Standard</string>
<string name="display_preset_compact">Wolfskin Kompakt</string>
<string name="display_preset_default">Wolfskin Standard</string>
<string name="display_presets">Visningsförinställningar</string>
<string name="display_presets_description">Inbyggda förinställningar för att snabbt styla alla rader</string>
<string name="display_preset_episode_thumbnails">Avsnittsminiatyrer</string>
@ -595,7 +595,7 @@
<string name="include_types_summary">Vilka typer av objekt ska bilder visas för</string>
<string name="song_has_lyrics">Låten har text</string>
<string name="show_album_cover">Visa omslag till album</string>
<string name="updated_toast">Wholphin har uppdaterats till %s</string>
<string name="updated_toast">Wolfskin har uppdaterats till %s</string>
<string name="last_played">Senast visat</string>
<string name="root_folder">Huvudkatalog</string>
<string name="popularity">Populäritet</string>

View file

@ -465,8 +465,8 @@
<string name="content_scale_fill">ยืดเต็มจอ</string>
<string name="content_scale_fill_width">ยืดตามความกว้าง</string>
<string name="content_scale_fill_height">ยืดตามความสูง</string>
<string name="display_preset_default">Wholphin ค่าเริ่มต้น</string>
<string name="display_preset_compact">Wholphin คอมแพค</string>
<string name="display_preset_default">Wolfskin ค่าเริ่มต้น</string>
<string name="display_preset_compact">Wolfskin คอมแพค</string>
<string name="display_preset_series_thumb">ภาพขนาดย่อของซีรี่ส์</string>
<string name="display_preset_episode_thumbnails">ภาพขนาดย่อของตอน</string>
<string name="volume_lowest">เบาสุด</string>

View file

@ -480,8 +480,8 @@
<string name="content_scale_fill">Doldur</string>
<string name="content_scale_fill_width">Genişliği Doldur</string>
<string name="content_scale_fill_height">Yüksekliği Doldur</string>
<string name="display_preset_default">Wholphin Varsayılan</string>
<string name="display_preset_compact">Wholphin Kompakt</string>
<string name="display_preset_default">Wolfskin Varsayılan</string>
<string name="display_preset_compact">Wolfskin Kompakt</string>
<string name="display_preset_series_thumb">Dizi Küçük Resimleri</string>
<string name="display_preset_episode_thumbnails">Bölüm Küçük Resimleri</string>
<string name="volume_lowest">En Düşük</string>
@ -589,7 +589,7 @@
<string name="continue_string">Devam et</string>
<string name="separate_types">Farklı türler</string>
<string name="prefer_logos">Başlık yerine logo göster</string>
<string name="updated_toast">Wholphin %s sürümüne güncellendi</string>
<string name="updated_toast">Wolfskin %s sürümüne güncellendi</string>
<string name="view_more">Daha fazla göster</string>
<string name="discover_tv">Dizileri Keşfet</string>
<string name="discover_movies">Filmleri Keşfet</string>

View file

@ -567,7 +567,7 @@
<string name="content_scale_fill">Заповнити</string>
<string name="content_scale_fill_width">Заповнити по ширині</string>
<string name="content_scale_fill_height">Заповнити по висоті</string>
<string name="display_preset_default">Wholphin за замовчуванням</string>
<string name="display_preset_default">Wolfskin за замовчуванням</string>
<string name="display_preset_series_thumb">Мініатюри серіалів</string>
<string name="display_preset_episode_thumbnails">Мініатюри серій</string>
<string name="volume_lowest">Найнижча</string>
@ -655,7 +655,7 @@
<string name="select_all">Вибрати все</string>
<string name="separate_types">Розділяти типи</string>
<string name="prefer_logos">Надавати перевагу логотипам для назв</string>
<string name="updated_toast">Wholphin оновлено до %s</string>
<string name="updated_toast">Wolfskin оновлено до %s</string>
<string name="remove_continue_watching">Видалити з «Продовжити перегляд»</string>
<string name="remove_next_up">Видалити серіал з «Далі»</string>
<string name="view_removed_next_up">Переглянути серіали, видалені з «Далі»</string>
@ -686,5 +686,5 @@
<string name="tomatoes">Томати</string>
<string name="sort">Сортування</string>
<string name="split_into_separate_rows">Розділити на окремі рядки</string>
<string name="display_preset_compact">Wholphin компактний</string>
<string name="display_preset_compact">Wolfskin компактний</string>
</resources>

View file

@ -453,8 +453,8 @@
<string name="content_scale_fill">填充</string>
<string name="content_scale_fill_width">填充宽度</string>
<string name="content_scale_fill_height">填充高度</string>
<string name="display_preset_default">Wholphin 默认</string>
<string name="display_preset_compact">Wholphin 紧凑</string>
<string name="display_preset_default">Wolfskin 默认</string>
<string name="display_preset_compact">Wolfskin 紧凑</string>
<string name="display_preset_series_thumb">剧集缩略图</string>
<string name="display_preset_episode_thumbnails">分集缩略图</string>
<string name="purple">紫色</string>
@ -561,7 +561,7 @@
<string name="continue_string">继续</string>
<string name="separate_types">分离类型</string>
<string name="prefer_logos">优先显示标题图标</string>
<string name="updated_toast">Wholphin 已更新至 %s</string>
<string name="updated_toast">Wolfskin 已更新至 %s</string>
<string name="view_more">查看更多</string>
<string name="discover_tv">发现电视节目</string>
<string name="discover_movies">发现电影</string>

View file

@ -482,8 +482,8 @@
<string name="prefer_mpv">優先使用 MPV</string>
<string name="player_backend_options_subtitles_prefer_mpv">僅 HDR 使用 ExoPlayer 播放</string>
<string name="favorite_items_title">我的最愛的 %s</string>
<string name="display_preset_default">Wholphin 預設樣式</string>
<string name="display_preset_compact">Wholphin 緊湊樣式</string>
<string name="display_preset_default">Wolfskin 預設樣式</string>
<string name="display_preset_compact">Wolfskin 緊湊樣式</string>
<string name="display_preset_series_thumb">劇集縮圖樣式</string>
<string name="display_preset_episode_thumbnails">單集縮圖樣式</string>
<string name="aspect_ratios_poster">海報 (2:3)</string>
@ -561,7 +561,7 @@
<string name="instant_mix">即時混播</string>
<string name="separate_types">依類型分開顯示</string>
<string name="prefer_logos">優先顯示圖像標題</string>
<string name="updated_toast">Wholphin 已更新至 %s</string>
<string name="updated_toast">Wolfskin 已更新至 %s</string>
<string name="view_more">查看更多</string>
<string name="discover_tv">探索電視劇</string>
<string name="discover_movies">探索電影</string>

View file

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_banner_background">#000B25</color>
</resources>

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#101010</color>
<color name="ic_launcher_background">#07070a</color>
</resources>

View file

@ -1,6 +1,6 @@
<resources>
<string name="app_name" translatable="false">Wholphin</string>
<string name="app_name_long" translatable="false">Wholphin</string>
<string name="app_name" translatable="false">Wolfskin</string>
<string name="app_name_long" translatable="false">Wolfskin</string>
<string name="about">About</string>
<string name="active_recordings">Active Recordings</string>
@ -587,8 +587,8 @@
<string name="content_scale_fill">Fill</string>
<string name="content_scale_fill_width">Fill width</string>
<string name="content_scale_fill_height">Fill height</string>
<string name="display_preset_default">Wholphin Default</string>
<string name="display_preset_compact">Wholphin Compact</string>
<string name="display_preset_default">Wolfskin Default</string>
<string name="display_preset_compact">Wolfskin Compact</string>
<string name="display_preset_series_thumb">Series Thumb images</string>
<string name="display_preset_episode_thumbnails">Episode Thumbnail images</string>
@ -620,6 +620,7 @@
<item>@string/black</item>
<item>@string/red</item>
<item>@string/brown</item>
<item>@string/wolfskin_theme</item>
</string-array>
<string name="skip_ignore">Ignore</string>
@ -808,7 +809,7 @@
<string name="select_all">Select all</string>
<string name="separate_types">Separate types</string>
<string name="prefer_logos">Prefer showing logos for titles</string>
<string name="updated_toast">Wholphin updated to %s</string>
<string name="updated_toast">Wolfskin updated to %s</string>
<string name="remove_continue_watching">Remove from continue watching</string>
<string name="remove_next_up">Remove series from next up</string>
<string name="view_removed_next_up">View series removed from next up</string>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="wolfskin_theme" translatable="false">Wolfskin</string>
<string name="wolfskin_upstream_credit" translatable="false">based on Wholphin by damontecres</string>
<string name="wolfskin_upstream_url" translatable="false">https://github.com/damontecres/Wholphin</string>
</resources>

View file

@ -0,0 +1,44 @@
package com.github.damontecres.wholphin.ui
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.luminance
import com.github.damontecres.wholphin.ui.theme.colors.WolfskinThemeColors
import org.junit.Assert.assertTrue
import org.junit.Test
/** Normal and focused TV text must remain readable on the fork's dark palette. */
class WolfskinThemeColorsTest {
@Test
fun darkPaletteHasReadableNormalAndFocusedText() {
val television = WolfskinThemeColors.darkScheme
val material = WolfskinThemeColors.darkSchemeMaterial
val textAndBackgrounds =
listOf(
television.onBackground to television.background,
television.onSurface to television.surface,
television.onSurfaceVariant to television.surfaceVariant,
television.onPrimary to television.primary,
television.onPrimaryContainer to television.primaryContainer,
television.onSecondary to television.secondary,
television.onSecondaryContainer to television.secondaryContainer,
television.onTertiary to television.tertiary,
television.onTertiaryContainer to television.tertiaryContainer,
material.onBackground to material.background,
material.onSurface to material.surface,
material.onPrimary to material.primary,
material.onPrimaryContainer to material.primaryContainer,
)
textAndBackgrounds.forEach { (text, background) ->
assertReadable(text, background)
}
}
private fun assertReadable(text: Color, background: Color) {
val textLuminance = text.luminance()
val backgroundLuminance = background.luminance()
val contrast =
(maxOf(textLuminance, backgroundLuminance) + .05f) /
(minOf(textLuminance, backgroundLuminance) + .05f)
assertTrue("Text contrast $contrast is below 4.5:1", contrast >= 4.5f)
}
}