Skip to content

Release v1.0.0 - RhoStudio UI - #17

Merged
alexistercero-rho-dev merged 48 commits into
mainfrom
pre-release
Jul 23, 2026
Merged

Release v1.0.0 - RhoStudio UI #17
alexistercero-rho-dev merged 48 commits into
mainfrom
pre-release

Conversation

@AlexisTercero55

Copy link
Copy Markdown
Collaborator

Rho Studio UI App

An Android View System app.

logintohomepageMVVM

Architecture

  • MVVM Architecture for managing the app and code.
  • Single-activity Android architecture.
  • Android View System for UI.
  • Session manager.

Current navigation graph

image

close #16

Rho.Studio®

AlexisTercero55 and others added 30 commits February 18, 2026 15:14
- Update Kotlin version from 2.0.21 to 2.1.0 in `libs.versions.toml`
- Add `kotlin-parcelize` plugin configuration to version catalogs and project-level build files
- Upgrade Java Toolchain and JVM target from version 11 to 17
- Migrate `kotlinOptions` to the new `kotlin` extension DSL for JVM target configuration

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>

#4
- Enable `android.enableJetifier` in `gradle.properties` to support legacy library migration
- Add `androidx-fragment-ktx` version 1.8.9 to version catalog and include it as a dependency in `app/build.gradle.kts`

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
#4
- Update application and activity theme from `Theme.UI` to `Theme.RhoStudio`
- Set `launchMode` to `singleTop` for `MainActivity`
- Remove redundant label and clean up whitespace in `MainActivity` declaration

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Add `gson`, `material` (Google), and Data Binding `compiler` dependencies to `libs.versions.toml` and `app/build.gradle.kts`
- Enable `viewBinding` in `buildFeatures`
- Explicitly configure `sourceSets` for `java` and `res` directories in `app/build.gradle.kts`
- Apply `kapt` for the Data Binding compiler implementation

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Define `Theme.RhoStudio` with MaterialComponents DayNight configuration and standard brand colors
- Add new Samsung device profiles (Galaxy A14 5G and A16 5G) to device streaming cache
- Update `strings.xml` with comprehensive login validation messages, hints, and a success notification
- Add `error` and `success` color resources to `colors.xml`
- Rename `app_name` to "RhoStudio UI"

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Implement `LoginViewModel` to handle user input validation and authentication state
- Integrate with `SessionManager` for login execution and session persistence
- Add real-time validation for email and password fields using `LiveData`
- Manage asynchronous login operations using coroutines with job cancellation logic
- Provide utility methods for resetting the form and clearing UI messages (toasts and errors)

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Create `Credentials` data class in `com.rho.studio.ui.core.model` to manage user authentication data
- Implement validation properties `isEmailValid` (using Android `Patterns`), `isPasswordValid` (minimum 6 characters), and a general `isValid` flag
- Add `validationErrors` list to provide specific feedback for empty fields or malformed input
- Include helper methods and properties like `isEmpty` and `clear()` for state management

Signed-off-by: Alexis Tercero <alexis.tercero@rho.studio>
Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Create `Credentials` data class in `com.rho.studio.ui.core.model` to manage user authentication data
- Implement validation properties `isEmailValid` (using Android `Patterns`), `isPasswordValid` (minimum 6 characters), and a general `isValid` flag
- Add `validationErrors` list to provide specific feedback for empty fields or malformed input
- Include helper methods and properties like `isEmpty` and `clear()` for state management

Signed-off-by: Alexis Tercero <alexis.tercero@rho.studio>
Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Implement `User` and `UserPreferences` data classes in the `com.rho.studio.ui.core.model` package
- Add `Parcelize` support to both classes for efficient data transfer between Android components
- Include helper properties for `initials` and `displayName` based on user name or email
- Add utility methods for formatting creation dates and calculating relative last login time

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Implement `User` and `UserPreferences` data classes in the `com.rho.studio.ui.core.model` package
- Add `Parcelize` support to both classes for efficient data transfer between Android components
- Include helper properties for `initials` and `displayName` based on user name or email
- Add utility methods for formatting creation dates and calculating relative last login time

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Create `LoginFragment` to serve as the main orchestration layer for the authentication feature
- Implement child fragment composition by embedding `LoginEmailFragment`, `LoginPasswordFragment`, and `LoginButtonFragment`
- Add state observation for toast messages, errors, and loading states via `LoginViewModel`
- Integrate with `BaseFragment` for standardized ViewBinding and ViewModel management
- Include cleanup logic to reset transient UI states on view destruction

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Implement `LoginEmailFragment` as a reusable component within the auth feature
- Integrate shared state using `LoginViewModel` scoped to the parent fragment
- Implement 300ms input debouncing for email validation to optimize UI performance
- Configure real-time error feedback via `TextInputLayout` by observing `emailError`
- Utilize `BaseFragment` and Data Binding for standardized view initialization and cleanup

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Implement `LoginButtonFragment` to manage the login button and loading state
- Use a shared `LoginViewModel` scoped to the parent fragment to synchronize form validation and loading states
- Add a custom `BindingAdapter` for displaying toast messages from the ViewModel
- Implement reactive UI updates for button enablement and progress bar visibility
- Integrate with `BaseFragment` and Data Binding for consistent architecture

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Implement `LoginPasswordFragment` to handle secure password input with two-way data binding
- Use a shared `LoginViewModel` scoped to the parent fragment for synchronized state management
- Integrate a 300ms debounce mechanism on text changes to optimize validation performance
- Add observers for real-time validation feedback through `TextInputLayout` error states

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
…and session management

