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
Owner

Outcome

Rebrand the specified Android TV surfaces as Wolfskin while retaining Wholphin attribution and the existing Kotlin package/namespace.

Closes justinzeus/wolfskin#2

Changes

  • Replace the app names, Default/Compact preset labels and updated toast, including every translation of those keys containing “Wholphin”. Rebrand the debug app-name override too.
  • Derive launcher, round and adaptive raster icons from the supplied spiky-fur wolf, without redrawing. Preserve all five Android density sizes and update the Play Store launcher raster.
  • Render the 320×180 leanback banner with the wolf and lilac Wolfskin wordmark on #07070a. Use a rectangular bitmap on API 26+ instead of an adaptive-icon mask, so the wordmark is not cropped.
  • Append WOLFSKIN = 8 to the stored theme enum and the matching preference array. Make it the fresh-install/default selection; retain all upstream themes and existing saved selections. Integrate the new theme into watched badges, sliders, switches and navigation colours. Watched checks use dark text on the lilac badge for readability.
  • Show Wolfskin in Settings → About with a focusable “based on Wholphin by damontecres” link to the original project. Keep the new palette, About component and fork strings in separate files.
  • Document the default theme and credit in the fork README section. Leave .github/workflows, Kotlin package and namespace unchanged.

Verification on final head c98a9756

Both required referee targets ran once on this final head, inside Docker with the shared-cache lock; no host SDK and no release signing:

Command Observed result
flock /tmp/wolfskin-gradle.lock make apk-debug BUILD SUCCESSFUL in 1m 13s; 73 actionable tasks: 12 executed, 61 up-to-date
flock /tmp/wolfskin-gradle.lock make test BUILD SUCCESSFUL in 3m 1s; 383 tests across 49 suites, 0 failures, 0 errors, 0 skipped
  • The new palette regression exercises normal and focused text/background pairs in both TV and Material colour schemes, requiring at least 4.5:1 contrast.
  • Inspected the assembled universal debug APK with container aapt2 dump badging: label Wolfskin (Debug), adaptive launcher resource and leanback banner resource present; package com.github.damontecres.wholphin.debug retained.
  • Rendered and visually inspected the 320×180 banner, adaptive round-mask preview and side-by-side old/new launcher + banner. All raster-density PNGs are included in the proof archive.
  • No TV or emulator is available on tank. These are raster asset renders, not device screenshots. Home screen, About layout, TV focus traversal and actual launcher masks still require Firstmate’s first-release device checks, as specified in the brief.
  • Debug output uses the existing MPV stub and lacks extra codec decoders; it is not a playback-complete release. Did not run make apk.
  • An earlier head failed compilation on missing exhaustive enum branches. Those callers were completed before the final referee runs; its superseded test run was cancelled.

Attached raster proof

Old and new launcher icons and leanback banners

Raster provenance

Source: /root/fm-home/data/wolf-logo-gen/master-1024.png.
SHA-256: eabb6eb19ceb1088c1eb61ab8e8c079804d7bd02139a1308f70eb5f8b394f2e5.
Pillow/Lanczos resizing and circular masks only; banner wordmark uses DejaVu Sans Bold. Launcher/round PNG sizes: 48, 72, 96, 144 and 192 px. Adaptive foreground PNG sizes: 108, 162, 216, 324 and 432 px, with the wolf placed in the central 60 dp of the 108 dp layer.

Complete string inventory

77 changed or new string values below. The app_theme_colors array also gains @string/wolfskin_theme at index 8; existing indices remain unchanged. Placeholders and translated wording are otherwise preserved.

