Add native L@tr.link apps and system share targets - #75
Draft
CountableNewt wants to merge 20 commits into
Draft
CountableNewt wants to merge 20 commits into
CountableNewt wants to merge 20 commits into
Conversation
Keep mobile scopes and upstream proof plans aligned with the pinned bookmark API without distributing gateway credentials. Tracks LTR-23.
Add platform build and device-test entry points with OAuth setup and release verification documentation for LTR-23.
…e-and-firefox-extension-quick-save-up-to-date
Establish Compose, Room, Keystore-backed OAuth and gateway transport with durable account-bound saves, library management, export, and public feedback UI. Add contract and device tests for subsequent acceptance.
Use SwiftUI with a shared LatrKit core, atomic Keychain sessions, coordinated SQLite pending saves, and native account, library, tags, settings, and feedback flows. Add simulator and core regression coverage.
Fix LTR-27: Linux test ordering exposed a leaked window mock that caused Next server-component imports to require a nonexistent document.
Verify issuer discovery after OAuth return, keep review-account binding and byte-exact tags, expose global-tag progress, and cover gateway nonce regeneration, feedback serialization, and interprocess queue coordination. Preserve native CI test reports.
…e checks Keep feedback and queued operations bound to the reviewed account, persist rotated tokens before exposing them, retry fresh nonce proof pools, and recover migration/share state. Add tablet navigation, explicit archive sorting, native reading fallback, and mocked UI and transport regressions.
Use the shared L@tr.link vector with native adaptive masks and monochrome wallpaper tinting. Verify installed icon layers and wait for actual replacement intent delivery in share tests.
Compile the Icon Composer mark for default, dark, clear and tinted modes, with generated iOS18 iPhone and iPad fallbacks verified in CI. Correct Safari compact-toolbar selection in the share acceptance test.
Prevent the iPad acceptance test from tapping Safari Share while navigation still disables it, and assert the activity sheet before scrolling its actions.
Keeps the outlined L mark white across default, dark, and tinted Icon Composer appearances so the system cannot collapse it into the background.
Renames the generated foreground asset so stale raw-stroke caches cannot recreate the blue disk, and verifies the SVG is a closed white fill path.
Keeps the real Safari share acceptance test reliable when a clean simulator displays the toolbar onboarding overlay.
Matches the existing WAOW actor lookup while keeping public discovery separate from OAuth. Color-coded Material actions make archive, tag, and destructive delete behavior clear.
Uses the public WAOW actor lookup with cancellable SwiftUI search. Explicit SF Symbols and system tints distinguish archive, tag, and destructive delete actions.
Keeps the native share-extension acceptance test reliable when Safari minimizes both Share and More after navigation.
Avoids XCTest's invalid accessibility hit point while retaining the full production share-extension acceptance path.
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.
Adds native SwiftUI iPhone/iPad and Kotlin Compose Android apps so links shared from other apps can be reviewed with tags, retained offline, and saved through the existing credential-injecting web proxy. The apps include library/archive browsing, bookmark and tag management, pending saves, appearance settings, complete JSON export, migration, and native public-feedback forms.
Apple uses a Share Extension, App Group SQLite, atomic shared Keychain sessions, and process locks. Android uses a share Activity, Room, DataStore, and Keystore-protected sessions. Both implement native ATProto OAuth with PAR/PKCE/ES256 DPoP, strict callback/account validation, environment-specific metadata, and fresh proof pools on nonce retries. Their login fields now query the public WAOW Tech actor typeahead after a cancellable 200 ms debounce, using the same normalization and six-result contract as web; native avatar/name/handle rows fill the selected handle without starting OAuth. Gateway application credentials remain server-side. The deployed PATCH state adapter is explicit pending LTR-19.
Both apps use the shared L@tr.link vector mark. Apple compiles a native Icon Composer document for default/dark/clear/tinted appearances and generates iOS18 fallback icons; CI checks the compiled layers and iPhone/iPad renditions. Android supplies adaptive foreground/background and API33+ monochrome layers for themed icons; an installed-resource instrumentation test verifies rendering and safe-area bounds. Apple swipe actions use SF Symbols with indigo Archive/Restore, orange Tags, and red destructive Delete treatments; Android uses the equivalent Material icons and error color.
Local validation:
l-mark-outlined.svgname, and validation rejects the raw-stroke geometry that Icon Composer can close into a disk. Android adaptive and themed light/dark previews, installed icon assertions, and both APK variants. Safari compact-toolbar and Android replacement-intent test timing fixes pass locally on both Apple device families and the Android emulator.This remains a draft for authenticated acceptance. The Development Web service is live from commit
04d3b5ain Railway deployment1e0f983c-bfa0-45b7-8410-28e5aeacf202; the iOS metadata, logo, and gateway proxy return HTTP 200 fromtesting.latr.link, and CI run 34800231756 is fully green. Live authentication, reauthentication, app/extension contention with an authenticated account, and cross-client saves remain to be exercised on a real account/device. No Production deployment, TestFlight, store release, or public feedback test submission is included. LTR-26 tracks an existing upstream Unicode tag equality mismatch; native clients preserve authored UTF-8 tags.Tracking: LTR-23, LTR-24 (Android), LTR-25 (Apple), LTR-27 (test isolation). Setup, behavior, and acceptance checklist: docs/apps/native.md.