feat(android): establish Jetpack Compose foundation with navigation and shared theme

- Set up project namespace to com.shieldai.android
- Add navigation-compose dependency
- Create ShieldAI brand color palette (Color.kt) with light/dark tokens
- Add Material3 Typography scale (Type.kt) with all text styles
- Create Shape.kt with small/medium/large rounded corners
- Implement ShieldAITheme with light/dark color schemes and optional dynamic color
- Define Screen sealed class with all destinations (Dashboard, Services, Alerts, Settings, Account, Login, Signup, Onboarding, ServiceDetail)
- Create NavGraph with composable routes and placeholder screens
- Implement BottomNavBar with 5 navigation items with icons
- Create AppNavigation with Scaffold, NavHost, and bottom nav visibility logic
- Add ShieldAIApp Application class and updated MainActivity
- Create vector drawables for bottom nav icons
- Add test files under new package
- Remove old template package (com.mikefreno.shieldai)
This commit is contained in:
2026-05-25 20:08:42 -04:00
parent 78c63f018c
commit 35bc5f4af1
28 changed files with 520 additions and 249 deletions

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32V4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z" />
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z" />
</vector>

View File

@@ -1,9 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M480,839L439,802Q333.23,704.88 264.12,634.44Q195,564 154,508.5Q113,453 96.5,408Q80,363 80,317Q80,226.85 140.5,166.42Q201,106 290,106Q347,106 395.5,133Q444,160 480,211Q522,157 569,131.5Q616,106 670,106Q759,106 819.5,166.42Q880,226.85 880,317Q880,363 863.5,408Q847,453 806,508.5Q765,564 695.88,634.44Q626.77,704.88 521,802L480,839ZM480,760Q581.24,667 646.62,600.5Q712,534 750.5,484Q789,434 804.5,394.86Q820,355.73 820,317.14Q820,251 778,208.5Q736,166 670.22,166Q618.7,166 574.85,197.5Q531,229 504,286L504,286L455,286L455,286Q429,230 385.15,198Q341.3,166 289.78,166Q224,166 182,208.5Q140,251 140,317.32Q140,356 155.5,395.5Q171,435 209.5,485.5Q248,536 314,602Q380,668 480,760ZM480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463L480,463L480,463L480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Q480,463 480,463Z" />
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,6c1.1,0 2,0.9 2,2s-0.9,2 -2,2 -2,-0.9 -2,-2 0.9,-2 2,-2zM16,17H8v-1c0,-1.33 2.67,-2 4,-2s4,0.67 4,2v1z" />
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M19.14,12.94c0.04,-0.3 0.06,-0.61 0.06,-0.94c0,-0.32 -0.02,-0.64 -0.07,-0.94l2.03,-1.58c0.18,-0.14 0.23,-0.41 0.12,-0.61l-1.92,-3.32c-0.12,-0.22 -0.37,-0.29 -0.59,-0.22l-2.39,0.96c-0.5,-0.38 -1.03,-0.7 -1.62,-0.94L14.4,2.81c-0.04,-0.24 -0.24,-0.41 -0.48,-0.41h-3.84c-0.24,0 -0.43,0.17 -0.47,0.41L9.25,5.35C8.66,5.59 8.12,5.92 7.63,6.29L5.24,5.33c-0.22,-0.08 -0.47,0 -0.59,0.22L2.74,8.87C2.62,9.08 2.66,9.34 2.86,9.48l2.03,1.58C4.84,11.36 4.8,11.69 4.8,12s0.02,0.64 0.07,0.94l-2.03,1.58c-0.18,0.14 -0.23,0.41 -0.12,0.61l1.92,3.32c0.12,0.22 0.37,0.29 0.59,0.22l2.39,-0.96c0.5,0.38 1.03,0.7 1.62,0.94l0.36,2.54c0.05,0.24 0.24,0.41 0.48,0.41h3.84c0.24,0 0.44,-0.17 0.47,-0.41l0.36,-2.54c0.59,-0.24 1.13,-0.56 1.62,-0.94l2.39,0.96c0.22,0.08 0.47,0 0.59,-0.22l1.92,-3.32c0.12,-0.22 0.07,-0.47 -0.12,-0.61L19.14,12.94zM12,15.6c-1.98,0 -3.6,-1.62 -3.6,-3.6s1.62,-3.6 3.6,-3.6 3.6,1.62 3.6,3.6 -1.62,3.6 -3.6,3.6z" />
</vector>

View File

@@ -1,10 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources>
<color name="brand_primary">#FF4F46E5</color>
<color name="brand_primary_light">#FF818CF8</color>
<color name="brand_accent">#FF06B6D4</color>
<color name="bg_primary">#FFFFFFFF</color>
<color name="bg_primary_dark">#FF0F172A</color>
<color name="text_primary">#FF0F172A</color>
<color name="text_primary_dark">#FFF1F5F9</color>
<color name="success">#FF22C55E</color>
<color name="warning">#FFF59E0B</color>
<color name="error">#FFEF4444</color>
<color name="info">#FF3B82F6</color>
</resources>

View File

@@ -1,3 +1,3 @@
<resources>
<string name="app_name">ShieldAI</string>
</resources>
</resources>

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.ShieldAI" parent="android:Theme.Material.Light.NoActionBar" />
</resources>
</resources>