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>
This commit is contained in:
2026-05-26 00:27:05 -04:00
parent 0415b5ccc3
commit 0b72827682
5553 changed files with 63548 additions and 10 deletions
@@ -0,0 +1,62 @@
com.fabledsword.minstrel.app-profileinstaller-1.4.1-0 /home/bvandeusen/.gradle/caches/9.1.0/transforms/003b53d253c7ecfca41c678621f7e5c4/transformed/profileinstaller-1.4.1/res
com.fabledsword.minstrel.app-media3-exoplayer-1.10.1-1 /home/bvandeusen/.gradle/caches/9.1.0/transforms/04e3f2f1b71d47fe97a7f324a36819fa/transformed/media3-exoplayer-1.10.1/res
com.fabledsword.minstrel.app-fragment-1.5.1-2 /home/bvandeusen/.gradle/caches/9.1.0/transforms/08949229c9aa0eb6fee99df1e348f2ca/transformed/fragment-1.5.1/res
com.fabledsword.minstrel.app-core-viewtree-1.0.0-3 /home/bvandeusen/.gradle/caches/9.1.0/transforms/09356cc89c87bf712ea92c1760b4d2ec/transformed/core-viewtree-1.0.0/res
com.fabledsword.minstrel.app-transition-1.6.0-4 /home/bvandeusen/.gradle/caches/9.1.0/transforms/0f50a0d9e02fb947ba0048a6cfd1e929/transformed/transition-1.6.0/res
com.fabledsword.minstrel.app-lifecycle-livedata-core-ktx-2.9.4-5 /home/bvandeusen/.gradle/caches/9.1.0/transforms/10696fc2c6ddff67d00c55eb8653391d/transformed/lifecycle-livedata-core-ktx-2.9.4/res
com.fabledsword.minstrel.app-ui-tooling-6 /home/bvandeusen/.gradle/caches/9.1.0/transforms/16cd62fe6ae61d13ca1eccc606a0e73d/transformed/ui-tooling/res
com.fabledsword.minstrel.app-activity-1.9.3-7 /home/bvandeusen/.gradle/caches/9.1.0/transforms/230a74a7eaf76e367251ad6f28781557/transformed/activity-1.9.3/res
com.fabledsword.minstrel.app-activity-compose-1.9.3-8 /home/bvandeusen/.gradle/caches/9.1.0/transforms/238c762d94a42833d0e07fd3e40f422b/transformed/activity-compose-1.9.3/res
com.fabledsword.minstrel.app-navigation-runtime-2.8.3-9 /home/bvandeusen/.gradle/caches/9.1.0/transforms/27b2676fdd1f4b6a5e2b2ae46ba5dfc0/transformed/navigation-runtime-2.8.3/res
com.fabledsword.minstrel.app-lifecycle-viewmodel-release-10 /home/bvandeusen/.gradle/caches/9.1.0/transforms/2888a93ddc82a18e3330e0aed6050a75/transformed/lifecycle-viewmodel-release/res
com.fabledsword.minstrel.app-navigation-common-ktx-2.8.3-11 /home/bvandeusen/.gradle/caches/9.1.0/transforms/2917068af3079973219577647e3bb0ed/transformed/navigation-common-ktx-2.8.3/res
com.fabledsword.minstrel.app-customview-poolingcontainer-1.0.0-12 /home/bvandeusen/.gradle/caches/9.1.0/transforms/2c6da35a2c4e5249df8dd944a1da5698/transformed/customview-poolingcontainer-1.0.0/res
com.fabledsword.minstrel.app-room-ktx-2.8.4-13 /home/bvandeusen/.gradle/caches/9.1.0/transforms/35eebf9710bf8d5828ff52cebb1d86f9/transformed/room-ktx-2.8.4/res
com.fabledsword.minstrel.app-navigation-common-2.8.3-14 /home/bvandeusen/.gradle/caches/9.1.0/transforms/38356050856d33b913fa19d6357be4c0/transformed/navigation-common-2.8.3/res
com.fabledsword.minstrel.app-work-runtime-2.10.0-15 /home/bvandeusen/.gradle/caches/9.1.0/transforms/3e1b61cad0b9e7c759eaef0b6651542b/transformed/work-runtime-2.10.0/res
com.fabledsword.minstrel.app-ui-text-16 /home/bvandeusen/.gradle/caches/9.1.0/transforms/41edaf1d7a151ba746ddcd3c8999c4ab/transformed/ui-text/res
com.fabledsword.minstrel.app-lifecycle-runtime-compose-release-17 /home/bvandeusen/.gradle/caches/9.1.0/transforms/441e73a89ea027d1a1c1ccc454263e6e/transformed/lifecycle-runtime-compose-release/res
com.fabledsword.minstrel.app-lifecycle-viewmodel-savedstate-release-18 /home/bvandeusen/.gradle/caches/9.1.0/transforms/47a99357f527b7306f5ed0710e76b936/transformed/lifecycle-viewmodel-savedstate-release/res
com.fabledsword.minstrel.app-hilt-navigation-compose-1.2.0-19 /home/bvandeusen/.gradle/caches/9.1.0/transforms/4cb79a2b347e8d420c387512eaac2fc6/transformed/hilt-navigation-compose-1.2.0/res
com.fabledsword.minstrel.app-graphics-path-1.0.1-20 /home/bvandeusen/.gradle/caches/9.1.0/transforms/52a1f0ae740a8188fd3081d563b599fc/transformed/graphics-path-1.0.1/res
com.fabledsword.minstrel.app-runtime-saveable-21 /home/bvandeusen/.gradle/caches/9.1.0/transforms/570f2a3e2c1d00fa345700d1e88003d2/transformed/runtime-saveable/res
com.fabledsword.minstrel.app-window-1.5.0-22 /home/bvandeusen/.gradle/caches/9.1.0/transforms/57c89aed3bacc39d9089f120de7114c5/transformed/window-1.5.0/res
com.fabledsword.minstrel.app-savedstate-ktx-1.3.3-23 /home/bvandeusen/.gradle/caches/9.1.0/transforms/57d0ca809a2d25ab8d59aa6146a51881/transformed/savedstate-ktx-1.3.3/res
com.fabledsword.minstrel.app-lifecycle-livedata-core-2.9.4-24 /home/bvandeusen/.gradle/caches/9.1.0/transforms/5ab429942317023c866f2f40e6c8fe29/transformed/lifecycle-livedata-core-2.9.4/res
com.fabledsword.minstrel.app-lifecycle-process-2.9.4-25 /home/bvandeusen/.gradle/caches/9.1.0/transforms/5dd4eaec44e6a9bbf8e65213176fad7f/transformed/lifecycle-process-2.9.4/res
com.fabledsword.minstrel.app-ui-text-google-fonts-1.11.2-26 /home/bvandeusen/.gradle/caches/9.1.0/transforms/5e970ffc5c16aa803ae2441f1c68c55d/transformed/ui-text-google-fonts-1.11.2/res
com.fabledsword.minstrel.app-work-runtime-ktx-2.10.0-27 /home/bvandeusen/.gradle/caches/9.1.0/transforms/647bcc85e170da93bfc20453db2e34cd/transformed/work-runtime-ktx-2.10.0/res
com.fabledsword.minstrel.app-savedstate-release-28 /home/bvandeusen/.gradle/caches/9.1.0/transforms/69c4f93015022737f5374a499c1b637d/transformed/savedstate-release/res
com.fabledsword.minstrel.app-lifecycle-service-2.9.4-29 /home/bvandeusen/.gradle/caches/9.1.0/transforms/724f57f3f17ee004ca2e19db314a054f/transformed/lifecycle-service-2.9.4/res
com.fabledsword.minstrel.app-lifecycle-runtime-release-30 /home/bvandeusen/.gradle/caches/9.1.0/transforms/7878002b2a6e18a0d5b71e71cbec17f9/transformed/lifecycle-runtime-release/res
com.fabledsword.minstrel.app-hilt-navigation-1.2.0-31 /home/bvandeusen/.gradle/caches/9.1.0/transforms/797df14a62f04c1c61b0c052da6beece/transformed/hilt-navigation-1.2.0/res
com.fabledsword.minstrel.app-ui-32 /home/bvandeusen/.gradle/caches/9.1.0/transforms/7b0087027b2e745ae63119798905aea9/transformed/ui/res
com.fabledsword.minstrel.app-navigation-runtime-ktx-2.8.3-33 /home/bvandeusen/.gradle/caches/9.1.0/transforms/7c2245063e66fb4e415a40a976fb55a1/transformed/navigation-runtime-ktx-2.8.3/res
com.fabledsword.minstrel.app-lifecycle-viewmodel-compose-release-34 /home/bvandeusen/.gradle/caches/9.1.0/transforms/7c8782feb9ea1ae7dfc84dc56acbc857/transformed/lifecycle-viewmodel-compose-release/res
com.fabledsword.minstrel.app-ui-graphics-35 /home/bvandeusen/.gradle/caches/9.1.0/transforms/7db40cf5a14bfa334a57a384fe51b598/transformed/ui-graphics/res
com.fabledsword.minstrel.app-navigation-compose-2.8.3-36 /home/bvandeusen/.gradle/caches/9.1.0/transforms/94920e0034ed802621cff1397b895f83/transformed/navigation-compose-2.8.3/res
com.fabledsword.minstrel.app-foundation-37 /home/bvandeusen/.gradle/caches/9.1.0/transforms/95512e58bd7d17c67c4c09b39ba121f7/transformed/foundation/res
com.fabledsword.minstrel.app-media-1.7.0-38 /home/bvandeusen/.gradle/caches/9.1.0/transforms/9a445a8ed84a1e64bcae8b183d06b735/transformed/media-1.7.0/res
com.fabledsword.minstrel.app-annotation-experimental-1.5.0-39 /home/bvandeusen/.gradle/caches/9.1.0/transforms/a26dbdf5adcd7709ea20a940ca4bf469/transformed/annotation-experimental-1.5.0/res
com.fabledsword.minstrel.app-coil-core-release-40 /home/bvandeusen/.gradle/caches/9.1.0/transforms/a2c67cf922061d2b873c132058d77cb8/transformed/coil-core-release/res
com.fabledsword.minstrel.app-ui-test-manifest-1.11.2-41 /home/bvandeusen/.gradle/caches/9.1.0/transforms/a4571d27788d7b079c84d163ef3d92fa/transformed/ui-test-manifest-1.11.2/res
com.fabledsword.minstrel.app-lifecycle-viewmodel-ktx-2.9.4-42 /home/bvandeusen/.gradle/caches/9.1.0/transforms/a9817f899ff146106a8b2ba8d8d5f1b1/transformed/lifecycle-viewmodel-ktx-2.9.4/res
com.fabledsword.minstrel.app-hilt-work-1.2.0-43 /home/bvandeusen/.gradle/caches/9.1.0/transforms/b34bc67837a755e4f793189f72d5f09c/transformed/hilt-work-1.2.0/res
com.fabledsword.minstrel.app-startup-runtime-1.1.1-44 /home/bvandeusen/.gradle/caches/9.1.0/transforms/b61d24c15a92f9a733e31772267ff8be/transformed/startup-runtime-1.1.1/res
com.fabledsword.minstrel.app-appcompat-resources-1.7.0-45 /home/bvandeusen/.gradle/caches/9.1.0/transforms/b6b7789b9767f7c76d30d72bd0cd5cf4/transformed/appcompat-resources-1.7.0/res
com.fabledsword.minstrel.app-media3-session-1.10.1-46 /home/bvandeusen/.gradle/caches/9.1.0/transforms/b82340f3a6c039f710fbf45e1a05f735/transformed/media3-session-1.10.1/res
com.fabledsword.minstrel.app-core-ktx-1.16.0-47 /home/bvandeusen/.gradle/caches/9.1.0/transforms/bf32ae8ddaea05372d4ad7f827871b23/transformed/core-ktx-1.16.0/res
com.fabledsword.minstrel.app-tracing-1.2.0-48 /home/bvandeusen/.gradle/caches/9.1.0/transforms/c9b4039d9a86a8a182e2a0273c48b3cb/transformed/tracing-1.2.0/res
com.fabledsword.minstrel.app-core-1.16.0-49 /home/bvandeusen/.gradle/caches/9.1.0/transforms/d9aa6f8fb30bc358d9f571a8e198256f/transformed/core-1.16.0/res
com.fabledsword.minstrel.app-lifecycle-livedata-2.9.4-50 /home/bvandeusen/.gradle/caches/9.1.0/transforms/dc8bcf5f06806395093b767f965a888f/transformed/lifecycle-livedata-2.9.4/res
com.fabledsword.minstrel.app-activity-ktx-1.9.3-51 /home/bvandeusen/.gradle/caches/9.1.0/transforms/ddfd09175f921412fc12e0829ae24d38/transformed/activity-ktx-1.9.3/res
com.fabledsword.minstrel.app-tracing-ktx-1.2.0-52 /home/bvandeusen/.gradle/caches/9.1.0/transforms/e75a43c0c27722cf3841c812de9a06eb/transformed/tracing-ktx-1.2.0/res
com.fabledsword.minstrel.app-emoji2-1.4.0-53 /home/bvandeusen/.gradle/caches/9.1.0/transforms/ef208280b58a51538a2299532dcedc1e/transformed/emoji2-1.4.0/res
com.fabledsword.minstrel.app-material3-54 /home/bvandeusen/.gradle/caches/9.1.0/transforms/f0e359079e8a71634be94c251bdcc4c3/transformed/material3/res
com.fabledsword.minstrel.app-core-runtime-2.2.0-55 /home/bvandeusen/.gradle/caches/9.1.0/transforms/fc765492a1a738b07d7945301753d5e4/transformed/core-runtime-2.2.0/res
com.fabledsword.minstrel.app-updated_navigation_xml-56 /home/bvandeusen/Nextcloud/Projects/Minstrel/android/app/build/generated/updated_navigation_xml/debug
com.fabledsword.minstrel.app-packageDebugResources-57 /home/bvandeusen/Nextcloud/Projects/Minstrel/android/app/build/intermediates/incremental/debug/packageDebugResources/merged.dir
com.fabledsword.minstrel.app-packageDebugResources-58 /home/bvandeusen/Nextcloud/Projects/Minstrel/android/app/build/intermediates/incremental/debug/packageDebugResources/stripped.dir
com.fabledsword.minstrel.app-debug-59 /home/bvandeusen/Nextcloud/Projects/Minstrel/android/app/build/intermediates/merged_res/debug/mergeDebugResources
com.fabledsword.minstrel.app-debug-60 /home/bvandeusen/Nextcloud/Projects/Minstrel/android/app/src/debug/res
com.fabledsword.minstrel.app-main-61 /home/bvandeusen/Nextcloud/Projects/Minstrel/android/app/src/main/res
@@ -0,0 +1 @@
{"hilt-compiler-1.2.0.jar (androidx.hilt:hilt-compiler:1.2.0)":"KSP_PROCESSOR","hilt-compiler-2.59.2.jar (com.google.dagger:hilt-compiler:2.59.2)":"KSP_PROCESSOR","room-compiler-2.8.4.jar (androidx.room:room-compiler:2.8.4)":"KSP_PROCESSOR","dagger-compiler-2.59.2.jar (com.google.dagger:dagger-compiler:2.59.2)":"KSP_PROCESSOR"}
@@ -0,0 +1,21 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.fabledsword.minstrel",
"variantName": "debug",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "0.1.0-native",
"outputFile": "app-debug.apk"
}
],
"elementType": "File",
"minSdkVersionForDexing": 26
}
@@ -0,0 +1,2 @@
#- File Locator -
listingFile=../../../apk/debug/output-metadata.json
@@ -0,0 +1,2 @@
appMetadataVersion=1.1
androidGradlePluginVersion=9.0.1

Some files were not shown because too many files have changed in this diff Show More