0b72827682
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>
1 line
6.9 KiB
Plaintext
1 line
6.9 KiB
Plaintext
[{"key":"androidx/compose/material/ripple/AndroidRippleIndicationInstance.class","name":"androidx/compose/material/ripple/AndroidRippleIndicationInstance.class","size":12681,"crc":-34249498},{"key":"androidx/compose/material/ripple/AndroidRippleNode.class","name":"androidx/compose/material/ripple/AndroidRippleNode.class","size":9307,"crc":1237535503},{"key":"androidx/compose/material/ripple/CommonRipple.class","name":"androidx/compose/material/ripple/CommonRipple.class","size":5833,"crc":-1156555442},{"key":"androidx/compose/material/ripple/CommonRippleIndicationInstance$addRipple$2.class","name":"androidx/compose/material/ripple/CommonRippleIndicationInstance$addRipple$2.class","size":4469,"crc":-233573857},{"key":"androidx/compose/material/ripple/CommonRippleIndicationInstance.class","name":"androidx/compose/material/ripple/CommonRippleIndicationInstance.class","size":9255,"crc":-513173716},{"key":"androidx/compose/material/ripple/CommonRippleNode$addRipple$2.class","name":"androidx/compose/material/ripple/CommonRippleNode$addRipple$2.class","size":4490,"crc":-2125236177},{"key":"androidx/compose/material/ripple/CommonRippleNode.class","name":"androidx/compose/material/ripple/CommonRippleNode.class","size":9609,"crc":-1504872431},{"key":"androidx/compose/material/ripple/DebugRippleTheme.class","name":"androidx/compose/material/ripple/DebugRippleTheme.class","size":3202,"crc":-674057946},{"key":"androidx/compose/material/ripple/PlatformRipple.class","name":"androidx/compose/material/ripple/PlatformRipple.class","size":6925,"crc":-1375002739},{"key":"androidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1$1.class","name":"androidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1$1.class","size":2863,"crc":-1050081601},{"key":"androidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1.class","name":"androidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1.class","size":4208,"crc":-545545618},{"key":"androidx/compose/material/ripple/Ripple.class","name":"androidx/compose/material/ripple/Ripple.class","size":9384,"crc":-849386866},{"key":"androidx/compose/material/ripple/RippleAlpha.class","name":"androidx/compose/material/ripple/RippleAlpha.class","size":2582,"crc":368570899},{"key":"androidx/compose/material/ripple/RippleAnimation$animate$1.class","name":"androidx/compose/material/ripple/RippleAnimation$animate$1.class","size":1751,"crc":-642218273},{"key":"androidx/compose/material/ripple/RippleAnimation$fadeIn$2$1.class","name":"androidx/compose/material/ripple/RippleAnimation$fadeIn$2$1.class","size":4156,"crc":763949514},{"key":"androidx/compose/material/ripple/RippleAnimation$fadeIn$2$2.class","name":"androidx/compose/material/ripple/RippleAnimation$fadeIn$2$2.class","size":4172,"crc":1040434143},{"key":"androidx/compose/material/ripple/RippleAnimation$fadeIn$2$3.class","name":"androidx/compose/material/ripple/RippleAnimation$fadeIn$2$3.class","size":4165,"crc":907685941},{"key":"androidx/compose/material/ripple/RippleAnimation$fadeIn$2.class","name":"androidx/compose/material/ripple/RippleAnimation$fadeIn$2.class","size":3816,"crc":709366187},{"key":"androidx/compose/material/ripple/RippleAnimation$fadeOut$2$1.class","name":"androidx/compose/material/ripple/RippleAnimation$fadeOut$2$1.class","size":4162,"crc":1512121139},{"key":"androidx/compose/material/ripple/RippleAnimation$fadeOut$2.class","name":"androidx/compose/material/ripple/RippleAnimation$fadeOut$2.class","size":3608,"crc":-1994330908},{"key":"androidx/compose/material/ripple/RippleAnimation.class","name":"androidx/compose/material/ripple/RippleAnimation.class","size":12323,"crc":1215605806},{"key":"androidx/compose/material/ripple/RippleAnimationKt.class","name":"androidx/compose/material/ripple/RippleAnimationKt.class","size":2744,"crc":-739244894},{"key":"androidx/compose/material/ripple/RippleContainer.class","name":"androidx/compose/material/ripple/RippleContainer.class","size":5284,"crc":629415077},{"key":"androidx/compose/material/ripple/RippleHostKey.class","name":"androidx/compose/material/ripple/RippleHostKey.class","size":481,"crc":1258936613},{"key":"androidx/compose/material/ripple/RippleHostMap.class","name":"androidx/compose/material/ripple/RippleHostMap.class","size":3235,"crc":900228621},{"key":"androidx/compose/material/ripple/RippleHostView$Companion.class","name":"androidx/compose/material/ripple/RippleHostView$Companion.class","size":1063,"crc":1947134764},{"key":"androidx/compose/material/ripple/RippleHostView.class","name":"androidx/compose/material/ripple/RippleHostView.class","size":8215,"crc":163326916},{"key":"androidx/compose/material/ripple/RippleIndicationInstance.class","name":"androidx/compose/material/ripple/RippleIndicationInstance.class","size":5388,"crc":-2081759473},{"key":"androidx/compose/material/ripple/RippleKt.class","name":"androidx/compose/material/ripple/RippleKt.class","size":8192,"crc":-1395010577},{"key":"androidx/compose/material/ripple/RippleNode$onAttach$1$1.class","name":"androidx/compose/material/ripple/RippleNode$onAttach$1$1.class","size":3519,"crc":-905756440},{"key":"androidx/compose/material/ripple/RippleNode$onAttach$1.class","name":"androidx/compose/material/ripple/RippleNode$onAttach$1.class","size":3851,"crc":-1118015630},{"key":"androidx/compose/material/ripple/RippleNode.class","name":"androidx/compose/material/ripple/RippleNode.class","size":12074,"crc":-1306751144},{"key":"androidx/compose/material/ripple/RippleTheme$Companion.class","name":"androidx/compose/material/ripple/RippleTheme$Companion.class","size":3193,"crc":-877832813},{"key":"androidx/compose/material/ripple/RippleTheme.class","name":"androidx/compose/material/ripple/RippleTheme.class","size":1888,"crc":-1141115992},{"key":"androidx/compose/material/ripple/RippleThemeKt.class","name":"androidx/compose/material/ripple/RippleThemeKt.class","size":3419,"crc":52000782},{"key":"androidx/compose/material/ripple/Ripple_androidKt.class","name":"androidx/compose/material/ripple/Ripple_androidKt.class","size":4694,"crc":474549726},{"key":"androidx/compose/material/ripple/StateLayer$handleInteraction$1.class","name":"androidx/compose/material/ripple/StateLayer$handleInteraction$1.class","size":4186,"crc":219448518},{"key":"androidx/compose/material/ripple/StateLayer$handleInteraction$2.class","name":"androidx/compose/material/ripple/StateLayer$handleInteraction$2.class","size":4124,"crc":-457603023},{"key":"androidx/compose/material/ripple/StateLayer.class","name":"androidx/compose/material/ripple/StateLayer.class","size":9889,"crc":219812133},{"key":"androidx/compose/material/ripple/UnprojectedRipple.class","name":"androidx/compose/material/ripple/UnprojectedRipple.class","size":2895,"crc":-603715021},{"key":"META-INF/androidx.compose.material_material-ripple.version","name":"META-INF/androidx.compose.material_material-ripple.version","size":7,"crc":1165938089},{"key":"META-INF/material-ripple.kotlin_module","name":"META-INF/material-ripple.kotlin_module","size":122,"crc":-326097474}] |