Resource file Key New value
app/src/debug/res/values/strings.xml app_name Wolfskin (Debug)
app/src/main/res/values/strings.xml app_name Wolfskin
app/src/main/res/values/strings.xml app_name_long Wolfskin
app/src/main/res/values/strings.xml display_preset_default Wolfskin Default
app/src/main/res/values/strings.xml display_preset_compact Wolfskin Compact
app/src/main/res/values/strings.xml updated_toast Wolfskin updated to %s
app/src/main/res/values-cs/strings.xml display_preset_default Výchozí předvolba Wolfskin
app/src/main/res/values-cs/strings.xml display_preset_compact Wolfskin kompaktní
app/src/main/res/values-da/strings.xml display_preset_default Wolfskin-standard
app/src/main/res/values-da/strings.xml display_preset_compact Wolfskin kompakt
app/src/main/res/values-da/strings.xml updated_toast Wolfskin er opdateret til %s
app/src/main/res/values-de/strings.xml display_preset_default Wolfskin Standard
app/src/main/res/values-de/strings.xml display_preset_compact Wolfskin Kompakt
app/src/main/res/values-de/strings.xml updated_toast Wolfskin aktualisiert auf %s
app/src/main/res/values-es/strings.xml updated_toast Wolfskin se ha actualizado a la versión %s
app/src/main/res/values-et/strings.xml display_preset_default Wolfskini vaikeseadistus
app/src/main/res/values-et/strings.xml display_preset_compact Wolfskini kompaktne vaade
app/src/main/res/values-et/strings.xml updated_toast Wolfskin on uuendatud versioonini %s
app/src/main/res/values-fr/strings.xml display_preset_default Wolfskin Par défaut
app/src/main/res/values-fr/strings.xml display_preset_compact Wolfskin Compact
app/src/main/res/values-fr/strings.xml updated_toast Wolfskin a été mis à jour vers la version %s
app/src/main/res/values-hr/strings.xml display_preset_default Wolfskin zadani
app/src/main/res/values-hr/strings.xml display_preset_compact Wolfskin zbijeni
app/src/main/res/values-hr/strings.xml updated_toast Wolfskin ažuriran na %s
app/src/main/res/values-in/strings.xml display_preset_default Wolfskin Bawaan
app/src/main/res/values-in/strings.xml display_preset_compact Wolfskin Ringkas
app/src/main/res/values-in/strings.xml updated_toast Wolfskin diperbarui ke %s
app/src/main/res/values-it/strings.xml display_preset_default Wolfskin predefinito
app/src/main/res/values-it/strings.xml display_preset_compact Wolfskin Compatto
app/src/main/res/values-it/strings.xml updated_toast Wolfskin aggiornato a %s
app/src/main/res/values-iw/strings.xml display_preset_default ברירת המחדל של Wolfskin
app/src/main/res/values-iw/strings.xml display_preset_compact Wolfskin קומפקטי
app/src/main/res/values-iw/strings.xml updated_toast Wolfskin עודכן ל־%s
app/src/main/res/values-nb-rNO/strings.xml display_preset_default Wolfskin Standard
app/src/main/res/values-nb-rNO/strings.xml display_preset_compact Wolfskin Kompakt
app/src/main/res/values-nb-rNO/strings.xml updated_toast Wolfskin oppdatert til %s
app/src/main/res/values-nl/strings.xml display_preset_default Wolfskin standaard
app/src/main/res/values-nl/strings.xml display_preset_compact Wolfskin compact
app/src/main/res/values-nl/strings.xml updated_toast Wolfskin is geüpdatet naar %s
app/src/main/res/values-nn/strings.xml display_preset_default Wolfskin-standard
app/src/main/res/values-nn/strings.xml display_preset_compact Wolfskin-kompakt
app/src/main/res/values-pl/strings.xml display_preset_default Domyślny Wolfskin
app/src/main/res/values-pl/strings.xml display_preset_compact Kompaktowy Wolfskin
app/src/main/res/values-pl/strings.xml updated_toast Wolfskin zaktualizowany do %s
app/src/main/res/values-pt/strings.xml display_preset_default Padrão do Wolfskin
app/src/main/res/values-pt/strings.xml display_preset_compact Wolfskin Compacto
app/src/main/res/values-pt/strings.xml updated_toast Wolfskin foi atualizado para %s
app/src/main/res/values-pt-rBR/strings.xml display_preset_default Padrão do Wolfskin
app/src/main/res/values-pt-rBR/strings.xml display_preset_compact Wolfskin Compacto
app/src/main/res/values-pt-rBR/strings.xml updated_toast Wolfskin atualizado para %s
app/src/main/res/values-ru/strings.xml display_preset_default Wolfskin по умолчанию
app/src/main/res/values-ru/strings.xml display_preset_compact Wolfskin компактный
app/src/main/res/values-ru/strings.xml updated_toast Wolfskin обновлён до версии %s
app/src/main/res/values-sk/strings.xml display_preset_default Wolfskin predvolené
app/src/main/res/values-sk/strings.xml display_preset_compact Wolfskin kompaktné
app/src/main/res/values-sk/strings.xml updated_toast Wolfskin bol aktualizovaný na verziu %s
app/src/main/res/values-sl/strings.xml updated_toast Wolfskin posodobljen na %s
app/src/main/res/values-sv/strings.xml display_preset_compact Wolfskin Kompakt
app/src/main/res/values-sv/strings.xml display_preset_default Wolfskin Standard
app/src/main/res/values-sv/strings.xml updated_toast Wolfskin har uppdaterats till %s
app/src/main/res/values-th/strings.xml display_preset_default Wolfskin ค่าเริ่มต้น
app/src/main/res/values-th/strings.xml display_preset_compact Wolfskin คอมแพค
app/src/main/res/values-tr/strings.xml display_preset_default Wolfskin Varsayılan
app/src/main/res/values-tr/strings.xml display_preset_compact Wolfskin Kompakt
app/src/main/res/values-tr/strings.xml updated_toast Wolfskin %s sürümüne güncellendi
app/src/main/res/values-uk/strings.xml display_preset_default Wolfskin за замовчуванням
app/src/main/res/values-uk/strings.xml updated_toast Wolfskin оновлено до %s
app/src/main/res/values-uk/strings.xml display_preset_compact Wolfskin компактний
app/src/main/res/values-zh-rCN/strings.xml display_preset_default Wolfskin 默认
app/src/main/res/values-zh-rCN/strings.xml display_preset_compact Wolfskin 紧凑
app/src/main/res/values-zh-rCN/strings.xml updated_toast Wolfskin 已更新至 %s
app/src/main/res/values-zh-rTW/strings.xml display_preset_default Wolfskin 預設樣式
app/src/main/res/values-zh-rTW/strings.xml display_preset_compact Wolfskin 緊湊樣式
app/src/main/res/values-zh-rTW/strings.xml updated_toast Wolfskin 已更新至 %s
app/src/main/res/values/wolfskin.xml (new) wolfskin_theme Wolfskin
app/src/main/res/values/wolfskin.xml (new) wolfskin_upstream_credit based on Wholphin by damontecres
app/src/main/res/values/wolfskin.xml (new) wolfskin_upstream_url https://github.com/damontecres/Wholphin

