goon/mobile/src/screens
goon-foss bdac60f022 feat(mobile): Chromecast (0.3.0, runtime 1.3)
Zgloszenie de93ba42 ("Can't stream to Chrome cast"). Cast to natywny SDK, wiec NIE da
sie go wyslac przez OTA: to nowe APK, ktore ludzie musza pobrac sami. Klucz podpisujacy
ten sam, wiec ALLOWED_APP_SIG_HASH bez zmian i aktualizacja wchodzi na wierzch starej.

Argument, ktory przewazyl: od czerwca release ma wlaczone FLAG_SECURE, wiec zwykle
mirrorowanie ekranu na telewizor jest zablokowane. Cast jest jedyna droga na duzy ekran.

Zasieg: 77% udanych odtworzen konczy sie bezposrednim adresem, plus czesc hosterow
filmowych oddajacych gotowy plik. Okolo 13% (porndoe, mypornerleak, superporn) idzie
przez WebView i castowac sie NIE DA, tam przycisku nie ma.

Wpiete recznie, bez `expo prebuild`, bo katalog android/ jest w repo i ma reczne zmiany,
ktore prebuild by przepisal. Cztery edycje, dokladnie to co robi config plugin:
manifest (OPTIONS_PROVIDER + expanded controller), MainActivity, castFrameworkVersion
w rootProject.ext oraz JAWNA zaleznosc play-services-cast-framework w app/build.gradle.
Ta ostatnia jest konieczna, bo biblioteka deklaruje ja jako `implementation`, co nie
jest przechodnie na sciezke kompilacji, i bez niej build pada na compileReleaseKotlin.

Identyfikator odbiornika CELOWO zaden: bez wpisu biblioteka bierze domyslny odbiornik
Google. Rejestracja wlasnego wiazalaby konto Google z Goonem, a przy tresci dla
doroslych latwo o cofniecie.

Urzadzenia bez Google Play Services zabezpieczone w DWOCH miejscach, bo mamy uzytkownika
na LineageOS (GOON-3B) i sideload na zegarku (GOON-51): `getSharedInstance` w try/catch
po stronie natywnej, a po stronie JS cala obsluga w osobnym `CastControl`, montowanym
dopiero gdy `useCastAvailable` potwierdzi Play Services. To nie jest ostroznosc na
wyrost: hooki biblioteki synchronicznie subskrybuja natywne zdarzenia i bez GMS wywracaja
ekran, a hooka nie da sie wywolac warunkowo.

Chromecast pobiera plik SAM i nie wysyla naszych naglowkow, wiec zrodla wymagajace
Referera ida przez /proxy (dokłada go po stronie serwera), a reszta bezposrednio, zeby
nie obciazac VPS. Do tego proxy przestaje przekazywac CORS hostera: mixdrop oddawal
`Access-Control-Allow-Origin: https://mixdrop.my`, co odbiornik odrzucal przy HLS.

Przy okazji GOON-3B: doszedl brakujacy wpis `com.google.android.gms.version`, ktory
wywracal apke na LineageOS, gdy Chromium probowal podpiac skaner kodow.

Zweryfikowane na emulatorze na podpisanym APK: certyfikat identyczny ze starym
(3294aba5...), instalacja NA WIERZCH 0.2.2 udana, wersja 13/0.3.0, runtime 1.3 w
manifescie, aplikacja wstaje bez crasha, ExoPlayer gra (MediaCodec dla video), a SDK
Casta startuje poprawnie: dynamite sie laduje i `MediaRouterProxy` czyta NASZ CastOptions.
Logika wyboru adresu przetestowana osobno na osmiu przypadkach.

CZEGO NIE ZWERYFIKOWALEM: realnego rzutu na telewizor. W sieci emulatora nie ma zadnego
Chromecasta, wiec `loadMedia` i odtwarzanie po stronie odbiornika sa niesprawdzone.

