From 3d246af3f7fac565145dfcc111c6a0bf44254781 Mon Sep 17 00:00:00 2001 From: Michael Freno Date: Mon, 25 May 2026 22:49:37 -0400 Subject: [PATCH] rebranding --- .github/workflows/ci.yml | 4 +- .github/workflows/deploy.yml | 14 +- README.md | 28 +- android/{ShieldAI => Kordant}/.gitignore | 0 .../{ShieldAI => Kordant}/.idea/.gitignore | 0 android/{ShieldAI => Kordant}/app/.gitignore | 0 .../app/build.gradle.kts | 10 +- .../app/lint-baseline.xml | 68 +-- .../app/proguard-rules.pro | 0 .../com/shieldai/android/ComponentTests.kt | 50 +-- .../android/ExampleInstrumentedTest.kt | 4 +- .../app/src/main/AndroidManifest.xml | 6 +- .../java/com/shieldai/android/MainActivity.kt | 4 +- .../java/com/shieldai/android/ShieldAIApp.kt | 4 +- .../android/data/local/CacheManager.kt | 0 .../com/shieldai/android/data/model/Alert.kt | 0 .../android/data/model/BrokerListing.kt | 0 .../shieldai/android/data/model/Exposure.kt | 0 .../shieldai/android/data/model/Property.kt | 0 .../android/data/model/RemovalRequest.kt | 0 .../shieldai/android/data/model/SpamRule.kt | 0 .../android/data/model/Subscription.kt | 0 .../com/shieldai/android/data/model/User.kt | 0 .../android/data/model/VoiceAnalysis.kt | 0 .../android/data/model/VoiceEnrollment.kt | 0 .../android/data/model/WatchlistItem.kt | 0 .../android/data/remote/AuthInterceptor.kt | 0 .../android/data/remote/ErrorHandler.kt | 0 .../android/data/remote/TRPCApiService.kt | 0 .../android/data/remote/TRPCResponse.kt | 0 .../data/repository/AlertRepository.kt | 0 .../android/data/repository/AuthRepository.kt | 0 .../data/repository/DarkWatchRepository.kt | 0 .../data/repository/HomeTitleRepository.kt | 0 .../repository/RemoveBrokersRepository.kt | 0 .../data/repository/SpamShieldRepository.kt | 0 .../data/repository/SubscriptionRepository.kt | 0 .../android/data/repository/UserRepository.kt | 0 .../data/repository/VoicePrintRepository.kt | 0 .../android/data/sync/OfflineWorker.kt | 0 .../android/data/sync/PendingRequestQueue.kt | 0 .../shieldai/android/data/sync/SyncManager.kt | 0 .../com/shieldai/android/di/DatabaseModule.kt | 0 .../com/shieldai/android/di/NetworkModule.kt | 0 .../shieldai/android/di/RepositoryModule.kt | 0 .../android/navigation/AppNavigation.kt | 4 +- .../android/navigation/BottomNavBar.kt | 0 .../shieldai/android/navigation/NavGraph.kt | 292 ++++++++++++ .../com/shieldai/android/navigation/Screen.kt | 9 + .../ui/components/ComponentShowcase.kt | 6 +- .../android/ui/components/ShieldAvatar.kt | 0 .../android/ui/components/ShieldBadge.kt | 0 .../android/ui/components/ShieldButton.kt | 0 .../android/ui/components/ShieldCard.kt | 0 .../android/ui/components/ShieldEmptyState.kt | 0 .../android/ui/components/ShieldModal.kt | 0 .../ui/components/ShieldProgressBar.kt | 0 .../android/ui/components/ShieldSkeleton.kt | 0 .../android/ui/components/ShieldTextField.kt | 0 .../android/ui/components/ShieldToast.kt | 0 .../android/ui/components/ThreatGauge.kt | 43 +- .../android/ui/screens/auth/AuthScreen.kt | 4 +- .../ui/screens/auth/BiometricAuthScreen.kt | 2 +- .../ui/screens/auth/ForgotPasswordScreen.kt | 0 .../android/ui/screens/auth/LoginScreen.kt | 0 .../ui/screens/auth/ResetPasswordScreen.kt | 0 .../android/ui/screens/auth/SignupScreen.kt | 0 .../ui/screens/dashboard/AlertDetailScreen.kt | 0 .../ui/screens/dashboard/DashboardScreen.kt | 82 ++-- .../ui/screens/onboarding/CompleteStep.kt | 0 .../ui/screens/onboarding/FamilyInviteStep.kt | 0 .../ui/screens/onboarding/OnboardingScreen.kt | 0 .../screens/onboarding/PlanSelectionStep.kt | 0 .../screens/onboarding/WatchlistSetupStep.kt | 0 .../ui/screens/services/DarkWatchScreen.kt | 0 .../ui/screens/services/HomeTitleScreen.kt | 0 .../screens/services/RemoveBrokersScreen.kt | 0 .../ui/screens/services/SpamShieldScreen.kt | 0 .../ui/screens/services/VoicePrintScreen.kt | 0 .../ui/screens/settings/SettingsScreen.kt | 8 +- .../com/shieldai/android/ui/theme/Color.kt | 0 .../com/shieldai/android/ui/theme/Shape.kt | 0 .../com/shieldai/android/ui/theme/Theme.kt | 2 +- .../com/shieldai/android/ui/theme/Type.kt | 0 .../shieldai/android/util/PasswordStrength.kt | 0 .../android/viewmodel/AlertDetailViewModel.kt | 6 +- .../android/viewmodel/AuthViewModel.kt | 4 +- .../android/viewmodel/DarkWatchViewModel.kt | 4 +- .../android/viewmodel/DashboardViewModel.kt | 14 +- .../android/viewmodel/HomeTitleViewModel.kt | 4 +- .../viewmodel/RemoveBrokersViewModel.kt | 4 +- .../android/viewmodel/SettingsViewModel.kt | 6 +- .../android/viewmodel/SpamShieldViewModel.kt | 4 +- .../android/viewmodel/VoicePrintViewModel.kt | 4 +- .../src/main/res/drawable/ic_account_box.xml | 0 .../app/src/main/res/drawable/ic_alerts.xml | 0 .../src/main/res/drawable/ic_dashboard.xml | 0 .../app/src/main/res/drawable/ic_home.xml | 0 .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../app/src/main/res/drawable/ic_services.xml | 0 .../app/src/main/res/drawable/ic_settings.xml | 0 .../main/res/mipmap-anydpi/ic_launcher.xml | 0 .../res/mipmap-anydpi/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../app/src/main/res/values/colors.xml | 0 .../app/src/main/res/values/strings.xml | 2 +- .../app/src/main/res/values/themes.xml | 4 + .../app/src/main/res/xml/backup_rules.xml | 0 .../main/res/xml/data_extraction_rules.xml | 0 .../com/shieldai/android/ExampleUnitTest.kt | 2 +- .../android/data/local/CacheManagerTest.kt | 2 +- .../android/data/remote/ErrorHandlerTest.kt | 2 +- .../android/data/remote/TRPCResponseTest.kt | 2 +- .../android/data/sync/SyncManagerTest.kt | 2 +- .../android/util/PasswordStrengthTest.kt | 2 +- .../android/viewmodel/AuthViewModelTest.kt | 6 +- .../viewmodel/ServiceViewModelsTest.kt | 420 ++++++++++++++++++ .../{ShieldAI => Kordant}/build.gradle.kts | 0 .../{ShieldAI => Kordant}/gradle.properties | 0 .../gradle/gradle-daemon-jvm.properties | 0 .../gradle/libs.versions.toml | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 android/{ShieldAI => Kordant}/gradlew | 0 android/{ShieldAI => Kordant}/gradlew.bat | 0 .../{ShieldAI => Kordant}/settings.gradle.kts | 2 +- .../shieldai/android/navigation/NavGraph.kt | 121 ----- .../app/src/main/res/values/themes.xml | 4 - assets/ads/gd_portrait_600x750.svg | 2 +- assets/ads/generate_assets.py | 18 +- assets/ads/linkedin/variant1_professional.svg | 6 +- assets/ads/linkedin/variant2_datasecurity.svg | 6 +- .../linkedin/variant3_family_professional.svg | 8 +- assets/ads/meta_a_1x1_1080x1080.svg | 2 +- assets/ads/meta_b_1x1_1080x1080.svg | 4 +- assets/ads/meta_b_45_1080x1350.svg | 6 +- assets/ads/meta_c_1x1_1080x1080.svg | 2 +- browser-ext/public/manifest.json | 6 +- browser-ext/src/background/index.ts | 14 +- browser-ext/src/content/index.ts | 4 +- browser-ext/src/lib/phishing-detector.ts | 4 +- browser-ext/src/lib/settings.ts | 4 +- browser-ext/src/options/options.html | 6 +- browser-ext/src/options/options.ts | 2 +- browser-ext/src/popup/popup.html | 4 +- browser-ext/tests/api-client.test.ts | 2 +- browser-ext/tests/phishing-detector.test.ts | 12 +- iOS/{ShieldAI => Kordant} | 0 ...roduct-plan.md => KORDANT-product-plan.md} | 8 +- ...e.md => KORDANT-technical-architecture.md} | 4 +- .../waitlist-email-sequence-implementation.md | 16 +- scripts/load-test/run-all.sh | 4 +- scripts/setup-ga4.sh | 20 +- .../01-project-foundation-cleanup.md | 8 +- .../02-theme-system-brand-palette.md | 14 +- .../03-ui-primitive-library.md | 8 +- .../04-layout-components.md | 8 +- .../05-landing-page-hero.md | 14 +- .../06-landing-page-features.md | 14 +- .../07-auth-pages.md | 12 +- .../08-migrate-existing-pages.md | 12 +- .../09-drizzle-schema-migration.md | 4 +- .../10-db-connection-migrations.md | 16 +- .../11-trpc-auth-context.md | 6 +- .../12-user-family-router.md | 6 +- .../13-subscription-billing-router.md | 6 +- .../14-notifications-router.md | 10 +- .../15-darkwatch-router.md | 6 +- .../16-voiceprint-router.md | 6 +- .../17-spamshield-router.md | 6 +- .../18-hometitle-router.md | 6 +- .../19-removebrokers-router.md | 6 +- .../20-alert-correlation-router.md | 8 +- .../21-report-generation-router.md | 12 +- .../22-background-jobs.md | 6 +- .../23-frontend-api-integration.md | 6 +- .../24-dashboard-widgets.md | 8 +- .../25-realtime-alerts.md | 6 +- .../26-error-loading-states.md | 10 +- .../27-browser-extension-move.md | 16 +- .../28-ios-app-foundation.md | 40 +- .../29-ios-design-system.md | 30 +- .../30-ios-auth-onboarding.md | 26 +- .../31-ios-api-client.md | 24 +- .../32-ios-service-screens.md | 22 +- .../33-ios-native-features.md | 28 +- .../34-android-app-foundation.md | 28 +- .../35-android-design-system.md | 10 +- .../36-android-auth-onboarding.md | 18 +- .../37-android-api-client.md | 24 +- .../38-android-service-screens.md | 14 +- .../39-android-native-features.md | 16 +- .../40-shared-mobile-assets.md | 14 +- .../41-cleanup-legacy.md | 8 +- .../42-deployment-config.md | 8 +- .../README.md | 12 +- tasks/rebrand-to-kordant/README.md | 16 +- web/src/routes/blog.tsx | 2 +- web/src/routes/blog/[slug].tsx | 2 +- web/src/server/db/seed.ts | 8 +- 210 files changed, 1307 insertions(+), 712 deletions(-) rename android/{ShieldAI => Kordant}/.gitignore (100%) rename android/{ShieldAI => Kordant}/.idea/.gitignore (100%) rename android/{ShieldAI => Kordant}/app/.gitignore (100%) rename android/{ShieldAI => Kordant}/app/build.gradle.kts (94%) rename android/{ShieldAI => Kordant}/app/lint-baseline.xml (85%) rename android/{ShieldAI => Kordant}/app/proguard-rules.pro (100%) rename android/{ShieldAI => Kordant}/app/src/androidTest/java/com/shieldai/android/ComponentTests.kt (87%) rename android/{ShieldAI => Kordant}/app/src/androidTest/java/com/shieldai/android/ExampleInstrumentedTest.kt (80%) rename android/{ShieldAI => Kordant}/app/src/main/AndroidManifest.xml (87%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/MainActivity.kt (86%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ShieldAIApp.kt (84%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/local/CacheManager.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/Alert.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/BrokerListing.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/Exposure.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/Property.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/RemovalRequest.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/SpamRule.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/Subscription.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/User.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/VoiceAnalysis.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/VoiceEnrollment.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/model/WatchlistItem.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/remote/AuthInterceptor.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/remote/ErrorHandler.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/remote/TRPCApiService.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/remote/TRPCResponse.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/repository/AlertRepository.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/repository/AuthRepository.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/repository/DarkWatchRepository.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/repository/HomeTitleRepository.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/repository/RemoveBrokersRepository.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/repository/SpamShieldRepository.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/repository/SubscriptionRepository.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/repository/UserRepository.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/repository/VoicePrintRepository.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/sync/OfflineWorker.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/sync/PendingRequestQueue.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/data/sync/SyncManager.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/di/DatabaseModule.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/di/NetworkModule.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/di/RepositoryModule.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/navigation/AppNavigation.kt (96%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/navigation/BottomNavBar.kt (100%) create mode 100644 android/Kordant/app/src/main/java/com/shieldai/android/navigation/NavGraph.kt rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/navigation/Screen.kt (68%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ComponentShowcase.kt (98%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ShieldAvatar.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ShieldBadge.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ShieldButton.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ShieldCard.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ShieldEmptyState.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ShieldModal.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ShieldProgressBar.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ShieldSkeleton.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ShieldTextField.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ShieldToast.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/components/ThreatGauge.kt (65%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/auth/AuthScreen.kt (97%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/auth/BiometricAuthScreen.kt (98%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/auth/ForgotPasswordScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/auth/LoginScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/auth/ResetPasswordScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/auth/SignupScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/dashboard/AlertDetailScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/dashboard/DashboardScreen.kt (84%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/onboarding/CompleteStep.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/onboarding/FamilyInviteStep.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/onboarding/OnboardingScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/onboarding/PlanSelectionStep.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/onboarding/WatchlistSetupStep.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/services/DarkWatchScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/services/HomeTitleScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/services/RemoveBrokersScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/services/SpamShieldScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/services/VoicePrintScreen.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/screens/settings/SettingsScreen.kt (98%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/theme/Color.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/theme/Shape.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/theme/Theme.kt (99%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/ui/theme/Type.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/util/PasswordStrength.kt (100%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/viewmodel/AlertDetailViewModel.kt (94%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/viewmodel/AuthViewModel.kt (98%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/viewmodel/DarkWatchViewModel.kt (96%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/viewmodel/DashboardViewModel.kt (92%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/viewmodel/HomeTitleViewModel.kt (96%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/viewmodel/RemoveBrokersViewModel.kt (96%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/viewmodel/SettingsViewModel.kt (94%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/viewmodel/SpamShieldViewModel.kt (96%) rename android/{ShieldAI => Kordant}/app/src/main/java/com/shieldai/android/viewmodel/VoicePrintViewModel.kt (96%) rename android/{ShieldAI => Kordant}/app/src/main/res/drawable/ic_account_box.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/drawable/ic_alerts.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/drawable/ic_dashboard.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/drawable/ic_home.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/drawable/ic_launcher_background.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/drawable/ic_services.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/drawable/ic_settings.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-anydpi/ic_launcher.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/values/colors.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/values/strings.xml (73%) create mode 100644 android/Kordant/app/src/main/res/values/themes.xml rename android/{ShieldAI => Kordant}/app/src/main/res/xml/backup_rules.xml (100%) rename android/{ShieldAI => Kordant}/app/src/main/res/xml/data_extraction_rules.xml (100%) rename android/{ShieldAI => Kordant}/app/src/test/java/com/shieldai/android/ExampleUnitTest.kt (85%) rename android/{ShieldAI => Kordant}/app/src/test/java/com/shieldai/android/data/local/CacheManagerTest.kt (97%) rename android/{ShieldAI => Kordant}/app/src/test/java/com/shieldai/android/data/remote/ErrorHandlerTest.kt (98%) rename android/{ShieldAI => Kordant}/app/src/test/java/com/shieldai/android/data/remote/TRPCResponseTest.kt (97%) rename android/{ShieldAI => Kordant}/app/src/test/java/com/shieldai/android/data/sync/SyncManagerTest.kt (98%) rename android/{ShieldAI => Kordant}/app/src/test/java/com/shieldai/android/util/PasswordStrengthTest.kt (98%) rename android/{ShieldAI => Kordant}/app/src/test/java/com/shieldai/android/viewmodel/AuthViewModelTest.kt (98%) create mode 100644 android/Kordant/app/src/test/java/com/shieldai/android/viewmodel/ServiceViewModelsTest.kt rename android/{ShieldAI => Kordant}/build.gradle.kts (100%) rename android/{ShieldAI => Kordant}/gradle.properties (100%) rename android/{ShieldAI => Kordant}/gradle/gradle-daemon-jvm.properties (100%) rename android/{ShieldAI => Kordant}/gradle/libs.versions.toml (100%) rename android/{ShieldAI => Kordant}/gradle/wrapper/gradle-wrapper.jar (100%) rename android/{ShieldAI => Kordant}/gradle/wrapper/gradle-wrapper.properties (100%) rename android/{ShieldAI => Kordant}/gradlew (100%) rename android/{ShieldAI => Kordant}/gradlew.bat (100%) rename android/{ShieldAI => Kordant}/settings.gradle.kts (95%) delete mode 100644 android/ShieldAI/app/src/main/java/com/shieldai/android/navigation/NavGraph.kt delete mode 100644 android/ShieldAI/app/src/main/res/values/themes.xml rename iOS/{ShieldAI => Kordant} (100%) rename plans/{SHIELDAI-product-plan.md => KORDANT-product-plan.md} (96%) rename plans/{SHIELDAI-technical-architecture.md => KORDANT-technical-architecture.md} (99%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/01-project-foundation-cleanup.md (90%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/02-theme-system-brand-palette.md (91%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/03-ui-primitive-library.md (92%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/04-layout-components.md (94%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/05-landing-page-hero.md (86%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/06-landing-page-features.md (89%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/07-auth-pages.md (90%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/08-migrate-existing-pages.md (90%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/09-drizzle-schema-migration.md (98%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/10-db-connection-migrations.md (93%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/11-trpc-auth-context.md (97%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/12-user-family-router.md (97%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/13-subscription-billing-router.md (97%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/14-notifications-router.md (96%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/15-darkwatch-router.md (96%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/16-voiceprint-router.md (96%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/17-spamshield-router.md (96%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/18-hometitle-router.md (96%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/19-removebrokers-router.md (96%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/20-alert-correlation-router.md (93%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/21-report-generation-router.md (94%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/22-background-jobs.md (97%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/23-frontend-api-integration.md (92%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/24-dashboard-widgets.md (95%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/25-realtime-alerts.md (97%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/26-error-loading-states.md (95%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/27-browser-extension-move.md (92%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/28-ios-app-foundation.md (75%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/29-ios-design-system.md (85%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/30-ios-auth-onboarding.md (86%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/31-ios-api-client.md (89%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/32-ios-service-screens.md (87%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/33-ios-native-features.md (84%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/34-android-app-foundation.md (87%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/35-android-design-system.md (95%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/36-android-auth-onboarding.md (89%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/37-android-api-client.md (87%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/38-android-service-screens.md (91%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/39-android-native-features.md (89%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/40-shared-mobile-assets.md (94%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/41-cleanup-legacy.md (95%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/42-deployment-config.md (97%) rename tasks/{shieldai-unified-restructure => kordant-unified-restructure}/README.md (89%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ca84e69..564c729 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -99,7 +99,7 @@ jobs: with: file: ./coverage/lcov.info flags: unittests - name: shieldai-coverage + name: kordant-coverage fail_on_empty: false docker-build: @@ -115,7 +115,7 @@ jobs: with: context: . push: false - tags: shieldai:${{ github.sha }} + tags: kordant:${{ github.sha }} cache-from: type=gha cache-to: type=gha,mode=max diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index fd4cec9..c652c1d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -52,7 +52,7 @@ jobs: terraform_version: "~> 1.5" - name: Terraform Init working-directory: infra/environments/${{ needs.detect-environment.outputs.environment }} - run: terraform init -backend-config="bucket=shieldai-${{ needs.detect-environment.outputs.environment }}-terraform-state" + run: terraform init -backend-config="bucket=kordant-${{ needs.detect-environment.outputs.environment }}-terraform-state" - name: Terraform Plan id: plan working-directory: infra/environments/${{ needs.detect-environment.outputs.environment }} @@ -113,8 +113,8 @@ jobs: file: ${{ matrix.dockerfile }} push: true tags: | - ghcr.io/${{ github.repository_owner }}/shieldai-${{ matrix.name }}:${{ steps.tag.outputs.tag }} - ghcr.io/${{ github.repository_owner }}/shieldai-${{ matrix.name }}:latest + ghcr.io/${{ github.repository_owner }}/kordant-${{ matrix.name }}:${{ steps.tag.outputs.tag }} + ghcr.io/${{ github.repository_owner }}/kordant-${{ matrix.name }}:latest cache-from: type=gha cache-to: type=gha,mode=max @@ -137,8 +137,8 @@ jobs: aws-region: us-east-1 - name: Update ECS Service run: | - IMAGE="ghcr.io/${{ github.repository_owner }}/shieldai-${{ matrix.service }}:${{ needs.detect-environment.outputs.tag }}" - CLUSTER="shieldai-${{ needs.detect-environment.outputs.environment }}" + IMAGE="ghcr.io/${{ github.repository_owner }}/kordant-${{ matrix.service }}:${{ needs.detect-environment.outputs.tag }}" + CLUSTER="kordant-${{ needs.detect-environment.outputs.environment }}" SERVICE="${{ matrix.service }}" TASK_DEF=$(aws ecs describe-task-definition \ @@ -181,7 +181,7 @@ jobs: id: health run: | ENV="${{ needs.detect-environment.outputs.environment }}" - CLUSTER="shieldai-${ENV}" + CLUSTER="kordant-${ENV}" ALB_DNS=$(aws elbv2 describe-load-balancers \ --query "LoadBalancers[?contains(LoadBalancerName, '${CLUSTER}-alb')].DNSName" \ @@ -230,7 +230,7 @@ jobs: aws-region: us-east-1 - name: Rollback ECS Service run: | - CLUSTER="shieldai-${{ needs.detect-environment.outputs.environment }}" + CLUSTER="kordant-${{ needs.detect-environment.outputs.environment }}" SERVICE="${{ matrix.service }}" aws ecs update-service \ diff --git a/README.md b/README.md index 808dcea..6efffd4 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# ShieldAI +# Kordant **Multi-layered consumer identity protection against predatory AI-driven scams.** -ShieldAI combines three detection engines — voice cloning detection, dark web monitoring, and real-time spam classification — to give consumers proactive defense against modern identity fraud. +Kordant combines three detection engines — voice cloning detection, dark web monitoring, and real-time spam classification — to give consumers proactive defense against modern identity fraud. --- @@ -10,13 +10,13 @@ ShieldAI combines three detection engines — voice cloning detection, dark web Scammers are weaponizing AI at scale: voice clones that sound exactly like your family, hyper-personalized phishing messages that bypass filters, and synthetic identities that exploit stolen data within hours of a breach. Legacy credit monitoring is reactive — it tells you after the damage is done. -ShieldAI flips the model. We detect the scam _as it happens_: +Kordant flips the model. We detect the scam _as it happens_: - **VoicePrint** analyzes inbound calls in real time to flag synthetic AI-generated voices before you're socially engineered. - **DarkWatch** continuously monitors dark web forums, breach databases, and data broker caches — notifying you the moment your credentials, phone, or SSN surface. - **SpamShield** intercepts and classifies spam calls and SMS at the network level, blocking threats before they reach your phone. -Backed by ML models (ECAPA-TDNN, BERT) and a real-time alert pipeline, ShieldAI gives consumers enterprise-grade threat detection for their personal life. +Backed by ML models (ECAPA-TDNN, BERT) and a real-time alert pipeline, Kordant gives consumers enterprise-grade threat detection for their personal life. --- @@ -173,10 +173,10 @@ This launches the API server, all microservices, and the web frontend concurrent pnpm build # Build individual Docker images -docker build -f packages/api/Dockerfile -t shieldai-api . -docker build -f services/spamshield/Dockerfile -t shieldai-spamshield . -docker build -f services/darkwatch/Dockerfile -t shieldai-darkwatch . -docker build -f services/voiceprint/Dockerfile -t shieldai-voiceprint . +docker build -f packages/api/Dockerfile -t kordant-api . +docker build -f services/spamshield/Dockerfile -t kordant-spamshield . +docker build -f services/darkwatch/Dockerfile -t kordant-darkwatch . +docker build -f services/voiceprint/Dockerfile -t kordant-voiceprint . ``` --- @@ -191,10 +191,10 @@ pnpm test pnpm test:coverage # Individual service tests -pnpm test --filter @shieldai/spamshield -pnpm test --filter @shieldai/darkwatch -pnpm test --filter @shieldai/voiceprint -pnpm test --filter @shieldai/hometitle +pnpm test --filter @kordant/spamshield +pnpm test --filter @kordant/darkwatch +pnpm test --filter @kordant/voiceprint +pnpm test --filter @kordant/hometitle # Integration & E2E cd packages/integration-tests && pnpm test @@ -242,7 +242,7 @@ See `infra/README.md` and `infra/ROLLBACK.md` for detailed operational runbooks. ## Project Structure ``` -shieldai/ +kordant/ ├── packages/ # Shared libraries (20 packages) │ ├── api/ # Fastify API server │ ├── core/ # Core shared logic @@ -292,7 +292,7 @@ shieldai/ | Push Notifications | `docs/PUSH_NOTIFICATIONS_SETUP.md` | | Mobile Push Integration | `docs/MOBILE_PUSH_INTEGRATION.md` | | Mixpanel Analytics | `docs/MIXPANEL_ANALYTICS.md` | -| Code Review Workflow | `shieldai-workflow.md` | +| Code Review Workflow | `kordant-workflow.md` | --- diff --git a/android/ShieldAI/.gitignore b/android/Kordant/.gitignore similarity index 100% rename from android/ShieldAI/.gitignore rename to android/Kordant/.gitignore diff --git a/android/ShieldAI/.idea/.gitignore b/android/Kordant/.idea/.gitignore similarity index 100% rename from android/ShieldAI/.idea/.gitignore rename to android/Kordant/.idea/.gitignore diff --git a/android/ShieldAI/app/.gitignore b/android/Kordant/app/.gitignore similarity index 100% rename from android/ShieldAI/app/.gitignore rename to android/Kordant/app/.gitignore diff --git a/android/ShieldAI/app/build.gradle.kts b/android/Kordant/app/build.gradle.kts similarity index 94% rename from android/ShieldAI/app/build.gradle.kts rename to android/Kordant/app/build.gradle.kts index b0d8cb3..39092f3 100644 --- a/android/ShieldAI/app/build.gradle.kts +++ b/android/Kordant/app/build.gradle.kts @@ -5,7 +5,7 @@ plugins { } android { - namespace = "com.shieldai.android" + namespace = "com.kordant.android" compileSdk { version = release(36) { minorApiLevel = 1 @@ -13,7 +13,7 @@ android { } defaultConfig { - applicationId = "com.shieldai.android" + applicationId = "com.kordant.android" minSdk = 26 targetSdk = 36 versionCode = 1 @@ -22,8 +22,8 @@ android { testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" buildConfigField("String", "API_BASE_URL", "\"http://10.0.2.2:3000\"") - buildConfigField("String", "API_STAGING_URL", "\"https://staging.api.shieldai.com\"") - buildConfigField("String", "API_PRODUCTION_URL", "\"https://api.shieldai.com\"") + buildConfigField("String", "API_STAGING_URL", "\"https://staging.api.kordant.com\"") + buildConfigField("String", "API_PRODUCTION_URL", "\"https://api.kordant.com\"") } buildTypes { @@ -36,7 +36,7 @@ android { getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) - buildConfigField("String", "API_BASE_URL", "\"https://api.shieldai.com\"") + buildConfigField("String", "API_BASE_URL", "\"https://api.kordant.com\"") } } compileOptions { diff --git a/android/ShieldAI/app/lint-baseline.xml b/android/Kordant/app/lint-baseline.xml similarity index 85% rename from android/ShieldAI/app/lint-baseline.xml rename to android/Kordant/app/lint-baseline.xml index 637d5df..d1956f6 100644 --- a/android/ShieldAI/app/lint-baseline.xml +++ b/android/Kordant/app/lint-baseline.xml @@ -18,7 +18,7 @@ errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -29,7 +29,7 @@ errorLine1="agp = "9.1.1"" errorLine2=" ~~~~~~~"> @@ -40,7 +40,7 @@ errorLine1="coreKtx = "1.10.1"" errorLine2=" ~~~~~~~~"> @@ -51,7 +51,7 @@ errorLine1="junitVersion = "1.1.5"" errorLine2=" ~~~~~~~"> @@ -62,7 +62,7 @@ errorLine1="espressoCore = "3.5.1"" errorLine2=" ~~~~~~~"> @@ -73,7 +73,7 @@ errorLine1="lifecycleRuntimeKtx = "2.6.1"" errorLine2=" ~~~~~~~"> @@ -84,7 +84,7 @@ errorLine1="activityCompose = "1.8.0"" errorLine2=" ~~~~~~~"> @@ -95,7 +95,7 @@ errorLine1="navigationCompose = "2.7.7"" errorLine2=" ~~~~~~~"> @@ -106,7 +106,7 @@ errorLine1="composeBom = "2025.12.00"" errorLine2=" ~~~~~~~~~~~~"> @@ -117,7 +117,7 @@ errorLine1="securityCrypto = "1.1.0-alpha06"" errorLine2=" ~~~~~~~~~~~~~~~"> @@ -128,7 +128,7 @@ errorLine1="playServicesAuth = "21.0.0"" errorLine2=" ~~~~~~~~"> @@ -139,7 +139,7 @@ errorLine1="work = "2.9.1"" errorLine2=" ~~~~~~~"> @@ -150,7 +150,7 @@ errorLine1="work = "2.9.1"" errorLine2=" ~~~~~~~"> @@ -161,7 +161,7 @@ errorLine1="kotlin = "2.2.10"" errorLine2=" ~~~~~~~~"> @@ -172,7 +172,7 @@ errorLine1="kotlin = "2.2.10"" errorLine2=" ~~~~~~~~"> @@ -183,7 +183,7 @@ errorLine1="okhttp = "4.12.0"" errorLine2=" ~~~~~~~~"> @@ -194,7 +194,7 @@ errorLine1="okhttp = "4.12.0"" errorLine2=" ~~~~~~~~"> @@ -205,7 +205,7 @@ errorLine1="gson = "2.10.1"" errorLine2=" ~~~~~~~~"> @@ -216,7 +216,7 @@ errorLine1="lottieCompose = "6.4.0"" errorLine2=" ~~~~~~~"> @@ -227,7 +227,7 @@ errorLine1="coroutinesTest = "1.7.3"" errorLine2=" ~~~~~~~"> @@ -238,7 +238,7 @@ errorLine1="retrofit = "2.11.0"" errorLine2=" ~~~~~~~~"> @@ -249,7 +249,7 @@ errorLine1="kotlinxSerializationJson = "1.7.3"" errorLine2=" ~~~~~~~"> @@ -260,7 +260,7 @@ errorLine1="truth = "1.4.4"" errorLine2=" ~~~~~~~"> @@ -271,7 +271,7 @@ errorLine1="mockwebserver = "4.12.0"" errorLine2=" ~~~~~~~~"> @@ -279,10 +279,10 @@ @@ -293,7 +293,7 @@ errorLine1=" private var userRepository: UserRepository? = null" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -304,7 +304,7 @@ errorLine1=" private var darkWatchRepository: DarkWatchRepository? = null" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -315,7 +315,7 @@ errorLine1=" private var voicePrintRepository: VoicePrintRepository? = null" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -326,7 +326,7 @@ errorLine1=" private var alertRepository: AlertRepository? = null" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -337,7 +337,7 @@ errorLine1=" private var subscriptionRepository: SubscriptionRepository? = null" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -480,7 +480,7 @@ errorLine1=" securePrefs.edit()" errorLine2=" ~~~~~~~~~~~~~~~~~~"> @@ -491,7 +491,7 @@ errorLine1=" securePrefs.edit()" errorLine2=" ~~~~~~~~~~~~~~~~~~"> @@ -502,7 +502,7 @@ errorLine1=" prefs.edit().putBoolean("biometric_enabled", enabled).apply()" errorLine2=" ~~~~~~~~~~~~"> diff --git a/android/ShieldAI/app/proguard-rules.pro b/android/Kordant/app/proguard-rules.pro similarity index 100% rename from android/ShieldAI/app/proguard-rules.pro rename to android/Kordant/app/proguard-rules.pro diff --git a/android/ShieldAI/app/src/androidTest/java/com/shieldai/android/ComponentTests.kt b/android/Kordant/app/src/androidTest/java/com/shieldai/android/ComponentTests.kt similarity index 87% rename from android/ShieldAI/app/src/androidTest/java/com/shieldai/android/ComponentTests.kt rename to android/Kordant/app/src/androidTest/java/com/shieldai/android/ComponentTests.kt index c31b315..b426893 100644 --- a/android/ShieldAI/app/src/androidTest/java/com/shieldai/android/ComponentTests.kt +++ b/android/Kordant/app/src/androidTest/java/com/shieldai/android/ComponentTests.kt @@ -1,4 +1,4 @@ -package com.shieldai.android +package com.kordant.android import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.ui.Modifier @@ -10,15 +10,15 @@ import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTextClearance import androidx.compose.ui.test.performTextInput -import com.shieldai.android.ui.components.BadgeVariant -import com.shieldai.android.ui.components.ComponentShowcase -import com.shieldai.android.ui.components.InputType -import com.shieldai.android.ui.components.ShieldBadge -import com.shieldai.android.ui.components.ShieldButton -import com.shieldai.android.ui.components.ShieldButtonSize -import com.shieldai.android.ui.components.ShieldButtonVariant -import com.shieldai.android.ui.components.ShieldTextField -import com.shieldai.android.ui.theme.ShieldAITheme +import com.kordant.android.ui.components.BadgeVariant +import com.kordant.android.ui.components.ComponentShowcase +import com.kordant.android.ui.components.InputType +import com.kordant.android.ui.components.ShieldBadge +import com.kordant.android.ui.components.ShieldButton +import com.kordant.android.ui.components.ShieldButtonSize +import com.kordant.android.ui.components.ShieldButtonVariant +import com.kordant.android.ui.components.ShieldTextField +import com.kordant.android.ui.theme.KordantTheme import org.junit.Rule import org.junit.Test @@ -30,7 +30,7 @@ class ComponentTests { @Test fun shieldButton_rendersWithText() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldButton(text = "Click Me", onClick = {}) } } @@ -41,7 +41,7 @@ class ComponentTests { fun shieldButton_clickHandlerFires() { var clicked = false composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldButton(text = "Click Me", onClick = { clicked = true }) } } @@ -53,7 +53,7 @@ class ComponentTests { fun shieldButton_disabledDoesNotFireClick() { var clicked = false composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldButton(text = "Click Me", onClick = { clicked = true }, enabled = false) } } @@ -64,7 +64,7 @@ class ComponentTests { @Test fun shieldButton_showsLoadingIndicator() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldButton(text = "Saving", onClick = {}, loading = true) } } @@ -74,7 +74,7 @@ class ComponentTests { @Test fun shieldButton_variantsRender() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldButton(text = "Primary", onClick = {}, variant = ShieldButtonVariant.Primary) ShieldButton(text = "Secondary", onClick = {}, variant = ShieldButtonVariant.Secondary) ShieldButton(text = "Ghost", onClick = {}, variant = ShieldButtonVariant.Ghost) @@ -90,7 +90,7 @@ class ComponentTests { @Test fun shieldButton_sizesRender() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldButton(text = "Small", onClick = {}, size = ShieldButtonSize.Small) ShieldButton(text = "Medium", onClick = {}, size = ShieldButtonSize.Medium) ShieldButton(text = "Large", onClick = {}, size = ShieldButtonSize.Large) @@ -104,7 +104,7 @@ class ComponentTests { @Test fun shieldButton_fullWidthRenders() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldButton(text = "Full Width", onClick = {}, fullWidth = true, modifier = Modifier.fillMaxWidth()) } } @@ -114,7 +114,7 @@ class ComponentTests { @Test fun shieldTextField_rendersWithLabel() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldTextField(value = "", onValueChange = {}, label = "Email") } } @@ -124,7 +124,7 @@ class ComponentTests { @Test fun shieldTextField_showsErrorState() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldTextField( value = "bad", onValueChange = {}, @@ -140,7 +140,7 @@ class ComponentTests { @Test fun shieldTextField_helperTextDisplayed() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldTextField( value = "", onValueChange = {}, @@ -155,7 +155,7 @@ class ComponentTests { @Test fun shieldTextField_passwordToggleExists() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldTextField( value = "", onValueChange = {}, @@ -170,7 +170,7 @@ class ComponentTests { @Test fun shieldBadge_variantsRender() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldBadge(text = "Success", variant = BadgeVariant.Success) ShieldBadge(text = "Error", variant = BadgeVariant.Error) ShieldBadge(text = "Warning", variant = BadgeVariant.Warning) @@ -188,7 +188,7 @@ class ComponentTests { @Test fun shieldTextField_acceptsInput() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ShieldTextField( value = "", onValueChange = {}, @@ -202,11 +202,11 @@ class ComponentTests { @Test fun componentShowcase_renders() { composeTestRule.setContent { - ShieldAITheme { + KordantTheme { ComponentShowcase() } } - composeTestRule.onNodeWithText("ShieldAI Design System").assertIsDisplayed() + composeTestRule.onNodeWithText("Kordant Design System").assertIsDisplayed() composeTestRule.onNodeWithText("ShieldButton").assertIsDisplayed() composeTestRule.onNodeWithText("ShieldCard").assertIsDisplayed() composeTestRule.onNodeWithText("ShieldBadge").assertIsDisplayed() diff --git a/android/ShieldAI/app/src/androidTest/java/com/shieldai/android/ExampleInstrumentedTest.kt b/android/Kordant/app/src/androidTest/java/com/shieldai/android/ExampleInstrumentedTest.kt similarity index 80% rename from android/ShieldAI/app/src/androidTest/java/com/shieldai/android/ExampleInstrumentedTest.kt rename to android/Kordant/app/src/androidTest/java/com/shieldai/android/ExampleInstrumentedTest.kt index 8392f02..45e30cf 100644 --- a/android/ShieldAI/app/src/androidTest/java/com/shieldai/android/ExampleInstrumentedTest.kt +++ b/android/Kordant/app/src/androidTest/java/com/shieldai/android/ExampleInstrumentedTest.kt @@ -1,4 +1,4 @@ -package com.shieldai.android +package com.kordant.android import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry @@ -11,6 +11,6 @@ class ExampleInstrumentedTest { @Test fun useAppContext() { val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.shieldai.android", appContext.packageName) + assertEquals("com.kordant.android", appContext.packageName) } } diff --git a/android/ShieldAI/app/src/main/AndroidManifest.xml b/android/Kordant/app/src/main/AndroidManifest.xml similarity index 87% rename from android/ShieldAI/app/src/main/AndroidManifest.xml rename to android/Kordant/app/src/main/AndroidManifest.xml index 2cde9f7..70cb1be 100644 --- a/android/ShieldAI/app/src/main/AndroidManifest.xml +++ b/android/Kordant/app/src/main/AndroidManifest.xml @@ -5,7 +5,7 @@ + android:theme="@style/Theme.Kordant"> + android:theme="@style/Theme.Kordant"> diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/MainActivity.kt b/android/Kordant/app/src/main/java/com/shieldai/android/MainActivity.kt similarity index 86% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/MainActivity.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/MainActivity.kt index 0d7fc5e..0277cb9 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/MainActivity.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/MainActivity.kt @@ -5,14 +5,14 @@ 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.ShieldAITheme +import com.shieldai.android.ui.theme.KordantTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContent { - ShieldAITheme { + KordantTheme { AppNavigation() } } diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ShieldAIApp.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ShieldAIApp.kt similarity index 84% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ShieldAIApp.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ShieldAIApp.kt index 95d3802..51bb314 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/ShieldAIApp.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/ShieldAIApp.kt @@ -4,7 +4,7 @@ import android.app.Application import com.shieldai.android.data.repository.AuthRepository import com.shieldai.android.data.repository.AuthRepositoryImpl -class ShieldAIApp : Application() { +class KordantApp : Application() { lateinit var authRepository: AuthRepository private set @@ -15,7 +15,7 @@ class ShieldAIApp : Application() { } companion object { - lateinit var instance: ShieldAIApp + lateinit var instance: KordantApp private set } } diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/local/CacheManager.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/local/CacheManager.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/local/CacheManager.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/local/CacheManager.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/Alert.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/Alert.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/Alert.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/Alert.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/BrokerListing.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/BrokerListing.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/BrokerListing.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/BrokerListing.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/Exposure.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/Exposure.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/Exposure.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/Exposure.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/Property.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/Property.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/Property.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/Property.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/RemovalRequest.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/RemovalRequest.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/RemovalRequest.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/RemovalRequest.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/SpamRule.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/SpamRule.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/SpamRule.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/SpamRule.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/Subscription.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/Subscription.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/Subscription.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/Subscription.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/User.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/User.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/User.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/User.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/VoiceAnalysis.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/VoiceAnalysis.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/VoiceAnalysis.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/VoiceAnalysis.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/VoiceEnrollment.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/VoiceEnrollment.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/VoiceEnrollment.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/VoiceEnrollment.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/WatchlistItem.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/model/WatchlistItem.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/model/WatchlistItem.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/model/WatchlistItem.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/remote/AuthInterceptor.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/remote/AuthInterceptor.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/remote/AuthInterceptor.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/remote/AuthInterceptor.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/remote/ErrorHandler.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/remote/ErrorHandler.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/remote/ErrorHandler.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/remote/ErrorHandler.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/remote/TRPCApiService.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/remote/TRPCApiService.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/remote/TRPCApiService.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/remote/TRPCApiService.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/remote/TRPCResponse.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/remote/TRPCResponse.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/remote/TRPCResponse.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/remote/TRPCResponse.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/AlertRepository.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/repository/AlertRepository.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/AlertRepository.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/repository/AlertRepository.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/AuthRepository.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/repository/AuthRepository.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/AuthRepository.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/repository/AuthRepository.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/DarkWatchRepository.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/repository/DarkWatchRepository.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/DarkWatchRepository.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/repository/DarkWatchRepository.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/HomeTitleRepository.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/repository/HomeTitleRepository.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/HomeTitleRepository.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/repository/HomeTitleRepository.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/RemoveBrokersRepository.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/repository/RemoveBrokersRepository.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/RemoveBrokersRepository.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/repository/RemoveBrokersRepository.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/SpamShieldRepository.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/repository/SpamShieldRepository.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/SpamShieldRepository.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/repository/SpamShieldRepository.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/SubscriptionRepository.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/repository/SubscriptionRepository.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/SubscriptionRepository.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/repository/SubscriptionRepository.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/UserRepository.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/repository/UserRepository.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/UserRepository.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/repository/UserRepository.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/VoicePrintRepository.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/repository/VoicePrintRepository.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/repository/VoicePrintRepository.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/repository/VoicePrintRepository.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/sync/OfflineWorker.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/sync/OfflineWorker.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/sync/OfflineWorker.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/sync/OfflineWorker.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/sync/PendingRequestQueue.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/sync/PendingRequestQueue.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/sync/PendingRequestQueue.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/sync/PendingRequestQueue.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/data/sync/SyncManager.kt b/android/Kordant/app/src/main/java/com/shieldai/android/data/sync/SyncManager.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/data/sync/SyncManager.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/data/sync/SyncManager.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/di/DatabaseModule.kt b/android/Kordant/app/src/main/java/com/shieldai/android/di/DatabaseModule.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/di/DatabaseModule.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/di/DatabaseModule.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/di/NetworkModule.kt b/android/Kordant/app/src/main/java/com/shieldai/android/di/NetworkModule.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/di/NetworkModule.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/di/NetworkModule.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/di/RepositoryModule.kt b/android/Kordant/app/src/main/java/com/shieldai/android/di/RepositoryModule.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/di/RepositoryModule.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/di/RepositoryModule.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/navigation/AppNavigation.kt b/android/Kordant/app/src/main/java/com/shieldai/android/navigation/AppNavigation.kt similarity index 96% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/navigation/AppNavigation.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/navigation/AppNavigation.kt index 03a9521..f73993b 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/navigation/AppNavigation.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/navigation/AppNavigation.kt @@ -11,13 +11,13 @@ 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.ShieldAIApp +import com.shieldai.android.KordantApp import com.shieldai.android.viewmodel.AuthViewModel @Composable fun AppNavigation() { val context = LocalContext.current - val app = context.applicationContext as ShieldAIApp + val app = context.applicationContext as KordantApp val viewModel: AuthViewModel = viewModel( factory = AuthViewModel.Factory ) diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/navigation/BottomNavBar.kt b/android/Kordant/app/src/main/java/com/shieldai/android/navigation/BottomNavBar.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/navigation/BottomNavBar.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/navigation/BottomNavBar.kt diff --git a/android/Kordant/app/src/main/java/com/shieldai/android/navigation/NavGraph.kt b/android/Kordant/app/src/main/java/com/shieldai/android/navigation/NavGraph.kt new file mode 100644 index 0000000..bf34bea --- /dev/null +++ b/android/Kordant/app/src/main/java/com/shieldai/android/navigation/NavGraph.kt @@ -0,0 +1,292 @@ +package com.shieldai.android.navigation + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.navigation.NavHostController +import androidx.navigation.NavType +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 + +data class ServiceNavCard( + val title: String, + val route: String, + val description: String +) + +@Composable +fun NavGraph( + navController: NavHostController, + viewModel: AuthViewModel, + modifier: Modifier = Modifier +) { + NavHost( + navController = navController, + startDestination = Screen.Dashboard.route, + modifier = modifier + ) { + composable(Screen.Dashboard.route) { + DashboardScreen( + onNavigateToAlert = { alertId -> + navController.navigate(Screen.AlertDetail.createRoute(alertId)) + }, + onNavigateToService = { serviceRoute -> + navController.navigate(serviceRoute) + } + ) + } + + composable(Screen.Alerts.route) { + AlertsScreen( + onNavigateToAlert = { alertId -> + navController.navigate(Screen.AlertDetail.createRoute(alertId)) + } + ) + } + + composable( + route = Screen.AlertDetail.ROUTE, + arguments = listOf(navArgument("alertId") { type = NavType.StringType }) + ) { backStackEntry -> + val alertId = backStackEntry.arguments?.getString("alertId") ?: "" + AlertDetailScreen( + alertId = alertId, + onBack = { navController.popBackStack() } + ) + } + + composable(Screen.Services.route) { + ServicesHubScreen( + onNavigateToService = { route -> + navController.navigate(route) + } + ) + } + + composable(Screen.DarkWatch.route) { + DarkWatchScreen( + onBack = { navController.popBackStack() } + ) + } + + composable(Screen.VoicePrint.route) { + VoicePrintScreen( + onBack = { navController.popBackStack() } + ) + } + + composable(Screen.SpamShield.route) { + SpamShieldScreen( + onBack = { navController.popBackStack() } + ) + } + + composable(Screen.HomeTitle.route) { + HomeTitleScreen( + onBack = { navController.popBackStack() } + ) + } + + composable(Screen.RemoveBrokers.route) { + RemoveBrokersScreen( + onBack = { navController.popBackStack() } + ) + } + + composable(Screen.Settings.route) { + SettingsScreen( + onBack = { navController.popBackStack(Screen.Dashboard.route, inclusive = false) } + ) + } + + composable(Screen.Account.route) { + PlaceholderScreen(title = "Account") + } + + composable( + route = Screen.ServiceDetail.ROUTE, + arguments = listOf(navArgument("serviceId") { type = NavType.StringType }) + ) { backStackEntry -> + val serviceId = backStackEntry.arguments?.getString("serviceId") ?: "" + PlaceholderScreen(title = "Service: $serviceId") + } + } +} + +@Composable +fun AuthNavHost(viewModel: AuthViewModel) { + val navController = rememberNavController() + NavHost( + navController = navController, + startDestination = Screen.Auth.route + ) { + composable(Screen.Auth.route) { + AuthScreen( + viewModel = viewModel, + onNavigateToForgotPassword = { + navController.navigate(Screen.ForgotPassword.route) + }, + onNavigateToResetPassword = { + navController.navigate(Screen.ResetPassword.createRoute("")) + } + ) + } + composable(Screen.ForgotPassword.route) { + ForgotPasswordScreen( + viewModel = viewModel, + onBack = { navController.popBackStack() } + ) + } + composable( + route = Screen.ResetPassword.route, + arguments = listOf(navArgument("email") { type = NavType.StringType; defaultValue = "" }) + ) { backStackEntry -> + val email = backStackEntry.arguments?.getString("email") ?: "" + ResetPasswordScreen( + viewModel = viewModel, + email = email, + onBack = { navController.popBackStack(Screen.Auth.route, false) } + ) + } + } +} + +@Composable +fun OnboardingNavHost( + viewModel: AuthViewModel, + onComplete: () -> Unit +) { + OnboardingScreen( + viewModel = viewModel, + onComplete = onComplete + ) +} + +@Composable +private fun ServicesHubScreen( + onNavigateToService: (String) -> Unit +) { + val services = listOf( + ServiceNavCard("DarkWatch", Screen.DarkWatch.route, "Monitor data exposures"), + ServiceNavCard("VoicePrint", Screen.VoicePrint.route, "Voice authentication"), + ServiceNavCard("SpamShield", Screen.SpamShield.route, "Spam call protection"), + ServiceNavCard("HomeTitle", Screen.HomeTitle.route, "Property title monitoring"), + ServiceNavCard("RemoveBrokers", Screen.RemoveBrokers.route, "Broker listing removal") + ) + + Column( + modifier = Modifier.fillMaxSize().padding(16.dp) + ) { + Text( + text = "Services", + style = MaterialTheme.typography.headlineMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(bottom = 16.dp) + ) + + LazyVerticalGrid( + columns = GridCells.Fixed(2), + horizontalArrangement = Arrangement.spacedBy(12.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + items(services.size) { index -> + val service = services[index] + com.shieldai.android.ui.components.ShieldCard( + onClick = { onNavigateToService(service.route) }, + modifier = Modifier.fillMaxWidth() + ) { + Column( + modifier = Modifier.padding(8.dp), + verticalArrangement = Arrangement.Center + ) { + Icon( + imageVector = ImageVector.vectorResource(R.drawable.ic_services), + contentDescription = service.title, + tint = MaterialTheme.colorScheme.primary + ) + Text( + text = service.title, + style = MaterialTheme.typography.titleMedium, + fontWeight = FontWeight.SemiBold, + modifier = Modifier.padding(top = 12.dp) + ) + Text( + text = service.description, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(top = 4.dp) + ) + } + } + } + } + } +} + +@Composable +private fun AlertsScreen( + onNavigateToAlert: (String) -> Unit +) { + Column( + modifier = Modifier.fillMaxSize().padding(16.dp) + ) { + Text( + text = "Alerts", + style = MaterialTheme.typography.headlineMedium, + fontWeight = FontWeight.Bold, + modifier = Modifier.padding(bottom = 16.dp) + ) + com.shieldai.android.ui.components.ShieldEmptyState( + title = "No alerts", + description = "You have no recent alerts" + ) + } +} + +@Composable +private fun PlaceholderScreen(title: String) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text( + text = title, + style = MaterialTheme.typography.headlineMedium, + textAlign = TextAlign.Center, + color = MaterialTheme.colorScheme.onBackground + ) + } +} diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/navigation/Screen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/navigation/Screen.kt similarity index 68% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/navigation/Screen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/navigation/Screen.kt index 85cad4b..c55aa70 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/navigation/Screen.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/navigation/Screen.kt @@ -18,4 +18,13 @@ sealed class Screen(val route: String) { fun createRoute(serviceId: String) = "service_detail/$serviceId" } } + object AlertDetail { + const val ROUTE = "alert_detail/{alertId}" + fun createRoute(alertId: String) = "alert_detail/$alertId" + } + data object DarkWatch : Screen("darkwatch") + data object VoicePrint : Screen("voiceprint") + data object SpamShield : Screen("spamshield") + data object HomeTitle : Screen("hometitle") + data object RemoveBrokers : Screen("removebrokers") } diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ComponentShowcase.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ComponentShowcase.kt similarity index 98% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ComponentShowcase.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ComponentShowcase.kt index 8e02062..736f23a 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ComponentShowcase.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ComponentShowcase.kt @@ -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.ShieldAITheme +import com.shieldai.android.ui.theme.KordantTheme import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class) @@ -50,7 +50,7 @@ fun ComponentShowcase(modifier: Modifier = Modifier) { verticalArrangement = Arrangement.spacedBy(16.dp) ) { Text( - text = "ShieldAI Design System", + text = "Kordant Design System", style = MaterialTheme.typography.headlineMedium, modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center @@ -263,7 +263,7 @@ private fun SectionTitle(title: String) { @Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, name = "Dark Mode") @Composable fun ComponentShowcasePreview() { - ShieldAITheme { + KordantTheme { ComponentShowcase() } } diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldAvatar.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldAvatar.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldAvatar.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldAvatar.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldBadge.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldBadge.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldBadge.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldBadge.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldButton.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldButton.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldButton.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldButton.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldCard.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldCard.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldCard.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldCard.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldEmptyState.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldEmptyState.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldEmptyState.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldEmptyState.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldModal.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldModal.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldModal.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldModal.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldProgressBar.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldProgressBar.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldProgressBar.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldProgressBar.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldSkeleton.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldSkeleton.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldSkeleton.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldSkeleton.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldTextField.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldTextField.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldTextField.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldTextField.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldToast.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldToast.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ShieldToast.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ShieldToast.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ThreatGauge.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ThreatGauge.kt similarity index 65% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ThreatGauge.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ThreatGauge.kt index 8fd47dc..f4068dd 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/components/ThreatGauge.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/ui/components/ThreatGauge.kt @@ -2,7 +2,6 @@ package com.shieldai.android.ui.components import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.MaterialTheme @@ -11,13 +10,16 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.graphics.nativeCanvas +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.TextPrimaryLight import com.shieldai.android.ui.theme.Warning @Composable @@ -39,42 +41,30 @@ fun ThreatGauge( Canvas( modifier = Modifier.size(size.dp) ) { - val center = Offset(size / 2f, size / 2f) - val radius = (size / 2f - 16f) * dpiScale - val strokeWidth = 16f * dpiScale + val center = Offset(size.toPx() / 2, size.toPx() / 2) + val radius = center.x - 16.dp.toPx() + val strokeWidth = 16.dp.toPx() drawArc( color = Color(0xFFE2E8F0).copy(alpha = 0.3f), startAngle = -135f, sweepAngle = 270f, useCenter = false, - topLeft = Offset( - center.x - radius, - center.y - radius - ), - size = androidx.compose.ui.geometry.Size(radius * 2, radius * 2), + topLeft = Offset(center.x - radius, center.y - radius), + size = Size(radius * 2, radius * 2), style = Stroke(width = strokeWidth) ) - val sweepAngle = (score / 100f) * 270f + val sweepAngle = (score.coerceIn(0, 100) / 100f) * 270f if (sweepAngle > 0) { - val gradient = Brush.linearGradient( - colors = listOf(startColor, endColor), - start = Offset(center.x - radius, center.y), - end = Offset(center.x + radius, center.y) - ) - drawArc( - brush = gradient, + color = startColor, startAngle = -135f, sweepAngle = sweepAngle, useCenter = false, - topLeft = Offset( - center.x - radius, - center.y - radius - ), - size = androidx.compose.ui.geometry.Size(radius * 2, radius * 2), - style = Stroke(width = strokeWidth, cap = androidx.compose.ui.graphics.Paint.Cap.Round) + topLeft = Offset(center.x - radius, center.y - radius), + size = Size(radius * 2, radius * 2), + style = Stroke(width = strokeWidth) ) } } @@ -102,6 +92,3 @@ fun ThreatGauge( ) } } - -private val Float.dpiScale: Float - get() = 1f diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/AuthScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/AuthScreen.kt similarity index 97% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/AuthScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/AuthScreen.kt index e0e157c..e419f2e 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/AuthScreen.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/AuthScreen.kt @@ -55,14 +55,14 @@ fun AuthScreen( Image( painter = painterResource(id = R.drawable.ic_launcher_foreground), - contentDescription = "ShieldAI Logo", + contentDescription = "Kordant Logo", modifier = Modifier.size(72.dp) ) Spacer(modifier = Modifier.height(16.dp)) Text( - text = "ShieldAI", + text = "Kordant", style = MaterialTheme.typography.headlineLarge, color = MaterialTheme.colorScheme.primary ) diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/BiometricAuthScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/BiometricAuthScreen.kt similarity index 98% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/BiometricAuthScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/BiometricAuthScreen.kt index fc6b3e4..1beaabb 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/BiometricAuthScreen.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/BiometricAuthScreen.kt @@ -15,7 +15,7 @@ fun BiometricAuthScreen( onAuthenticated: () -> Unit, onError: (String) -> Unit, title: String = "Biometric Authentication", - subtitle: String = "Authenticate to access ShieldAI", + subtitle: String = "Authenticate to access Kordant", description: String = "Use your fingerprint or face to sign in" ) { val context = LocalContext.current diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/ForgotPasswordScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/ForgotPasswordScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/ForgotPasswordScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/ForgotPasswordScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/LoginScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/LoginScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/LoginScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/LoginScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/ResetPasswordScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/ResetPasswordScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/ResetPasswordScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/ResetPasswordScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/SignupScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/SignupScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/auth/SignupScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/auth/SignupScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/dashboard/AlertDetailScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/dashboard/AlertDetailScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/dashboard/AlertDetailScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/dashboard/AlertDetailScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/dashboard/DashboardScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/dashboard/DashboardScreen.kt similarity index 84% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/dashboard/DashboardScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/dashboard/DashboardScreen.kt index 0f82e76..61cbd12 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/dashboard/DashboardScreen.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/dashboard/DashboardScreen.kt @@ -1,10 +1,9 @@ package com.shieldai.android.ui.screens.dashboard -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize @@ -20,16 +19,16 @@ import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.PullToRefreshBox +import androidx.compose.material3.SwipeToDismissBox +import androidx.compose.material3.SwipeToDismissBoxState +import androidx.compose.material3.SwipeToDismissBoxValue import androidx.compose.material3.Text -import androidx.compose.material3.pullToRefresh -import androidx.compose.material3.pullToRefreshDefaults +import androidx.compose.material3.rememberSwipeToDismissBoxState import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector @@ -41,12 +40,15 @@ 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 kotlinx.coroutines.launch data class ServiceSummary( val name: String, @@ -64,28 +66,10 @@ fun DashboardScreen( viewModel: DashboardViewModel = viewModel(factory = DashboardVM.Factory) ) { val uiState by viewModel.uiState.collectAsState() - var isRefreshing by remember { mutableStateOf(false) } - var isRefreshingInternal by remember { mutableStateOf(false) } + val scope = rememberCoroutineScope() - if (isRefreshing) { - viewModel.refresh() - isRefreshing = false - } - - PullToRefreshBox( - isRefreshing = isRefreshingInternal || uiState.isLoading, - onRefresh = { - isRefreshingInternal = false - viewModel.refresh() - }, - modifier = modifier, - indicator = { - androidx.compose.material3.pullToRefreshDefaults.indicator( - parent, - transformer, - isRefreshingInternal || uiState.isLoading - ) - } + Box( + modifier = modifier.fillMaxSize() ) { when { uiState.isLoading && uiState.recentAlerts.isEmpty() -> { @@ -97,9 +81,11 @@ fun DashboardScreen( title = "Failed to load", description = uiState.error ?: "Unknown error", actionButton = { - androidx.compose.material3.TextButton(onClick = { viewModel.refresh() }) { - Text("Retry") - } + ShieldButton( + text = "Retry", + onClick = { viewModel.refresh() }, + variant = ShieldButtonVariant.Primary + ) } ) } else { @@ -113,10 +99,22 @@ fun DashboardScreen( DashboardContent( uiState = uiState, onNavigateToAlert = onNavigateToAlert, - onNavigateToService = onNavigateToService + onNavigateToService = onNavigateToService, + onRefresh = { + scope.launch { + viewModel.refresh() + } + } ) } } + + if (uiState.isLoading) { + CircularProgressIndicator( + modifier = Modifier.align(Alignment.TopCenter).padding(top = 16.dp), + color = MaterialTheme.colorScheme.primary + ) + } } } @@ -140,18 +138,28 @@ private fun DashboardLoadingState() { } } +@OptIn(ExperimentalMaterial3Api::class) @Composable private fun DashboardContent( uiState: DashboardViewModel.DashboardUiState, onNavigateToAlert: (String) -> Unit, - onNavigateToService: (String) -> Unit + onNavigateToService: (String) -> Unit, + onRefresh: () -> Unit ) { + val dismissState = rememberSwipeToDismissBoxState( + confirmValueChange = { value -> + if (value == SwipeToDismissBoxValue.EndToStart) { + onRefresh() + true + } else { + false + } + } + ) + LazyColumn( modifier = Modifier.fillMaxSize(), - contentPadding = androidx.compose.foundation.layout.PaddingValues( - horizontal = 16.dp, - vertical = 16.dp - ), + contentPadding = PaddingValues(horizontal = 16.dp, vertical = 16.dp), verticalArrangement = Arrangement.spacedBy(16.dp) ) { item { diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/onboarding/CompleteStep.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/onboarding/CompleteStep.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/onboarding/CompleteStep.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/onboarding/CompleteStep.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/onboarding/FamilyInviteStep.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/onboarding/FamilyInviteStep.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/onboarding/FamilyInviteStep.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/onboarding/FamilyInviteStep.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/onboarding/OnboardingScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/onboarding/OnboardingScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/onboarding/OnboardingScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/onboarding/OnboardingScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/onboarding/PlanSelectionStep.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/onboarding/PlanSelectionStep.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/onboarding/PlanSelectionStep.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/onboarding/PlanSelectionStep.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/onboarding/WatchlistSetupStep.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/onboarding/WatchlistSetupStep.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/onboarding/WatchlistSetupStep.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/onboarding/WatchlistSetupStep.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/services/DarkWatchScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/services/DarkWatchScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/services/DarkWatchScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/services/DarkWatchScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/services/HomeTitleScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/services/HomeTitleScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/services/HomeTitleScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/services/HomeTitleScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/services/RemoveBrokersScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/services/RemoveBrokersScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/services/RemoveBrokersScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/services/RemoveBrokersScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/services/SpamShieldScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/services/SpamShieldScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/services/SpamShieldScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/services/SpamShieldScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/services/VoicePrintScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/services/VoicePrintScreen.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/services/VoicePrintScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/services/VoicePrintScreen.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/settings/SettingsScreen.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/settings/SettingsScreen.kt similarity index 98% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/settings/SettingsScreen.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/settings/SettingsScreen.kt index 9ba1d78..70c61e9 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/screens/settings/SettingsScreen.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/ui/screens/settings/SettingsScreen.kt @@ -197,10 +197,10 @@ private fun AccountSection(user: com.shieldai.android.data.model.User) { verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(16.dp) ) { - ShieldAvatar( - name = user.name, - avatarUrl = user.avatarUrl - ) + ShieldAvatar( + name = user.name, + imageUrl = user.avatarUrl + ) Column { Text( text = user.name, diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/theme/Color.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/theme/Color.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/theme/Color.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/theme/Color.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/theme/Shape.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/theme/Shape.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/theme/Shape.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/theme/Shape.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/theme/Theme.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/theme/Theme.kt similarity index 99% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/theme/Theme.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/theme/Theme.kt index 827fb99..3028dc0 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/theme/Theme.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/ui/theme/Theme.kt @@ -57,7 +57,7 @@ private val DarkColorScheme = darkColorScheme( ) @Composable -fun ShieldAITheme( +fun KordantTheme( darkTheme: Boolean = isSystemInDarkTheme(), dynamicColor: Boolean = false, content: @Composable () -> Unit diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/ui/theme/Type.kt b/android/Kordant/app/src/main/java/com/shieldai/android/ui/theme/Type.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/ui/theme/Type.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/ui/theme/Type.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/util/PasswordStrength.kt b/android/Kordant/app/src/main/java/com/shieldai/android/util/PasswordStrength.kt similarity index 100% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/util/PasswordStrength.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/util/PasswordStrength.kt diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/AlertDetailViewModel.kt b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/AlertDetailViewModel.kt similarity index 94% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/AlertDetailViewModel.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/AlertDetailViewModel.kt index 1d130e1..7743031 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/AlertDetailViewModel.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/AlertDetailViewModel.kt @@ -3,7 +3,7 @@ package com.shieldai.android.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.shieldai.android.ShieldAIApp +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 @@ -25,7 +25,7 @@ class AlertDetailViewModel : ViewModel() { val uiState: StateFlow = _uiState.asStateFlow() private val alertRepo: AlertRepository by lazy { - RepositoryModule.provideAlertRepository(ShieldAIApp.instance) + RepositoryModule.provideAlertRepository(KordantApp.instance) } fun loadAlert(alertId: String) { @@ -78,7 +78,7 @@ class AlertDetailViewModel : ViewModel() { } } - private fun markAlertRead(alertId: String) { + private suspend fun markAlertRead(alertId: String) { alertRepo.markRead(alertId) } diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/AuthViewModel.kt b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/AuthViewModel.kt similarity index 98% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/AuthViewModel.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/AuthViewModel.kt index be8d5f8..0d33a14 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/AuthViewModel.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/AuthViewModel.kt @@ -3,7 +3,7 @@ package com.shieldai.android.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.shieldai.android.ShieldAIApp +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 @@ -188,7 +188,7 @@ class AuthViewModel( val Factory: ViewModelProvider.Factory = object : ViewModelProvider.Factory { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { - val app = ShieldAIApp.instance + val app = KordantApp.instance return AuthViewModel(app.authRepository) as T } } diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/DarkWatchViewModel.kt b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/DarkWatchViewModel.kt similarity index 96% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/DarkWatchViewModel.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/DarkWatchViewModel.kt index 4701c9b..e4c5dc1 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/DarkWatchViewModel.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/DarkWatchViewModel.kt @@ -3,7 +3,7 @@ package com.shieldai.android.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.shieldai.android.ShieldAIApp +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 @@ -26,7 +26,7 @@ class DarkWatchViewModel : ViewModel() { val uiState: StateFlow = _uiState.asStateFlow() private val repo: DarkWatchRepository by lazy { - RepositoryModule.provideDarkWatchRepository(ShieldAIApp.instance) + RepositoryModule.provideDarkWatchRepository(KordantApp.instance) } init { diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/DashboardViewModel.kt b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/DashboardViewModel.kt similarity index 92% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/DashboardViewModel.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/DashboardViewModel.kt index 823a3c9..f8b5598 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/DashboardViewModel.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/DashboardViewModel.kt @@ -3,7 +3,7 @@ package com.shieldai.android.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.shieldai.android.ShieldAIApp +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 @@ -35,22 +35,22 @@ class DashboardViewModel : ViewModel() { val uiState: StateFlow = _uiState.asStateFlow() private val alertRepo: AlertRepository by lazy { - RepositoryModule.provideAlertRepository(ShieldAIApp.instance) + RepositoryModule.provideAlertRepository(KordantApp.instance) } private val darkWatchRepo: DarkWatchRepository by lazy { - RepositoryModule.provideDarkWatchRepository(ShieldAIApp.instance) + RepositoryModule.provideDarkWatchRepository(KordantApp.instance) } private val voicePrintRepo: VoicePrintRepository by lazy { - RepositoryModule.provideVoicePrintRepository(ShieldAIApp.instance) + RepositoryModule.provideVoicePrintRepository(KordantApp.instance) } private val spamShieldRepo: SpamShieldRepository by lazy { - RepositoryModule.provideSpamShieldRepository(ShieldAIApp.instance) + RepositoryModule.provideSpamShieldRepository(KordantApp.instance) } private val homeTitleRepo: HomeTitleRepository by lazy { - RepositoryModule.provideHomeTitleRepository(ShieldAIApp.instance) + RepositoryModule.provideHomeTitleRepository(KordantApp.instance) } private val removeBrokersRepo: RemoveBrokersRepository by lazy { - RepositoryModule.provideRemoveBrokersRepository(ShieldAIApp.instance) + RepositoryModule.provideRemoveBrokersRepository(KordantApp.instance) } init { diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/HomeTitleViewModel.kt b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/HomeTitleViewModel.kt similarity index 96% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/HomeTitleViewModel.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/HomeTitleViewModel.kt index 2894bca..3f81e60 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/HomeTitleViewModel.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/HomeTitleViewModel.kt @@ -3,7 +3,7 @@ package com.shieldai.android.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.shieldai.android.ShieldAIApp +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 @@ -24,7 +24,7 @@ class HomeTitleViewModel : ViewModel() { val uiState: StateFlow = _uiState.asStateFlow() private val repo: HomeTitleRepository by lazy { - RepositoryModule.provideHomeTitleRepository(ShieldAIApp.instance) + RepositoryModule.provideHomeTitleRepository(KordantApp.instance) } init { diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/RemoveBrokersViewModel.kt b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/RemoveBrokersViewModel.kt similarity index 96% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/RemoveBrokersViewModel.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/RemoveBrokersViewModel.kt index 2c03e57..1f73a2e 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/RemoveBrokersViewModel.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/RemoveBrokersViewModel.kt @@ -3,7 +3,7 @@ package com.shieldai.android.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.shieldai.android.ShieldAIApp +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 @@ -26,7 +26,7 @@ class RemoveBrokersViewModel : ViewModel() { val uiState: StateFlow = _uiState.asStateFlow() private val repo: RemoveBrokersRepository by lazy { - RepositoryModule.provideRemoveBrokersRepository(ShieldAIApp.instance) + RepositoryModule.provideRemoveBrokersRepository(KordantApp.instance) } init { diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/SettingsViewModel.kt b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/SettingsViewModel.kt similarity index 94% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/SettingsViewModel.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/SettingsViewModel.kt index 9068b1e..2761ca5 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/SettingsViewModel.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/SettingsViewModel.kt @@ -3,7 +3,7 @@ package com.shieldai.android.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.shieldai.android.ShieldAIApp +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 @@ -29,10 +29,10 @@ class SettingsViewModel : ViewModel() { val uiState: StateFlow = _uiState.asStateFlow() private val userRepo: UserRepository by lazy { - RepositoryModule.provideUserRepository(ShieldAIApp.instance) + RepositoryModule.provideUserRepository(KordantApp.instance) } private val subscriptionRepo: SubscriptionRepository by lazy { - RepositoryModule.provideSubscriptionRepository(ShieldAIApp.instance) + RepositoryModule.provideSubscriptionRepository(KordantApp.instance) } init { diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/SpamShieldViewModel.kt b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/SpamShieldViewModel.kt similarity index 96% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/SpamShieldViewModel.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/SpamShieldViewModel.kt index b47c17e..2d626b7 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/SpamShieldViewModel.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/SpamShieldViewModel.kt @@ -3,7 +3,7 @@ package com.shieldai.android.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.shieldai.android.ShieldAIApp +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 @@ -27,7 +27,7 @@ class SpamShieldViewModel : ViewModel() { val uiState: StateFlow = _uiState.asStateFlow() private val repo: SpamShieldRepository by lazy { - RepositoryModule.provideSpamShieldRepository(ShieldAIApp.instance) + RepositoryModule.provideSpamShieldRepository(KordantApp.instance) } init { diff --git a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/VoicePrintViewModel.kt b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/VoicePrintViewModel.kt similarity index 96% rename from android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/VoicePrintViewModel.kt rename to android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/VoicePrintViewModel.kt index c642860..b1df965 100644 --- a/android/ShieldAI/app/src/main/java/com/shieldai/android/viewmodel/VoicePrintViewModel.kt +++ b/android/Kordant/app/src/main/java/com/shieldai/android/viewmodel/VoicePrintViewModel.kt @@ -3,7 +3,7 @@ package com.shieldai.android.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope -import com.shieldai.android.ShieldAIApp +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 @@ -24,7 +24,7 @@ class VoicePrintViewModel : ViewModel() { val uiState: StateFlow = _uiState.asStateFlow() private val repo: VoicePrintRepository by lazy { - RepositoryModule.provideVoicePrintRepository(ShieldAIApp.instance) + RepositoryModule.provideVoicePrintRepository(KordantApp.instance) } init { diff --git a/android/ShieldAI/app/src/main/res/drawable/ic_account_box.xml b/android/Kordant/app/src/main/res/drawable/ic_account_box.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/drawable/ic_account_box.xml rename to android/Kordant/app/src/main/res/drawable/ic_account_box.xml diff --git a/android/ShieldAI/app/src/main/res/drawable/ic_alerts.xml b/android/Kordant/app/src/main/res/drawable/ic_alerts.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/drawable/ic_alerts.xml rename to android/Kordant/app/src/main/res/drawable/ic_alerts.xml diff --git a/android/ShieldAI/app/src/main/res/drawable/ic_dashboard.xml b/android/Kordant/app/src/main/res/drawable/ic_dashboard.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/drawable/ic_dashboard.xml rename to android/Kordant/app/src/main/res/drawable/ic_dashboard.xml diff --git a/android/ShieldAI/app/src/main/res/drawable/ic_home.xml b/android/Kordant/app/src/main/res/drawable/ic_home.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/drawable/ic_home.xml rename to android/Kordant/app/src/main/res/drawable/ic_home.xml diff --git a/android/ShieldAI/app/src/main/res/drawable/ic_launcher_background.xml b/android/Kordant/app/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/drawable/ic_launcher_background.xml rename to android/Kordant/app/src/main/res/drawable/ic_launcher_background.xml diff --git a/android/ShieldAI/app/src/main/res/drawable/ic_launcher_foreground.xml b/android/Kordant/app/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/drawable/ic_launcher_foreground.xml rename to android/Kordant/app/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/android/ShieldAI/app/src/main/res/drawable/ic_services.xml b/android/Kordant/app/src/main/res/drawable/ic_services.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/drawable/ic_services.xml rename to android/Kordant/app/src/main/res/drawable/ic_services.xml diff --git a/android/ShieldAI/app/src/main/res/drawable/ic_settings.xml b/android/Kordant/app/src/main/res/drawable/ic_settings.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/drawable/ic_settings.xml rename to android/Kordant/app/src/main/res/drawable/ic_settings.xml diff --git a/android/ShieldAI/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/android/Kordant/app/src/main/res/mipmap-anydpi/ic_launcher.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-anydpi/ic_launcher.xml rename to android/Kordant/app/src/main/res/mipmap-anydpi/ic_launcher.xml diff --git a/android/ShieldAI/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/android/Kordant/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml rename to android/Kordant/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml diff --git a/android/ShieldAI/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/android/Kordant/app/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-hdpi/ic_launcher.webp rename to android/Kordant/app/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/android/ShieldAI/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/android/Kordant/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to android/Kordant/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/android/ShieldAI/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/android/Kordant/app/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-mdpi/ic_launcher.webp rename to android/Kordant/app/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/android/ShieldAI/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/android/Kordant/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to android/Kordant/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/android/ShieldAI/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/android/Kordant/app/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to android/Kordant/app/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/android/ShieldAI/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/android/Kordant/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to android/Kordant/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/android/ShieldAI/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/android/Kordant/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to android/Kordant/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/android/ShieldAI/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/android/Kordant/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to android/Kordant/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/android/ShieldAI/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/android/Kordant/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to android/Kordant/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/android/ShieldAI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/android/Kordant/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from android/ShieldAI/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to android/Kordant/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/android/ShieldAI/app/src/main/res/values/colors.xml b/android/Kordant/app/src/main/res/values/colors.xml similarity index 100% rename from android/ShieldAI/app/src/main/res/values/colors.xml rename to android/Kordant/app/src/main/res/values/colors.xml diff --git a/android/ShieldAI/app/src/main/res/values/strings.xml b/android/Kordant/app/src/main/res/values/strings.xml similarity index 73% rename from android/ShieldAI/app/src/main/res/values/strings.xml rename to android/Kordant/app/src/main/res/values/strings.xml index 00849b9..7bb8eef 100644 --- a/android/ShieldAI/app/src/main/res/values/strings.xml +++ b/android/Kordant/app/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - ShieldAI + Kordant REPLACE_WITH_YOUR_WEB_CLIENT_ID diff --git a/android/Kordant/app/src/main/res/values/themes.xml b/android/Kordant/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..2fe08c7 --- /dev/null +++ b/android/Kordant/app/src/main/res/values/themes.xml @@ -0,0 +1,4 @@ + + + -

ShieldAI Settings

+

Kordant Settings

API Configuration

- +
diff --git a/browser-ext/src/options/options.ts b/browser-ext/src/options/options.ts index 2a7d5ee..d7f08ed 100644 --- a/browser-ext/src/options/options.ts +++ b/browser-ext/src/options/options.ts @@ -59,7 +59,7 @@ linkDeviceBtn.addEventListener("click", async () => { ); const result = await client.extension.linkDevice.mutate({ extensionId, - deviceName: "ShieldAI Browser Extension", + deviceName: "Kordant Browser Extension", }); linkStatusEl.className = "status success"; linkStatusEl.textContent = `Device linked! (ID: ${result.deviceId.slice(0, 8)}...)`; diff --git a/browser-ext/src/popup/popup.html b/browser-ext/src/popup/popup.html index ffcb408..64d4e8e 100644 --- a/browser-ext/src/popup/popup.html +++ b/browser-ext/src/popup/popup.html @@ -3,7 +3,7 @@ - ShieldAI + Kordant