Files
minstrel/android/app/build/intermediates/incremental/debug-mergeJavaRes/zip-cache/JmLLiydODuWhIuoKZLWKXQ==
T
bvandeusen 0b72827682 fix(android): unblock first device test — auth contrast + dynamic base URL
Two regressions surfaced on the first real device run.

1. Contrast on ServerUrl + Login screens: both wrapped content in a
   bare Box(fillMaxSize), no Surface. The obsidian background never
   painted (rendered against the system root view's default),
   LocalContentColor cascade fell through to Material's default
   contentColor — the screens rendered as near-invisible dark text
   on dark grey. Wrap both in Surface(color = background, contentColor
   = onBackground) so the bg paints AND the M3 contentColor pipeline
   flows correctly through OutlinedTextField labels / cursor /
   placeholders + the Button content tint.

2. The bigger bug: NetworkModule.provideRetrofit read
   authStore.baseUrl.value ONCE at Retrofit creation. AuthStore loads
   from Room async, so at injection time the value was still the
   localhost:8080 placeholder. Result: even after the user typed
   their real server URL on the ServerUrl screen, every API call
   kept hitting localhost:8080 ("Failed to connect to
   localhost/127.0.0.1:8080" on the login attempt). The pre-fix
   NetworkModule comment even acknowledged it — *"Server-URL
   changes require an app relaunch"*.

   Fix: per-request rewrite. New BaseUrlInterceptor reads the live
   AuthStore.baseUrl.value on every request and rewrites
   scheme/host/port of the outgoing URL. Retrofit now keeps a
   placeholder baseUrl ("http://placeholder.invalid/") solely to
   satisfy its parser; the actual target host is dynamic. Order in
   OkHttp chain: BaseUrl first → Auth → logging, so the cookie
   interceptor sees the final URL.

New:
  - api/BaseUrlInterceptor.kt — per-request scheme/host/port rewrite
    from AuthStore.baseUrl. Falls through to the original request
    when the stored URL is unparseable.

Modified:
  - api/NetworkModule.kt — adds BaseUrlInterceptor to the OkHttp
    chain. Drops the AuthStore dependency from provideRetrofit;
    swaps baseUrl for the placeholder.
  - auth/ui/ServerUrlScreen.kt — Box → Surface wrap.
  - auth/ui/LoginScreen.kt — Box → Surface wrap.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 00:27:05 -04:00

1 line
6.6 KiB
Plaintext

[{"key":"androidx/dynamicanimation/animation/AnimationHandler$AnimationCallbackDispatcher.class","name":"androidx/dynamicanimation/animation/AnimationHandler$AnimationCallbackDispatcher.class","size":1356,"crc":-718037904},{"key":"androidx/dynamicanimation/animation/AnimationHandler$AnimationFrameCallback.class","name":"androidx/dynamicanimation/animation/AnimationHandler$AnimationFrameCallback.class","size":320,"crc":-1066524157},{"key":"androidx/dynamicanimation/animation/AnimationHandler$AnimationFrameCallbackProvider.class","name":"androidx/dynamicanimation/animation/AnimationHandler$AnimationFrameCallbackProvider.class","size":922,"crc":1652839646},{"key":"androidx/dynamicanimation/animation/AnimationHandler$FrameCallbackProvider14$1.class","name":"androidx/dynamicanimation/animation/AnimationHandler$FrameCallbackProvider14$1.class","size":1405,"crc":-1161287490},{"key":"androidx/dynamicanimation/animation/AnimationHandler$FrameCallbackProvider14.class","name":"androidx/dynamicanimation/animation/AnimationHandler$FrameCallbackProvider14.class","size":1754,"crc":-1123892098},{"key":"androidx/dynamicanimation/animation/AnimationHandler$FrameCallbackProvider16$1.class","name":"androidx/dynamicanimation/animation/AnimationHandler$FrameCallbackProvider16$1.class","size":1421,"crc":-820374680},{"key":"androidx/dynamicanimation/animation/AnimationHandler$FrameCallbackProvider16.class","name":"androidx/dynamicanimation/animation/AnimationHandler$FrameCallbackProvider16.class","size":1713,"crc":2016359396},{"key":"androidx/dynamicanimation/animation/AnimationHandler.class","name":"androidx/dynamicanimation/animation/AnimationHandler.class","size":5246,"crc":-1389731033},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$1.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$1.class","size":1239,"crc":-1222684849},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$10.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$10.class","size":1287,"crc":-208116875},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$11.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$11.class","size":1309,"crc":-1325533865},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$12.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$12.class","size":1295,"crc":2131609179},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$13.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$13.class","size":1301,"crc":1034052063},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$14.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$14.class","size":1301,"crc":-904572304},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$15.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$15.class","size":1409,"crc":-1858181107},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$2.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$2.class","size":1307,"crc":-196987581},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$3.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$3.class","size":1329,"crc":1592556860},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$4.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$4.class","size":1295,"crc":-331321136},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$5.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$5.class","size":1295,"crc":1674222164},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$6.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$6.class","size":1299,"crc":-230981206},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$7.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$7.class","size":1301,"crc":456643978},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$8.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$8.class","size":1301,"crc":-591760717},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$9.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$9.class","size":1285,"crc":1752964248},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$MassState.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$MassState.class","size":507,"crc":317090469},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$OnAnimationEndListener.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$OnAnimationEndListener.class","size":374,"crc":-207050744},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$OnAnimationUpdateListener.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$OnAnimationUpdateListener.class","size":382,"crc":-1755120515},{"key":"androidx/dynamicanimation/animation/DynamicAnimation$ViewProperty.class","name":"androidx/dynamicanimation/animation/DynamicAnimation$ViewProperty.class","size":980,"crc":269051369},{"key":"androidx/dynamicanimation/animation/DynamicAnimation.class","name":"androidx/dynamicanimation/animation/DynamicAnimation.class","size":12006,"crc":-1813609164},{"key":"androidx/dynamicanimation/animation/FlingAnimation$DragForce.class","name":"androidx/dynamicanimation/animation/FlingAnimation$DragForce.class","size":2021,"crc":67279253},{"key":"androidx/dynamicanimation/animation/FlingAnimation.class","name":"androidx/dynamicanimation/animation/FlingAnimation.class","size":3749,"crc":1699976850},{"key":"androidx/dynamicanimation/animation/FloatPropertyCompat$1.class","name":"androidx/dynamicanimation/animation/FloatPropertyCompat$1.class","size":1377,"crc":300120239},{"key":"androidx/dynamicanimation/animation/FloatPropertyCompat.class","name":"androidx/dynamicanimation/animation/FloatPropertyCompat.class","size":1496,"crc":151089524},{"key":"androidx/dynamicanimation/animation/FloatValueHolder.class","name":"androidx/dynamicanimation/animation/FloatValueHolder.class","size":672,"crc":-364728695},{"key":"androidx/dynamicanimation/animation/Force.class","name":"androidx/dynamicanimation/animation/Force.class","size":195,"crc":-1130137549},{"key":"androidx/dynamicanimation/animation/SpringAnimation.class","name":"androidx/dynamicanimation/animation/SpringAnimation.class","size":5129,"crc":1779631019},{"key":"androidx/dynamicanimation/animation/SpringForce.class","name":"androidx/dynamicanimation/animation/SpringForce.class","size":5088,"crc":1145411514},{"key":"META-INF/androidx.dynamicanimation_dynamicanimation.version","name":"META-INF/androidx.dynamicanimation_dynamicanimation.version","size":6,"crc":-42031000}]