Option B (rebuild APK) — odblokowuje custom fonty na stałe + sprawia że przyszłe font-OTA nie crashują. - runtime 1.0 → 1.1 (app.json + AndroidManifest EXPO_RUNTIME_VERSION): nowy APK ma native ExpoFontLoader, więc MUSI mieć inny runtime niż stare instalacje 1.0 (inaczej font-OTA crashnęłoby stare). 1.0 channel zostaje na d5b87e5c (font-stripped) dla starych, 1.1 = nowy APK z fontami. - version 0.2.0 / versionCode 10 (build.gradle) — in-app updater (/version=0.2.0) zaoferuje install starym 0.1.9. - Fonty przywrócone (useFonts, theme.fonts realne, SceneTile/MoviePosterCard/ navigation/GoonWordmark fontFamily) — działają bo native jest w APK. - Build: gradlew assembleRelease (autolinking expo-font, BEZ prebuild — zachowane custom native AntiTamper/ApkInstaller), Sentry source-map upload wyłączony (SENTRY_DISABLE_AUTO_UPLOAD, brak org/auth — krok poboczny). - app/main.py /version 0.1.9 → 0.2.0. ZWERYFIKOWANE na emulatorze: podpis SHA-256 == ALLOWED_APP_SIG_HASH (anti-tamper OK), ExpoFontLoader w classes3.dex, `ReactNativeJS: Running "main"` bez crasha. APK live: /static/app-release.apk + goon-v0.2.0.apk + landing webroot. UWAGA: launcher-icon (native mipmaps) NIE zmienione w tym buildzie — nadal stara ikona. Nowy oo-icon wymaga regeneracji res/mipmap-* + rebuild (follow-up). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
77 lines
2.7 KiB
TypeScript
77 lines
2.7 KiB
TypeScript
/**
|
||
* Goon brand marks.
|
||
*
|
||
* Rework 2026-05-30: poprzednia wersja rysowała litery ręcznie jako SVG path
|
||
* geometry — wychodziło krzywo (o-ka jako nachodzące elipsy, zniekształcone n).
|
||
* Teraz mamy General Sans Semibold jako realny font (useFonts w App.tsx), więc
|
||
* wordmark renderuje PRAWDZIWY tekst w tej rodzinie — czysto i spójnie z resztą
|
||
* typografii.
|
||
*
|
||
* Distinctive twist: dwutonowe "g[oo]n" — środkowe "oo" w oxblood (brand accent),
|
||
* "g"+"n" w foreground. Czytelne nawet w małym headerze, wiąże logo z paletą.
|
||
*
|
||
* <GoonWordmark size={26} /> // header
|
||
* <GoonWordmark size={48} mono /> // splash, jednolity kolor
|
||
*/
|
||
import React from 'react';
|
||
import { Text, View } from 'react-native';
|
||
import Svg, { Circle } from 'react-native-svg';
|
||
|
||
import { fonts, theme } from '../theme';
|
||
|
||
interface WordmarkProps {
|
||
/** fontSize wordmarku w px. */
|
||
size?: number;
|
||
/** Kolor liter g+n (oo zawsze accent, chyba że `mono`). */
|
||
color?: string;
|
||
/** Jednolity kolor (bez dwutonu) — np. na splash gdzie tło = accent. */
|
||
mono?: boolean;
|
||
}
|
||
|
||
export function GoonWordmark({ size = 26, color = theme.fg, mono = false }: WordmarkProps) {
|
||
const base = {
|
||
fontFamily: fonts.display,
|
||
fontSize: size,
|
||
letterSpacing: -size * 0.03,
|
||
includeFontPadding: false as const,
|
||
};
|
||
const accent = mono ? color : theme.accent;
|
||
return (
|
||
<View style={{ flexDirection: 'row', alignItems: 'center' }}>
|
||
<Text style={[base, { color }]}>g</Text>
|
||
<Text style={[base, { color: accent }]}>oo</Text>
|
||
<Text style={[base, { color }]}>n</Text>
|
||
</View>
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Brand mark — double-o ("oo"): dwa ringi obok siebie z oxblood dotem w środku
|
||
* każdego. Czyta się jako "oo" z goon / para soczewek-oczu (watching). Spójny z
|
||
* wybranym app-icon (2026-05-30, AI-gen interlocked oo). Czysty SVG (bez fontu)
|
||
* — używany na Login + jako wzór dla raster app-icon.
|
||
*
|
||
* `size` = szerokość; wysokość = size * 0.56 (proporcja 2 ringów obok siebie).
|
||
*
|
||
* <GoonMark size={88} />
|
||
*/
|
||
export function GoonMark({
|
||
size = 88,
|
||
ringColor = theme.fg,
|
||
dotColor = theme.accent,
|
||
}: {
|
||
size?: number;
|
||
ringColor?: string;
|
||
dotColor?: string;
|
||
}) {
|
||
// viewBox 200×112. Dwa ringi: cx 56 i 144, cy 56, r 44, stroke 13. Doty r 16.
|
||
const height = size * (112 / 200);
|
||
return (
|
||
<Svg width={size} height={height} viewBox="0 0 200 112" fill="none">
|
||
<Circle cx={56} cy={56} r={44} stroke={ringColor} strokeWidth={13} fill="none" />
|
||
<Circle cx={56} cy={56} r={16} fill={dotColor} />
|
||
<Circle cx={144} cy={56} r={44} stroke={ringColor} strokeWidth={13} fill="none" />
|
||
<Circle cx={144} cy={56} r={16} fill={dotColor} />
|
||
</Svg>
|
||
);
|
||
}
|