Files
amethyst/gradle
Claude 86831d8df3 refactor(ui): user avatar, name, loaders and user observers move to commonsUI
Four of step 5's hubs (UserProfilePicture, UsernameDisplay, Loaders and
the per-user observe* overloads) had one or two app ties left each:
- RobohashAsyncImage (avatars and their fallbacks) moves from commonsUI's
  jvmAndroid to commonMain. The local-Blossom request marker it sets
  becomes LocalBlossomCacheHeaders (commons commonMain), which the OkHttp
  interceptor now aliases; AnimatedImageAutoPlay's expect gains a no-op
  iOS actual. commonsUI's commonMain takes coil-network-core for
  NetworkHeaders (Coil, Apache-2.0 per its POM, multiplatform; already on
  the JVM classpath through coil-network-okhttp).
- LoadUser (resolve a hex to its cached User) leaves the chat-room header
  file for commonsUI commons.ui.note.
- DrawPlayName, the text-to-speech button, stays in the app in its own
  file; UsernameDisplay no longer reaches Android's TTS.
- LoadOts builds its resolver through the account's otsResolverBuilder,
  the same AppModules builder it read off Amethyst.instance.
- The user observers' @SuppressLint becomes @Suppress (Android lint reads
  both), and an unused mockAccountViewModel() in a preview is gone.

Then, into commonsUI:
- UserProfilePicture, UsernameDisplay and Loaders -> commons.ui.note.
- The accountViewModel overloads of the per-user observers and of the
  user-finder subscription -> commons.relayClient.user
  (AccountUserObservers.kt, AccountUserFinderSubscription.kt), beside the
  shared versions they delegate to.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S7FuNBSKiyVecARSoE4B9P
2026-09-28 16:51:05 +00:00
..