name refactor
This commit is contained in:
@@ -284,8 +284,8 @@ kordant/
|
||||
|
||||
| Document | Location |
|
||||
|----------|----------|
|
||||
| Product Plan | `plans/SHIELDAI-product-plan.md` |
|
||||
| Technical Architecture | `plans/SHIELDAI-technical-architecture.md` |
|
||||
| Product Plan | `plans/Kordant-product-plan.md` |
|
||||
| Technical Architecture | `plans/Kordant-technical-architecture.md` |
|
||||
| Infrastructure | `infra/README.md` |
|
||||
| Rollback Runbook | `infra/ROLLBACK.md` |
|
||||
| Stripe Integration | `docs/STRIPE_INTEGRATION.md` |
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.shieldai.android
|
||||
package com.kordant.android
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import com.shieldai.android.navigation.AppNavigation
|
||||
import com.shieldai.android.ui.theme.KordantTheme
|
||||
import com.kordant.android.navigation.AppNavigation
|
||||
import com.kordant.android.ui.theme.KordantTheme
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.shieldai.android
|
||||
package com.kordant.android
|
||||
|
||||
import android.app.Application
|
||||
import com.shieldai.android.data.repository.AuthRepository
|
||||
import com.shieldai.android.data.repository.AuthRepositoryImpl
|
||||
import com.kordant.android.data.repository.AuthRepository
|
||||
import com.kordant.android.data.repository.AuthRepositoryImpl
|
||||
|
||||
class KordantApp : Application() {
|
||||
lateinit var authRepository: AuthRepository
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.local
|
||||
package com.kordant.android.data.local
|
||||
|
||||
import android.content.Context
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.model
|
||||
package com.kordant.android.data.model
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.remote
|
||||
package com.kordant.android.data.remote
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
@@ -11,7 +11,7 @@ class AuthInterceptor(context: Context) : Interceptor {
|
||||
|
||||
private val securePrefs: SharedPreferences = EncryptedSharedPreferences.create(
|
||||
context,
|
||||
"shieldai_auth_prefs",
|
||||
"kordant_auth_prefs",
|
||||
MasterKey.Builder(context).setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build(),
|
||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.remote
|
||||
package com.kordant.android.data.remote
|
||||
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlin.math.min
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
package com.shieldai.android.data.remote
|
||||
package com.kordant.android.data.remote
|
||||
|
||||
import com.shieldai.android.data.model.Alert
|
||||
import com.shieldai.android.data.model.BrokerListing
|
||||
import com.shieldai.android.data.model.Exposure
|
||||
import com.shieldai.android.data.model.Property
|
||||
import com.shieldai.android.data.model.RemovalRequest
|
||||
import com.shieldai.android.data.model.SpamRule
|
||||
import com.shieldai.android.data.model.Subscription
|
||||
import com.shieldai.android.data.model.User
|
||||
import com.shieldai.android.data.model.VoiceAnalysis
|
||||
import com.shieldai.android.data.model.VoiceEnrollment
|
||||
import com.shieldai.android.data.model.WatchlistItem
|
||||
import com.kordant.android.data.model.Alert
|
||||
import com.kordant.android.data.model.BrokerListing
|
||||
import com.kordant.android.data.model.Exposure
|
||||
import com.kordant.android.data.model.Property
|
||||
import com.kordant.android.data.model.RemovalRequest
|
||||
import com.kordant.android.data.model.SpamRule
|
||||
import com.kordant.android.data.model.Subscription
|
||||
import com.kordant.android.data.model.User
|
||||
import com.kordant.android.data.model.VoiceAnalysis
|
||||
import com.kordant.android.data.model.VoiceEnrollment
|
||||
import com.kordant.android.data.model.WatchlistItem
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.POST
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.remote
|
||||
package com.kordant.android.data.remote
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.json.JsonElement
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.shieldai.android.data.repository
|
||||
package com.kordant.android.data.repository
|
||||
|
||||
import android.content.Context
|
||||
import com.shieldai.android.data.local.CacheManager
|
||||
import com.shieldai.android.data.model.Alert
|
||||
import com.shieldai.android.data.remote.ApiResult
|
||||
import com.shieldai.android.data.remote.ErrorHandler
|
||||
import com.shieldai.android.data.remote.TRPCApiService
|
||||
import com.shieldai.android.data.remote.TRPCRequest
|
||||
import com.kordant.android.data.local.CacheManager
|
||||
import com.kordant.android.data.model.Alert
|
||||
import com.kordant.android.data.remote.ApiResult
|
||||
import com.kordant.android.data.remote.ErrorHandler
|
||||
import com.kordant.android.data.remote.TRPCApiService
|
||||
import com.kordant.android.data.remote.TRPCRequest
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.repository
|
||||
package com.kordant.android.data.repository
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
@@ -38,7 +38,7 @@ interface AuthRepository {
|
||||
|
||||
class AuthRepositoryImpl(
|
||||
context: Context,
|
||||
private val baseUrl: String = "https://api.shieldai.com"
|
||||
private val baseUrl: String = "https://kordant.ai/api"
|
||||
) : AuthRepository {
|
||||
|
||||
private val JSON_MEDIA_TYPE = "application/json; charset=utf-8".toMediaType()
|
||||
@@ -54,7 +54,7 @@ class AuthRepositoryImpl(
|
||||
|
||||
private val securePrefs: SharedPreferences = EncryptedSharedPreferences.create(
|
||||
context,
|
||||
"shieldai_auth_prefs",
|
||||
"kordant_auth_prefs",
|
||||
masterKey,
|
||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.shieldai.android.data.repository
|
||||
package com.kordant.android.data.repository
|
||||
|
||||
import android.content.Context
|
||||
import com.shieldai.android.data.local.CacheManager
|
||||
import com.shieldai.android.data.model.Exposure
|
||||
import com.shieldai.android.data.model.WatchlistItem
|
||||
import com.shieldai.android.data.remote.ApiResult
|
||||
import com.shieldai.android.data.remote.ErrorHandler
|
||||
import com.shieldai.android.data.remote.TRPCApiService
|
||||
import com.shieldai.android.data.remote.TRPCRequest
|
||||
import com.kordant.android.data.local.CacheManager
|
||||
import com.kordant.android.data.model.Exposure
|
||||
import com.kordant.android.data.model.WatchlistItem
|
||||
import com.kordant.android.data.remote.ApiResult
|
||||
import com.kordant.android.data.remote.ErrorHandler
|
||||
import com.kordant.android.data.remote.TRPCApiService
|
||||
import com.kordant.android.data.remote.TRPCRequest
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.shieldai.android.data.repository
|
||||
package com.kordant.android.data.repository
|
||||
|
||||
import android.content.Context
|
||||
import com.shieldai.android.data.local.CacheManager
|
||||
import com.shieldai.android.data.model.Property
|
||||
import com.shieldai.android.data.remote.ApiResult
|
||||
import com.shieldai.android.data.remote.ErrorHandler
|
||||
import com.shieldai.android.data.remote.TRPCApiService
|
||||
import com.shieldai.android.data.remote.TRPCRequest
|
||||
import com.kordant.android.data.local.CacheManager
|
||||
import com.kordant.android.data.model.Property
|
||||
import com.kordant.android.data.remote.ApiResult
|
||||
import com.kordant.android.data.remote.ErrorHandler
|
||||
import com.kordant.android.data.remote.TRPCApiService
|
||||
import com.kordant.android.data.remote.TRPCRequest
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.shieldai.android.data.repository
|
||||
package com.kordant.android.data.repository
|
||||
|
||||
import android.content.Context
|
||||
import com.shieldai.android.data.local.CacheManager
|
||||
import com.shieldai.android.data.model.BrokerListing
|
||||
import com.shieldai.android.data.model.RemovalRequest
|
||||
import com.shieldai.android.data.remote.ApiResult
|
||||
import com.shieldai.android.data.remote.ErrorHandler
|
||||
import com.shieldai.android.data.remote.TRPCApiService
|
||||
import com.shieldai.android.data.remote.TRPCRequest
|
||||
import com.kordant.android.data.local.CacheManager
|
||||
import com.kordant.android.data.model.BrokerListing
|
||||
import com.kordant.android.data.model.RemovalRequest
|
||||
import com.kordant.android.data.remote.ApiResult
|
||||
import com.kordant.android.data.remote.ErrorHandler
|
||||
import com.kordant.android.data.remote.TRPCApiService
|
||||
import com.kordant.android.data.remote.TRPCRequest
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.shieldai.android.data.repository
|
||||
package com.kordant.android.data.repository
|
||||
|
||||
import android.content.Context
|
||||
import com.shieldai.android.data.local.CacheManager
|
||||
import com.shieldai.android.data.model.SpamRule
|
||||
import com.shieldai.android.data.remote.ApiResult
|
||||
import com.shieldai.android.data.remote.ErrorHandler
|
||||
import com.shieldai.android.data.remote.TRPCApiService
|
||||
import com.shieldai.android.data.remote.TRPCRequest
|
||||
import com.kordant.android.data.local.CacheManager
|
||||
import com.kordant.android.data.model.SpamRule
|
||||
import com.kordant.android.data.remote.ApiResult
|
||||
import com.kordant.android.data.remote.ErrorHandler
|
||||
import com.kordant.android.data.remote.TRPCApiService
|
||||
import com.kordant.android.data.remote.TRPCRequest
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.shieldai.android.data.repository
|
||||
package com.kordant.android.data.repository
|
||||
|
||||
import android.content.Context
|
||||
import com.shieldai.android.data.local.CacheManager
|
||||
import com.shieldai.android.data.model.Subscription
|
||||
import com.shieldai.android.data.remote.ApiResult
|
||||
import com.shieldai.android.data.remote.ErrorHandler
|
||||
import com.shieldai.android.data.remote.TRPCApiService
|
||||
import com.shieldai.android.data.remote.TRPCRequest
|
||||
import com.kordant.android.data.local.CacheManager
|
||||
import com.kordant.android.data.model.Subscription
|
||||
import com.kordant.android.data.remote.ApiResult
|
||||
import com.kordant.android.data.remote.ErrorHandler
|
||||
import com.kordant.android.data.remote.TRPCApiService
|
||||
import com.kordant.android.data.remote.TRPCRequest
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
import kotlinx.serialization.json.put
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.shieldai.android.data.repository
|
||||
package com.kordant.android.data.repository
|
||||
|
||||
import android.content.Context
|
||||
import com.shieldai.android.data.local.CacheManager
|
||||
import com.shieldai.android.data.model.User
|
||||
import com.shieldai.android.data.remote.ApiResult
|
||||
import com.shieldai.android.data.remote.ErrorHandler
|
||||
import com.shieldai.android.data.remote.TRPCApiService
|
||||
import com.shieldai.android.data.remote.TRPCRequest
|
||||
import com.kordant.android.data.local.CacheManager
|
||||
import com.kordant.android.data.model.User
|
||||
import com.kordant.android.data.remote.ApiResult
|
||||
import com.kordant.android.data.remote.ErrorHandler
|
||||
import com.kordant.android.data.remote.TRPCApiService
|
||||
import com.kordant.android.data.remote.TRPCRequest
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.shieldai.android.data.repository
|
||||
package com.kordant.android.data.repository
|
||||
|
||||
import android.content.Context
|
||||
import com.shieldai.android.data.local.CacheManager
|
||||
import com.shieldai.android.data.model.VoiceAnalysis
|
||||
import com.shieldai.android.data.model.VoiceEnrollment
|
||||
import com.shieldai.android.data.remote.ApiResult
|
||||
import com.shieldai.android.data.remote.ErrorHandler
|
||||
import com.shieldai.android.data.remote.TRPCApiService
|
||||
import com.shieldai.android.data.remote.TRPCRequest
|
||||
import com.kordant.android.data.local.CacheManager
|
||||
import com.kordant.android.data.model.VoiceAnalysis
|
||||
import com.kordant.android.data.model.VoiceEnrollment
|
||||
import com.kordant.android.data.remote.ApiResult
|
||||
import com.kordant.android.data.remote.ErrorHandler
|
||||
import com.kordant.android.data.remote.TRPCApiService
|
||||
import com.kordant.android.data.remote.TRPCRequest
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.sync
|
||||
package com.kordant.android.data.sync
|
||||
|
||||
import android.content.Context
|
||||
import androidx.work.CoroutineWorker
|
||||
@@ -29,7 +29,7 @@ class OfflineWorker(
|
||||
try {
|
||||
val body = request.body.toRequestBody(jsonMediaType)
|
||||
val httpRequest = Request.Builder()
|
||||
.url("https://api.shieldai.com/${request.endpoint}")
|
||||
.url("https://kordant.ai/api/${request.endpoint}")
|
||||
.method(request.method, body)
|
||||
.build()
|
||||
val response = client.newCall(httpRequest).execute()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.sync
|
||||
package com.kordant.android.data.sync
|
||||
|
||||
import android.content.Context
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.data.sync
|
||||
package com.kordant.android.data.sync
|
||||
|
||||
import android.content.Context
|
||||
import android.net.ConnectivityManager
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.shieldai.android.di
|
||||
package com.kordant.android.di
|
||||
|
||||
import android.content.Context
|
||||
import com.shieldai.android.data.local.CacheManager
|
||||
import com.kordant.android.data.local.CacheManager
|
||||
|
||||
object DatabaseModule {
|
||||
fun initializeCache(context: Context) {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.shieldai.android.di
|
||||
package com.kordant.android.di
|
||||
|
||||
import android.content.Context
|
||||
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
|
||||
import com.shieldai.android.data.remote.AuthInterceptor
|
||||
import com.shieldai.android.data.remote.TRPCApiService
|
||||
import com.kordant.android.data.remote.AuthInterceptor
|
||||
import com.kordant.android.data.remote.TRPCApiService
|
||||
import kotlinx.serialization.json.Json
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.OkHttpClient
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.shieldai.android.di
|
||||
package com.kordant.android.di
|
||||
|
||||
import android.content.Context
|
||||
import com.shieldai.android.data.repository.AlertRepository
|
||||
import com.shieldai.android.data.repository.DarkWatchRepository
|
||||
import com.shieldai.android.data.repository.HomeTitleRepository
|
||||
import com.shieldai.android.data.repository.RemoveBrokersRepository
|
||||
import com.shieldai.android.data.repository.SpamShieldRepository
|
||||
import com.shieldai.android.data.repository.SubscriptionRepository
|
||||
import com.shieldai.android.data.repository.UserRepository
|
||||
import com.shieldai.android.data.repository.VoicePrintRepository
|
||||
import com.kordant.android.data.repository.AlertRepository
|
||||
import com.kordant.android.data.repository.DarkWatchRepository
|
||||
import com.kordant.android.data.repository.HomeTitleRepository
|
||||
import com.kordant.android.data.repository.RemoveBrokersRepository
|
||||
import com.kordant.android.data.repository.SpamShieldRepository
|
||||
import com.kordant.android.data.repository.SubscriptionRepository
|
||||
import com.kordant.android.data.repository.UserRepository
|
||||
import com.kordant.android.data.repository.VoicePrintRepository
|
||||
|
||||
object RepositoryModule {
|
||||
private var userRepository: UserRepository? = null
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.navigation
|
||||
package com.kordant.android.navigation
|
||||
|
||||
import android.app.Application
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@@ -11,8 +11,8 @@ import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import androidx.navigation.compose.currentBackStackEntryAsState
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.shieldai.android.KordantApp
|
||||
import com.shieldai.android.viewmodel.AuthViewModel
|
||||
import com.kordant.android.KordantApp
|
||||
import com.kordant.android.viewmodel.AuthViewModel
|
||||
|
||||
@Composable
|
||||
fun AppNavigation() {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.navigation
|
||||
package com.kordant.android.navigation
|
||||
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.NavigationBar
|
||||
@@ -7,7 +7,7 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.vectorResource
|
||||
import com.shieldai.android.R
|
||||
import com.kordant.android.R
|
||||
|
||||
data class BottomNavItem(
|
||||
val screen: Screen,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.navigation
|
||||
package com.kordant.android.navigation
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
@@ -26,20 +26,20 @@ import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import androidx.navigation.navArgument
|
||||
import com.shieldai.android.R
|
||||
import com.shieldai.android.ui.screens.auth.AuthScreen
|
||||
import com.shieldai.android.ui.screens.auth.ForgotPasswordScreen
|
||||
import com.shieldai.android.ui.screens.auth.ResetPasswordScreen
|
||||
import com.shieldai.android.ui.screens.dashboard.AlertDetailScreen
|
||||
import com.shieldai.android.ui.screens.dashboard.DashboardScreen
|
||||
import com.shieldai.android.ui.screens.onboarding.OnboardingScreen
|
||||
import com.shieldai.android.ui.screens.services.DarkWatchScreen
|
||||
import com.shieldai.android.ui.screens.services.HomeTitleScreen
|
||||
import com.shieldai.android.ui.screens.services.RemoveBrokersScreen
|
||||
import com.shieldai.android.ui.screens.services.SpamShieldScreen
|
||||
import com.shieldai.android.ui.screens.services.VoicePrintScreen
|
||||
import com.shieldai.android.ui.screens.settings.SettingsScreen
|
||||
import com.shieldai.android.viewmodel.AuthViewModel
|
||||
import com.kordant.android.R
|
||||
import com.kordant.android.ui.screens.auth.AuthScreen
|
||||
import com.kordant.android.ui.screens.auth.ForgotPasswordScreen
|
||||
import com.kordant.android.ui.screens.auth.ResetPasswordScreen
|
||||
import com.kordant.android.ui.screens.dashboard.AlertDetailScreen
|
||||
import com.kordant.android.ui.screens.dashboard.DashboardScreen
|
||||
import com.kordant.android.ui.screens.onboarding.OnboardingScreen
|
||||
import com.kordant.android.ui.screens.services.DarkWatchScreen
|
||||
import com.kordant.android.ui.screens.services.HomeTitleScreen
|
||||
import com.kordant.android.ui.screens.services.RemoveBrokersScreen
|
||||
import com.kordant.android.ui.screens.services.SpamShieldScreen
|
||||
import com.kordant.android.ui.screens.services.VoicePrintScreen
|
||||
import com.kordant.android.ui.screens.settings.SettingsScreen
|
||||
import com.kordant.android.viewmodel.AuthViewModel
|
||||
|
||||
data class ServiceNavCard(
|
||||
val title: String,
|
||||
@@ -224,7 +224,7 @@ private fun ServicesHubScreen(
|
||||
) {
|
||||
items(services.size) { index ->
|
||||
val service = services[index]
|
||||
com.shieldai.android.ui.components.ShieldCard(
|
||||
com.kordant.android.ui.components.ShieldCard(
|
||||
onClick = { onNavigateToService(service.route) },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
@@ -269,7 +269,7 @@ private fun AlertsScreen(
|
||||
fontWeight = FontWeight.Bold,
|
||||
modifier = Modifier.padding(bottom = 16.dp)
|
||||
)
|
||||
com.shieldai.android.ui.components.ShieldEmptyState(
|
||||
com.kordant.android.ui.components.ShieldEmptyState(
|
||||
title = "No alerts",
|
||||
description = "You have no recent alerts"
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.navigation
|
||||
package com.kordant.android.navigation
|
||||
|
||||
sealed class Screen(val route: String) {
|
||||
data object Dashboard : Screen("dashboard")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import android.content.res.Configuration
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
@@ -29,7 +29,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.KordantTheme
|
||||
import com.kordant.android.ui.theme.KordantTheme
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.foundation.Canvas
|
||||
import androidx.compose.foundation.background
|
||||
@@ -22,8 +22,8 @@ import androidx.compose.ui.unit.TextUnit
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import coil.compose.AsyncImage
|
||||
import com.shieldai.android.ui.theme.BrandPrimary
|
||||
import com.shieldai.android.ui.theme.Success
|
||||
import com.kordant.android.ui.theme.BrandPrimary
|
||||
import com.kordant.android.ui.theme.Success
|
||||
|
||||
enum class AvatarSize(val dimension: Dp, val fontSize: TextUnit) {
|
||||
Small(32.dp, 12.sp),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
@@ -16,12 +16,12 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.painter.Painter
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.Error
|
||||
import com.shieldai.android.ui.theme.Info
|
||||
import com.shieldai.android.ui.theme.Success
|
||||
import com.shieldai.android.ui.theme.TextPrimaryLight
|
||||
import com.shieldai.android.ui.theme.TextSecondaryLight
|
||||
import com.shieldai.android.ui.theme.Warning
|
||||
import com.kordant.android.ui.theme.Error
|
||||
import com.kordant.android.ui.theme.Info
|
||||
import com.kordant.android.ui.theme.Success
|
||||
import com.kordant.android.ui.theme.TextPrimaryLight
|
||||
import com.kordant.android.ui.theme.TextSecondaryLight
|
||||
import com.kordant.android.ui.theme.Warning
|
||||
|
||||
enum class BadgeVariant {
|
||||
Default, Success, Warning, Error, Info
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.RowScope
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
@@ -18,8 +18,8 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.BrandPrimary
|
||||
import com.shieldai.android.ui.theme.Error
|
||||
import com.kordant.android.ui.theme.BrandPrimary
|
||||
import com.kordant.android.ui.theme.Error
|
||||
|
||||
enum class ShieldButtonVariant {
|
||||
Primary, Secondary, Ghost, Danger
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.foundation.BorderStroke
|
||||
import androidx.compose.foundation.background
|
||||
@@ -13,9 +13,9 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Brush
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.BrandAccent
|
||||
import com.shieldai.android.ui.theme.BrandPrimary
|
||||
import com.shieldai.android.ui.theme.OutlineLight
|
||||
import com.kordant.android.ui.theme.BrandAccent
|
||||
import com.kordant.android.ui.theme.BrandPrimary
|
||||
import com.kordant.android.ui.theme.OutlineLight
|
||||
|
||||
val GradientCardBrush = Brush.linearGradient(
|
||||
colors = listOf(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
@@ -19,7 +19,7 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.BrandPrimary
|
||||
import com.kordant.android.ui.theme.BrandPrimary
|
||||
|
||||
data class ModalAction(
|
||||
val text: String,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
@@ -14,12 +14,12 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.StrokeCap
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.BrandAccent
|
||||
import com.shieldai.android.ui.theme.BrandPrimary
|
||||
import com.shieldai.android.ui.theme.Error
|
||||
import com.shieldai.android.ui.theme.OutlineLight
|
||||
import com.shieldai.android.ui.theme.Success
|
||||
import com.shieldai.android.ui.theme.Warning
|
||||
import com.kordant.android.ui.theme.BrandAccent
|
||||
import com.kordant.android.ui.theme.BrandPrimary
|
||||
import com.kordant.android.ui.theme.Error
|
||||
import com.kordant.android.ui.theme.OutlineLight
|
||||
import com.kordant.android.ui.theme.Success
|
||||
import com.kordant.android.ui.theme.Warning
|
||||
|
||||
enum class ProgressColor {
|
||||
Primary, Accent, Success, Warning, Error
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.animation.core.LinearEasing
|
||||
import androidx.compose.animation.core.RepeatMode
|
||||
@@ -22,7 +22,7 @@ import androidx.compose.ui.geometry.Offset
|
||||
import androidx.compose.ui.graphics.Brush
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.OutlineLight
|
||||
import com.kordant.android.ui.theme.OutlineLight
|
||||
|
||||
@Composable
|
||||
fun ShieldSkeletonLine(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
@@ -20,7 +20,7 @@ import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.Error
|
||||
import com.kordant.android.ui.theme.Error
|
||||
|
||||
enum class InputType {
|
||||
Text, Email, Password, Number, Phone
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@@ -13,11 +13,11 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.Error
|
||||
import com.shieldai.android.ui.theme.Info
|
||||
import com.shieldai.android.ui.theme.Success
|
||||
import com.shieldai.android.ui.theme.TextPrimaryDark
|
||||
import com.shieldai.android.ui.theme.Warning
|
||||
import com.kordant.android.ui.theme.Error
|
||||
import com.kordant.android.ui.theme.Info
|
||||
import com.kordant.android.ui.theme.Success
|
||||
import com.kordant.android.ui.theme.TextPrimaryDark
|
||||
import com.kordant.android.ui.theme.Warning
|
||||
|
||||
enum class ToastVariant {
|
||||
Success, Error, Warning, Info
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.components
|
||||
package com.kordant.android.ui.components
|
||||
|
||||
import androidx.compose.foundation.Canvas
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -18,9 +18,9 @@ import androidx.compose.ui.graphics.Paint
|
||||
import androidx.compose.ui.graphics.drawscope.DrawScope
|
||||
import androidx.compose.ui.graphics.drawscope.scale
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.Error
|
||||
import com.shieldai.android.ui.theme.Success
|
||||
import com.shieldai.android.ui.theme.Warning
|
||||
import com.kordant.android.ui.theme.Error
|
||||
import com.kordant.android.ui.theme.Success
|
||||
import com.kordant.android.ui.theme.Warning
|
||||
|
||||
@Composable
|
||||
fun ThreatGauge(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.auth
|
||||
package com.kordant.android.ui.screens.auth
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -26,9 +26,9 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.R
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.viewmodel.AuthViewModel
|
||||
import com.kordant.android.R
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.viewmodel.AuthViewModel
|
||||
|
||||
@Composable
|
||||
fun AuthScreen(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.auth
|
||||
package com.kordant.android.ui.screens.auth
|
||||
|
||||
import android.content.Context
|
||||
import android.security.identity.IdentityCredentialException
|
||||
@@ -79,11 +79,11 @@ fun canUseBiometric(context: Context): Boolean {
|
||||
}
|
||||
|
||||
fun isBiometricEnabled(context: Context): Boolean {
|
||||
val prefs = context.getSharedPreferences("shieldai_biometric_prefs", Context.MODE_PRIVATE)
|
||||
val prefs = context.getSharedPreferences("kordant_biometric_prefs", Context.MODE_PRIVATE)
|
||||
return prefs.getBoolean("biometric_enabled", false)
|
||||
}
|
||||
|
||||
fun setBiometricEnabled(context: Context, enabled: Boolean) {
|
||||
val prefs = context.getSharedPreferences("shieldai_biometric_prefs", Context.MODE_PRIVATE)
|
||||
val prefs = context.getSharedPreferences("kordant_biometric_prefs", Context.MODE_PRIVATE)
|
||||
prefs.edit().putBoolean("biometric_enabled", enabled).apply()
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.auth
|
||||
package com.kordant.android.ui.screens.auth
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
@@ -21,12 +21,12 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.components.InputType
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.shieldai.android.viewmodel.AuthViewModel
|
||||
import com.kordant.android.ui.components.InputType
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.viewmodel.AuthViewModel
|
||||
|
||||
@Composable
|
||||
fun ForgotPasswordScreen(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.auth
|
||||
package com.kordant.android.ui.screens.auth
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
@@ -33,12 +33,12 @@ import com.google.android.gms.auth.api.signin.GoogleSignIn
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignInClient
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
|
||||
import com.google.android.gms.common.api.ApiException
|
||||
import com.shieldai.android.ui.components.InputType
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.shieldai.android.ui.theme.BrandPrimary
|
||||
import com.shieldai.android.viewmodel.AuthUiState
|
||||
import com.shieldai.android.viewmodel.AuthViewModel
|
||||
import com.kordant.android.ui.components.InputType
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.ui.theme.BrandPrimary
|
||||
import com.kordant.android.viewmodel.AuthUiState
|
||||
import com.kordant.android.viewmodel.AuthViewModel
|
||||
|
||||
@Composable
|
||||
fun LoginScreen(
|
||||
@@ -53,7 +53,7 @@ fun LoginScreen(
|
||||
|
||||
val gso = remember {
|
||||
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
|
||||
.requestIdToken(context.getString(com.shieldai.android.R.string.default_web_client_id))
|
||||
.requestIdToken(context.getString(com.kordant.android.R.string.default_web_client_id))
|
||||
.requestEmail()
|
||||
.build()
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.auth
|
||||
package com.kordant.android.ui.screens.auth
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
@@ -21,11 +21,11 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.components.InputType
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.shieldai.android.viewmodel.AuthViewModel
|
||||
import com.kordant.android.ui.components.InputType
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.viewmodel.AuthViewModel
|
||||
|
||||
@Composable
|
||||
fun ResetPasswordScreen(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.auth
|
||||
package com.kordant.android.ui.screens.auth
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
@@ -19,16 +19,16 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.components.InputType
|
||||
import com.shieldai.android.ui.components.ProgressColor
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldProgressBar
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.shieldai.android.util.PasswordStrength
|
||||
import com.shieldai.android.util.calculatePasswordStrength
|
||||
import com.shieldai.android.util.passwordStrengthLabel
|
||||
import com.shieldai.android.viewmodel.AuthUiState
|
||||
import com.shieldai.android.viewmodel.AuthViewModel
|
||||
import com.kordant.android.ui.components.InputType
|
||||
import com.kordant.android.ui.components.ProgressColor
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldProgressBar
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.util.PasswordStrength
|
||||
import com.kordant.android.util.calculatePasswordStrength
|
||||
import com.kordant.android.util.passwordStrengthLabel
|
||||
import com.kordant.android.viewmodel.AuthUiState
|
||||
import com.kordant.android.viewmodel.AuthViewModel
|
||||
|
||||
@Composable
|
||||
fun SignupScreen(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.dashboard
|
||||
package com.kordant.android.ui.screens.dashboard
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -28,14 +28,14 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.shieldai.android.data.model.Alert
|
||||
import com.shieldai.android.ui.components.BadgeVariant
|
||||
import com.shieldai.android.ui.components.ShieldBadge
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.ui.components.ShieldEmptyState
|
||||
import com.shieldai.android.ui.viewmodel.AlertDetailViewModel
|
||||
import com.kordant.android.data.model.Alert
|
||||
import com.kordant.android.ui.components.BadgeVariant
|
||||
import com.kordant.android.ui.components.ShieldBadge
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.ui.components.ShieldEmptyState
|
||||
import com.kordant.android.ui.viewmodel.AlertDetailViewModel
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.dashboard
|
||||
package com.kordant.android.ui.screens.dashboard
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@@ -36,18 +36,18 @@ import androidx.compose.ui.res.vectorResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.shieldai.android.R
|
||||
import com.shieldai.android.data.model.Alert
|
||||
import com.shieldai.android.ui.components.BadgeVariant
|
||||
import com.shieldai.android.ui.components.ShieldBadge
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.ui.components.ShieldEmptyState
|
||||
import com.shieldai.android.ui.components.ShieldSkeletonCard
|
||||
import com.shieldai.android.ui.components.ThreatGauge
|
||||
import com.shieldai.android.viewmodel.DashboardViewModel
|
||||
import com.shieldai.android.viewmodel.DashboardViewModel as DashboardVM
|
||||
import com.kordant.android.R
|
||||
import com.kordant.android.data.model.Alert
|
||||
import com.kordant.android.ui.components.BadgeVariant
|
||||
import com.kordant.android.ui.components.ShieldBadge
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.ui.components.ShieldEmptyState
|
||||
import com.kordant.android.ui.components.ShieldSkeletonCard
|
||||
import com.kordant.android.ui.components.ThreatGauge
|
||||
import com.kordant.android.viewmodel.DashboardViewModel
|
||||
import com.kordant.android.viewmodel.DashboardViewModel as DashboardVM
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
data class ServiceSummary(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.onboarding
|
||||
package com.kordant.android.ui.screens.onboarding
|
||||
|
||||
import androidx.compose.animation.core.Animatable
|
||||
import androidx.compose.animation.core.tween
|
||||
@@ -24,9 +24,9 @@ import androidx.compose.ui.graphics.drawscope.Stroke
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.theme.BrandPrimary
|
||||
import com.shieldai.android.ui.theme.Success
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.theme.BrandPrimary
|
||||
import com.kordant.android.ui.theme.Success
|
||||
|
||||
@Composable
|
||||
fun CompleteStep(onComplete: () -> Unit) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.onboarding
|
||||
package com.kordant.android.ui.screens.onboarding
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
@@ -24,10 +24,10 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.components.InputType
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.ui.components.InputType
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
|
||||
@Composable
|
||||
fun FamilyInviteStep(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.onboarding
|
||||
package com.kordant.android.ui.screens.onboarding
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
@@ -22,8 +22,8 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.draw.drawBehind
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.theme.BrandPrimary
|
||||
import com.shieldai.android.viewmodel.AuthViewModel
|
||||
import com.kordant.android.ui.theme.BrandPrimary
|
||||
import com.kordant.android.viewmodel.AuthViewModel
|
||||
|
||||
@Composable
|
||||
fun OnboardingScreen(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.onboarding
|
||||
package com.kordant.android.ui.screens.onboarding
|
||||
|
||||
import androidx.compose.foundation.BorderStroke
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -23,7 +23,7 @@ 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.shieldai.android.ui.theme.BrandPrimary
|
||||
import com.kordant.android.ui.theme.BrandPrimary
|
||||
|
||||
data class Plan(
|
||||
val name: String,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.onboarding
|
||||
package com.kordant.android.ui.screens.onboarding
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
@@ -24,10 +24,10 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.shieldai.android.ui.components.InputType
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.ui.components.InputType
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
|
||||
@Composable
|
||||
fun WatchlistSetupStep(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.services
|
||||
package com.kordant.android.ui.screens.services
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -36,14 +36,14 @@ import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.shieldai.android.R
|
||||
import com.shieldai.android.ui.components.ShieldBadge
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.ui.components.ShieldEmptyState
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.shieldai.android.viewmodel.DarkWatchViewModel
|
||||
import com.kordant.android.R
|
||||
import com.kordant.android.ui.components.ShieldBadge
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.ui.components.ShieldEmptyState
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.viewmodel.DarkWatchViewModel
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -186,7 +186,7 @@ private fun DarkWatchContent(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun WatchlistItemCard(item: com.shieldai.android.data.model.WatchlistItem) {
|
||||
private fun WatchlistItemCard(item: com.kordant.android.data.model.WatchlistItem) {
|
||||
ShieldCard(modifier = Modifier.fillMaxWidth()) {
|
||||
Row(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
@@ -214,15 +214,15 @@ private fun WatchlistItemCard(item: com.shieldai.android.data.model.WatchlistIte
|
||||
}
|
||||
ShieldBadge(
|
||||
text = item.status,
|
||||
variant = if (item.status == "active") com.shieldai.android.ui.components.BadgeVariant.Success
|
||||
else com.shieldai.android.ui.components.BadgeVariant.Default
|
||||
variant = if (item.status == "active") com.kordant.android.ui.components.BadgeVariant.Success
|
||||
else com.kordant.android.ui.components.BadgeVariant.Default
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun ExposureCard(exposure: com.shieldai.android.data.model.Exposure) {
|
||||
private fun ExposureCard(exposure: com.kordant.android.data.model.Exposure) {
|
||||
ShieldCard(modifier = Modifier.fillMaxWidth()) {
|
||||
Column {
|
||||
Row(
|
||||
@@ -238,9 +238,9 @@ private fun ExposureCard(exposure: com.shieldai.android.data.model.Exposure) {
|
||||
ShieldBadge(
|
||||
text = exposure.severity,
|
||||
variant = when (exposure.severity.lowercase()) {
|
||||
"critical" -> com.shieldai.android.ui.components.BadgeVariant.Error
|
||||
"high" -> com.shieldai.android.ui.components.BadgeVariant.Warning
|
||||
else -> com.shieldai.android.ui.components.BadgeVariant.Info
|
||||
"critical" -> com.kordant.android.ui.components.BadgeVariant.Error
|
||||
"high" -> com.kordant.android.ui.components.BadgeVariant.Warning
|
||||
else -> com.kordant.android.ui.components.BadgeVariant.Info
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.services
|
||||
package com.kordant.android.ui.screens.services
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -36,15 +36,15 @@ import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.shieldai.android.R
|
||||
import com.shieldai.android.ui.components.BadgeVariant
|
||||
import com.shieldai.android.ui.components.ShieldBadge
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.ui.components.ShieldEmptyState
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.shieldai.android.viewmodel.HomeTitleViewModel
|
||||
import com.kordant.android.R
|
||||
import com.kordant.android.ui.components.BadgeVariant
|
||||
import com.kordant.android.ui.components.ShieldBadge
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.ui.components.ShieldEmptyState
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.viewmodel.HomeTitleViewModel
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -160,7 +160,7 @@ private fun HomeTitleContent(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun PropertyCard(property: com.shieldai.android.data.model.Property) {
|
||||
private fun PropertyCard(property: com.kordant.android.data.model.Property) {
|
||||
ShieldCard(modifier = Modifier.fillMaxWidth()) {
|
||||
Column {
|
||||
Row(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.services
|
||||
package com.kordant.android.ui.screens.services
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -36,15 +36,15 @@ import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.shieldai.android.R
|
||||
import com.shieldai.android.ui.components.BadgeVariant
|
||||
import com.shieldai.android.ui.components.ShieldBadge
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.ui.components.ShieldEmptyState
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.shieldai.android.viewmodel.RemoveBrokersViewModel
|
||||
import com.kordant.android.R
|
||||
import com.kordant.android.ui.components.BadgeVariant
|
||||
import com.kordant.android.ui.components.ShieldBadge
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.ui.components.ShieldEmptyState
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.viewmodel.RemoveBrokersViewModel
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -187,7 +187,7 @@ private fun RemoveBrokersContent(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun ListingCard(listing: com.shieldai.android.data.model.BrokerListing) {
|
||||
private fun ListingCard(listing: com.kordant.android.data.model.BrokerListing) {
|
||||
ShieldCard(modifier = Modifier.fillMaxWidth()) {
|
||||
Column {
|
||||
Row(
|
||||
@@ -226,7 +226,7 @@ private fun ListingCard(listing: com.shieldai.android.data.model.BrokerListing)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun RemovalRequestCard(request: com.shieldai.android.data.model.RemovalRequest) {
|
||||
private fun RemovalRequestCard(request: com.kordant.android.data.model.RemovalRequest) {
|
||||
ShieldCard(modifier = Modifier.fillMaxWidth()) {
|
||||
Column {
|
||||
Row(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.services
|
||||
package com.kordant.android.ui.screens.services
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -37,14 +37,14 @@ import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.shieldai.android.R
|
||||
import com.shieldai.android.ui.components.ShieldBadge
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.ui.components.ShieldEmptyState
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.shieldai.android.viewmodel.SpamShieldViewModel
|
||||
import com.kordant.android.R
|
||||
import com.kordant.android.ui.components.ShieldBadge
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.ui.components.ShieldEmptyState
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.viewmodel.SpamShieldViewModel
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -224,7 +224,7 @@ private fun StatCard(
|
||||
|
||||
@Composable
|
||||
private fun RuleCard(
|
||||
rule: com.shieldai.android.data.model.SpamRule,
|
||||
rule: com.kordant.android.data.model.SpamRule,
|
||||
onToggle: (Boolean) -> Unit
|
||||
) {
|
||||
ShieldCard(modifier = Modifier.fillMaxWidth()) {
|
||||
@@ -244,13 +244,13 @@ private fun RuleCard(
|
||||
) {
|
||||
ShieldBadge(
|
||||
text = rule.action,
|
||||
variant = if (rule.action == "block") com.shieldai.android.ui.components.BadgeVariant.Error
|
||||
else com.shieldai.android.ui.components.BadgeVariant.Warning
|
||||
variant = if (rule.action == "block") com.kordant.android.ui.components.BadgeVariant.Error
|
||||
else com.kordant.android.ui.components.BadgeVariant.Warning
|
||||
)
|
||||
if (rule.priority > 0) {
|
||||
ShieldBadge(
|
||||
text = "P${rule.priority}",
|
||||
variant = com.shieldai.android.ui.components.BadgeVariant.Info
|
||||
variant = com.kordant.android.ui.components.BadgeVariant.Info
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.services
|
||||
package com.kordant.android.ui.screens.services
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
@@ -36,15 +36,15 @@ import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.shieldai.android.R
|
||||
import com.shieldai.android.ui.components.BadgeVariant
|
||||
import com.shieldai.android.ui.components.ShieldBadge
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.ui.components.ShieldEmptyState
|
||||
import com.shieldai.android.ui.components.ShieldTextField
|
||||
import com.shieldai.android.viewmodel.VoicePrintViewModel
|
||||
import com.kordant.android.R
|
||||
import com.kordant.android.ui.components.BadgeVariant
|
||||
import com.kordant.android.ui.components.ShieldBadge
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.ui.components.ShieldEmptyState
|
||||
import com.kordant.android.ui.components.ShieldTextField
|
||||
import com.kordant.android.viewmodel.VoicePrintViewModel
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -160,7 +160,7 @@ private fun VoicePrintContent(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun EnrollmentCard(enrollment: com.shieldai.android.data.model.VoiceEnrollment) {
|
||||
private fun EnrollmentCard(enrollment: com.kordant.android.data.model.VoiceEnrollment) {
|
||||
ShieldCard(modifier = Modifier.fillMaxWidth()) {
|
||||
Column {
|
||||
Row(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.screens.settings
|
||||
package com.kordant.android.ui.screens.settings
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
@@ -34,14 +34,14 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.shieldai.android.ui.components.ShieldAvatar
|
||||
import com.shieldai.android.ui.components.ShieldBadge
|
||||
import com.shieldai.android.ui.components.ShieldButton
|
||||
import com.shieldai.android.ui.components.ShieldButtonVariant
|
||||
import com.shieldai.android.ui.components.ShieldCard
|
||||
import com.shieldai.android.ui.components.ShieldEmptyState
|
||||
import com.shieldai.android.viewmodel.AuthViewModel
|
||||
import com.shieldai.android.viewmodel.SettingsViewModel
|
||||
import com.kordant.android.ui.components.ShieldAvatar
|
||||
import com.kordant.android.ui.components.ShieldBadge
|
||||
import com.kordant.android.ui.components.ShieldButton
|
||||
import com.kordant.android.ui.components.ShieldButtonVariant
|
||||
import com.kordant.android.ui.components.ShieldCard
|
||||
import com.kordant.android.ui.components.ShieldEmptyState
|
||||
import com.kordant.android.viewmodel.AuthViewModel
|
||||
import com.kordant.android.viewmodel.SettingsViewModel
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -184,7 +184,7 @@ private fun SettingsContent(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun AccountSection(user: com.shieldai.android.data.model.User) {
|
||||
private fun AccountSection(user: com.kordant.android.data.model.User) {
|
||||
Column {
|
||||
Text(
|
||||
text = "Account",
|
||||
@@ -214,10 +214,10 @@ private fun AccountSection(user: com.shieldai.android.data.model.User) {
|
||||
)
|
||||
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
|
||||
if (user.emailVerified) {
|
||||
ShieldBadge(text = "Email verified", variant = com.shieldai.android.ui.components.BadgeVariant.Success)
|
||||
ShieldBadge(text = "Email verified", variant = com.kordant.android.ui.components.BadgeVariant.Success)
|
||||
}
|
||||
if (user.phoneVerified) {
|
||||
ShieldBadge(text = "Phone verified", variant = com.shieldai.android.ui.components.BadgeVariant.Success)
|
||||
ShieldBadge(text = "Phone verified", variant = com.kordant.android.ui.components.BadgeVariant.Success)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -227,7 +227,7 @@ private fun AccountSection(user: com.shieldai.android.data.model.User) {
|
||||
|
||||
@Composable
|
||||
private fun SubscriptionSection(
|
||||
subscription: com.shieldai.android.data.model.Subscription?,
|
||||
subscription: com.kordant.android.data.model.Subscription?,
|
||||
onUpgrade: () -> Unit
|
||||
) {
|
||||
Column {
|
||||
@@ -260,7 +260,7 @@ private fun SubscriptionSection(
|
||||
text = "Upgrade",
|
||||
onClick = onUpgrade,
|
||||
variant = ShieldButtonVariant.Secondary,
|
||||
size = com.shieldai.android.ui.components.ShieldButtonSize.Small
|
||||
size = com.kordant.android.ui.components.ShieldButtonSize.Small
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.theme
|
||||
package com.kordant.android.ui.theme
|
||||
|
||||
import androidx.compose.ui.graphics.Color
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.theme
|
||||
package com.kordant.android.ui.theme
|
||||
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.Shapes
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.theme
|
||||
package com.kordant.android.ui.theme
|
||||
|
||||
import android.os.Build
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.shieldai.android.ui.theme
|
||||
package com.kordant.android.ui.theme
|
||||
|
||||
import androidx.compose.material3.Typography
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.shieldai.android.util
|
||||
package com.kordant.android.util
|
||||
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import com.shieldai.android.ui.theme.Error
|
||||
import com.shieldai.android.ui.theme.Success
|
||||
import com.shieldai.android.ui.theme.Warning
|
||||
import com.kordant.android.ui.theme.Error
|
||||
import com.kordant.android.ui.theme.Success
|
||||
import com.kordant.android.ui.theme.Warning
|
||||
|
||||
enum class PasswordStrength {
|
||||
WEAK, FAIR, STRONG, VERY_STRONG
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.shieldai.android.viewmodel
|
||||
package com.kordant.android.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.shieldai.android.KordantApp
|
||||
import com.shieldai.android.data.model.Alert
|
||||
import com.shieldai.android.data.repository.AlertRepository
|
||||
import com.shieldai.android.di.RepositoryModule
|
||||
import com.kordant.android.KordantApp
|
||||
import com.kordant.android.data.model.Alert
|
||||
import com.kordant.android.data.repository.AlertRepository
|
||||
import com.kordant.android.di.RepositoryModule
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
@@ -33,7 +33,7 @@ class AlertDetailViewModel : ViewModel() {
|
||||
_uiState.value = _uiState.value.copy(isLoading = true, error = null)
|
||||
try {
|
||||
val result = alertRepo.getAlerts()
|
||||
if (result is com.shieldai.android.data.remote.ApiResult.Success) {
|
||||
if (result is com.kordant.android.data.remote.ApiResult.Success) {
|
||||
val alert = result.data.find { it.id == alertId }
|
||||
val correlated = alert?.let {
|
||||
result.data.filter { a ->
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.shieldai.android.viewmodel
|
||||
package com.kordant.android.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.shieldai.android.KordantApp
|
||||
import com.shieldai.android.data.repository.AuthRepository
|
||||
import com.shieldai.android.data.repository.AuthRepositoryImpl
|
||||
import com.shieldai.android.data.repository.User
|
||||
import com.shieldai.android.util.calculatePasswordStrength
|
||||
import com.shieldai.android.util.passwordStrengthProgress
|
||||
import com.kordant.android.KordantApp
|
||||
import com.kordant.android.data.repository.AuthRepository
|
||||
import com.kordant.android.data.repository.AuthRepositoryImpl
|
||||
import com.kordant.android.data.repository.User
|
||||
import com.kordant.android.util.calculatePasswordStrength
|
||||
import com.kordant.android.util.passwordStrengthProgress
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.shieldai.android.viewmodel
|
||||
package com.kordant.android.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.shieldai.android.KordantApp
|
||||
import com.shieldai.android.data.model.Exposure
|
||||
import com.shieldai.android.data.model.WatchlistItem
|
||||
import com.shieldai.android.data.repository.DarkWatchRepository
|
||||
import com.shieldai.android.di.RepositoryModule
|
||||
import com.kordant.android.KordantApp
|
||||
import com.kordant.android.data.model.Exposure
|
||||
import com.kordant.android.data.model.WatchlistItem
|
||||
import com.kordant.android.data.repository.DarkWatchRepository
|
||||
import com.kordant.android.di.RepositoryModule
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
@@ -44,11 +44,11 @@ class DarkWatchViewModel : ViewModel() {
|
||||
val watchlistResult = repo.getWatchlist(forceRefresh)
|
||||
val exposuresResult = repo.getExposures(forceRefresh)
|
||||
|
||||
val watchlist = if (watchlistResult is com.shieldai.android.data.remote.ApiResult.Success) {
|
||||
val watchlist = if (watchlistResult is com.kordant.android.data.remote.ApiResult.Success) {
|
||||
watchlistResult.data
|
||||
} else emptyList()
|
||||
|
||||
val exposures = if (exposuresResult is com.shieldai.android.data.remote.ApiResult.Success) {
|
||||
val exposures = if (exposuresResult is com.kordant.android.data.remote.ApiResult.Success) {
|
||||
exposuresResult.data
|
||||
} else emptyList()
|
||||
|
||||
@@ -70,7 +70,7 @@ class DarkWatchViewModel : ViewModel() {
|
||||
viewModelScope.launch {
|
||||
_uiState.value = _uiState.value.copy(isAdding = true, error = null)
|
||||
val result = repo.addWatchlistItem(type, value, label)
|
||||
if (result is com.shieldai.android.data.remote.ApiResult.Error) {
|
||||
if (result is com.kordant.android.data.remote.ApiResult.Error) {
|
||||
_uiState.value = _uiState.value.copy(
|
||||
isAdding = false,
|
||||
error = result.message
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.shieldai.android.viewmodel
|
||||
package com.kordant.android.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.shieldai.android.KordantApp
|
||||
import com.shieldai.android.data.model.Alert
|
||||
import com.shieldai.android.data.repository.AlertRepository
|
||||
import com.shieldai.android.data.repository.DarkWatchRepository
|
||||
import com.shieldai.android.data.repository.HomeTitleRepository
|
||||
import com.shieldai.android.data.repository.RemoveBrokersRepository
|
||||
import com.shieldai.android.data.repository.SpamShieldRepository
|
||||
import com.shieldai.android.data.repository.VoicePrintRepository
|
||||
import com.shieldai.android.di.RepositoryModule
|
||||
import com.kordant.android.KordantApp
|
||||
import com.kordant.android.data.model.Alert
|
||||
import com.kordant.android.data.repository.AlertRepository
|
||||
import com.kordant.android.data.repository.DarkWatchRepository
|
||||
import com.kordant.android.data.repository.HomeTitleRepository
|
||||
import com.kordant.android.data.repository.RemoveBrokersRepository
|
||||
import com.kordant.android.data.repository.SpamShieldRepository
|
||||
import com.kordant.android.data.repository.VoicePrintRepository
|
||||
import com.kordant.android.di.RepositoryModule
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
@@ -74,27 +74,27 @@ class DashboardViewModel : ViewModel() {
|
||||
val removalsResult = removeBrokersRepo.getRemovalRequests()
|
||||
|
||||
val alerts = when (alertsResult) {
|
||||
is com.shieldai.android.data.remote.ApiResult.Success -> alertsResult.data
|
||||
is com.kordant.android.data.remote.ApiResult.Success -> alertsResult.data
|
||||
else -> emptyList()
|
||||
}
|
||||
val watchlist = when (watchlistResult) {
|
||||
is com.shieldai.android.data.remote.ApiResult.Success -> watchlistResult.data
|
||||
is com.kordant.android.data.remote.ApiResult.Success -> watchlistResult.data
|
||||
else -> emptyList()
|
||||
}
|
||||
val enrollments = when (enrollmentsResult) {
|
||||
is com.shieldai.android.data.remote.ApiResult.Success -> enrollmentsResult.data
|
||||
is com.kordant.android.data.remote.ApiResult.Success -> enrollmentsResult.data
|
||||
else -> emptyList()
|
||||
}
|
||||
val rules = when (rulesResult) {
|
||||
is com.shieldai.android.data.remote.ApiResult.Success -> rulesResult.data
|
||||
is com.kordant.android.data.remote.ApiResult.Success -> rulesResult.data
|
||||
else -> emptyList()
|
||||
}
|
||||
val properties = when (propertiesResult) {
|
||||
is com.shieldai.android.data.remote.ApiResult.Success -> propertiesResult.data
|
||||
is com.kordant.android.data.remote.ApiResult.Success -> propertiesResult.data
|
||||
else -> emptyList()
|
||||
}
|
||||
val removals = when (removalsResult) {
|
||||
is com.shieldai.android.data.remote.ApiResult.Success -> removalsResult.data
|
||||
is com.kordant.android.data.remote.ApiResult.Success -> removalsResult.data
|
||||
else -> emptyList()
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.shieldai.android.viewmodel
|
||||
package com.kordant.android.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.shieldai.android.KordantApp
|
||||
import com.shieldai.android.data.model.Property
|
||||
import com.shieldai.android.data.repository.HomeTitleRepository
|
||||
import com.shieldai.android.di.RepositoryModule
|
||||
import com.kordant.android.KordantApp
|
||||
import com.kordant.android.data.model.Property
|
||||
import com.kordant.android.data.repository.HomeTitleRepository
|
||||
import com.kordant.android.di.RepositoryModule
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
@@ -40,7 +40,7 @@ class HomeTitleViewModel : ViewModel() {
|
||||
_uiState.value = _uiState.value.copy(isLoading = !forceRefresh, error = null)
|
||||
try {
|
||||
val result = repo.getProperties(forceRefresh)
|
||||
if (result is com.shieldai.android.data.remote.ApiResult.Success) {
|
||||
if (result is com.kordant.android.data.remote.ApiResult.Success) {
|
||||
_uiState.value = _uiState.value.copy(
|
||||
isLoading = false,
|
||||
properties = result.data
|
||||
@@ -61,7 +61,7 @@ class HomeTitleViewModel : ViewModel() {
|
||||
viewModelScope.launch {
|
||||
_uiState.value = _uiState.value.copy(isAdding = true, error = null)
|
||||
val result = repo.addProperty(address, type)
|
||||
if (result is com.shieldai.android.data.remote.ApiResult.Error) {
|
||||
if (result is com.kordant.android.data.remote.ApiResult.Error) {
|
||||
_uiState.value = _uiState.value.copy(
|
||||
isAdding = false,
|
||||
error = result.message
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.shieldai.android.viewmodel
|
||||
package com.kordant.android.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.shieldai.android.KordantApp
|
||||
import com.shieldai.android.data.model.BrokerListing
|
||||
import com.shieldai.android.data.model.RemovalRequest
|
||||
import com.shieldai.android.data.repository.RemoveBrokersRepository
|
||||
import com.shieldai.android.di.RepositoryModule
|
||||
import com.kordant.android.KordantApp
|
||||
import com.kordant.android.data.model.BrokerListing
|
||||
import com.kordant.android.data.model.RemovalRequest
|
||||
import com.kordant.android.data.repository.RemoveBrokersRepository
|
||||
import com.kordant.android.di.RepositoryModule
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
@@ -44,11 +44,11 @@ class RemoveBrokersViewModel : ViewModel() {
|
||||
val listingsResult = repo.getListings(forceRefresh)
|
||||
val requestsResult = repo.getRemovalRequests(forceRefresh)
|
||||
|
||||
val listings = if (listingsResult is com.shieldai.android.data.remote.ApiResult.Success) {
|
||||
val listings = if (listingsResult is com.kordant.android.data.remote.ApiResult.Success) {
|
||||
listingsResult.data
|
||||
} else emptyList()
|
||||
|
||||
val requests = if (requestsResult is com.shieldai.android.data.remote.ApiResult.Success) {
|
||||
val requests = if (requestsResult is com.kordant.android.data.remote.ApiResult.Success) {
|
||||
requestsResult.data
|
||||
} else emptyList()
|
||||
|
||||
@@ -70,7 +70,7 @@ class RemoveBrokersViewModel : ViewModel() {
|
||||
viewModelScope.launch {
|
||||
_uiState.value = _uiState.value.copy(isCreating = true, error = null)
|
||||
val result = repo.createRemovalRequest(listingId, notes)
|
||||
if (result is com.shieldai.android.data.remote.ApiResult.Error) {
|
||||
if (result is com.kordant.android.data.remote.ApiResult.Error) {
|
||||
_uiState.value = _uiState.value.copy(
|
||||
isCreating = false,
|
||||
error = result.message
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
package com.shieldai.android.viewmodel
|
||||
package com.kordant.android.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.shieldai.android.KordantApp
|
||||
import com.shieldai.android.data.model.Subscription
|
||||
import com.shieldai.android.data.model.User
|
||||
import com.shieldai.android.data.repository.SubscriptionRepository
|
||||
import com.shieldai.android.data.repository.UserRepository
|
||||
import com.shieldai.android.di.RepositoryModule
|
||||
import com.kordant.android.KordantApp
|
||||
import com.kordant.android.data.model.Subscription
|
||||
import com.kordant.android.data.model.User
|
||||
import com.kordant.android.data.repository.SubscriptionRepository
|
||||
import com.kordant.android.data.repository.UserRepository
|
||||
import com.kordant.android.di.RepositoryModule
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
@@ -50,11 +50,11 @@ class SettingsViewModel : ViewModel() {
|
||||
val userResult = userRepo.getMe(forceRefresh)
|
||||
val subResult = subscriptionRepo.getSubscription()
|
||||
|
||||
val user = if (userResult is com.shieldai.android.data.remote.ApiResult.Success) {
|
||||
val user = if (userResult is com.kordant.android.data.remote.ApiResult.Success) {
|
||||
userResult.data
|
||||
} else null
|
||||
|
||||
val subscription = if (subResult is com.shieldai.android.data.remote.ApiResult.Success) {
|
||||
val subscription = if (subResult is com.kordant.android.data.remote.ApiResult.Success) {
|
||||
subResult.data
|
||||
} else null
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.shieldai.android.viewmodel
|
||||
package com.kordant.android.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.shieldai.android.KordantApp
|
||||
import com.shieldai.android.data.model.SpamRule
|
||||
import com.shieldai.android.data.repository.SpamShieldRepository
|
||||
import com.shieldai.android.di.RepositoryModule
|
||||
import com.kordant.android.KordantApp
|
||||
import com.kordant.android.data.model.SpamRule
|
||||
import com.kordant.android.data.repository.SpamShieldRepository
|
||||
import com.kordant.android.di.RepositoryModule
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
@@ -43,7 +43,7 @@ class SpamShieldViewModel : ViewModel() {
|
||||
_uiState.value = _uiState.value.copy(isLoading = !forceRefresh, error = null)
|
||||
try {
|
||||
val result = repo.getRules(forceRefresh)
|
||||
if (result is com.shieldai.android.data.remote.ApiResult.Success) {
|
||||
if (result is com.kordant.android.data.remote.ApiResult.Success) {
|
||||
val stats = repo.getStats()
|
||||
_uiState.value = _uiState.value.copy(
|
||||
isLoading = false,
|
||||
@@ -68,7 +68,7 @@ class SpamShieldViewModel : ViewModel() {
|
||||
viewModelScope.launch {
|
||||
_uiState.value = _uiState.value.copy(isCreating = true, error = null)
|
||||
val result = repo.createRule(pattern, action, description)
|
||||
if (result is com.shieldai.android.data.remote.ApiResult.Error) {
|
||||
if (result is com.kordant.android.data.remote.ApiResult.Error) {
|
||||
_uiState.value = _uiState.value.copy(
|
||||
isCreating = false,
|
||||
error = result.message
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.shieldai.android.viewmodel
|
||||
package com.kordant.android.viewmodel
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.shieldai.android.KordantApp
|
||||
import com.shieldai.android.data.model.VoiceEnrollment
|
||||
import com.shieldai.android.data.repository.VoicePrintRepository
|
||||
import com.shieldai.android.di.RepositoryModule
|
||||
import com.kordant.android.KordantApp
|
||||
import com.kordant.android.data.model.VoiceEnrollment
|
||||
import com.kordant.android.data.repository.VoicePrintRepository
|
||||
import com.kordant.android.di.RepositoryModule
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
@@ -44,7 +44,7 @@ class VoicePrintViewModel : ViewModel() {
|
||||
} else {
|
||||
repo.getEnrollments()
|
||||
}
|
||||
if (result is com.shieldai.android.data.remote.ApiResult.Success) {
|
||||
if (result is com.kordant.android.data.remote.ApiResult.Success) {
|
||||
_uiState.value = _uiState.value.copy(
|
||||
isLoading = false,
|
||||
enrollments = result.data
|
||||
@@ -65,7 +65,7 @@ class VoicePrintViewModel : ViewModel() {
|
||||
viewModelScope.launch {
|
||||
_uiState.value = _uiState.value.copy(isEnrolling = true, error = null)
|
||||
val result = repo.createEnrollment(name)
|
||||
if (result is com.shieldai.android.data.remote.ApiResult.Error) {
|
||||
if (result is com.kordant.android.data.remote.ApiResult.Error) {
|
||||
_uiState.value = _uiState.value.copy(
|
||||
isEnrolling = false,
|
||||
error = result.message
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package com.shieldai.android.viewmodel
|
||||
package com.kordant.android.viewmodel
|
||||
|
||||
import com.shieldai.android.data.model.Alert
|
||||
import com.shieldai.android.data.model.Exposure
|
||||
import com.shieldai.android.data.model.WatchlistItem
|
||||
import com.shieldai.android.data.repository.AlertRepository
|
||||
import com.shieldai.android.data.repository.DarkWatchRepository
|
||||
import com.shieldai.android.data.repository.HomeTitleRepository
|
||||
import com.shieldai.android.data.repository.RemoveBrokersRepository
|
||||
import com.shieldai.android.data.repository.SpamShieldRepository
|
||||
import com.shieldai.android.data.repository.SubscriptionRepository
|
||||
import com.shieldai.android.data.repository.UserRepository
|
||||
import com.shieldai.android.data.repository.VoicePrintRepository
|
||||
import com.shieldai.android.data.remote.ApiResult
|
||||
import com.kordant.android.data.model.Alert
|
||||
import com.kordant.android.data.model.Exposure
|
||||
import com.kordant.android.data.model.WatchlistItem
|
||||
import com.kordant.android.data.repository.AlertRepository
|
||||
import com.kordant.android.data.repository.DarkWatchRepository
|
||||
import com.kordant.android.data.repository.HomeTitleRepository
|
||||
import com.kordant.android.data.repository.RemoveBrokersRepository
|
||||
import com.kordant.android.data.repository.SpamShieldRepository
|
||||
import com.kordant.android.data.repository.SubscriptionRepository
|
||||
import com.kordant.android.data.repository.UserRepository
|
||||
import com.kordant.android.data.repository.VoicePrintRepository
|
||||
import com.kordant.android.data.remote.ApiResult
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.StandardTestDispatcher
|
||||
@@ -4,7 +4,7 @@
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>ShieldAI.xcscheme_^#shared#^_</key>
|
||||
<key>Kordant.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
|
||||
@@ -6,38 +6,119 @@ import type { JSX } from "solid-js";
|
||||
vi.mock("~/lib/api", () => ({
|
||||
api: {
|
||||
correlation: {
|
||||
getStats: { query: vi.fn().mockResolvedValue({ threatScore: 25, totalAlerts: 5, bySeverity: {}, bySource: {}, activeGroups: 2, resolvedCount: 3, falsePositiveCount: 1, threatBreakdown: [] }) },
|
||||
getAlerts: { query: vi.fn().mockResolvedValue({ items: [
|
||||
{ id: "1", title: "New credential leak detected", severity: "HIGH", source: "DARKWATCH", createdAt: new Date().toISOString() },
|
||||
{ id: "2", title: "Suspicious call", severity: "WARNING", source: "SPAMSHIELD", createdAt: new Date().toISOString() },
|
||||
], total: 2, page: 1, limit: 10, totalPages: 1 }) },
|
||||
getStats: {
|
||||
query: vi
|
||||
.fn()
|
||||
.mockResolvedValue({
|
||||
threatScore: 25,
|
||||
totalAlerts: 5,
|
||||
bySeverity: {},
|
||||
bySource: {},
|
||||
activeGroups: 2,
|
||||
resolvedCount: 3,
|
||||
falsePositiveCount: 1,
|
||||
threatBreakdown: [],
|
||||
}),
|
||||
},
|
||||
getAlerts: {
|
||||
query: vi.fn().mockResolvedValue({
|
||||
items: [
|
||||
{
|
||||
id: "1",
|
||||
title: "New credential leak detected",
|
||||
severity: "HIGH",
|
||||
source: "DARKWATCH",
|
||||
createdAt: new Date().toISOString(),
|
||||
},
|
||||
{
|
||||
id: "2",
|
||||
title: "Suspicious call",
|
||||
severity: "WARNING",
|
||||
source: "SPAMSHIELD",
|
||||
createdAt: new Date().toISOString(),
|
||||
},
|
||||
],
|
||||
total: 2,
|
||||
page: 1,
|
||||
limit: 10,
|
||||
totalPages: 1,
|
||||
}),
|
||||
},
|
||||
resolveAlert: { mutate: vi.fn().mockResolvedValue({}) },
|
||||
},
|
||||
darkwatch: {
|
||||
getExposures: { query: vi.fn().mockResolvedValue({ items: [], total: 0, page: 1, limit: 1, totalPages: 0 }) },
|
||||
getExposures: {
|
||||
query: vi
|
||||
.fn()
|
||||
.mockResolvedValue({
|
||||
items: [],
|
||||
total: 0,
|
||||
page: 1,
|
||||
limit: 1,
|
||||
totalPages: 0,
|
||||
}),
|
||||
},
|
||||
runScan: { mutate: vi.fn().mockResolvedValue({}) },
|
||||
},
|
||||
voiceprint: {
|
||||
getEnrollments: { query: vi.fn().mockResolvedValue([]) },
|
||||
getAnalyses: { query: vi.fn().mockResolvedValue({ items: [], total: 0, page: 1, limit: 10, totalPages: 0 }) },
|
||||
getAnalyses: {
|
||||
query: vi
|
||||
.fn()
|
||||
.mockResolvedValue({
|
||||
items: [],
|
||||
total: 0,
|
||||
page: 1,
|
||||
limit: 10,
|
||||
totalPages: 0,
|
||||
}),
|
||||
},
|
||||
},
|
||||
spamshield: {
|
||||
getStats: { query: vi.fn().mockResolvedValue({ period: "week", totalDetections: 10, spamCount: 8, notSpamCount: 2, accuracy: 80, activeRules: 3 }) },
|
||||
getRules: { query: vi.fn().mockResolvedValue({ userRules: [], globalRules: [] }) },
|
||||
getStats: {
|
||||
query: vi
|
||||
.fn()
|
||||
.mockResolvedValue({
|
||||
period: "week",
|
||||
totalDetections: 10,
|
||||
spamCount: 8,
|
||||
notSpamCount: 2,
|
||||
accuracy: 80,
|
||||
activeRules: 3,
|
||||
}),
|
||||
},
|
||||
getRules: {
|
||||
query: vi.fn().mockResolvedValue({ userRules: [], globalRules: [] }),
|
||||
},
|
||||
},
|
||||
hometitle: {
|
||||
getProperties: { query: vi.fn().mockResolvedValue([]) },
|
||||
getAlerts: { query: vi.fn().mockResolvedValue([]) },
|
||||
},
|
||||
removebrokers: {
|
||||
getStats: { query: vi.fn().mockResolvedValue({ total: 0, byStatus: {}, totalListings: 0, listingsRemoved: 0, completionRate: 0 }) },
|
||||
getStats: {
|
||||
query: vi
|
||||
.fn()
|
||||
.mockResolvedValue({
|
||||
total: 0,
|
||||
byStatus: {},
|
||||
totalListings: 0,
|
||||
listingsRemoved: 0,
|
||||
completionRate: 0,
|
||||
}),
|
||||
},
|
||||
getBrokerRegistry: { query: vi.fn().mockResolvedValue([]) },
|
||||
},
|
||||
},
|
||||
}));
|
||||
|
||||
vi.mock("@solidjs/router", () => ({
|
||||
A: (props: { href?: string; children?: JSX.Element; class?: string; onClick?: () => void }) => (
|
||||
A: (props: {
|
||||
href?: string;
|
||||
children?: JSX.Element;
|
||||
class?: string;
|
||||
onClick?: () => void;
|
||||
}) => (
|
||||
<a href={props.href || "#"} class={props.class} onClick={props.onClick}>
|
||||
{props.children}
|
||||
</a>
|
||||
@@ -49,7 +130,7 @@ vi.mock("@solidjs/router", () => ({
|
||||
|
||||
vi.mock("~/hooks", () => ({
|
||||
useAuth: () => ({
|
||||
user: () => ({ name: "Test User", email: "test@shieldai.app" }),
|
||||
user: () => ({ name: "Test User", email: "test@kordant.ai" }),
|
||||
isAuthenticated: () => true,
|
||||
isLoading: () => false,
|
||||
logout: vi.fn(),
|
||||
@@ -62,11 +143,41 @@ vi.mock("~/hooks", () => ({
|
||||
}),
|
||||
useNotifications: () => ({
|
||||
alerts: () => [
|
||||
{ id: "1", title: "New credential leak detected", description: "Your email was found in a data breach", severity: "HIGH", createdAt: "5m ago" },
|
||||
{ id: "2", title: "VoicePrint scan completed", description: "No deepfake voice activity detected", severity: "INFO", createdAt: "1h ago" },
|
||||
{ id: "3", title: "RemoveBroker opt-out confirmed", description: "Your data has been removed from Whitepages", severity: "INFO", createdAt: "3h ago" },
|
||||
{ id: "4", title: "Suspicious call blocked", description: "SpamShield blocked a call", severity: "WARNING", createdAt: "6h ago" },
|
||||
{ id: "5", title: "HomeTitle alert", description: "A document was filed", severity: "CRITICAL", createdAt: "1d ago" },
|
||||
{
|
||||
id: "1",
|
||||
title: "New credential leak detected",
|
||||
description: "Your email was found in a data breach",
|
||||
severity: "HIGH",
|
||||
createdAt: "5m ago",
|
||||
},
|
||||
{
|
||||
id: "2",
|
||||
title: "VoicePrint scan completed",
|
||||
description: "No deepfake voice activity detected",
|
||||
severity: "INFO",
|
||||
createdAt: "1h ago",
|
||||
},
|
||||
{
|
||||
id: "3",
|
||||
title: "RemoveBroker opt-out confirmed",
|
||||
description: "Your data has been removed from Whitepages",
|
||||
severity: "INFO",
|
||||
createdAt: "3h ago",
|
||||
},
|
||||
{
|
||||
id: "4",
|
||||
title: "Suspicious call blocked",
|
||||
description: "SpamShield blocked a call",
|
||||
severity: "WARNING",
|
||||
createdAt: "6h ago",
|
||||
},
|
||||
{
|
||||
id: "5",
|
||||
title: "HomeTitle alert",
|
||||
description: "A document was filed",
|
||||
severity: "CRITICAL",
|
||||
createdAt: "1d ago",
|
||||
},
|
||||
],
|
||||
unreadCount: () => 5,
|
||||
markRead: vi.fn(),
|
||||
@@ -124,7 +235,9 @@ describe("BlogPage (listing)", () => {
|
||||
|
||||
it("renders post titles and excerpts", () => {
|
||||
mount(() => <BlogPage />);
|
||||
expect(document.body.textContent).toContain("AI Scam Trends to Watch in 2026");
|
||||
expect(document.body.textContent).toContain(
|
||||
"AI Scam Trends to Watch in 2026",
|
||||
);
|
||||
expect(document.body.textContent).toContain("Sarah Chen");
|
||||
expect(document.body.textContent).toContain("Mike Reynolds");
|
||||
});
|
||||
@@ -133,7 +246,9 @@ describe("BlogPage (listing)", () => {
|
||||
describe("BlogPostPage ([slug])", () => {
|
||||
it("renders post content for valid slug", () => {
|
||||
mount(() => <BlogPostPage />);
|
||||
expect(document.body.textContent).toContain("AI Scam Trends to Watch in 2026");
|
||||
expect(document.body.textContent).toContain(
|
||||
"AI Scam Trends to Watch in 2026",
|
||||
);
|
||||
expect(document.body.textContent).toContain("Sarah Chen");
|
||||
expect(document.body.textContent).toContain("Security Researcher");
|
||||
expect(document.body.textContent).toContain("May 15, 2026");
|
||||
@@ -150,7 +265,9 @@ describe("BlogPostPage ([slug])", () => {
|
||||
it("renders social share buttons", () => {
|
||||
mount(() => <BlogPostPage />);
|
||||
const shareBtns = document.querySelectorAll("button[aria-label]");
|
||||
const shareLabels = Array.from(shareBtns).map(b => b.getAttribute("aria-label"));
|
||||
const shareLabels = Array.from(shareBtns).map((b) =>
|
||||
b.getAttribute("aria-label"),
|
||||
);
|
||||
expect(shareLabels).toContain("Share on Twitter");
|
||||
expect(shareLabels).toContain("Share on LinkedIn");
|
||||
expect(shareLabels).toContain("Copy link");
|
||||
@@ -192,14 +309,18 @@ describe("AdsPage", () => {
|
||||
it("marks Plus plan as Most Popular", () => {
|
||||
mount(() => <AdsPage />);
|
||||
const badges = document.body.querySelectorAll("span");
|
||||
const popularBadge = Array.from(badges).find(b => b.textContent === "Most Popular");
|
||||
const popularBadge = Array.from(badges).find(
|
||||
(b) => b.textContent === "Most Popular",
|
||||
);
|
||||
expect(popularBadge).toBeTruthy();
|
||||
});
|
||||
|
||||
it("renders FAQ section with toggle functionality", () => {
|
||||
mount(() => <AdsPage />);
|
||||
expect(document.body.textContent).toContain("Frequently Asked Questions");
|
||||
expect(document.body.textContent).toContain("How does Kordant detect voice clones?");
|
||||
expect(document.body.textContent).toContain(
|
||||
"How does Kordant detect voice clones?",
|
||||
);
|
||||
expect(document.body.textContent).toContain("Is my data encrypted?");
|
||||
});
|
||||
|
||||
@@ -224,7 +345,9 @@ describe("AdsPage", () => {
|
||||
|
||||
it("renders CTA section with Get Started Free button", () => {
|
||||
mount(() => <AdsPage />);
|
||||
expect(document.body.textContent).toContain("Ready to protect your identity?");
|
||||
expect(document.body.textContent).toContain(
|
||||
"Ready to protect your identity?",
|
||||
);
|
||||
expect(document.body.textContent).toContain("Get Started Free");
|
||||
});
|
||||
});
|
||||
@@ -276,14 +399,26 @@ describe("StatCard", () => {
|
||||
|
||||
it("renders up trend indicator", () => {
|
||||
mount(() => (
|
||||
<StatCard label="Up Trend" value="10" trend="up" trendLabel="+5%" icon={() => <svg />} />
|
||||
<StatCard
|
||||
label="Up Trend"
|
||||
value="10"
|
||||
trend="up"
|
||||
trendLabel="+5%"
|
||||
icon={() => <svg />}
|
||||
/>
|
||||
));
|
||||
expect(document.body.textContent).toContain("+5%");
|
||||
});
|
||||
|
||||
it("renders down trend indicator", () => {
|
||||
mount(() => (
|
||||
<StatCard label="Down Trend" value="10" trend="down" trendLabel="-3%" icon={() => <svg />} />
|
||||
<StatCard
|
||||
label="Down Trend"
|
||||
value="10"
|
||||
trend="down"
|
||||
trendLabel="-3%"
|
||||
icon={() => <svg />}
|
||||
/>
|
||||
));
|
||||
expect(document.body.textContent).toContain("-3%");
|
||||
});
|
||||
@@ -292,7 +427,13 @@ describe("StatCard", () => {
|
||||
describe("ActivityFeed", () => {
|
||||
it("renders activities", () => {
|
||||
const activities = [
|
||||
{ id: "1", title: "Test Alert", description: "Test description", timestamp: "5m ago", type: "alert" as const },
|
||||
{
|
||||
id: "1",
|
||||
title: "Test Alert",
|
||||
description: "Test description",
|
||||
timestamp: "5m ago",
|
||||
type: "alert" as const,
|
||||
},
|
||||
];
|
||||
mount(() => <ActivityFeed activities={activities} />);
|
||||
expect(document.body.textContent).toContain("Recent Activity");
|
||||
|
||||
Reference in New Issue
Block a user