Assistance disclosure

AI-assisted implementation, verification and PR description.

## Outcome Rebrand the specified Android TV surfaces as Wolfskin while retaining Wholphin attribution and the existing Kotlin package/namespace. Closes justinzeus/wolfskin#2 ## Changes - Replace the app names, Default/Compact preset labels and updated toast, including every translation of those keys containing “Wholphin”. Rebrand the debug app-name override too. - Derive launcher, round and adaptive raster icons from the supplied spiky-fur wolf, without redrawing. Preserve all five Android density sizes and update the Play Store launcher raster. - Render the 320×180 leanback banner with the wolf and lilac Wolfskin wordmark on `#07070a`. Use a rectangular bitmap on API 26+ instead of an adaptive-icon mask, so the wordmark is not cropped. - Append `WOLFSKIN = 8` to the stored theme enum and the matching preference array. Make it the fresh-install/default selection; retain all upstream themes and existing saved selections. Integrate the new theme into watched badges, sliders, switches and navigation colours. Watched checks use dark text on the lilac badge for readability. - Show Wolfskin in Settings → About with a focusable “based on Wholphin by damontecres” link to the original project. Keep the new palette, About component and fork strings in separate files. - Document the default theme and credit in the fork README section. Leave `.github/workflows`, Kotlin package and namespace unchanged. ## Verification on final head `c98a9756` Both required referee targets ran once on this final head, inside Docker with the shared-cache lock; no host SDK and no release signing: | Command | Observed result | | --- | --- | | `flock /tmp/wolfskin-gradle.lock make apk-debug` | `BUILD SUCCESSFUL in 1m 13s`; 73 actionable tasks: 12 executed, 61 up-to-date | | `flock /tmp/wolfskin-gradle.lock make test` | `BUILD SUCCESSFUL in 3m 1s`; 383 tests across 49 suites, 0 failures, 0 errors, 0 skipped | - The new palette regression exercises normal and focused text/background pairs in both TV and Material colour schemes, requiring at least 4.5:1 contrast. - Inspected the assembled universal debug APK with container `aapt2 dump badging`: label `Wolfskin (Debug)`, adaptive launcher resource and leanback banner resource present; package `com.github.damontecres.wholphin.debug` retained. - Rendered and visually inspected the 320×180 banner, adaptive round-mask preview and side-by-side old/new launcher + banner. All raster-density PNGs are included in the proof archive. - No TV or emulator is available on tank. These are raster asset renders, not device screenshots. Home screen, About layout, TV focus traversal and actual launcher masks still require Firstmate’s first-release device checks, as specified in the brief. - Debug output uses the existing MPV stub and lacks extra codec decoders; it is not a playback-complete release. Did not run `make apk`. - An earlier head failed compilation on missing exhaustive enum branches. Those callers were completed before the final referee runs; its superseded test run was cancelled. ## Attached raster proof ![Old and new launcher icons and leanback banners](https://git.justinvisser.org/attachments/c459b5fe-b60e-4b3b-b42b-03f00e4b4cbb) - [320×180 banner PNG](https://git.justinvisser.org/attachments/ce3f0fc2-399f-4166-b487-fcce8f662535) - [192×192 launcher PNG](https://git.justinvisser.org/attachments/99e6b3c4-2c93-4829-94c5-9815a443779b) - [Adaptive circular-mask preview PNG](https://git.justinvisser.org/attachments/77faa549-7bf9-4eaf-a3f8-06117fe4c87a) - [All density-specific launcher, round and adaptive PNGs, old assets and comparison ZIP](https://git.justinvisser.org/attachments/290a9dbb-3f13-4c65-8fea-616422be104e) ## Raster provenance Source: `/root/fm-home/data/wolf-logo-gen/master-1024.png`. SHA-256: `eabb6eb19ceb1088c1eb61ab8e8c079804d7bd02139a1308f70eb5f8b394f2e5`. Pillow/Lanczos resizing and circular masks only; banner wordmark uses DejaVu Sans Bold. Launcher/round PNG sizes: 48, 72, 96, 144 and 192 px. Adaptive foreground PNG sizes: 108, 162, 216, 324 and 432 px, with the wolf placed in the central 60 dp of the 108 dp layer. ## Complete string inventory 77 changed or new string values below. The `app_theme_colors` array also gains `@string/wolfskin_theme` at index 8; existing indices remain unchanged. Placeholders and translated wording are otherwise preserved. | Resource file | Key | New value | | --- | --- | --- | | `app/src/debug/res/values/strings.xml` | `app_name` | Wolfskin (Debug) | | `app/src/main/res/values/strings.xml` | `app_name` | Wolfskin | | `app/src/main/res/values/strings.xml` | `app_name_long` | Wolfskin | | `app/src/main/res/values/strings.xml` | `display_preset_default` | Wolfskin Default | | `app/src/main/res/values/strings.xml` | `display_preset_compact` | Wolfskin Compact | | `app/src/main/res/values/strings.xml` | `updated_toast` | Wolfskin updated to %s | | `app/src/main/res/values-cs/strings.xml` | `display_preset_default` | Výchozí předvolba Wolfskin | | `app/src/main/res/values-cs/strings.xml` | `display_preset_compact` | Wolfskin kompaktní | | `app/src/main/res/values-da/strings.xml` | `display_preset_default` | Wolfskin-standard | | `app/src/main/res/values-da/strings.xml` | `display_preset_compact` | Wolfskin kompakt | | `app/src/main/res/values-da/strings.xml` | `updated_toast` | Wolfskin er opdateret til %s | | `app/src/main/res/values-de/strings.xml` | `display_preset_default` | Wolfskin Standard | | `app/src/main/res/values-de/strings.xml` | `display_preset_compact` | Wolfskin Kompakt | | `app/src/main/res/values-de/strings.xml` | `updated_toast` | Wolfskin aktualisiert auf %s | | `app/src/main/res/values-es/strings.xml` | `updated_toast` | Wolfskin se ha actualizado a la versión %s | | `app/src/main/res/values-et/strings.xml` | `display_preset_default` | Wolfskini vaikeseadistus | | `app/src/main/res/values-et/strings.xml` | `display_preset_compact` | Wolfskini kompaktne vaade | | `app/src/main/res/values-et/strings.xml` | `updated_toast` | Wolfskin on uuendatud versioonini %s | | `app/src/main/res/values-fr/strings.xml` | `display_preset_default` | Wolfskin Par défaut | | `app/src/main/res/values-fr/strings.xml` | `display_preset_compact` | Wolfskin Compact | | `app/src/main/res/values-fr/strings.xml` | `updated_toast` | Wolfskin a été mis à jour vers la version %s | | `app/src/main/res/values-hr/strings.xml` | `display_preset_default` | Wolfskin zadani | | `app/src/main/res/values-hr/strings.xml` | `display_preset_compact` | Wolfskin zbijeni | | `app/src/main/res/values-hr/strings.xml` | `updated_toast` | Wolfskin ažuriran na %s | | `app/src/main/res/values-in/strings.xml` | `display_preset_default` | Wolfskin Bawaan | | `app/src/main/res/values-in/strings.xml` | `display_preset_compact` | Wolfskin Ringkas | | `app/src/main/res/values-in/strings.xml` | `updated_toast` | Wolfskin diperbarui ke %s | | `app/src/main/res/values-it/strings.xml` | `display_preset_default` | Wolfskin predefinito | | `app/src/main/res/values-it/strings.xml` | `display_preset_compact` | Wolfskin Compatto | | `app/src/main/res/values-it/strings.xml` | `updated_toast` | Wolfskin aggiornato a %s | | `app/src/main/res/values-iw/strings.xml` | `display_preset_default` | ברירת המחדל של Wolfskin | | `app/src/main/res/values-iw/strings.xml` | `display_preset_compact` | Wolfskin קומפקטי | | `app/src/main/res/values-iw/strings.xml` | `updated_toast` | Wolfskin עודכן ל־%s | | `app/src/main/res/values-nb-rNO/strings.xml` | `display_preset_default` | Wolfskin Standard | | `app/src/main/res/values-nb-rNO/strings.xml` | `display_preset_compact` | Wolfskin Kompakt | | `app/src/main/res/values-nb-rNO/strings.xml` | `updated_toast` | Wolfskin oppdatert til %s | | `app/src/main/res/values-nl/strings.xml` | `display_preset_default` | Wolfskin standaard | | `app/src/main/res/values-nl/strings.xml` | `display_preset_compact` | Wolfskin compact | | `app/src/main/res/values-nl/strings.xml` | `updated_toast` | Wolfskin is geüpdatet naar %s | | `app/src/main/res/values-nn/strings.xml` | `display_preset_default` | Wolfskin-standard | | `app/src/main/res/values-nn/strings.xml` | `display_preset_compact` | Wolfskin-kompakt | | `app/src/main/res/values-pl/strings.xml` | `display_preset_default` | Domyślny Wolfskin | | `app/src/main/res/values-pl/strings.xml` | `display_preset_compact` | Kompaktowy Wolfskin | | `app/src/main/res/values-pl/strings.xml` | `updated_toast` | Wolfskin zaktualizowany do %s | | `app/src/main/res/values-pt/strings.xml` | `display_preset_default` | Padrão do Wolfskin | | `app/src/main/res/values-pt/strings.xml` | `display_preset_compact` | Wolfskin Compacto | | `app/src/main/res/values-pt/strings.xml` | `updated_toast` | Wolfskin foi atualizado para %s | | `app/src/main/res/values-pt-rBR/strings.xml` | `display_preset_default` | Padrão do Wolfskin | | `app/src/main/res/values-pt-rBR/strings.xml` | `display_preset_compact` | Wolfskin Compacto | | `app/src/main/res/values-pt-rBR/strings.xml` | `updated_toast` | Wolfskin atualizado para %s | | `app/src/main/res/values-ru/strings.xml` | `display_preset_default` | Wolfskin по умолчанию | | `app/src/main/res/values-ru/strings.xml` | `display_preset_compact` | Wolfskin компактный | | `app/src/main/res/values-ru/strings.xml` | `updated_toast` | Wolfskin обновлён до версии %s | | `app/src/main/res/values-sk/strings.xml` | `display_preset_default` | Wolfskin predvolené | | `app/src/main/res/values-sk/strings.xml` | `display_preset_compact` | Wolfskin kompaktné | | `app/src/main/res/values-sk/strings.xml` | `updated_toast` | Wolfskin bol aktualizovaný na verziu %s | | `app/src/main/res/values-sl/strings.xml` | `updated_toast` | Wolfskin posodobljen na %s | | `app/src/main/res/values-sv/strings.xml` | `display_preset_compact` | Wolfskin Kompakt | | `app/src/main/res/values-sv/strings.xml` | `display_preset_default` | Wolfskin Standard | | `app/src/main/res/values-sv/strings.xml` | `updated_toast` | Wolfskin har uppdaterats till %s | | `app/src/main/res/values-th/strings.xml` | `display_preset_default` | Wolfskin ค่าเริ่มต้น | | `app/src/main/res/values-th/strings.xml` | `display_preset_compact` | Wolfskin คอมแพค | | `app/src/main/res/values-tr/strings.xml` | `display_preset_default` | Wolfskin Varsayılan | | `app/src/main/res/values-tr/strings.xml` | `display_preset_compact` | Wolfskin Kompakt | | `app/src/main/res/values-tr/strings.xml` | `updated_toast` | Wolfskin %s sürümüne güncellendi | | `app/src/main/res/values-uk/strings.xml` | `display_preset_default` | Wolfskin за замовчуванням | | `app/src/main/res/values-uk/strings.xml` | `updated_toast` | Wolfskin оновлено до %s | | `app/src/main/res/values-uk/strings.xml` | `display_preset_compact` | Wolfskin компактний | | `app/src/main/res/values-zh-rCN/strings.xml` | `display_preset_default` | Wolfskin 默认 | | `app/src/main/res/values-zh-rCN/strings.xml` | `display_preset_compact` | Wolfskin 紧凑 | | `app/src/main/res/values-zh-rCN/strings.xml` | `updated_toast` | Wolfskin 已更新至 %s | | `app/src/main/res/values-zh-rTW/strings.xml` | `display_preset_default` | Wolfskin 預設樣式 | | `app/src/main/res/values-zh-rTW/strings.xml` | `display_preset_compact` | Wolfskin 緊湊樣式 | | `app/src/main/res/values-zh-rTW/strings.xml` | `updated_toast` | Wolfskin 已更新至 %s | | `app/src/main/res/values/wolfskin.xml (new)` | `wolfskin_theme` | Wolfskin | | `app/src/main/res/values/wolfskin.xml (new)` | `wolfskin_upstream_credit` | based on Wholphin by damontecres | | `app/src/main/res/values/wolfskin.xml (new)` | `wolfskin_upstream_url` | https://github.com/damontecres/Wholphin | ## Assistance disclosure AI-assisted implementation, verification and PR description.
justinzeus added 2 commits 2026-10-22 15:13:28 +02:00
Integrate Wolfskin into theme-specific controls
All checks were successful
review/design-claude Approved at c98a9756; no blockers, see PR comment
review/code-claude Approved at c98a9756; no blockers, see PR comment
c98a9756ac
Author
Owner

