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:
@@ -95,11 +95,11 @@ kotlin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = "com.example.mycrib"
|
namespace = "com.example.casera"
|
||||||
compileSdk = libs.versions.android.compileSdk.get().toInt()
|
compileSdk = libs.versions.android.compileSdk.get().toInt()
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "com.example.mycrib"
|
applicationId = "com.example.casera"
|
||||||
minSdk = libs.versions.android.minSdk.get().toInt()
|
minSdk = libs.versions.android.minSdk.get().toInt()
|
||||||
targetSdk = libs.versions.android.targetSdk.get().toInt()
|
targetSdk = libs.versions.android.targetSdk.get().toInt()
|
||||||
versionCode = 1
|
versionCode = 1
|
||||||
@@ -131,11 +131,11 @@ dependencies {
|
|||||||
|
|
||||||
compose.desktop {
|
compose.desktop {
|
||||||
application {
|
application {
|
||||||
mainClass = "com.example.mycrib.MainKt"
|
mainClass = "com.example.casera.MainKt"
|
||||||
|
|
||||||
nativeDistributions {
|
nativeDistributions {
|
||||||
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
|
targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb)
|
||||||
packageName = "com.example.mycrib"
|
packageName = "com.example.casera"
|
||||||
packageVersion = "1.0.0"
|
packageVersion = "1.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
<category android:name="android.intent.category.BROWSABLE" />
|
<category android:name="android.intent.category.BROWSABLE" />
|
||||||
|
|
||||||
<data
|
<data
|
||||||
android:scheme="mycrib"
|
android:scheme="casera"
|
||||||
android:host="reset-password" />
|
android:host="reset-password" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</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.background
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
@@ -10,8 +10,8 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.models.TaskSummary
|
import com.example.casera.models.TaskSummary
|
||||||
import com.example.mycrib.models.TaskColumnCategory
|
import com.example.casera.models.TaskColumnCategory
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Displays a task summary with dynamic categories from the backend.
|
* 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.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
@@ -22,14 +22,14 @@ import coil3.memory.MemoryCache
|
|||||||
import coil3.request.crossfade
|
import coil3.request.crossfade
|
||||||
import coil3.util.DebugLogger
|
import coil3.util.DebugLogger
|
||||||
import okio.FileSystem
|
import okio.FileSystem
|
||||||
import com.example.mycrib.storage.TokenManager
|
import com.example.casera.storage.TokenManager
|
||||||
import com.example.mycrib.storage.TokenStorage
|
import com.example.casera.storage.TokenStorage
|
||||||
import com.example.mycrib.storage.TaskCacheManager
|
import com.example.casera.storage.TaskCacheManager
|
||||||
import com.example.mycrib.storage.TaskCacheStorage
|
import com.example.casera.storage.TaskCacheStorage
|
||||||
import com.example.mycrib.storage.ThemeStorage
|
import com.example.casera.storage.ThemeStorage
|
||||||
import com.example.mycrib.storage.ThemeStorageManager
|
import com.example.casera.storage.ThemeStorageManager
|
||||||
import com.example.mycrib.ui.theme.ThemeManager
|
import com.example.casera.ui.theme.ThemeManager
|
||||||
import com.example.mycrib.fcm.FCMManager
|
import com.example.casera.fcm.FCMManager
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class MainActivity : ComponentActivity(), SingletonImageLoader.Factory {
|
class MainActivity : ComponentActivity(), SingletonImageLoader.Factory {
|
||||||
@@ -85,21 +85,21 @@ class MainActivity : ComponentActivity(), SingletonImageLoader.Factory {
|
|||||||
try {
|
try {
|
||||||
val authToken = TokenStorage.getToken()
|
val authToken = TokenStorage.getToken()
|
||||||
if (authToken != null) {
|
if (authToken != null) {
|
||||||
val notificationApi = com.example.mycrib.network.NotificationApi()
|
val notificationApi = com.example.casera.network.NotificationApi()
|
||||||
val request = com.example.mycrib.models.DeviceRegistrationRequest(
|
val request = com.example.casera.models.DeviceRegistrationRequest(
|
||||||
registrationId = fcmToken,
|
registrationId = fcmToken,
|
||||||
platform = "android"
|
platform = "android"
|
||||||
)
|
)
|
||||||
|
|
||||||
when (val result = notificationApi.registerDevice(authToken, request)) {
|
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}")
|
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}")
|
Log.e("MainActivity", "Failed to register device: ${result.message}")
|
||||||
}
|
}
|
||||||
is com.example.mycrib.network.ApiResult.Loading,
|
is com.example.casera.network.ApiResult.Loading,
|
||||||
is com.example.mycrib.network.ApiResult.Idle -> {
|
is com.example.casera.network.ApiResult.Idle -> {
|
||||||
// These states shouldn't occur for direct API calls
|
// 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.NotificationChannel
|
||||||
import android.app.NotificationManager
|
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
|
// Note: In a real app, you might want to use WorkManager for reliable delivery
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
try {
|
try {
|
||||||
val authToken = com.example.mycrib.storage.TokenStorage.getToken()
|
val authToken = com.example.casera.storage.TokenStorage.getToken()
|
||||||
if (authToken != null) {
|
if (authToken != null) {
|
||||||
val notificationApi = com.example.mycrib.network.NotificationApi()
|
val notificationApi = com.example.casera.network.NotificationApi()
|
||||||
val request = com.example.mycrib.models.DeviceRegistrationRequest(
|
val request = com.example.casera.models.DeviceRegistrationRequest(
|
||||||
registrationId = token,
|
registrationId = token,
|
||||||
platform = "android"
|
platform = "android"
|
||||||
)
|
)
|
||||||
|
|
||||||
when (val result = notificationApi.registerDevice(authToken, request)) {
|
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")
|
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}")
|
Log.e(TAG, "Failed to register device with new token: ${result.message}")
|
||||||
}
|
}
|
||||||
is com.example.mycrib.network.ApiResult.Loading,
|
is com.example.casera.network.ApiResult.Loading,
|
||||||
is com.example.mycrib.network.ApiResult.Idle -> {
|
is com.example.casera.network.ApiResult.Idle -> {
|
||||||
// These states shouldn't occur for direct API calls
|
// 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
|
import android.os.Build
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.example.mycrib.fcm
|
package com.example.casera.fcm
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.app.Activity
|
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.*
|
||||||
import io.ktor.client.engine.okhttp.*
|
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.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.android.billingclient.api.*
|
import com.android.billingclient.api.*
|
||||||
import com.example.mycrib.cache.SubscriptionCache
|
import com.example.casera.cache.SubscriptionCache
|
||||||
import com.example.mycrib.network.APILayer
|
import com.example.casera.network.APILayer
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.utils.SubscriptionHelper
|
import com.example.casera.utils.SubscriptionHelper
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.SupervisorJob
|
import kotlinx.coroutines.SupervisorJob
|
||||||
@@ -36,8 +36,8 @@ class BillingManager private constructor(private val context: Context) {
|
|||||||
|
|
||||||
// Product IDs (must match Google Play Console)
|
// Product IDs (must match Google Play Console)
|
||||||
private val productIDs = listOf(
|
private val productIDs = listOf(
|
||||||
"com.example.mycrib.pro.monthly",
|
"com.example.casera.pro.monthly",
|
||||||
"com.example.mycrib.pro.annual"
|
"com.example.casera.pro.annual"
|
||||||
)
|
)
|
||||||
|
|
||||||
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
|
||||||
@@ -421,14 +421,14 @@ class BillingManager private constructor(private val context: Context) {
|
|||||||
* Get monthly product
|
* Get monthly product
|
||||||
*/
|
*/
|
||||||
fun getMonthlyProduct(): ProductDetails? {
|
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
|
* Get annual product
|
||||||
*/
|
*/
|
||||||
fun getAnnualProduct(): ProductDetails? {
|
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 android.content.Context
|
||||||
import coil3.ImageLoader
|
import coil3.ImageLoader
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.example.mycrib.platform
|
package com.example.casera.platform
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.Uri
|
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.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.example.mycrib.storage
|
package com.example.casera.storage
|
||||||
|
|
||||||
internal actual fun getPlatformTaskCacheManager(): TaskCacheManager? {
|
internal actual fun getPlatformTaskCacheManager(): TaskCacheManager? {
|
||||||
// Android requires context, so must use initialize() method
|
// 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.Context
|
||||||
import android.content.SharedPreferences
|
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.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.example.mycrib.storage
|
package com.example.casera.storage
|
||||||
|
|
||||||
internal actual fun getPlatformTokenManager(): TokenManager? {
|
internal actual fun getPlatformTokenManager(): TokenManager? {
|
||||||
// Android requires context, so must use initialize() method
|
// 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 android.app.Activity
|
||||||
import androidx.compose.foundation.BorderStroke
|
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.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.android.billingclient.api.ProductDetails
|
import com.android.billingclient.api.ProductDetails
|
||||||
import com.example.mycrib.cache.SubscriptionCache
|
import com.example.casera.cache.SubscriptionCache
|
||||||
import com.example.mycrib.platform.BillingManager
|
import com.example.casera.platform.BillingManager
|
||||||
import com.example.mycrib.ui.theme.AppSpacing
|
import com.example.casera.ui.theme.AppSpacing
|
||||||
import kotlinx.coroutines.launch
|
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.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import com.example.mycrib.platform.ImageData
|
import com.example.casera.platform.ImageData
|
||||||
import java.io.ByteArrayOutputStream
|
import java.io.ByteArrayOutputStream
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="app_name">MyCrib</string>
|
<string name="app_name">Casera</string>
|
||||||
<string name="default_notification_channel_id">mycrib_notifications</string>
|
<string name="default_notification_channel_id">casera_notifications</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.example.mycrib
|
package com.example.casera
|
||||||
|
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
@@ -16,20 +16,20 @@ import androidx.compose.material3.Text
|
|||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import com.example.mycrib.ui.screens.AddResidenceScreen
|
import com.example.casera.ui.screens.AddResidenceScreen
|
||||||
import com.example.mycrib.ui.screens.EditResidenceScreen
|
import com.example.casera.ui.screens.EditResidenceScreen
|
||||||
import com.example.mycrib.ui.screens.EditTaskScreen
|
import com.example.casera.ui.screens.EditTaskScreen
|
||||||
import com.example.mycrib.ui.screens.ForgotPasswordScreen
|
import com.example.casera.ui.screens.ForgotPasswordScreen
|
||||||
import com.example.mycrib.ui.screens.HomeScreen
|
import com.example.casera.ui.screens.HomeScreen
|
||||||
import com.example.mycrib.ui.screens.LoginScreen
|
import com.example.casera.ui.screens.LoginScreen
|
||||||
import com.example.mycrib.ui.screens.RegisterScreen
|
import com.example.casera.ui.screens.RegisterScreen
|
||||||
import com.example.mycrib.ui.screens.ResetPasswordScreen
|
import com.example.casera.ui.screens.ResetPasswordScreen
|
||||||
import com.example.mycrib.ui.screens.ResidenceDetailScreen
|
import com.example.casera.ui.screens.ResidenceDetailScreen
|
||||||
import com.example.mycrib.ui.screens.ResidencesScreen
|
import com.example.casera.ui.screens.ResidencesScreen
|
||||||
import com.example.mycrib.ui.screens.TasksScreen
|
import com.example.casera.ui.screens.TasksScreen
|
||||||
import com.example.mycrib.ui.screens.VerifyEmailScreen
|
import com.example.casera.ui.screens.VerifyEmailScreen
|
||||||
import com.example.mycrib.ui.screens.VerifyResetCodeScreen
|
import com.example.casera.ui.screens.VerifyResetCodeScreen
|
||||||
import com.example.mycrib.viewmodel.PasswordResetViewModel
|
import com.example.casera.viewmodel.PasswordResetViewModel
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import org.jetbrains.compose.resources.painterResource
|
import org.jetbrains.compose.resources.painterResource
|
||||||
import org.jetbrains.compose.ui.tooling.preview.Preview
|
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.rememberNavController
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.toRoute
|
import androidx.navigation.toRoute
|
||||||
import com.example.mycrib.ui.screens.MainScreen
|
import com.example.casera.ui.screens.MainScreen
|
||||||
import com.example.mycrib.ui.screens.ProfileScreen
|
import com.example.casera.ui.screens.ProfileScreen
|
||||||
import com.example.mycrib.ui.theme.MyCribTheme
|
import com.example.casera.ui.theme.MyCribTheme
|
||||||
import com.example.mycrib.ui.theme.ThemeManager
|
import com.example.casera.ui.theme.ThemeManager
|
||||||
import com.example.mycrib.navigation.*
|
import com.example.casera.navigation.*
|
||||||
import com.example.mycrib.repository.LookupsRepository
|
import com.example.casera.repository.LookupsRepository
|
||||||
import com.example.mycrib.models.Residence
|
import com.example.casera.models.Residence
|
||||||
import com.example.mycrib.models.TaskCategory
|
import com.example.casera.models.TaskCategory
|
||||||
import com.example.mycrib.models.TaskDetail
|
import com.example.casera.models.TaskDetail
|
||||||
import com.example.mycrib.models.TaskFrequency
|
import com.example.casera.models.TaskFrequency
|
||||||
import com.example.mycrib.models.TaskPriority
|
import com.example.casera.models.TaskPriority
|
||||||
import com.example.mycrib.models.TaskStatus
|
import com.example.casera.models.TaskStatus
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.network.AuthApi
|
import com.example.casera.network.AuthApi
|
||||||
import com.example.mycrib.storage.TokenStorage
|
import com.example.casera.storage.TokenStorage
|
||||||
|
|
||||||
import mycrib.composeapp.generated.resources.Res
|
import casera.composeapp.generated.resources.Res
|
||||||
import mycrib.composeapp.generated.resources.compose_multiplatform
|
import casera.composeapp.generated.resources.compose_multiplatform
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@Preview
|
@Preview
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.example.mycrib
|
package com.example.casera
|
||||||
|
|
||||||
class Greeting {
|
class Greeting {
|
||||||
private val platform = getPlatform()
|
private val platform = getPlatform()
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
//package com.mycrib.android
|
//package com.casera.android
|
||||||
//
|
//
|
||||||
//import android.os.Bundle
|
//import android.os.Bundle
|
||||||
//import androidx.activity.ComponentActivity
|
//import androidx.activity.ComponentActivity
|
||||||
@@ -10,8 +10,8 @@
|
|||||||
//import androidx.navigation.compose.NavHost
|
//import androidx.navigation.compose.NavHost
|
||||||
//import androidx.navigation.compose.composable
|
//import androidx.navigation.compose.composable
|
||||||
//import androidx.navigation.compose.rememberNavController
|
//import androidx.navigation.compose.rememberNavController
|
||||||
//import com.example.mycrib.ui.screens.*
|
//import com.example.casera.ui.screens.*
|
||||||
//import com.example.mycrib.ui.theme.MyCribTheme
|
//import com.example.casera.ui.theme.MyCribTheme
|
||||||
//
|
//
|
||||||
//class MainActivity : ComponentActivity() {
|
//class MainActivity : ComponentActivity() {
|
||||||
// override fun onCreate(savedInstanceState: Bundle?) {
|
// override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.example.mycrib
|
package com.example.casera
|
||||||
|
|
||||||
interface Platform {
|
interface Platform {
|
||||||
val name: String
|
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.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
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.casera.network.*
|
||||||
import com.example.mycrib.storage.TokenStorage
|
import com.example.casera.storage.TokenStorage
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.example.mycrib.cache
|
package com.example.casera.cache
|
||||||
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import com.example.mycrib.models.FeatureBenefit
|
import com.example.casera.models.FeatureBenefit
|
||||||
import com.example.mycrib.models.Promotion
|
import com.example.casera.models.Promotion
|
||||||
import com.example.mycrib.models.SubscriptionStatus
|
import com.example.casera.models.SubscriptionStatus
|
||||||
import com.example.mycrib.models.UpgradeTriggerData
|
import com.example.casera.models.UpgradeTriggerData
|
||||||
|
|
||||||
object SubscriptionCache {
|
object SubscriptionCache {
|
||||||
val currentSubscription = mutableStateOf<SubscriptionStatus?>(null)
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.SerialName
|
||||||
import kotlinx.serialization.Serializable
|
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.casera.cache.DataCache
|
||||||
import com.example.mycrib.cache.DataPrefetchManager
|
import com.example.casera.cache.DataPrefetchManager
|
||||||
import com.example.mycrib.cache.SubscriptionCache
|
import com.example.casera.cache.SubscriptionCache
|
||||||
import com.example.mycrib.models.*
|
import com.example.casera.models.*
|
||||||
import com.example.mycrib.network.*
|
import com.example.casera.network.*
|
||||||
import com.example.mycrib.storage.TokenStorage
|
import com.example.casera.storage.TokenStorage
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unified API Layer that manages all network calls and cache operations.
|
* 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.*
|
||||||
import io.ktor.client.plugins.contentnegotiation.*
|
import io.ktor.client.plugins.contentnegotiation.*
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.example.mycrib.network
|
package com.example.casera.network
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API Environment Configuration
|
* API Environment Configuration
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.example.mycrib.network
|
package com.example.casera.network
|
||||||
|
|
||||||
sealed class ApiResult<out T> {
|
sealed class ApiResult<out T> {
|
||||||
data class Success<T>(val data: T) : ApiResult<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.*
|
||||||
import io.ktor.client.call.*
|
import io.ktor.client.call.*
|
||||||
import io.ktor.client.request.*
|
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.*
|
||||||
import io.ktor.client.call.*
|
import io.ktor.client.call.*
|
||||||
import io.ktor.client.request.*
|
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.*
|
||||||
import io.ktor.client.call.*
|
import io.ktor.client.call.*
|
||||||
import io.ktor.client.request.*
|
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.call.body
|
||||||
import io.ktor.client.statement.HttpResponse
|
import io.ktor.client.statement.HttpResponse
|
||||||
import kotlinx.serialization.json.Json
|
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.*
|
||||||
import io.ktor.client.call.*
|
import io.ktor.client.call.*
|
||||||
import io.ktor.client.request.*
|
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.*
|
||||||
import io.ktor.client.call.*
|
import io.ktor.client.call.*
|
||||||
import io.ktor.client.request.*
|
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.*
|
||||||
import io.ktor.client.call.*
|
import io.ktor.client.call.*
|
||||||
import io.ktor.client.request.*
|
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.*
|
||||||
import io.ktor.client.call.*
|
import io.ktor.client.call.*
|
||||||
import io.ktor.client.request.*
|
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.*
|
||||||
import io.ktor.client.call.*
|
import io.ktor.client.call.*
|
||||||
import io.ktor.client.request.*
|
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.*
|
||||||
import io.ktor.client.call.*
|
import io.ktor.client.call.*
|
||||||
import io.ktor.client.request.*
|
import io.ktor.client.request.*
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.example.mycrib.platform
|
package com.example.casera.platform
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
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.casera.cache.SubscriptionCache
|
||||||
import com.example.mycrib.models.*
|
import com.example.casera.models.*
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.network.LookupsApi
|
import com.example.casera.network.LookupsApi
|
||||||
import com.example.mycrib.network.SubscriptionApi
|
import com.example.casera.network.SubscriptionApi
|
||||||
import com.example.mycrib.storage.TokenStorage
|
import com.example.casera.storage.TokenStorage
|
||||||
import com.example.mycrib.storage.TaskCacheStorage
|
import com.example.casera.storage.TaskCacheStorage
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
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.
|
* 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.encodeToString
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import kotlinx.serialization.decodeFromString
|
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.
|
* 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.
|
* 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
|
* 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.layout.*
|
||||||
import androidx.compose.foundation.rememberScrollState
|
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.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
import com.example.casera.viewmodel.ContractorViewModel
|
||||||
import com.example.mycrib.models.ContractorCreateRequest
|
import com.example.casera.models.ContractorCreateRequest
|
||||||
import com.example.mycrib.models.ContractorUpdateRequest
|
import com.example.casera.models.ContractorUpdateRequest
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.repository.LookupsRepository
|
import com.example.casera.repository.LookupsRepository
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.example.mycrib.ui.components
|
package com.example.casera.ui.components
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import com.example.mycrib.models.TaskCreateRequest
|
import com.example.casera.models.TaskCreateRequest
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AddNewTaskDialog(
|
fun AddNewTaskDialog(
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.example.mycrib.ui.components
|
package com.example.casera.ui.components
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import com.example.mycrib.models.MyResidencesResponse
|
import com.example.casera.models.MyResidencesResponse
|
||||||
import com.example.mycrib.models.TaskCreateRequest
|
import com.example.casera.models.TaskCreateRequest
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AddNewTaskWithResidenceDialog(
|
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.layout.*
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
@@ -9,12 +9,12 @@ import androidx.compose.runtime.*
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.input.KeyboardType
|
import androidx.compose.ui.text.input.KeyboardType
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.repository.LookupsRepository
|
import com.example.casera.repository.LookupsRepository
|
||||||
import com.example.mycrib.models.MyResidencesResponse
|
import com.example.casera.models.MyResidencesResponse
|
||||||
import com.example.mycrib.models.TaskCategory
|
import com.example.casera.models.TaskCategory
|
||||||
import com.example.mycrib.models.TaskCreateRequest
|
import com.example.casera.models.TaskCreateRequest
|
||||||
import com.example.mycrib.models.TaskFrequency
|
import com.example.casera.models.TaskFrequency
|
||||||
import com.example.mycrib.models.TaskPriority
|
import com.example.casera.models.TaskPriority
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@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.Box
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
@@ -6,7 +6,7 @@ import androidx.compose.material3.CircularProgressIndicator
|
|||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
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.
|
* Handles ApiResult states automatically with loading, error dialogs, and success content.
|
||||||
@@ -127,7 +127,7 @@ fun <T> ApiResult<T>.HandleErrors(
|
|||||||
|
|
||||||
LaunchedEffect(this) {
|
LaunchedEffect(this) {
|
||||||
if (this@HandleErrors is ApiResult.Error) {
|
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
|
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.layout.*
|
||||||
import androidx.compose.foundation.rememberScrollState
|
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.text.input.KeyboardType
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
import com.example.casera.viewmodel.ContractorViewModel
|
||||||
import com.example.mycrib.models.TaskCompletionCreateRequest
|
import com.example.casera.models.TaskCompletionCreateRequest
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.platform.ImageData
|
import com.example.casera.platform.ImageData
|
||||||
import com.example.mycrib.platform.rememberImagePicker
|
import com.example.casera.platform.rememberImagePicker
|
||||||
import com.example.mycrib.platform.rememberCameraPicker
|
import com.example.casera.platform.rememberCameraPicker
|
||||||
import kotlinx.datetime.*
|
import kotlinx.datetime.*
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@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.AlertDialog
|
||||||
import androidx.compose.material3.Button
|
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.foundation.layout.*
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
@@ -9,9 +9,9 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.input.TextFieldValue
|
import androidx.compose.ui.text.input.TextFieldValue
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.network.ResidenceApi
|
import com.example.casera.network.ResidenceApi
|
||||||
import com.example.mycrib.storage.TokenStorage
|
import com.example.casera.storage.TokenStorage
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@Composable
|
@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.layout.*
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
@@ -12,11 +12,11 @@ import androidx.compose.runtime.*
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.models.ResidenceUser
|
import com.example.casera.models.ResidenceUser
|
||||||
import com.example.mycrib.models.ResidenceShareCode
|
import com.example.casera.models.ResidenceShareCode
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.network.ResidenceApi
|
import com.example.casera.network.ResidenceApi
|
||||||
import com.example.mycrib.storage.TokenStorage
|
import com.example.casera.storage.TokenStorage
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
@Composable
|
@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.foundation.layout.*
|
||||||
import androidx.compose.material3.*
|
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.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
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.foundation.layout.*
|
||||||
import androidx.compose.material3.Card
|
import androidx.compose.material3.Card
|
||||||
@@ -9,9 +9,9 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.ui.theme.AppRadius
|
import com.example.casera.ui.theme.AppRadius
|
||||||
import com.example.mycrib.ui.theme.AppSpacing
|
import com.example.casera.ui.theme.AppSpacing
|
||||||
import com.example.mycrib.ui.theme.backgroundSecondary
|
import com.example.casera.ui.theme.backgroundSecondary
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CompactCard - Smaller card with reduced padding
|
* 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.layout.*
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
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.layout.*
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
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.layout.*
|
||||||
import androidx.compose.material3.Card
|
import androidx.compose.material3.Card
|
||||||
@@ -9,9 +9,9 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.ui.theme.AppRadius
|
import com.example.casera.ui.theme.AppRadius
|
||||||
import com.example.mycrib.ui.theme.AppSpacing
|
import com.example.casera.ui.theme.AppSpacing
|
||||||
import com.example.mycrib.ui.theme.backgroundSecondary
|
import com.example.casera.ui.theme.backgroundSecondary
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* StandardCard - Consistent card component matching iOS design
|
* 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.foundation.layout.*
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
@@ -8,7 +8,7 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
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
|
* 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.foundation.layout.*
|
||||||
import androidx.compose.material3.*
|
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.background
|
||||||
import androidx.compose.foundation.border
|
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.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
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
|
* 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.background
|
||||||
import androidx.compose.foundation.clickable
|
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.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.models.Document
|
import com.example.casera.models.Document
|
||||||
import com.example.mycrib.models.DocumentCategory
|
import com.example.casera.models.DocumentCategory
|
||||||
import com.example.mycrib.models.DocumentType
|
import com.example.casera.models.DocumentType
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DocumentCard(document: Document, isWarrantyCard: Boolean = false, onClick: () -> Unit) {
|
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.foundation.layout.*
|
||||||
import androidx.compose.material.icons.Icons
|
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.layout.*
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
@@ -13,11 +13,11 @@ import androidx.compose.runtime.*
|
|||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.models.Document
|
import com.example.casera.models.Document
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.cache.SubscriptionCache
|
import com.example.casera.cache.SubscriptionCache
|
||||||
import com.example.mycrib.ui.subscription.UpgradeFeatureScreen
|
import com.example.casera.ui.subscription.UpgradeFeatureScreen
|
||||||
import com.example.mycrib.utils.SubscriptionHelper
|
import com.example.casera.utils.SubscriptionHelper
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@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.foundation.layout.*
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
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
|
* 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.layout.*
|
||||||
import androidx.compose.foundation.text.KeyboardActions
|
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.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.text.input.VisualTransformation
|
import androidx.compose.ui.text.input.VisualTransformation
|
||||||
import androidx.compose.ui.unit.dp
|
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
|
* 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.foundation.layout.*
|
||||||
import androidx.compose.material3.*
|
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.foundation.layout.*
|
||||||
import androidx.compose.material3.*
|
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.foundation.layout.*
|
||||||
import androidx.compose.material3.*
|
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.layout.*
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
@@ -12,10 +12,10 @@ import androidx.compose.ui.Alignment
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.models.TaskCompletionResponse
|
import com.example.casera.models.TaskCompletionResponse
|
||||||
import com.example.mycrib.models.TaskCompletion
|
import com.example.casera.models.TaskCompletion
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.network.APILayer
|
import com.example.casera.network.APILayer
|
||||||
import kotlinx.coroutines.launch
|
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.background
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
@@ -23,8 +23,8 @@ import coil3.compose.AsyncImage
|
|||||||
import coil3.compose.AsyncImagePainter
|
import coil3.compose.AsyncImagePainter
|
||||||
import coil3.compose.SubcomposeAsyncImage
|
import coil3.compose.SubcomposeAsyncImage
|
||||||
import coil3.compose.SubcomposeAsyncImageContent
|
import coil3.compose.SubcomposeAsyncImageContent
|
||||||
import com.example.mycrib.models.TaskCompletionImage
|
import com.example.casera.models.TaskCompletionImage
|
||||||
import com.example.mycrib.network.ApiClient
|
import com.example.casera.network.ApiClient
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun PhotoViewerDialog(
|
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.layout.*
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
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.foundation.layout.*
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
@@ -8,7 +8,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.example.mycrib.viewmodel.TaskViewModel
|
import com.example.casera.viewmodel.TaskViewModel
|
||||||
|
|
||||||
// MARK: - Edit Task Button
|
// MARK: - Edit Task Button
|
||||||
@Composable
|
@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.background
|
||||||
import androidx.compose.foundation.layout.*
|
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.graphics.Color
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.models.TaskDetail
|
import com.example.casera.models.TaskDetail
|
||||||
import com.example.mycrib.models.TaskCategory
|
import com.example.casera.models.TaskCategory
|
||||||
import com.example.mycrib.models.TaskPriority
|
import com.example.casera.models.TaskPriority
|
||||||
import com.example.mycrib.models.TaskFrequency
|
import com.example.casera.models.TaskFrequency
|
||||||
import com.example.mycrib.models.TaskStatus
|
import com.example.casera.models.TaskStatus
|
||||||
import com.example.mycrib.models.TaskCompletion
|
import com.example.casera.models.TaskCompletion
|
||||||
import org.jetbrains.compose.ui.tooling.preview.Preview
|
import org.jetbrains.compose.ui.tooling.preview.Preview
|
||||||
|
|
||||||
@Composable
|
@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.ExperimentalFoundationApi
|
||||||
import androidx.compose.foundation.background
|
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.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.example.mycrib.models.TaskColumn
|
import com.example.casera.models.TaskColumn
|
||||||
import com.example.mycrib.models.TaskDetail
|
import com.example.casera.models.TaskDetail
|
||||||
|
|
||||||
@OptIn(ExperimentalFoundationApi::class)
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
@Composable
|
@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.Arrangement
|
||||||
import androidx.compose.foundation.layout.Row
|
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.compose.runtime.Composable
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
import com.example.casera.viewmodel.DocumentViewModel
|
||||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
import com.example.casera.viewmodel.ResidenceViewModel
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AddDocumentScreen(
|
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.compose.runtime.Composable
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
import com.example.casera.viewmodel.ResidenceViewModel
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AddResidenceScreen(
|
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.clickable
|
||||||
import androidx.compose.foundation.layout.*
|
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.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.example.mycrib.ui.components.AddNewTaskWithResidenceDialog
|
import com.example.casera.ui.components.AddNewTaskWithResidenceDialog
|
||||||
import com.example.mycrib.ui.components.ApiResultHandler
|
import com.example.casera.ui.components.ApiResultHandler
|
||||||
import com.example.mycrib.ui.components.CompleteTaskDialog
|
import com.example.casera.ui.components.CompleteTaskDialog
|
||||||
import com.example.mycrib.ui.components.HandleErrors
|
import com.example.casera.ui.components.HandleErrors
|
||||||
import com.example.mycrib.ui.components.task.TaskCard
|
import com.example.casera.ui.components.task.TaskCard
|
||||||
import com.example.mycrib.ui.components.task.DynamicTaskKanbanView
|
import com.example.casera.ui.components.task.DynamicTaskKanbanView
|
||||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
import com.example.casera.viewmodel.ResidenceViewModel
|
||||||
import com.example.mycrib.viewmodel.TaskCompletionViewModel
|
import com.example.casera.viewmodel.TaskCompletionViewModel
|
||||||
import com.example.mycrib.viewmodel.TaskViewModel
|
import com.example.casera.viewmodel.TaskViewModel
|
||||||
import com.example.mycrib.models.TaskDetail
|
import com.example.casera.models.TaskDetail
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
@@ -265,7 +265,7 @@ fun AllTasksScreen(
|
|||||||
},
|
},
|
||||||
isLoading = createTaskState is ApiResult.Loading,
|
isLoading = createTaskState is ApiResult.Loading,
|
||||||
errorMessage = if (createTaskState is ApiResult.Error) {
|
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
|
} 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.background
|
||||||
import androidx.compose.foundation.layout.*
|
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.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.example.mycrib.ui.components.AddContractorDialog
|
import com.example.casera.ui.components.AddContractorDialog
|
||||||
import com.example.mycrib.ui.components.ApiResultHandler
|
import com.example.casera.ui.components.ApiResultHandler
|
||||||
import com.example.mycrib.ui.components.HandleErrors
|
import com.example.casera.ui.components.HandleErrors
|
||||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
import com.example.casera.viewmodel.ContractorViewModel
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@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.background
|
||||||
import androidx.compose.foundation.clickable
|
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.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.example.mycrib.ui.components.AddContractorDialog
|
import com.example.casera.ui.components.AddContractorDialog
|
||||||
import com.example.mycrib.ui.components.ApiResultHandler
|
import com.example.casera.ui.components.ApiResultHandler
|
||||||
import com.example.mycrib.ui.components.HandleErrors
|
import com.example.casera.ui.components.HandleErrors
|
||||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
import com.example.casera.viewmodel.ContractorViewModel
|
||||||
import com.example.mycrib.models.ContractorSummary
|
import com.example.casera.models.ContractorSummary
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.repository.LookupsRepository
|
import com.example.casera.repository.LookupsRepository
|
||||||
import com.example.mycrib.ui.subscription.UpgradeFeatureScreen
|
import com.example.casera.ui.subscription.UpgradeFeatureScreen
|
||||||
import com.example.mycrib.utils.SubscriptionHelper
|
import com.example.casera.utils.SubscriptionHelper
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@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.background
|
||||||
import androidx.compose.foundation.clickable
|
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.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.example.mycrib.ui.components.ApiResultHandler
|
import com.example.casera.ui.components.ApiResultHandler
|
||||||
import com.example.mycrib.ui.components.HandleErrors
|
import com.example.casera.ui.components.HandleErrors
|
||||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
import com.example.casera.viewmodel.DocumentViewModel
|
||||||
import com.example.mycrib.models.*
|
import com.example.casera.models.*
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import coil3.compose.AsyncImage
|
import coil3.compose.AsyncImage
|
||||||
import coil3.compose.rememberAsyncImagePainter
|
import coil3.compose.rememberAsyncImagePainter
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
import com.example.mycrib.ui.components.documents.ErrorState
|
import com.example.casera.ui.components.documents.ErrorState
|
||||||
import com.example.mycrib.ui.components.documents.formatFileSize
|
import com.example.casera.ui.components.documents.formatFileSize
|
||||||
import androidx.compose.ui.window.DialogProperties
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import androidx.compose.foundation.lazy.grid.GridCells
|
import androidx.compose.foundation.lazy.grid.GridCells
|
||||||
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
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.border
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
@@ -18,13 +18,13 @@ import androidx.compose.ui.text.input.KeyboardType
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import coil3.compose.AsyncImage
|
import coil3.compose.AsyncImage
|
||||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
import com.example.casera.viewmodel.DocumentViewModel
|
||||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
import com.example.casera.viewmodel.ResidenceViewModel
|
||||||
import com.example.mycrib.models.*
|
import com.example.casera.models.*
|
||||||
import com.example.mycrib.network.ApiResult
|
import com.example.casera.network.ApiResult
|
||||||
import com.example.mycrib.platform.ImageData
|
import com.example.casera.platform.ImageData
|
||||||
import com.example.mycrib.platform.rememberImagePicker
|
import com.example.casera.platform.rememberImagePicker
|
||||||
import com.example.mycrib.platform.rememberCameraPicker
|
import com.example.casera.platform.rememberCameraPicker
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
@@ -239,7 +239,7 @@ fun DocumentFormScreen(
|
|||||||
}
|
}
|
||||||
is ApiResult.Error -> {
|
is ApiResult.Error -> {
|
||||||
Text(
|
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
|
color = MaterialTheme.colorScheme.error
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -596,7 +596,7 @@ fun DocumentFormScreen(
|
|||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
Text(
|
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),
|
modifier = Modifier.padding(12.dp),
|
||||||
color = MaterialTheme.colorScheme.onErrorContainer
|
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.foundation.layout.*
|
||||||
import androidx.compose.material.icons.Icons
|
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.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.example.mycrib.ui.components.documents.DocumentsTabContent
|
import com.example.casera.ui.components.documents.DocumentsTabContent
|
||||||
import com.example.mycrib.ui.subscription.UpgradeFeatureScreen
|
import com.example.casera.ui.subscription.UpgradeFeatureScreen
|
||||||
import com.example.mycrib.utils.SubscriptionHelper
|
import com.example.casera.utils.SubscriptionHelper
|
||||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
import com.example.casera.viewmodel.DocumentViewModel
|
||||||
import com.example.mycrib.models.*
|
import com.example.casera.models.*
|
||||||
|
|
||||||
enum class DocumentTab {
|
enum class DocumentTab {
|
||||||
WARRANTIES, DOCUMENTS
|
WARRANTIES, DOCUMENTS
|
||||||
@@ -36,7 +36,7 @@ fun DocumentsScreen(
|
|||||||
// Check if screen should be blocked (limit=0)
|
// Check if screen should be blocked (limit=0)
|
||||||
val isBlocked = SubscriptionHelper.isDocumentsBlocked()
|
val isBlocked = SubscriptionHelper.isDocumentsBlocked()
|
||||||
// Get current count for checking when adding
|
// 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 selectedCategory by remember { mutableStateOf<String?>(null) }
|
||||||
var selectedDocType by remember { mutableStateOf<String?>(null) }
|
var selectedDocType by remember { mutableStateOf<String?>(null) }
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user