Build wymaga SENTRY_DISABLE_AUTO_UPLOAD=true, bo sentry.properties czeka na
SENTRY_ORG/SENTRY_PROJECT/SENTRY_AUTH_TOKEN ze srodowiska (Infisical, workspace
goon-app). Skutek: slady JS z 0.3.0 beda w Sentry nieczytelne do czasu przebudowy z tymi
zmiennymi.
2026-08-24 14:27:41 +02:00
..
AgeGateScreen.tsx fix(theme): rozdziel role akcentu i dodaj ramke, ktora cokolwiek oddziela 2026-08-14 09:50:08 +02:00
AppLockScreen.tsx fix(theme): rozdziel role akcentu i dodaj ramke, ktora cokolwiek oddziela 2026-08-14 09:50:08 +02:00
AppLockSettingsScreen.tsx fix(theme): rozdziel role akcentu i dodaj ramke, ktora cokolwiek oddziela 2026-08-14 09:50:08 +02:00
BlacklistScreen.tsx fix(theme): rozdziel role akcentu i dodaj ramke, ktora cokolwiek oddziela 2026-08-14 09:50:08 +02:00
DiagnosticBrowserScreen.tsx fix(mobile): no center pause button while seeking + incognito diagnostic browser 2026-06-29 11:21:41 +02:00
DonateScreen.tsx fix(theme): rozdziel role akcentu i dodaj ramke, ktora cokolwiek oddziela 2026-08-14 09:50:08 +02:00
FavoritesScreen.tsx fix(theme): rozdziel role akcentu i dodaj ramke, ktora cokolwiek oddziela 2026-08-14 09:50:08 +02:00
LoginScreen.tsx fix(theme): rozdziel role akcentu i dodaj ramke, ktora cokolwiek oddziela 2026-08-14 09:50:08 +02:00
MovieDetailScreen.tsx fix(theme): rozdziel role akcentu i dodaj ramke, ktora cokolwiek oddziela 2026-08-14 09:50:08 +02:00
MoviesScreen.tsx fix(mobile): zdejmij maintainVisibleContentPosition, wywala apke na amen 2026-08-20 17:01:54 +02:00
PerformerScenesScreen.tsx fix(listy): prog dlugosci nie ukrywa juz scen o NIEZNANEJ dlugosci w drill-downach 2026-08-20 10:07:58 +02:00
PerformersScreen.tsx fix(performers): wlasna obsada dla JAV, brak przycisku dla animacji 2026-08-14 12:51:39 +02:00
PinEntry.tsx fix(theme): rozdziel role akcentu i dodaj ramke, ktora cokolwiek oddziela 2026-08-14 09:50:08 +02:00
PlaybackQualityModal.tsx style: myslniki em/en z komentarzy i docstringow (calosc repo) 2026-08-11 11:51:57 +02:00
PlayerScreen.tsx feat(mobile): Chromecast (0.3.0, runtime 1.3) 2026-08-24 14:27:41 +02:00
SceneDetailScreen.tsx feat(ui): przebudowa ekranu szczegolow sceny wg makiety (kierunek A) 2026-08-18 14:36:56 +02:00
ScenesFilterModal.tsx feat(filtr): minimalna jakosc w filtrze scen (720p/1080p/4K) 2026-08-18 11:06:34 +02:00
ScenesScreen.tsx fix(mobile): zdejmij maintainVisibleContentPosition, wywala apke na amen 2026-08-20 17:01:54 +02:00
SiteScenesScreen.tsx fix(mobile): zdejmij maintainVisibleContentPosition, wywala apke na amen 2026-08-20 17:01:54 +02:00
SitesScreen.tsx fix(ui): grupuj changelog po miesiacu, zdejmij naglowek z Sites 2026-08-18 12:23:04 +02:00
StudioMoviesScreen.tsx fix(mobile): zdejmij maintainVisibleContentPosition, wywala apke na amen 2026-08-20 17:01:54 +02:00
StudioScenesScreen.tsx fix(listy): prog dlugosci nie ukrywa juz scen o NIEZNANEJ dlugosci w drill-downach 2026-08-20 10:07:58 +02:00
SubScoreBars.tsx style: myslniki em/en z komentarzy i docstringow (calosc repo) 2026-08-11 11:51:57 +02:00
TagScenesScreen.tsx fix(listy): prog dlugosci nie ukrywa juz scen o NIEZNANEJ dlugosci w drill-downach 2026-08-20 10:07:58 +02:00
TagsScreen.tsx fix(tags): wlasna lista tagow dla wertykalow + bez tagow z zerem scen 2026-08-14 12:41:07 +02:00