Review verdict at c98a9756acba41eb033465874de10acd72345c89: APPROVE (design and code). No blockers.

  • Art: every launcher density, the Play Store icon, the foreground layer and the 320x180 banner are lossless resizes of master-1024.png (MAE 0.00; round icon is the same art at about 81%). No redraw. The banner wordmark is legible and nothing is cropped.
  • Theme: WOLFSKIN = 8 is appended to the proto, so stored values 0-7 are unchanged. The new default only applies when the datastore is created fresh, so existing saved themes are untouched. Lilac #D2BCFF on #07070A has contrast 11.9:1.
  • Strings: all changed keys and translations say Wolfskin. About shows "based on Wholphin by damontecres" with a link to the upstream repo.
  • make test: BUILD SUCCESSFUL, 383 tests, 0 failures.

Notes, none blocking: the Polish about string still says "O Wholphin"; the About link can crash on a TV with no browser (openUri is unguarded); the Kotlin crash dialog and the Jellyfin client name still say Wholphin; masked icons cut the wolf's shoulder, which is inherent to the master.

Full report: /root/fm-home/data/review-wolfskin-16/report.md

Review verdict at `c98a9756acba41eb033465874de10acd72345c89`: **APPROVE** (design and code). No blockers. - Art: every launcher density, the Play Store icon, the foreground layer and the 320x180 banner are lossless resizes of `master-1024.png` (MAE 0.00; round icon is the same art at about 81%). No redraw. The banner wordmark is legible and nothing is cropped. - Theme: `WOLFSKIN = 8` is appended to the proto, so stored values 0-7 are unchanged. The new default only applies when the datastore is created fresh, so existing saved themes are untouched. Lilac `#D2BCFF` on `#07070A` has contrast 11.9:1. - Strings: all changed keys and translations say Wolfskin. About shows "based on Wholphin by damontecres" with a link to the upstream repo. - `make test`: BUILD SUCCESSFUL, 383 tests, 0 failures. Notes, none blocking: the Polish `about` string still says "O Wholphin"; the About link can crash on a TV with no browser (`openUri` is unguarded); the Kotlin crash dialog and the Jellyfin client name still say Wholphin; masked icons cut the wolf's shoulder, which is inherent to the master. Full report: `/root/fm-home/data/review-wolfskin-16/report.md`
justinzeus merged commit bc220021a8 into main 2026-10-22 15:23:03 +02:00
Sign in to join this conversation.
No reviewers
No labels
exploring
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: justinzeus/wolfskin#16
No description provided.