feat: Implement setup screen and login logic

- Add SetupScreen with UI for server URL, username, and password input.
- Make SetupScreen the initial screen in the navigation graph.
- Implement secure credential storage using EncryptedSharedPreferences.
- Create CredentialsRepository and AuthRepository to manage credentials and auth tokens.
- Add LoginUseCase to handle the business logic for logging in.
- Implement a temporary Retrofit client in ItemRepository to handle login against a user-provided URL.
- Integrate login logic into SetupViewModel.
- Update all relevant project documentation and DI modules.
This commit is contained in:
2025-08-08 20:17:50 +03:00
parent 01e9b7bb00
commit 2853b5a47e
23 changed files with 602 additions and 23 deletions

View File

@@ -59,6 +59,15 @@
<file name="app/src/main/java/com/homebox/lens/ui/screen/search/SearchViewModel.kt" status="stub" spec_ref_id="screen_search">
<purpose_summary>ViewModel for the Search screen.</purpose_summary>
</file>
<file name="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupScreen.kt" status="stub" spec_ref_id="screen_setup">
<purpose_summary>UI for the Setup screen.</purpose_summary>
</file>
<file name="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupViewModel.kt" status="stub" spec_ref_id="screen_setup">
<purpose_summary>ViewModel for the Setup screen.</purpose_summary>
</file>
<file name="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupUiState.kt" status="implemented" spec_ref_id="screen_setup">
<purpose_summary>UI state for the Setup screen.</purpose_summary>
</file>
</module>
<module name="data" type="android_library">
<purpose_summary>Data layer, responsible for data sources (network, local DB) and repository implementations.</purpose_summary>
@@ -80,12 +89,33 @@
<file name="data/src/main/java/com/homebox/lens/data/di/RepositoryModule.kt" status="implemented" ref_id="di_repo">
<purpose_summary>Hilt module for binding repository interfaces to their implementations.</purpose_summary>
</file>
<file name="data/src/main/java/com/homebox/lens/data/di/StorageModule.kt" status="implemented" ref_id="di_storage">
<purpose_summary>Hilt module for providing storage-related dependencies (EncryptedSharedPreferences).</purpose_summary>
</file>
<file name="data/src/main/java/com/homebox/lens/data/repository/CredentialsRepositoryImpl.kt" status="implemented" ref_id="repo_credentials_impl">
<purpose_summary>Implementation of the CredentialsRepository.</purpose_summary>
</file>
<file name="data/src/main/java/com/homebox/lens/data/repository/AuthRepositoryImpl.kt" status="implemented" ref_id="repo_auth_impl">
<purpose_summary>Implementation of the AuthRepository.</purpose_summary>
</file>
</module>
<module name="domain" type="kotlin_jvm_library">
<purpose_summary>Domain layer, contains business logic, use cases, and repository interfaces. Pure Kotlin module.</purpose_summary>
<file name="domain/src/main/java/com/homebox/lens/domain/model/Credentials.kt" status="implemented" ref_id="model_credentials">
<purpose_summary>Data class for holding user credentials.</purpose_summary>
</file>
<file name="domain/src/main/java/com/homebox/lens/domain/repository/AuthRepository.kt" status="implemented" ref_id="repo_auth_interface">
<purpose_summary>Interface for the auth repository.</purpose_summary>
</file>
<file name="domain/src/main/java/com/homebox/lens/domain/repository/CredentialsRepository.kt" status="implemented" ref_id="repo_credentials_interface">
<purpose_summary>Interface for the credentials repository.</purpose_summary>
</file>
<file name="domain/src/main/java/com/homebox/lens/domain/repository/ItemRepository.kt" status="implemented" ref_id="repo_interface">
<purpose_summary>Interface defining the contract for data operations related to items.</purpose_summary>
</file>
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/LoginUseCase.kt" status="implemented" spec_ref_id="uc_login">
<purpose_summary>Use case for user login.</purpose_summary>
</file>
<file name="domain/src/main/java/com/homebox/lens/domain/usecase/CreateItemUseCase.kt" status="implemented" spec_ref_id="uc_create_item">
<purpose_summary>Use case for creating a new item.</purpose_summary>
</file>

View File

@@ -117,6 +117,7 @@
<USE_CASE id="uc_delete_item" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/DeleteItemUseCase.kt" />
<USE_CASE id="uc_get_all_labels" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLabelsUseCase.kt" />
<USE_CASE id="uc_get_all_locations" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/GetAllLocationsUseCase.kt" />
<USE_CASE id="uc_login" file_ref="domain/src/main/java/com/homebox/lens/domain/usecase/LoginUseCase.kt" />
<!-- UI Screens -->
<UI_SCREEN id="screen_dashboard" file_ref="app/src/main/java/com/homebox/lens/ui/screen/dashboard/DashboardScreen.kt" />
@@ -126,5 +127,6 @@
<UI_SCREEN id="screen_labels_list" file_ref="app/src/main/java/com/homebox/lens/ui/screen/labelslist/LabelsListScreen.kt" />
<UI_SCREEN id="screen_locations_list" file_ref="app/src/main/java/com/homebox/lens/ui/screen/locationslist/LocationsListScreen.kt" />
<UI_SCREEN id="screen_search" file_ref="app/src/main/java/com/homebox/lens/ui/screen/search/SearchScreen.kt" />
<UI_SCREEN id="screen_setup" file_ref="app/src/main/java/com/homebox/lens/ui/screen/setup/SetupScreen.kt" />
</IMPLEMENTATION_MAP>
</PROJECT_SPECIFICATION>