Add Android theme system and fix package naming issues

This commit adds a comprehensive theming system to Android matching iOS, and fixes package declarations throughout the codebase to match directory structure.

Theme System Additions:
- Added 11 themes matching iOS: Default, Teal, Ocean, Forest, Sunset, Monochrome, Lavender, Crimson, Midnight, Desert, Mint
- Created ThemeColors.kt with exact iOS color values for light/dark modes
- Added ThemeManager.kt for dynamic theme switching
- Created Spacing.kt with standardized spacing constants (xs/sm/md/lg/xl)
- Added ThemePickerDialog.kt for theme selection UI
- Integrated theme switching in ProfileScreen.kt
- Updated App.kt to observe ThemeManager for reactive theming

Component Library:
- Added StandardCard.kt and CompactCard.kt for consistent card styling
- Added FormTextField.kt with error/helper text support
- Added FormSection.kt for grouping related form fields
- Added StandardEmptyState.kt for empty state UI

Package Migration:
- Fixed all package declarations to match directory structure (com.example.mycrib.*)
- Updated package declarations in commonMain, androidMain, and iosMain
- Fixed all import statements across entire codebase
- Ensures compilation on both Android and iOS platforms

iOS Theme Rename:
- Renamed "Default" theme to "Teal" in iOS
- Renamed "Bright" theme to "Default" in iOS to make vibrant colors the default

Build Status:
-  Android builds successfully
-  iOS builds successfully

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Trey t
2025-11-22 10:44:54 -06:00
parent e40aed31a7
commit f1f71224aa
146 changed files with 2155 additions and 616 deletions

View File

@@ -16,20 +16,20 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import com.mycrib.android.ui.screens.AddResidenceScreen
import com.mycrib.android.ui.screens.EditResidenceScreen
import com.mycrib.android.ui.screens.EditTaskScreen
import com.mycrib.android.ui.screens.ForgotPasswordScreen
import com.mycrib.android.ui.screens.HomeScreen
import com.mycrib.android.ui.screens.LoginScreen
import com.mycrib.android.ui.screens.RegisterScreen
import com.mycrib.android.ui.screens.ResetPasswordScreen
import com.mycrib.android.ui.screens.ResidenceDetailScreen
import com.mycrib.android.ui.screens.ResidencesScreen
import com.mycrib.android.ui.screens.TasksScreen
import com.mycrib.android.ui.screens.VerifyEmailScreen
import com.mycrib.android.ui.screens.VerifyResetCodeScreen
import com.mycrib.android.viewmodel.PasswordResetViewModel
import com.example.mycrib.ui.screens.AddResidenceScreen
import com.example.mycrib.ui.screens.EditResidenceScreen
import com.example.mycrib.ui.screens.EditTaskScreen
import com.example.mycrib.ui.screens.ForgotPasswordScreen
import com.example.mycrib.ui.screens.HomeScreen
import com.example.mycrib.ui.screens.LoginScreen
import com.example.mycrib.ui.screens.RegisterScreen
import com.example.mycrib.ui.screens.ResetPasswordScreen
import com.example.mycrib.ui.screens.ResidenceDetailScreen
import com.example.mycrib.ui.screens.ResidencesScreen
import com.example.mycrib.ui.screens.TasksScreen
import com.example.mycrib.ui.screens.VerifyEmailScreen
import com.example.mycrib.ui.screens.VerifyResetCodeScreen
import com.example.mycrib.viewmodel.PasswordResetViewModel
import androidx.lifecycle.viewmodel.compose.viewModel
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.ui.tooling.preview.Preview
@@ -38,20 +38,21 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.rememberNavController
import androidx.navigation.compose.composable
import androidx.navigation.toRoute
import com.mycrib.android.ui.screens.MainScreen
import com.mycrib.android.ui.screens.ProfileScreen
import com.mycrib.android.ui.theme.MyCribTheme
import com.mycrib.navigation.*
import com.mycrib.repository.LookupsRepository
import com.mycrib.shared.models.Residence
import com.mycrib.shared.models.TaskCategory
import com.mycrib.shared.models.TaskDetail
import com.mycrib.shared.models.TaskFrequency
import com.mycrib.shared.models.TaskPriority
import com.mycrib.shared.models.TaskStatus
import com.mycrib.shared.network.ApiResult
import com.mycrib.shared.network.AuthApi
import com.mycrib.storage.TokenStorage
import com.example.mycrib.ui.screens.MainScreen
import com.example.mycrib.ui.screens.ProfileScreen
import com.example.mycrib.ui.theme.MyCribTheme
import com.example.mycrib.ui.theme.ThemeManager
import com.example.mycrib.navigation.*
import com.example.mycrib.repository.LookupsRepository
import com.example.mycrib.models.Residence
import com.example.mycrib.models.TaskCategory
import com.example.mycrib.models.TaskDetail
import com.example.mycrib.models.TaskFrequency
import com.example.mycrib.models.TaskPriority
import com.example.mycrib.models.TaskStatus
import com.example.mycrib.network.ApiResult
import com.example.mycrib.network.AuthApi
import com.example.mycrib.storage.TokenStorage
import mycrib.composeapp.generated.resources.Res
import mycrib.composeapp.generated.resources.compose_multiplatform
@@ -95,7 +96,9 @@ fun App(
isCheckingAuth = false
}
MyCribTheme {
val currentTheme by remember { derivedStateOf { ThemeManager.currentTheme } }
MyCribTheme(themeColors = currentTheme) {
if (isCheckingAuth) {
// Show loading screen while checking auth
Surface(