- Migrate `MainActivity` from `ComponentActivity` to `AppCompatActivity`.
- Implement `SessionManager` and `LoginViewModel` initialization and observation logic.
- Add "Single Activity" orchestrator logic to handle fragment navigation based on authentication state.
- Implement a global `UncaughtExceptionHandler` for crash logging and reporting.
- Introduce `initializeBinding`, `initializeManagers`, and `setupObservers` methods for better lifecycle management.
- Update `ActivityMainBinding` integration to include `SessionManager` and lifecycle owner assignment.
- Replace direct `LoginViewModel` binding in `onCreate` with a fragment-based approach using `LoginFragment`.
- Add synchronization for global progress indicator and error handling via `SessionManager` observers.

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Introduce `BaseViewModel` as an abstract base class for all ViewModels to inherit from.
- Implement a `launchSafe` extension function on `viewModelScope` to provide a standardized, crash-safe way to launch coroutines.
- Add a virtual `handleError` method for centralized exception handling, with a default implementation that prints the stack trace. This prevents uncaught exceptions in coroutines from crashing the app.

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
Updated the Android CI workflow to use JDK 17 and modified branch triggers. #9
Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
Refactor SessionManager to use SessionRepository for persistence

- Decouple `SessionManager` from `SharedPreferences` and `Gson` by delegating data operations to a new `SessionRepository`.
- Remove `loginSync`, `logoutSync`, and `WeakReference` to context to simplify the API and focus on coroutine-based flows.
- Add a `checkInitialized()` validation to ensure `init()` is called before accessing manager methods.
- Improve error handling and observability by adding structured logging and refining `LiveData` initializations.
- Clean up internal helper methods for extracting user information and managing the session lifecycle.

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
…ate handling

- Update the generic `VM` type constraint from `ViewModel` to `BaseViewModel`.
- Implement `setupCommonObservers` to automatically handle `isLoading`, `error`, and `toastMessage` states from the ViewModel.
- Provide default implementations for `onError` and `onToastMessage` using `Toast`.
- Add documentation explaining Data Binding initialization and lifecycle owner assignment.
- Ensure error and toast messages are cleared in the ViewModel after being processed by the Fragment.

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Add LiveData properties for `isLoading`, `error`, and `toastMessage` to provide a consistent foundation for UI communication.
- Introduce `launchWithLoading` to automatically manage the `isLoading` state during coroutine execution.
- Update `launchSafe` to return a `Job` and accept an optional `onError` callback for better caller control.
- Implement job tracking and override `onCleared` to ensure all active coroutines are canceled, preventing potential memory leaks.
- Expand centralized error handling to post messages to the `error` LiveData and provide methods to clear UI notifications.
- CI/CD config updates.

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Migrate `LoginViewModel` to inherit from `BaseViewModel`, leveraging `launchWithLoading` for standardized coroutine management and state handling.
- Remove redundant LiveData properties for loading, errors, and toasts, utilizing base class implementations instead.
- Update `LoginFragment` to override `onLoadingStateChanged` and remove boilerplate observers for shared UI states.
- Implement a custom `handleError` override in `LoginViewModel` to provide specific context for authentication failures.
- Guard against concurrent login attempts by checking the base loading state in `onLoginClick`.
- Update `.gitignore` to include standard `.gradle/` and `build/` directories.

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
…ginFragment.kt

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
AlexisTercero55 and others added 6 commits July 21, 2026 12:08
…wModel

- Introduce `HeaderViewModel` to source user data directly from `SessionManager`, decoupling the header from feature-specific ViewModels.
- Update `PageHeaderFragment` to accept a title via a new `newInstance` factory method and set it in the ViewModel.
- Modify `fragment_page_header.xml` to bind with `HeaderViewModel` and update text colors to `silver_gray`.
- Update `HomeFragment` to initialize the header with the appropriate title resource.

Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
Signed-off-by: Alexis Tercero <alexistercero55@gmail.com>
- Update Android CI/CD workflow configuration for release.
- Update GitHub actions.
- Updated project title and description.
- Added architecture details. 
- Removed outdated class diagrams.
@AlexisTercero55 AlexisTercero55 added this to the CORE milestone Jul 23, 2026
@AlexisTercero55 AlexisTercero55 self-assigned this Jul 23, 2026
@AlexisTercero55 AlexisTercero55 added documentation Improvements or additions to documentation Auth-feature UI compose feature - LoginViewModel labels Jul 23, 2026
@AlexisTercero55 AlexisTercero55 linked an issue Jul 23, 2026 that may be closed by this pull request
5 tasks
@AlexisTercero55 AlexisTercero55 added Home-feature Compose Home screen. Core Rho Studio UI app codebase UI UI Compose reusable element. Navigation Jetpack Navigation Release Main branch integration labels Jul 23, 2026
@AlexisTercero55 AlexisTercero55 moved this from Backlog to In progress in UI-Rho-Studio-Components Jul 23, 2026
@alexistercero-rho-dev
alexistercero-rho-dev merged commit a26df2f into main Jul 23, 2026
2 checks passed
@github-project-automation github-project-automation Bot moved this from In progress to Done in UI-Rho-Studio-Components Jul 23, 2026

@alexistercero-rho-dev alexistercero-rho-dev left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Release completed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Auth-feature UI compose feature - LoginViewModel Core Rho Studio UI app codebase documentation Improvements or additions to documentation Home-feature Compose Home screen. Navigation Jetpack Navigation Release Main branch integration UI UI Compose reusable element.

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Release an Android View System Rho Studio UI app version as legacy on main.

2 participants