Files
amethyst/commonsUI
Claude 0a5aed7ec5 refactor: share the user avatar image, score tags and metadata observers
The avatar is the second most common dependency of the app's composables
(after AccountViewModel). This moves its rendering and the observers under
it into commonsUI, leaving the app with the settings/account reads.

  - Observers: the app's observeUserInfo, observeUserAboutMe,
    observeUserBanner and observeUserPicture were copies of the commonsUI
    relayClient/user ones, and its UserFinderFilterAssemblerSubscription
    (user, Account, dataSource) a copy of the shared subscription. They now
    delegate, keeping their signatures so no call site changes. The shared
    observeUserPicture gains the app's `subscribe` flag. observeUserName
    stays app-side: it applies the account's contact-card petname.
    (The shared subscription remembers per user *and* account, so an
    account switch no longer reuses the previous account's query state.)
  - ScoreTag / ScoreTagRegular / Small / Smallest move to ui/note.
  - RobohashAsyncImage, RobohashFallbackAsyncImage and GifProfilePicture
    move to commonsUI jvmAndroid ui/components (they tag requests with the
    jvmAndroid-only LocalBlossomCacheRedirectInterceptor header). The one
    Android API, starting/stopping an animated avatar's Animatable
    drawable, becomes AnimatedImageAutoPlay: an expect in jvmAndroid with
    the Android actual and a desktop no-op. The Coil request uses
    LocalPlatformContext instead of LocalContext.
  - isAnimatedMediaUrl, a pure URL check, moves to commons richtext.
  - UserPictureImage(userHex, picture, name, size, modifier,
    loadProfilePicture, loadRobohash, autoPlayGif) in commonsUI jvmAndroid
    ui/note is the display half of InnerUserPicture, which keeps reading
    the three settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0168wY9t7i9NC5u3svyMxEz6
2026-09-23 22:59:42 +00:00
..