mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-06 11:48:24 +00:00
Audit of the previous commit. Four findings, all reachable in normal use. The probe was stricter than the hand-off it predicts. It carried CATEGORY_BROWSABLE and queried with flags=0, while the hand-off goes through startActivity, which implies CATEGORY_DEFAULT and nothing else. IntentFilter.matchCategories returns the first category on the *intent* the filter lacks, so each category added to a query narrows the match: any app declaring only DEFAULT was invisible to the probe and its chip was hidden even though tapping it would have worked. The probe now carries no category and uses MATCH_DEFAULT_ONLY, resolving exactly the set startActivity would. The <queries> entries lose the category for the same reason — there it narrows package visibility itself. The chip snapshotted the probe result with remember(target.type), so it never saw the probe finish. A web target is offered before any probe runs, since any browser opens https, so that snapshot pinned the fallback glyph and the real app icon could not appear until the picker was closed and reopened — the Venmo and PayPal case the icon exists for. It now collects the availability flow. peek() built the recipient's target list eagerly, walking the kind:10133 tag array on every call, including the one-tap zap path with the feature switched off. selectFor now takes it as a lambda behind the cheap gates, pinned by a test that counts reads. warm() runs on each picker open so resolution stays fresh when the user installs an app and comes back, but it also re-read each APK's resources and re-rasterised its icon to answer the same question. Decoded icons are now kept across warms, keyed by package and size, and the browser control probe only runs when a web target is actually present. Also: the icon failure log kept its message but dropped the throwable; it now passes it. Removes the unused clear(). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JXKZeV6FNhXF9BBjgEtfvS