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
7.7 KiB
Plaintext
1 line
7.7 KiB
Plaintext
[{"key":"androidx/lifecycle/AndroidViewModel.class","name":"androidx/lifecycle/AndroidViewModel.class","size":1334,"crc":84131055},{"key":"androidx/lifecycle/AndroidViewModel_androidKt.class","name":"androidx/lifecycle/AndroidViewModel_androidKt.class","size":1058,"crc":-1065627333},{"key":"androidx/lifecycle/HasDefaultViewModelProviderFactory.class","name":"androidx/lifecycle/HasDefaultViewModelProviderFactory.class","size":1433,"crc":-1890344955},{"key":"androidx/lifecycle/ViewModel.class","name":"androidx/lifecycle/ViewModel.class","size":3688,"crc":1385162522},{"key":"androidx/lifecycle/ViewModelKt.class","name":"androidx/lifecycle/ViewModelKt.class","size":3200,"crc":-2040766149},{"key":"androidx/lifecycle/ViewModelLazy.class","name":"androidx/lifecycle/ViewModelLazy.class","size":5342,"crc":1366013618},{"key":"androidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion.class","name":"androidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion.class","size":2108,"crc":-153695082},{"key":"androidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$special$$inlined$Key$1.class","name":"androidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$special$$inlined$Key$1.class","size":1256,"crc":1900191060},{"key":"androidx/lifecycle/ViewModelProvider$AndroidViewModelFactory.class","name":"androidx/lifecycle/ViewModelProvider$AndroidViewModelFactory.class","size":7228,"crc":-199040977},{"key":"androidx/lifecycle/ViewModelProvider$Companion.class","name":"androidx/lifecycle/ViewModelProvider$Companion.class","size":4154,"crc":-1913648786},{"key":"androidx/lifecycle/ViewModelProvider$Factory$Companion.class","name":"androidx/lifecycle/ViewModelProvider$Factory$Companion.class","size":1987,"crc":-300351476},{"key":"androidx/lifecycle/ViewModelProvider$Factory.class","name":"androidx/lifecycle/ViewModelProvider$Factory.class","size":3144,"crc":494449351},{"key":"androidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion.class","name":"androidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion.class","size":2060,"crc":577931733},{"key":"androidx/lifecycle/ViewModelProvider$NewInstanceFactory.class","name":"androidx/lifecycle/ViewModelProvider$NewInstanceFactory.class","size":3938,"crc":1188329494},{"key":"androidx/lifecycle/ViewModelProvider$OnRequeryFactory.class","name":"androidx/lifecycle/ViewModelProvider$OnRequeryFactory.class","size":1338,"crc":169089131},{"key":"androidx/lifecycle/ViewModelProvider$special$$inlined$Key$1.class","name":"androidx/lifecycle/ViewModelProvider$special$$inlined$Key$1.class","size":1177,"crc":1843441083},{"key":"androidx/lifecycle/ViewModelProvider.class","name":"androidx/lifecycle/ViewModelProvider.class","size":8058,"crc":-404461306},{"key":"androidx/lifecycle/ViewModelProviderGetKt.class","name":"androidx/lifecycle/ViewModelProviderGetKt.class","size":1405,"crc":1047197175},{"key":"androidx/lifecycle/ViewModelStore.class","name":"androidx/lifecycle/ViewModelStore.class","size":2835,"crc":-1894165296},{"key":"androidx/lifecycle/ViewModelStoreOwner.class","name":"androidx/lifecycle/ViewModelStoreOwner.class","size":657,"crc":852060727},{"key":"androidx/lifecycle/ViewTreeViewModelKt.class","name":"androidx/lifecycle/ViewTreeViewModelKt.class","size":1306,"crc":1146856027},{"key":"androidx/lifecycle/ViewTreeViewModelStoreOwner.class","name":"androidx/lifecycle/ViewTreeViewModelStoreOwner.class","size":2123,"crc":486092908},{"key":"androidx/lifecycle/viewmodel/CreationExtras$Companion$Key$1.class","name":"androidx/lifecycle/viewmodel/CreationExtras$Companion$Key$1.class","size":1037,"crc":1372998634},{"key":"androidx/lifecycle/viewmodel/CreationExtras$Companion.class","name":"androidx/lifecycle/viewmodel/CreationExtras$Companion.class","size":1460,"crc":-1951900911},{"key":"androidx/lifecycle/viewmodel/CreationExtras$Empty.class","name":"androidx/lifecycle/viewmodel/CreationExtras$Empty.class","size":1509,"crc":-492955828},{"key":"androidx/lifecycle/viewmodel/CreationExtras$Key.class","name":"androidx/lifecycle/viewmodel/CreationExtras$Key.class","size":591,"crc":2104342658},{"key":"androidx/lifecycle/viewmodel/CreationExtras.class","name":"androidx/lifecycle/viewmodel/CreationExtras.class","size":2867,"crc":214085853},{"key":"androidx/lifecycle/viewmodel/CreationExtrasKt.class","name":"androidx/lifecycle/viewmodel/CreationExtrasKt.class","size":2319,"crc":-1931774744},{"key":"androidx/lifecycle/viewmodel/InitializerViewModelFactory.class","name":"androidx/lifecycle/viewmodel/InitializerViewModelFactory.class","size":2648,"crc":938182872},{"key":"androidx/lifecycle/viewmodel/InitializerViewModelFactoryBuilder.class","name":"androidx/lifecycle/viewmodel/InitializerViewModelFactoryBuilder.class","size":3501,"crc":106969697},{"key":"androidx/lifecycle/viewmodel/InitializerViewModelFactoryKt.class","name":"androidx/lifecycle/viewmodel/InitializerViewModelFactoryKt.class","size":2799,"crc":-1659473214},{"key":"androidx/lifecycle/viewmodel/MutableCreationExtras.class","name":"androidx/lifecycle/viewmodel/MutableCreationExtras.class","size":2941,"crc":2114561435},{"key":"androidx/lifecycle/viewmodel/ViewModelFactoryDsl.class","name":"androidx/lifecycle/viewmodel/ViewModelFactoryDsl.class","size":632,"crc":638307392},{"key":"androidx/lifecycle/viewmodel/ViewModelInitializer.class","name":"androidx/lifecycle/viewmodel/ViewModelInitializer.class","size":2680,"crc":1394244323},{"key":"androidx/lifecycle/viewmodel/ViewModelProviderImpl.class","name":"androidx/lifecycle/viewmodel/ViewModelProviderImpl.class","size":6465,"crc":1239972363},{"key":"androidx/lifecycle/viewmodel/ViewModelProviderImpl_androidKt.class","name":"androidx/lifecycle/viewmodel/ViewModelProviderImpl_androidKt.class","size":2320,"crc":768126844},{"key":"androidx/lifecycle/viewmodel/internal/CanonicalName_jvmKt.class","name":"androidx/lifecycle/viewmodel/internal/CanonicalName_jvmKt.class","size":984,"crc":773044805},{"key":"androidx/lifecycle/viewmodel/internal/CloseableCoroutineScope.class","name":"androidx/lifecycle/viewmodel/internal/CloseableCoroutineScope.class","size":1834,"crc":-1673770402},{"key":"androidx/lifecycle/viewmodel/internal/CloseableCoroutineScopeKt.class","name":"androidx/lifecycle/viewmodel/internal/CloseableCoroutineScopeKt.class","size":2494,"crc":1593083578},{"key":"androidx/lifecycle/viewmodel/internal/DefaultViewModelProviderFactory.class","name":"androidx/lifecycle/viewmodel/internal/DefaultViewModelProviderFactory.class","size":2058,"crc":1436031254},{"key":"androidx/lifecycle/viewmodel/internal/JvmViewModelProviders.class","name":"androidx/lifecycle/viewmodel/internal/JvmViewModelProviders.class","size":2751,"crc":-922451077},{"key":"androidx/lifecycle/viewmodel/internal/SynchronizedObject.class","name":"androidx/lifecycle/viewmodel/internal/SynchronizedObject.class","size":589,"crc":-1134446211},{"key":"androidx/lifecycle/viewmodel/internal/SynchronizedObjectKt.class","name":"androidx/lifecycle/viewmodel/internal/SynchronizedObjectKt.class","size":2539,"crc":295585271},{"key":"androidx/lifecycle/viewmodel/internal/SynchronizedObject_jvmKt.class","name":"androidx/lifecycle/viewmodel/internal/SynchronizedObject_jvmKt.class","size":1631,"crc":732318577},{"key":"androidx/lifecycle/viewmodel/internal/ViewModelImpl.class","name":"androidx/lifecycle/viewmodel/internal/ViewModelImpl.class","size":7746,"crc":1488918270},{"key":"androidx/lifecycle/viewmodel/internal/ViewModelProviders.class","name":"androidx/lifecycle/viewmodel/internal/ViewModelProviders.class","size":8521,"crc":1167300306},{"key":"META-INF/androidx.lifecycle_lifecycle-viewmodel.version","name":"META-INF/androidx.lifecycle_lifecycle-viewmodel.version","size":6,"crc":1653493832},{"key":"META-INF/lifecycle-viewmodel_release.kotlin_module","name":"META-INF/lifecycle-viewmodel_release.kotlin_module","size":414,"crc":-1862592921}] |