Rebrand from MyCrib to Casera
- Rename Kotlin package from com.example.mycrib to com.example.casera - Update Android app name, namespace, and application ID - Update iOS bundle identifiers and project settings - Rename iOS directories (MyCribTests -> CaseraTests, etc.) - Update deep link schemes from mycrib:// to casera:// - Update app group identifiers - Update subscription product IDs - Update all UI strings and branding 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -36,7 +36,7 @@
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
|
||||
<data
|
||||
android:scheme="mycrib"
|
||||
android:scheme="casera"
|
||||
android:host="reset-password" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -10,8 +10,8 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.TaskSummary
|
||||
import com.example.mycrib.models.TaskColumnCategory
|
||||
import com.example.casera.models.TaskSummary
|
||||
import com.example.casera.models.TaskColumnCategory
|
||||
|
||||
/**
|
||||
* Displays a task summary with dynamic categories from the backend.
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib
|
||||
package com.example.casera
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
@@ -22,14 +22,14 @@ import coil3.memory.MemoryCache
|
||||
import coil3.request.crossfade
|
||||
import coil3.util.DebugLogger
|
||||
import okio.FileSystem
|
||||
import com.example.mycrib.storage.TokenManager
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.mycrib.storage.TaskCacheManager
|
||||
import com.example.mycrib.storage.TaskCacheStorage
|
||||
import com.example.mycrib.storage.ThemeStorage
|
||||
import com.example.mycrib.storage.ThemeStorageManager
|
||||
import com.example.mycrib.ui.theme.ThemeManager
|
||||
import com.example.mycrib.fcm.FCMManager
|
||||
import com.example.casera.storage.TokenManager
|
||||
import com.example.casera.storage.TokenStorage
|
||||
import com.example.casera.storage.TaskCacheManager
|
||||
import com.example.casera.storage.TaskCacheStorage
|
||||
import com.example.casera.storage.ThemeStorage
|
||||
import com.example.casera.storage.ThemeStorageManager
|
||||
import com.example.casera.ui.theme.ThemeManager
|
||||
import com.example.casera.fcm.FCMManager
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class MainActivity : ComponentActivity(), SingletonImageLoader.Factory {
|
||||
@@ -85,21 +85,21 @@ class MainActivity : ComponentActivity(), SingletonImageLoader.Factory {
|
||||
try {
|
||||
val authToken = TokenStorage.getToken()
|
||||
if (authToken != null) {
|
||||
val notificationApi = com.example.mycrib.network.NotificationApi()
|
||||
val request = com.example.mycrib.models.DeviceRegistrationRequest(
|
||||
val notificationApi = com.example.casera.network.NotificationApi()
|
||||
val request = com.example.casera.models.DeviceRegistrationRequest(
|
||||
registrationId = fcmToken,
|
||||
platform = "android"
|
||||
)
|
||||
|
||||
when (val result = notificationApi.registerDevice(authToken, request)) {
|
||||
is com.example.mycrib.network.ApiResult.Success -> {
|
||||
is com.example.casera.network.ApiResult.Success -> {
|
||||
Log.d("MainActivity", "Device registered successfully: ${result.data}")
|
||||
}
|
||||
is com.example.mycrib.network.ApiResult.Error -> {
|
||||
is com.example.casera.network.ApiResult.Error -> {
|
||||
Log.e("MainActivity", "Failed to register device: ${result.message}")
|
||||
}
|
||||
is com.example.mycrib.network.ApiResult.Loading,
|
||||
is com.example.mycrib.network.ApiResult.Idle -> {
|
||||
is com.example.casera.network.ApiResult.Loading,
|
||||
is com.example.casera.network.ApiResult.Idle -> {
|
||||
// These states shouldn't occur for direct API calls
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib
|
||||
package com.example.casera
|
||||
|
||||
import android.app.NotificationChannel
|
||||
import android.app.NotificationManager
|
||||
@@ -30,23 +30,23 @@ class MyFirebaseMessagingService : FirebaseMessagingService() {
|
||||
// Note: In a real app, you might want to use WorkManager for reliable delivery
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
try {
|
||||
val authToken = com.example.mycrib.storage.TokenStorage.getToken()
|
||||
val authToken = com.example.casera.storage.TokenStorage.getToken()
|
||||
if (authToken != null) {
|
||||
val notificationApi = com.example.mycrib.network.NotificationApi()
|
||||
val request = com.example.mycrib.models.DeviceRegistrationRequest(
|
||||
val notificationApi = com.example.casera.network.NotificationApi()
|
||||
val request = com.example.casera.models.DeviceRegistrationRequest(
|
||||
registrationId = token,
|
||||
platform = "android"
|
||||
)
|
||||
|
||||
when (val result = notificationApi.registerDevice(authToken, request)) {
|
||||
is com.example.mycrib.network.ApiResult.Success -> {
|
||||
is com.example.casera.network.ApiResult.Success -> {
|
||||
Log.d(TAG, "Device registered successfully with new token")
|
||||
}
|
||||
is com.example.mycrib.network.ApiResult.Error -> {
|
||||
is com.example.casera.network.ApiResult.Error -> {
|
||||
Log.e(TAG, "Failed to register device with new token: ${result.message}")
|
||||
}
|
||||
is com.example.mycrib.network.ApiResult.Loading,
|
||||
is com.example.mycrib.network.ApiResult.Idle -> {
|
||||
is com.example.casera.network.ApiResult.Loading,
|
||||
is com.example.casera.network.ApiResult.Idle -> {
|
||||
// These states shouldn't occur for direct API calls
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib
|
||||
package com.example.casera
|
||||
|
||||
import android.os.Build
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.fcm
|
||||
package com.example.casera.fcm
|
||||
|
||||
import android.Manifest
|
||||
import android.app.Activity
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.engine.okhttp.*
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.example.mycrib.platform
|
||||
package com.example.casera.platform
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import com.android.billingclient.api.*
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.network.APILayer
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.utils.SubscriptionHelper
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.network.APILayer
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.utils.SubscriptionHelper
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
@@ -36,8 +36,8 @@ class BillingManager private constructor(private val context: Context) {
|
||||
|
||||
// Product IDs (must match Google Play Console)
|
||||
private val productIDs = listOf(
|
||||
"com.example.mycrib.pro.monthly",
|
||||
"com.example.mycrib.pro.annual"
|
||||
"com.example.casera.pro.monthly",
|
||||
"com.example.casera.pro.annual"
|
||||
)
|
||||
|
||||
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
||||
@@ -421,14 +421,14 @@ class BillingManager private constructor(private val context: Context) {
|
||||
* Get monthly product
|
||||
*/
|
||||
fun getMonthlyProduct(): ProductDetails? {
|
||||
return _products.value.find { it.productId == "com.example.mycrib.pro.monthly" }
|
||||
return _products.value.find { it.productId == "com.example.casera.pro.monthly" }
|
||||
}
|
||||
|
||||
/**
|
||||
* Get annual product
|
||||
*/
|
||||
fun getAnnualProduct(): ProductDetails? {
|
||||
return _products.value.find { it.productId == "com.example.mycrib.pro.annual" }
|
||||
return _products.value.find { it.productId == "com.example.casera.pro.annual" }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.platform
|
||||
package com.example.casera.platform
|
||||
|
||||
import android.content.Context
|
||||
import coil3.ImageLoader
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.platform
|
||||
package com.example.casera.platform
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
internal actual fun getPlatformTaskCacheManager(): TaskCacheManager? {
|
||||
// Android requires context, so must use initialize() method
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
internal actual fun getPlatformTokenManager(): TokenManager? {
|
||||
// Android requires context, so must use initialize() method
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.subscription
|
||||
package com.example.casera.ui.subscription
|
||||
|
||||
import android.app.Activity
|
||||
import androidx.compose.foundation.BorderStroke
|
||||
@@ -17,9 +17,9 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.android.billingclient.api.ProductDetails
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.platform.BillingManager
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.platform.BillingManager
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
/**
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.example.mycrib.util
|
||||
package com.example.casera.util
|
||||
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import com.example.mycrib.platform.ImageData
|
||||
import com.example.casera.platform.ImageData
|
||||
import java.io.ByteArrayOutputStream
|
||||
|
||||
/**
|
||||
@@ -1,4 +1,4 @@
|
||||
<resources>
|
||||
<string name="app_name">MyCrib</string>
|
||||
<string name="default_notification_channel_id">mycrib_notifications</string>
|
||||
<string name="app_name">Casera</string>
|
||||
<string name="default_notification_channel_id">casera_notifications</string>
|
||||
</resources>
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib
|
||||
package com.example.casera
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.foundation.Image
|
||||
@@ -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.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 com.example.casera.ui.screens.AddResidenceScreen
|
||||
import com.example.casera.ui.screens.EditResidenceScreen
|
||||
import com.example.casera.ui.screens.EditTaskScreen
|
||||
import com.example.casera.ui.screens.ForgotPasswordScreen
|
||||
import com.example.casera.ui.screens.HomeScreen
|
||||
import com.example.casera.ui.screens.LoginScreen
|
||||
import com.example.casera.ui.screens.RegisterScreen
|
||||
import com.example.casera.ui.screens.ResetPasswordScreen
|
||||
import com.example.casera.ui.screens.ResidenceDetailScreen
|
||||
import com.example.casera.ui.screens.ResidencesScreen
|
||||
import com.example.casera.ui.screens.TasksScreen
|
||||
import com.example.casera.ui.screens.VerifyEmailScreen
|
||||
import com.example.casera.ui.screens.VerifyResetCodeScreen
|
||||
import com.example.casera.viewmodel.PasswordResetViewModel
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import org.jetbrains.compose.resources.painterResource
|
||||
import org.jetbrains.compose.ui.tooling.preview.Preview
|
||||
@@ -38,24 +38,24 @@ import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.toRoute
|
||||
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 com.example.casera.ui.screens.MainScreen
|
||||
import com.example.casera.ui.screens.ProfileScreen
|
||||
import com.example.casera.ui.theme.MyCribTheme
|
||||
import com.example.casera.ui.theme.ThemeManager
|
||||
import com.example.casera.navigation.*
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
import com.example.casera.models.Residence
|
||||
import com.example.casera.models.TaskCategory
|
||||
import com.example.casera.models.TaskDetail
|
||||
import com.example.casera.models.TaskFrequency
|
||||
import com.example.casera.models.TaskPriority
|
||||
import com.example.casera.models.TaskStatus
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.network.AuthApi
|
||||
import com.example.casera.storage.TokenStorage
|
||||
|
||||
import mycrib.composeapp.generated.resources.Res
|
||||
import mycrib.composeapp.generated.resources.compose_multiplatform
|
||||
import casera.composeapp.generated.resources.Res
|
||||
import casera.composeapp.generated.resources.compose_multiplatform
|
||||
|
||||
@Composable
|
||||
@Preview
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib
|
||||
package com.example.casera
|
||||
|
||||
class Greeting {
|
||||
private val platform = getPlatform()
|
||||
@@ -1,4 +1,4 @@
|
||||
//package com.mycrib.android
|
||||
//package com.casera.android
|
||||
//
|
||||
//import android.os.Bundle
|
||||
//import androidx.activity.ComponentActivity
|
||||
@@ -10,8 +10,8 @@
|
||||
//import androidx.navigation.compose.NavHost
|
||||
//import androidx.navigation.compose.composable
|
||||
//import androidx.navigation.compose.rememberNavController
|
||||
//import com.example.mycrib.ui.screens.*
|
||||
//import com.example.mycrib.ui.theme.MyCribTheme
|
||||
//import com.example.casera.ui.screens.*
|
||||
//import com.example.casera.ui.theme.MyCribTheme
|
||||
//
|
||||
//class MainActivity : ComponentActivity() {
|
||||
// override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib
|
||||
package com.example.casera
|
||||
|
||||
interface Platform {
|
||||
val name: String
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.cache
|
||||
package com.example.casera.cache
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.example.mycrib.cache
|
||||
package com.example.casera.cache
|
||||
|
||||
import com.example.mycrib.network.*
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.casera.network.*
|
||||
import com.example.casera.storage.TokenStorage
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
/**
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.example.mycrib.cache
|
||||
package com.example.casera.cache
|
||||
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import com.example.mycrib.models.FeatureBenefit
|
||||
import com.example.mycrib.models.Promotion
|
||||
import com.example.mycrib.models.SubscriptionStatus
|
||||
import com.example.mycrib.models.UpgradeTriggerData
|
||||
import com.example.casera.models.FeatureBenefit
|
||||
import com.example.casera.models.Promotion
|
||||
import com.example.casera.models.SubscriptionStatus
|
||||
import com.example.casera.models.UpgradeTriggerData
|
||||
|
||||
object SubscriptionCache {
|
||||
val currentSubscription = mutableStateOf<SubscriptionStatus?>(null)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.navigation
|
||||
package com.example.casera.navigation
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.cache.DataCache
|
||||
import com.example.mycrib.cache.DataPrefetchManager
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.mycrib.network.*
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.casera.cache.DataCache
|
||||
import com.example.casera.cache.DataPrefetchManager
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.models.*
|
||||
import com.example.casera.network.*
|
||||
import com.example.casera.storage.TokenStorage
|
||||
|
||||
/**
|
||||
* Unified API Layer that manages all network calls and cache operations.
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.plugins.contentnegotiation.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
/**
|
||||
* API Environment Configuration
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
sealed class ApiResult<out T> {
|
||||
data class Success<T>(val data: T) : ApiResult<T>()
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.ErrorResponse
|
||||
import com.example.casera.models.ErrorResponse
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.statement.HttpResponse
|
||||
import kotlinx.serialization.json.Json
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.platform
|
||||
package com.example.casera.platform
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.example.mycrib.repository
|
||||
package com.example.casera.repository
|
||||
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.network.LookupsApi
|
||||
import com.example.mycrib.network.SubscriptionApi
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.mycrib.storage.TaskCacheStorage
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.models.*
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.network.LookupsApi
|
||||
import com.example.casera.network.SubscriptionApi
|
||||
import com.example.casera.storage.TokenStorage
|
||||
import com.example.casera.storage.TaskCacheStorage
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
/**
|
||||
* Platform-specific task cache manager interface for persistent storage.
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
import com.example.mycrib.models.CustomTask
|
||||
import com.example.casera.models.CustomTask
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.decodeFromString
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
/**
|
||||
* Cross-platform theme storage for persisting theme selection.
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
/**
|
||||
* Platform-specific token manager interface for persistent storage.
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
/**
|
||||
* Token storage that provides a unified interface for accessing platform-specific
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -13,11 +13,11 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
||||
import com.example.mycrib.models.ContractorCreateRequest
|
||||
import com.example.mycrib.models.ContractorUpdateRequest
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.repository.LookupsRepository
|
||||
import com.example.casera.viewmodel.ContractorViewModel
|
||||
import com.example.casera.models.ContractorCreateRequest
|
||||
import com.example.casera.models.ContractorUpdateRequest
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import com.example.mycrib.models.TaskCreateRequest
|
||||
import com.example.casera.models.TaskCreateRequest
|
||||
|
||||
@Composable
|
||||
fun AddNewTaskDialog(
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import com.example.mycrib.models.MyResidencesResponse
|
||||
import com.example.mycrib.models.TaskCreateRequest
|
||||
import com.example.casera.models.MyResidencesResponse
|
||||
import com.example.casera.models.TaskCreateRequest
|
||||
|
||||
@Composable
|
||||
fun AddNewTaskWithResidenceDialog(
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -9,12 +9,12 @@ import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.repository.LookupsRepository
|
||||
import com.example.mycrib.models.MyResidencesResponse
|
||||
import com.example.mycrib.models.TaskCategory
|
||||
import com.example.mycrib.models.TaskCreateRequest
|
||||
import com.example.mycrib.models.TaskFrequency
|
||||
import com.example.mycrib.models.TaskPriority
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
import com.example.casera.models.MyResidencesResponse
|
||||
import com.example.casera.models.TaskCategory
|
||||
import com.example.casera.models.TaskCreateRequest
|
||||
import com.example.casera.models.TaskFrequency
|
||||
import com.example.casera.models.TaskPriority
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
@@ -6,7 +6,7 @@ import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
/**
|
||||
* Handles ApiResult states automatically with loading, error dialogs, and success content.
|
||||
@@ -127,7 +127,7 @@ fun <T> ApiResult<T>.HandleErrors(
|
||||
|
||||
LaunchedEffect(this) {
|
||||
if (this@HandleErrors is ApiResult.Error) {
|
||||
errorMessage = com.example.mycrib.util.ErrorMessageParser.parse((this@HandleErrors as ApiResult.Error).message)
|
||||
errorMessage = com.example.casera.util.ErrorMessageParser.parse((this@HandleErrors as ApiResult.Error).message)
|
||||
showErrorDialog = true
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -14,12 +14,12 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
||||
import com.example.mycrib.models.TaskCompletionCreateRequest
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.platform.ImageData
|
||||
import com.example.mycrib.platform.rememberImagePicker
|
||||
import com.example.mycrib.platform.rememberCameraPicker
|
||||
import com.example.casera.viewmodel.ContractorViewModel
|
||||
import com.example.casera.models.TaskCompletionCreateRequest
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.platform.ImageData
|
||||
import com.example.casera.platform.rememberImagePicker
|
||||
import com.example.casera.platform.rememberCameraPicker
|
||||
import kotlinx.datetime.*
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -9,9 +9,9 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.input.TextFieldValue
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.network.ResidenceApi
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.network.ResidenceApi
|
||||
import com.example.casera.storage.TokenStorage
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -12,11 +12,11 @@ import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.ResidenceUser
|
||||
import com.example.mycrib.models.ResidenceShareCode
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.network.ResidenceApi
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.casera.models.ResidenceUser
|
||||
import com.example.casera.models.ResidenceShareCode
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.network.ResidenceApi
|
||||
import com.example.casera.storage.TokenStorage
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.auth
|
||||
package com.example.casera.ui.components.auth
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.auth
|
||||
package com.example.casera.ui.components.auth
|
||||
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.Card
|
||||
@@ -9,9 +9,9 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.ui.theme.AppRadius
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.mycrib.ui.theme.backgroundSecondary
|
||||
import com.example.casera.ui.theme.AppRadius
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.backgroundSecondary
|
||||
|
||||
/**
|
||||
* CompactCard - Smaller card with reduced padding
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.Card
|
||||
@@ -9,9 +9,9 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.ui.theme.AppRadius
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.mycrib.ui.theme.backgroundSecondary
|
||||
import com.example.casera.ui.theme.AppRadius
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.backgroundSecondary
|
||||
|
||||
/**
|
||||
* StandardCard - Consistent card component matching iOS design
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -8,7 +8,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
|
||||
/**
|
||||
* StandardEmptyState - Consistent empty state component
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.dialogs
|
||||
package com.example.casera.ui.components.dialogs
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
@@ -20,7 +20,7 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import com.example.mycrib.ui.theme.*
|
||||
import com.example.casera.ui.theme.*
|
||||
|
||||
/**
|
||||
* ThemePickerDialog - Shows all available themes in a grid
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.documents
|
||||
package com.example.casera.ui.components.documents
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -14,9 +14,9 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.Document
|
||||
import com.example.mycrib.models.DocumentCategory
|
||||
import com.example.mycrib.models.DocumentType
|
||||
import com.example.casera.models.Document
|
||||
import com.example.casera.models.DocumentCategory
|
||||
import com.example.casera.models.DocumentType
|
||||
|
||||
@Composable
|
||||
fun DocumentCard(document: Document, isWarrantyCard: Boolean = false, onClick: () -> Unit) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.documents
|
||||
package com.example.casera.ui.components.documents
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.documents
|
||||
package com.example.casera.ui.components.documents
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -13,11 +13,11 @@ import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.Document
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.mycrib.utils.SubscriptionHelper
|
||||
import com.example.casera.models.Document
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.casera.utils.SubscriptionHelper
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.example.mycrib.ui.components.forms
|
||||
package com.example.casera.ui.components.forms
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
|
||||
/**
|
||||
* FormSection - Groups related form fields with optional header/footer
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.forms
|
||||
package com.example.casera.ui.components.forms
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
@@ -9,7 +9,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
|
||||
/**
|
||||
* FormTextField - Standardized text field for forms
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.residence
|
||||
package com.example.casera.ui.components.residence
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.residence
|
||||
package com.example.casera.ui.components.residence
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.residence
|
||||
package com.example.casera.ui.components.residence
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -12,10 +12,10 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.TaskCompletionResponse
|
||||
import com.example.mycrib.models.TaskCompletion
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.network.APILayer
|
||||
import com.example.casera.models.TaskCompletionResponse
|
||||
import com.example.casera.models.TaskCompletion
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.network.APILayer
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
/**
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -23,8 +23,8 @@ import coil3.compose.AsyncImage
|
||||
import coil3.compose.AsyncImagePainter
|
||||
import coil3.compose.SubcomposeAsyncImage
|
||||
import coil3.compose.SubcomposeAsyncImageContent
|
||||
import com.example.mycrib.models.TaskCompletionImage
|
||||
import com.example.mycrib.network.ApiClient
|
||||
import com.example.casera.models.TaskCompletionImage
|
||||
import com.example.casera.network.ApiClient
|
||||
|
||||
@Composable
|
||||
fun PhotoViewerDialog(
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -8,7 +8,7 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.TaskViewModel
|
||||
import com.example.casera.viewmodel.TaskViewModel
|
||||
|
||||
// MARK: - Edit Task Button
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -14,12 +14,12 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.TaskDetail
|
||||
import com.example.mycrib.models.TaskCategory
|
||||
import com.example.mycrib.models.TaskPriority
|
||||
import com.example.mycrib.models.TaskFrequency
|
||||
import com.example.mycrib.models.TaskStatus
|
||||
import com.example.mycrib.models.TaskCompletion
|
||||
import com.example.casera.models.TaskDetail
|
||||
import com.example.casera.models.TaskCategory
|
||||
import com.example.casera.models.TaskPriority
|
||||
import com.example.casera.models.TaskFrequency
|
||||
import com.example.casera.models.TaskStatus
|
||||
import com.example.casera.models.TaskCompletion
|
||||
import org.jetbrains.compose.ui.tooling.preview.Preview
|
||||
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.background
|
||||
@@ -19,8 +19,8 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.TaskColumn
|
||||
import com.example.mycrib.models.TaskDetail
|
||||
import com.example.casera.models.TaskColumn
|
||||
import com.example.casera.models.TaskDetail
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Row
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.viewmodel.DocumentViewModel
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
|
||||
@Composable
|
||||
fun AddDocumentScreen(
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
|
||||
@Composable
|
||||
fun AddResidenceScreen(
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -12,17 +12,17 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.AddNewTaskWithResidenceDialog
|
||||
import com.example.mycrib.ui.components.ApiResultHandler
|
||||
import com.example.mycrib.ui.components.CompleteTaskDialog
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.components.task.TaskCard
|
||||
import com.example.mycrib.ui.components.task.DynamicTaskKanbanView
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.mycrib.viewmodel.TaskCompletionViewModel
|
||||
import com.example.mycrib.viewmodel.TaskViewModel
|
||||
import com.example.mycrib.models.TaskDetail
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.AddNewTaskWithResidenceDialog
|
||||
import com.example.casera.ui.components.ApiResultHandler
|
||||
import com.example.casera.ui.components.CompleteTaskDialog
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.components.task.TaskCard
|
||||
import com.example.casera.ui.components.task.DynamicTaskKanbanView
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.viewmodel.TaskCompletionViewModel
|
||||
import com.example.casera.viewmodel.TaskViewModel
|
||||
import com.example.casera.models.TaskDetail
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -265,7 +265,7 @@ fun AllTasksScreen(
|
||||
},
|
||||
isLoading = createTaskState is ApiResult.Loading,
|
||||
errorMessage = if (createTaskState is ApiResult.Error) {
|
||||
com.example.mycrib.util.ErrorMessageParser.parse((createTaskState as ApiResult.Error).message)
|
||||
com.example.casera.util.ErrorMessageParser.parse((createTaskState as ApiResult.Error).message)
|
||||
} else null
|
||||
)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -17,11 +17,11 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.AddContractorDialog
|
||||
import com.example.mycrib.ui.components.ApiResultHandler
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.AddContractorDialog
|
||||
import com.example.casera.ui.components.ApiResultHandler
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.viewmodel.ContractorViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -20,15 +20,15 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.AddContractorDialog
|
||||
import com.example.mycrib.ui.components.ApiResultHandler
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
||||
import com.example.mycrib.models.ContractorSummary
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.repository.LookupsRepository
|
||||
import com.example.mycrib.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.mycrib.utils.SubscriptionHelper
|
||||
import com.example.casera.ui.components.AddContractorDialog
|
||||
import com.example.casera.ui.components.ApiResultHandler
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.viewmodel.ContractorViewModel
|
||||
import com.example.casera.models.ContractorSummary
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
import com.example.casera.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.casera.utils.SubscriptionHelper
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -16,17 +16,17 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.ApiResultHandler
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.ApiResultHandler
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.viewmodel.DocumentViewModel
|
||||
import com.example.casera.models.*
|
||||
import com.example.casera.network.ApiResult
|
||||
import androidx.compose.foundation.Image
|
||||
import coil3.compose.AsyncImage
|
||||
import coil3.compose.rememberAsyncImagePainter
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import com.example.mycrib.ui.components.documents.ErrorState
|
||||
import com.example.mycrib.ui.components.documents.formatFileSize
|
||||
import com.example.casera.ui.components.documents.ErrorState
|
||||
import com.example.casera.ui.components.documents.formatFileSize
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import androidx.compose.foundation.lazy.grid.GridCells
|
||||
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -18,13 +18,13 @@ import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import coil3.compose.AsyncImage
|
||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.platform.ImageData
|
||||
import com.example.mycrib.platform.rememberImagePicker
|
||||
import com.example.mycrib.platform.rememberCameraPicker
|
||||
import com.example.casera.viewmodel.DocumentViewModel
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.models.*
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.platform.ImageData
|
||||
import com.example.casera.platform.rememberImagePicker
|
||||
import com.example.casera.platform.rememberCameraPicker
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -239,7 +239,7 @@ fun DocumentFormScreen(
|
||||
}
|
||||
is ApiResult.Error -> {
|
||||
Text(
|
||||
"Failed to load residences: ${com.example.mycrib.util.ErrorMessageParser.parse((residencesState as ApiResult.Error).message)}",
|
||||
"Failed to load residences: ${com.example.casera.util.ErrorMessageParser.parse((residencesState as ApiResult.Error).message)}",
|
||||
color = MaterialTheme.colorScheme.error
|
||||
)
|
||||
}
|
||||
@@ -596,7 +596,7 @@ fun DocumentFormScreen(
|
||||
)
|
||||
) {
|
||||
Text(
|
||||
com.example.mycrib.util.ErrorMessageParser.parse((operationState as ApiResult.Error).message),
|
||||
com.example.casera.util.ErrorMessageParser.parse((operationState as ApiResult.Error).message),
|
||||
modifier = Modifier.padding(12.dp),
|
||||
color = MaterialTheme.colorScheme.onErrorContainer
|
||||
)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -11,11 +11,11 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.documents.DocumentsTabContent
|
||||
import com.example.mycrib.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.mycrib.utils.SubscriptionHelper
|
||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.ui.components.documents.DocumentsTabContent
|
||||
import com.example.casera.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.casera.utils.SubscriptionHelper
|
||||
import com.example.casera.viewmodel.DocumentViewModel
|
||||
import com.example.casera.models.*
|
||||
|
||||
enum class DocumentTab {
|
||||
WARRANTIES, DOCUMENTS
|
||||
@@ -36,7 +36,7 @@ fun DocumentsScreen(
|
||||
// Check if screen should be blocked (limit=0)
|
||||
val isBlocked = SubscriptionHelper.isDocumentsBlocked()
|
||||
// Get current count for checking when adding
|
||||
val currentCount = (documentsState as? com.example.mycrib.network.ApiResult.Success)?.data?.size ?: 0
|
||||
val currentCount = (documentsState as? com.example.casera.network.ApiResult.Success)?.data?.size ?: 0
|
||||
|
||||
var selectedCategory by remember { mutableStateOf<String?>(null) }
|
||||
var selectedDocType by remember { mutableStateOf<String?>(null) }
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
||||
import com.example.casera.viewmodel.DocumentViewModel
|
||||
|
||||
@Composable
|
||||
fun EditDocumentScreen(
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user