Repository navigation
(2/5) The Windows client - #168
Open
ErickXavier wants to merge 5 commits into
Open
ErickXavier wants to merge 5 commits into
ErickXavier wants to merge 5 commits into
Conversation
Sill on Android phones, tablets and foldables, as a client of the Mac: the Mac's windows, live, with touch, keyboard and mouse, over the same wire, TLS door and pairing as the iPhone and iPad app, drawn to match that app. Nothing on the Apple side changes; ci.yml ignores clients/. - clients/core: the shared Kotlin core (standard library only): the wire field for field, pairing crypto and the hand-built certificate, TLS 1.3 with the pin as the whole of trust, one-shot mDNS, the session with the Mac's rules, pairing (ask, code, link, by address), saved Macs, the goodbye words and the redial; a model of the Mac's door and real HEVC samples as test fixtures. - clients/core's ui layer (docs/ui-parity.md): the iOS app's design read from its own Swift: Tokens.kt generated (palette, metrics, sizes, curves), PhonePortraitLayout, HostSettingsLedger and DuoPosture ported and held to vectors swiftc computes from the iOS sources, the stream screen's layouts and state machine, the trackpad, the key row, the words (checked against the iOS sources). A settings change's token comes from the session alone. The Mac's menus: MacMenuState, the iOS app's rules for kinds 24, 25 and 27, with the subscription at the first window list. - clients/android: platform APIs only, minSdk 29, MediaCodec, the key sealed by the Android Keystore, sill://pair links behind a confirmation; every screen drawn from the ui layer, with Android's insets, gesture exclusion, 48 dp targets and Back. Foldables: the system's window extensions by reflection (no AndroidX), else the hinge sensor, into the iOS app's fold rules; tested at the Galaxy Z Fold 8's 4:3 and other foldables' sizes in each posture. A Menus button with the Mac's menus as Android popups, read when opened. - clients/wire-vectors and clients/design: what the Mac's and the iOS app's own Swift computes, checked in CI. - clients.yml: the core's tests, the Swift checks, the Android JVM tests, lint and the APK. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GLHTdv4VtoAFh4pYebBnTE
A switch in the Settings panel's This device group, on by default (Sill.keepScreenOn, never sent to the Mac): while it is on and the stream screen shows, the screen never dims or locks by itself, so a stream only watched stays in view. iOS turns off its idle timer (ScreenAwake: a claim per stream screen, given back as it goes); Android sets FLAG_KEEP_SCREEN_ON on the stream's window. The words are PanelCopy's and the iOS app's, as check_copy.py requires. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GLHTdv4VtoAFh4pYebBnTE
With an Android client, an iPhone or iPad is no longer every device that can pair with or stream
from a Mac, so Sill.app's words say "device" where they meant any of them:
- The menu's and Settings › Devices' "Pair iPhone or iPad…" is "Pair a Device…", and the pairing
window is "Pair a Device", which says to scan the code or type the one below it (a client
without a camera types it).
- "An iPhone or iPad Needs Sill Updated" is "A Device Needs Sill Updated".
- The network, permissions, Direct Wireless, Remote Access and clipboard footnotes say "your
devices" or "your device"; the clipboard's footnote is ClipboardPolicy.macFootnote.
- Where only an iPhone or iPad can do it, the words still say so: the USB cable pairs an iPhone or
iPad by itself (Settings › Devices' footnote, the cable rule and its report).
The iPhone and iPad app, and the Kotlin core, name the menu item in their pairing messages
("On the Mac, choose Pair a Device… in the Sill menu"), so they change with it, and so do the
checks that hold those words (home-device, policy, home-model, clipboard, and the fixtures of
compatibility, goodbye and door-policy) and their mutants. A device on this build facing Sill for
Mac 0.5.1 is told the new name, which that Mac's menu does not have yet; a 0.5.1 device facing
this Sill.app the old one. docs/DEVELOPMENT.md and the App Store review notes follow.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GLHTdv4VtoAFh4pYebBnTE
- README: "Other systems (in development)" with Sill for Android, Keep Screen On in How it works (not in a release yet), how to build the Android client, and clients/'s exception to the Swift rule in Contributing. - SECURITY.md: an Android device among those that control a Mac, and clients/ in scope. - The issue forms ask for the device and its system, an Android one too. - docs/clients-plan.md's decision 11 and the release checklist: a client's binary is never released on a v* tag or as GitHub's latest release, which Sill.app's update check, the site's download link and release.yml all read. - CLAUDE.md: Keep Screen On, Sill.app's device words and the review's fixes in this branch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GLHTdv4VtoAFh4pYebBnTE
Sill on Windows PCs, as a client of the Mac, on the Android client's core and drawn to match the iPad app: Swing, HEVC decoded by FFmpeg 7.1.1 through bytedeco (Direct3D 11 when the GPU has it, else the CPU; the one third-party runtime dependency, Windows only, recorded in BRIEF), Ctrl as ⌘, the wheel as a scroll gesture, and jpackage (an MSI with WiX 3; Sill --self-test). - clients/swing-ui: the iOS app's controls from the core's tokens and curves (bar buttons, key caps, the Aa ruler, the window strip and its lights, the drawer, the Settings panel's rows, switches, the trackpad well), reused by the PC host. - clients/desktop: every control at StreamLayout's rectangles, opened and closed through StreamUi, the Settings panel on the ledger; the native frame, dark scrollbars, Esc and Tab, per-monitor scaling; the Menus button with the Mac's menus as a cascading menu, each read from the Mac when it opens, shortcuts at the right. clients.yml gains the client's tests, its real windows under Xvfb at 100 % and 200 % (screenshots kept) and a Windows job (the tests and the packaged runtime's self-test). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GLHTdv4VtoAFh4pYebBnTE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The second of four pull requests that bring Sill to more systems, each on the one before; each builds and tests on its own. It needs the previous one merged first: until then, its diff also shows the earlier branches' commits, and only its last commit is its own.
feat/android-client: the Android client, Keep Screen On, and Sill.app's device wordsfeat/windows-client: the Windows client ← this onefeat/linux-host: the Linux host, and the devices calling what they connect to a hostfeat/windows-host: the Windows hostThe site has its own pull request (
docs/site-other-platforms), independent of these four.Nothing here has run on real Windows or against a real Mac. docs/clients-plan.md lists W1–W9.
What it adds
clients/swing-ui: the clients' Swing controls, at the shared layout's rectangles:clients/desktop, the Windows client:Sill --self-testruns a self-test.windows-v*tags.