mirror of
https://github.com/narrrl/proton-stream.git
synced 2026-11-04 16:57:00 +01:00
The iOS client is now a screen-for-screen port of the Android app over the same pstr-android UniFFI surface, with no Rust changes: Library, title page, History, Shares (public links and Drive folders), Downloads and Settings, with the same strings, undo snackbars and two-pane layout on wide screens. - Theme from the engine's palette (Material role names, Inter, the same type ramp and corners), repainted live from the appearance settings. - Account sign-in with two-factor code, mailbox password and the Proton CAPTCHA in a non-persistent WKWebView, the Drive folder browser, and watch-history sync every five minutes, after sign-in, on player close and when the app leaves the screen. - Player over libmpv: resume, progress saved every 5 s, autoplay with the up-next card, skip and auto-skip from the chapter plan, track, speed, volume and episode pickers, landscape lock, mini transport, and lock-screen controls with interruption and route-change handling. - Offline downloads with the Android record format, free-space floor, retries, transfer rate and the Wi-Fi-only policy; interrupted transfers resume at next launch. - Config, data and download state are excluded from backup, as Android's allowBackup=false: a restore would bring shares back without their Keychain secrets and give two devices one sync identity. Picture-in-picture, the share sheet and background downloads are not possible the same way on iOS; docs/IOS.md lists why and what replaces them. Adds XCTest ports of the Android unit tests, a `test` command to scripts/build-ios.sh, the app icon and its render script, and an iOS workflow on macos-15 that runs the tests and builds the unsigned .ipa.
38 lines
1.8 KiB
XML
38 lines
1.8 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!--
|
|
The iOS app icon: Android's adaptive launcher icon, both layers on the full
|
|
108-unit canvas, since iOS cuts its own shape out of a square just as a
|
|
launcher does. Layer sources: android/app/src/main/res/drawable/
|
|
ic_launcher_background.xml and ic_launcher_foreground.xml. The glyph is
|
|
scaled up by 108/72: a launcher shows only the middle 72 units of the layer,
|
|
and iOS's mask takes far less off the edges.
|
|
Render with scripts/render-ios-icon.sh.
|
|
-->
|
|
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 108 108">
|
|
<defs>
|
|
<linearGradient id="face" gradientUnits="userSpaceOnUse" x1="0" y1="0" x2="108" y2="108">
|
|
<stop offset="0" stop-color="#A48BFF"/>
|
|
<stop offset="0.55" stop-color="#7552FF"/>
|
|
<stop offset="1" stop-color="#5B36F2"/>
|
|
</linearGradient>
|
|
<linearGradient id="glyph" gradientUnits="userSpaceOnUse" x1="0" y1="36" x2="0" y2="88">
|
|
<stop offset="0" stop-color="#FFFFFF"/>
|
|
<stop offset="1" stop-color="#ECE6FF"/>
|
|
</linearGradient>
|
|
<clipPath id="blocks">
|
|
<path d="M0,0h63v128h-63zM68.5,0h10v128h-10zM84,0h44v128h-44z"/>
|
|
</clipPath>
|
|
</defs>
|
|
<rect width="108" height="108" fill="url(#face)"/>
|
|
<g transform="translate(54 54) scale(1.5) translate(-54 -54)">
|
|
<g transform="translate(-16 -8) translate(70 62) scale(0.6923) translate(-70 -62)">
|
|
<g transform="translate(0 3)" clip-path="url(#blocks)">
|
|
<path fill="#2E1596" fill-opacity="0.302" d="M50,41.5v41a6,6 0,0 0,9.1 5.1l34.2,-20.5a6,6 0,0 0,0 -10.3L59.1,36.4A6,6 0,0 0,50 41.5z"/>
|
|
</g>
|
|
<g clip-path="url(#blocks)">
|
|
<path fill="url(#glyph)" d="M50,41.5v41a6,6 0,0 0,9.1 5.1l34.2,-20.5a6,6 0,0 0,0 -10.3L59.1,36.4A6,6 0,0 0,50 41.5z"/>
|
|
</g>
|
|
</g>
|
|
</g>
|
|
</svg>
|