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:
+182
@@ -0,0 +1,182 @@
|
||||
package com.fabledsword.minstrel;
|
||||
|
||||
import dagger.hilt.internal.aggregatedroot.codegen._com_fabledsword_minstrel_MinstrelApplication;
|
||||
import dagger.hilt.internal.componenttreedeps.ComponentTreeDeps;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_components_ActivityComponent;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_components_ActivityRetainedComponent;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_components_FragmentComponent;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_components_ServiceComponent;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_components_ViewComponent;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_components_ViewModelComponent;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_components_ViewWithFragmentComponent;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_internal_builders_ActivityComponentBuilder;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_internal_builders_ActivityRetainedComponentBuilder;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_internal_builders_FragmentComponentBuilder;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_internal_builders_ServiceComponentBuilder;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_internal_builders_ViewComponentBuilder;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_internal_builders_ViewModelComponentBuilder;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_android_internal_builders_ViewWithFragmentComponentBuilder;
|
||||
import dagger.hilt.processor.internal.definecomponent.codegen._dagger_hilt_components_SingletonComponent;
|
||||
import hilt_aggregated_deps._androidx_hilt_work_HiltWrapper_WorkerFactoryModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_MainActivity_GeneratedInjector;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_MinstrelApplication_GeneratedInjector;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_admin_ui_AdminLandingViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_admin_ui_AdminLandingViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_admin_ui_AdminQuarantineViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_admin_ui_AdminQuarantineViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_admin_ui_AdminRequestsViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_admin_ui_AdminRequestsViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_admin_ui_AdminUsersViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_admin_ui_AdminUsersViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_api_NetworkModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_auth_ui_AuthGateViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_auth_ui_AuthGateViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_auth_ui_LoginViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_auth_ui_LoginViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_auth_ui_ServerUrlViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_auth_ui_ServerUrlViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_cache_db_DatabaseModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_di_AppModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_discover_ui_DiscoverViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_discover_ui_DiscoverViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_history_ui_HistoryTabViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_history_ui_HistoryTabViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_home_ui_HomeViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_home_ui_HomeViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_library_ui_AlbumDetailViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_library_ui_AlbumDetailViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_library_ui_ArtistDetailViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_library_ui_ArtistDetailViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_library_ui_LibraryViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_library_ui_LibraryViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_likes_ui_LikedTabViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_likes_ui_LikedTabViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_player_MinstrelPlayerService_GeneratedInjector;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_player_PlayerModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_player_ui_PlayerViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_player_ui_PlayerViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_playlists_ui_PlaylistDetailViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_playlists_ui_PlaylistDetailViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_playlists_ui_PlaylistsListViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_playlists_ui_PlaylistsListViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_quarantine_ui_HiddenTabViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_quarantine_ui_HiddenTabViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_requests_ui_RequestsViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_requests_ui_RequestsViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_search_ui_SearchViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_search_ui_SearchViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_settings_ui_SettingsViewModel_HiltModules_BindsModule;
|
||||
import hilt_aggregated_deps._com_fabledsword_minstrel_settings_ui_SettingsViewModel_HiltModules_KeyModule;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_flags_FragmentGetContextFix_FragmentGetContextFixEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_flags_HiltWrapper_FragmentGetContextFix_FragmentGetContextFixModule;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_lifecycle_DefaultViewModelFactories_ActivityEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_lifecycle_DefaultViewModelFactories_FragmentEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_lifecycle_HiltViewModelFactory_ViewModelFactoriesEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_lifecycle_HiltWrapper_DefaultViewModelFactories_ActivityModule;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_lifecycle_HiltWrapper_HiltViewModelFactory_ActivityCreatorEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_lifecycle_HiltWrapper_HiltViewModelFactory_ViewModelModule;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_managers_ActivityComponentManager_ActivityComponentBuilderEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_managers_FragmentComponentManager_FragmentComponentBuilderEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_managers_HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedComponentBuilderEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_managers_HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedLifecycleEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_managers_HiltWrapper_ActivityRetainedComponentManager_LifecycleModule;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_managers_HiltWrapper_ActivitySavedStateHandleModule;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_managers_ServiceComponentManager_ServiceComponentBuilderEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_managers_ViewComponentManager_ViewComponentBuilderEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_managers_ViewComponentManager_ViewWithFragmentComponentBuilderEntryPoint;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_modules_ApplicationContextModule;
|
||||
import hilt_aggregated_deps._dagger_hilt_android_internal_modules_HiltWrapper_ActivityModule;
|
||||
|
||||
@ComponentTreeDeps(
|
||||
rootDeps = _com_fabledsword_minstrel_MinstrelApplication.class,
|
||||
defineComponentDeps = {
|
||||
_dagger_hilt_android_components_ActivityComponent.class,
|
||||
_dagger_hilt_android_components_ActivityRetainedComponent.class,
|
||||
_dagger_hilt_android_components_FragmentComponent.class,
|
||||
_dagger_hilt_android_components_ServiceComponent.class,
|
||||
_dagger_hilt_android_components_ViewComponent.class,
|
||||
_dagger_hilt_android_components_ViewModelComponent.class,
|
||||
_dagger_hilt_android_components_ViewWithFragmentComponent.class,
|
||||
_dagger_hilt_android_internal_builders_ActivityComponentBuilder.class,
|
||||
_dagger_hilt_android_internal_builders_ActivityRetainedComponentBuilder.class,
|
||||
_dagger_hilt_android_internal_builders_FragmentComponentBuilder.class,
|
||||
_dagger_hilt_android_internal_builders_ServiceComponentBuilder.class,
|
||||
_dagger_hilt_android_internal_builders_ViewComponentBuilder.class,
|
||||
_dagger_hilt_android_internal_builders_ViewModelComponentBuilder.class,
|
||||
_dagger_hilt_android_internal_builders_ViewWithFragmentComponentBuilder.class,
|
||||
_dagger_hilt_components_SingletonComponent.class
|
||||
},
|
||||
aggregatedDeps = {
|
||||
_androidx_hilt_work_HiltWrapper_WorkerFactoryModule.class,
|
||||
_com_fabledsword_minstrel_MainActivity_GeneratedInjector.class,
|
||||
_com_fabledsword_minstrel_MinstrelApplication_GeneratedInjector.class,
|
||||
_com_fabledsword_minstrel_admin_ui_AdminLandingViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_admin_ui_AdminLandingViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_admin_ui_AdminQuarantineViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_admin_ui_AdminQuarantineViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_admin_ui_AdminRequestsViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_admin_ui_AdminRequestsViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_admin_ui_AdminUsersViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_admin_ui_AdminUsersViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_api_NetworkModule.class,
|
||||
_com_fabledsword_minstrel_auth_ui_AuthGateViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_auth_ui_AuthGateViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_auth_ui_LoginViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_auth_ui_LoginViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_auth_ui_ServerUrlViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_auth_ui_ServerUrlViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_cache_db_DatabaseModule.class,
|
||||
_com_fabledsword_minstrel_di_AppModule.class,
|
||||
_com_fabledsword_minstrel_discover_ui_DiscoverViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_discover_ui_DiscoverViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_history_ui_HistoryTabViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_history_ui_HistoryTabViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_home_ui_HomeViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_home_ui_HomeViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_library_ui_AlbumDetailViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_library_ui_AlbumDetailViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_library_ui_ArtistDetailViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_library_ui_ArtistDetailViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_library_ui_LibraryViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_library_ui_LibraryViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_likes_ui_LikedTabViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_likes_ui_LikedTabViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_player_MinstrelPlayerService_GeneratedInjector.class,
|
||||
_com_fabledsword_minstrel_player_PlayerModule.class,
|
||||
_com_fabledsword_minstrel_player_ui_PlayerViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_player_ui_PlayerViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_playlists_ui_PlaylistDetailViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_playlists_ui_PlaylistDetailViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_playlists_ui_PlaylistsListViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_playlists_ui_PlaylistsListViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_quarantine_ui_HiddenTabViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_quarantine_ui_HiddenTabViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_requests_ui_RequestsViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_requests_ui_RequestsViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_search_ui_SearchViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_search_ui_SearchViewModel_HiltModules_KeyModule.class,
|
||||
_com_fabledsword_minstrel_settings_ui_SettingsViewModel_HiltModules_BindsModule.class,
|
||||
_com_fabledsword_minstrel_settings_ui_SettingsViewModel_HiltModules_KeyModule.class,
|
||||
_dagger_hilt_android_flags_FragmentGetContextFix_FragmentGetContextFixEntryPoint.class,
|
||||
_dagger_hilt_android_flags_HiltWrapper_FragmentGetContextFix_FragmentGetContextFixModule.class,
|
||||
_dagger_hilt_android_internal_lifecycle_DefaultViewModelFactories_ActivityEntryPoint.class,
|
||||
_dagger_hilt_android_internal_lifecycle_DefaultViewModelFactories_FragmentEntryPoint.class,
|
||||
_dagger_hilt_android_internal_lifecycle_HiltViewModelFactory_ViewModelFactoriesEntryPoint.class,
|
||||
_dagger_hilt_android_internal_lifecycle_HiltWrapper_DefaultViewModelFactories_ActivityModule.class,
|
||||
_dagger_hilt_android_internal_lifecycle_HiltWrapper_HiltViewModelFactory_ActivityCreatorEntryPoint.class,
|
||||
_dagger_hilt_android_internal_lifecycle_HiltWrapper_HiltViewModelFactory_ViewModelModule.class,
|
||||
_dagger_hilt_android_internal_managers_ActivityComponentManager_ActivityComponentBuilderEntryPoint.class,
|
||||
_dagger_hilt_android_internal_managers_FragmentComponentManager_FragmentComponentBuilderEntryPoint.class,
|
||||
_dagger_hilt_android_internal_managers_HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedComponentBuilderEntryPoint.class,
|
||||
_dagger_hilt_android_internal_managers_HiltWrapper_ActivityRetainedComponentManager_ActivityRetainedLifecycleEntryPoint.class,
|
||||
_dagger_hilt_android_internal_managers_HiltWrapper_ActivityRetainedComponentManager_LifecycleModule.class,
|
||||
_dagger_hilt_android_internal_managers_HiltWrapper_ActivitySavedStateHandleModule.class,
|
||||
_dagger_hilt_android_internal_managers_ServiceComponentManager_ServiceComponentBuilderEntryPoint.class,
|
||||
_dagger_hilt_android_internal_managers_ViewComponentManager_ViewComponentBuilderEntryPoint.class,
|
||||
_dagger_hilt_android_internal_managers_ViewComponentManager_ViewWithFragmentComponentBuilderEntryPoint.class,
|
||||
_dagger_hilt_android_internal_modules_ApplicationContextModule.class,
|
||||
_dagger_hilt_android_internal_modules_HiltWrapper_ActivityModule.class
|
||||
}
|
||||
)
|
||||
public final class MinstrelApplication_ComponentTreeDeps {
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
package dagger.hilt.internal.processedrootsentinel.codegen;
|
||||
|
||||
import dagger.hilt.internal.processedrootsentinel.ProcessedRootSentinel;
|
||||
|
||||
@ProcessedRootSentinel(
|
||||
roots = "com.fabledsword.minstrel.MinstrelApplication"
|
||||
)
|
||||
public final class _com_fabledsword_minstrel_MinstrelApplication {
|
||||
}
|
||||
Reference in New Issue
Block a user