Skip to content

Commit 58da593

Browse files
committed
feat: Add Material 3 theme and typography configuration
This commit introduces a complete Material 3 design system to the `core` module, including color schemes, typography using Google Fonts, and a base theme implementation. It also updates the `WeatherScreen` with a placeholder UI. - **Theme & Styling**: - Created `Color.kt` containing light, dark, and high-contrast color palettes. - Added `Theme.kt` with `AppTheme` implementation supporting dynamic color on Android 12+. - Added `Type.kt` configuring `AppTypography` using the "Oswald" font family via Google Fonts. - **Dependencies**: - Added `androidx.compose.ui:ui-text-google-fonts` (1.10.4) to `libs.versions.toml` and the `core` module. - **Feature Weather**: - Updated `WeatherScreen.kt` to include a centered "Weather Screen" text label within a `Column`. - **App Module**: - Modified `MainActivity.kt` with commented-out code prepared for the transition to Compose-based navigation and theming.
1 parent fff7b28 commit 58da593

File tree

8 files changed

+586
-1
lines changed

8 files changed

+586
-1
lines changed

app/src/main/java/com/warbler/MainActivity.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.warbler
33
import android.os.Bundle
44
import android.util.Log
55
import android.widget.Toast
6+
import androidx.activity.compose.setContent
67
import androidx.activity.result.contract.ActivityResultContracts
78
import androidx.appcompat.app.AppCompatActivity
89
import androidx.databinding.DataBindingUtil
@@ -18,7 +19,9 @@ import com.google.android.play.core.install.InstallStateUpdatedListener
1819
import com.google.android.play.core.install.model.AppUpdateType
1920
import com.google.android.play.core.install.model.InstallStatus
2021
import com.google.android.play.core.install.model.UpdateAvailability
22+
import com.warbler.core.theme.AppTheme
2123
import com.warbler.databinding.ActivityMainBinding
24+
import com.warbler.navigation.ApplicationNavigation
2225
import dagger.hilt.android.AndroidEntryPoint
2326
import kotlinx.coroutines.launch
2427

@@ -65,6 +68,12 @@ class MainActivity : AppCompatActivity() {
6568
.findFragmentById(R.id.nav_host_fragment_container) as NavHostFragment
6669

6770
navController = navHostFragment.navController
71+
72+
// setContent {
73+
// AppTheme {
74+
// ApplicationNavigation()
75+
// }
76+
// }
6877
}
6978

7079
private fun checkIsUpdateAvailable() {
0 Bytes
Binary file not shown.

core/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ dependencies {
2121
implementation(libs.lifecycle.extensions)
2222
implementation(libs.material3Compose)
2323
implementation(libs.material3View)
24+
implementation(libs.ui.text.google.fonts)
2425

2526
// Compose
2627
val composeBom = platform("androidx.compose:compose-bom:2025.09.01")
Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
package com.warbler.core.theme
2+
import androidx.compose.ui.graphics.Color
3+
4+
val primaryLight = Color(0xFF0D131C)
5+
val onPrimaryLight = Color(0xFFFFFFFF)
6+
val primaryContainerLight = Color(0xFF222831)
7+
val onPrimaryContainerLight = Color(0xFF898F9A)
8+
val secondaryLight = Color(0xFF232830)
9+
val onSecondaryLight = Color(0xFFFFFFFF)
10+
val secondaryContainerLight = Color(0xFF393E46)
11+
val onSecondaryContainerLight = Color(0xFFA4A9B2)
12+
val tertiaryLight = Color(0xFF775A00)
13+
val onTertiaryLight = Color(0xFFFFFFFF)
14+
val tertiaryContainerLight = Color(0xFFFFD369)
15+
val onTertiaryContainerLight = Color(0xFF775A00)
16+
val errorLight = Color(0xFFAE282E)
17+
val onErrorLight = Color(0xFFFFFFFF)
18+
val errorContainerLight = Color(0xFFD04144)
19+
val onErrorContainerLight = Color(0xFFFFFBFF)
20+
val backgroundLight = Color(0xFFFCF8F9)
21+
val onBackgroundLight = Color(0xFF1C1B1C)
22+
val surfaceLight = Color(0xFFFCF8F8)
23+
val onSurfaceLight = Color(0xFF1C1B1B)
24+
val surfaceVariantLight = Color(0xFFE0E3E3)
25+
val onSurfaceVariantLight = Color(0xFF444748)
26+
val outlineLight = Color(0xFF747878)
27+
val outlineVariantLight = Color(0xFFC4C7C8)
28+
val scrimLight = Color(0xFF000000)
29+
val inverseSurfaceLight = Color(0xFF313030)
30+
val inverseOnSurfaceLight = Color(0xFFF4F0EF)
31+
val inversePrimaryLight = Color(0xFFC1C7D3)
32+
val surfaceDimLight = Color(0xFFDDD9D9)
33+
val surfaceBrightLight = Color(0xFFFCF8F8)
34+
val surfaceContainerLowestLight = Color(0xFFFFFFFF)
35+
val surfaceContainerLowLight = Color(0xFFF6F3F2)
36+
val surfaceContainerLight = Color(0xFFF1EDEC)
37+
val surfaceContainerHighLight = Color(0xFFEBE7E7)
38+
val surfaceContainerHighestLight = Color(0xFFE5E2E1)
39+
40+
val primaryLightMediumContrast = Color(0xFF0D131C)
41+
val onPrimaryLightMediumContrast = Color(0xFFFFFFFF)
42+
val primaryContainerLightMediumContrast = Color(0xFF222831)
43+
val onPrimaryContainerLightMediumContrast = Color(0xFFAEB3BF)
44+
val secondaryLightMediumContrast = Color(0xFF232830)
45+
val onSecondaryLightMediumContrast = Color(0xFFFFFFFF)
46+
val secondaryContainerLightMediumContrast = Color(0xFF393E46)
47+
val onSecondaryContainerLightMediumContrast = Color(0xFFCDD2DC)
48+
val tertiaryLightMediumContrast = Color(0xFF463300)
49+
val onTertiaryLightMediumContrast = Color(0xFFFFFFFF)
50+
val tertiaryContainerLightMediumContrast = Color(0xFF896800)
51+
val onTertiaryContainerLightMediumContrast = Color(0xFFFFFFFF)
52+
val errorLightMediumContrast = Color(0xFF730011)
53+
val onErrorLightMediumContrast = Color(0xFFFFFFFF)
54+
val errorContainerLightMediumContrast = Color(0xFFC6393D)
55+
val onErrorContainerLightMediumContrast = Color(0xFFFFFFFF)
56+
val backgroundLightMediumContrast = Color(0xFFFCF8F9)
57+
val onBackgroundLightMediumContrast = Color(0xFF1C1B1C)
58+
val surfaceLightMediumContrast = Color(0xFFFCF8F8)
59+
val onSurfaceLightMediumContrast = Color(0xFF111111)
60+
val surfaceVariantLightMediumContrast = Color(0xFFE0E3E3)
61+
val onSurfaceVariantLightMediumContrast = Color(0xFF333738)
62+
val outlineLightMediumContrast = Color(0xFF4F5354)
63+
val outlineVariantLightMediumContrast = Color(0xFF6A6E6E)
64+
val scrimLightMediumContrast = Color(0xFF000000)
65+
val inverseSurfaceLightMediumContrast = Color(0xFF313030)
66+
val inverseOnSurfaceLightMediumContrast = Color(0xFFF4F0EF)
67+
val inversePrimaryLightMediumContrast = Color(0xFFC1C7D3)
68+
val surfaceDimLightMediumContrast = Color(0xFFC9C6C5)
69+
val surfaceBrightLightMediumContrast = Color(0xFFFCF8F8)
70+
val surfaceContainerLowestLightMediumContrast = Color(0xFFFFFFFF)
71+
val surfaceContainerLowLightMediumContrast = Color(0xFFF6F3F2)
72+
val surfaceContainerLightMediumContrast = Color(0xFFEBE7E7)
73+
val surfaceContainerHighLightMediumContrast = Color(0xFFDFDCDB)
74+
val surfaceContainerHighestLightMediumContrast = Color(0xFFD4D1D0)
75+
76+
val primaryLightHighContrast = Color(0xFF0D131C)
77+
val onPrimaryLightHighContrast = Color(0xFFFFFFFF)
78+
val primaryContainerLightHighContrast = Color(0xFF222831)
79+
val onPrimaryContainerLightHighContrast = Color(0xFFDADFEB)
80+
val secondaryLightHighContrast = Color(0xFF232830)
81+
val onSecondaryLightHighContrast = Color(0xFFFFFFFF)
82+
val secondaryContainerLightHighContrast = Color(0xFF393E46)
83+
val onSecondaryContainerLightHighContrast = Color(0xFFFFFFFF)
84+
val tertiaryLightHighContrast = Color(0xFF392A00)
85+
val onTertiaryLightHighContrast = Color(0xFFFFFFFF)
86+
val tertiaryContainerLightHighContrast = Color(0xFF5D4600)
87+
val onTertiaryContainerLightHighContrast = Color(0xFFFFFFFF)
88+
val errorLightHighContrast = Color(0xFF60000C)
89+
val onErrorLightHighContrast = Color(0xFFFFFFFF)
90+
val errorContainerLightHighContrast = Color(0xFF93111E)
91+
val onErrorContainerLightHighContrast = Color(0xFFFFFFFF)
92+
val backgroundLightHighContrast = Color(0xFFFCF8F9)
93+
val onBackgroundLightHighContrast = Color(0xFF1C1B1C)
94+
val surfaceLightHighContrast = Color(0xFFFCF8F8)
95+
val onSurfaceLightHighContrast = Color(0xFF000000)
96+
val surfaceVariantLightHighContrast = Color(0xFFE0E3E3)
97+
val onSurfaceVariantLightHighContrast = Color(0xFF000000)
98+
val outlineLightHighContrast = Color(0xFF292D2D)
99+
val outlineVariantLightHighContrast = Color(0xFF464A4A)
100+
val scrimLightHighContrast = Color(0xFF000000)
101+
val inverseSurfaceLightHighContrast = Color(0xFF313030)
102+
val inverseOnSurfaceLightHighContrast = Color(0xFFFFFFFF)
103+
val inversePrimaryLightHighContrast = Color(0xFFC1C7D3)
104+
val surfaceDimLightHighContrast = Color(0xFFBBB8B7)
105+
val surfaceBrightLightHighContrast = Color(0xFFFCF8F8)
106+
val surfaceContainerLowestLightHighContrast = Color(0xFFFFFFFF)
107+
val surfaceContainerLowLightHighContrast = Color(0xFFF4F0EF)
108+
val surfaceContainerLightHighContrast = Color(0xFFE5E2E1)
109+
val surfaceContainerHighLightHighContrast = Color(0xFFD7D4D3)
110+
val surfaceContainerHighestLightHighContrast = Color(0xFFC9C6C5)
111+
112+
val primaryDark = Color(0xFFC1C7D3)
113+
val onPrimaryDark = Color(0xFF2B313A)
114+
val primaryContainerDark = Color(0xFF222831)
115+
val onPrimaryContainerDark = Color(0xFF898F9A)
116+
val secondaryDark = Color(0xFFC2C7D0)
117+
val onSecondaryDark = Color(0xFF2C3138)
118+
val secondaryContainerDark = Color(0xFF393E46)
119+
val onSecondaryContainerDark = Color(0xFFA4A9B2)
120+
val tertiaryDark = Color(0xFFFFF3E1)
121+
val onTertiaryDark = Color(0xFF3F2E00)
122+
val tertiaryContainerDark = Color(0xFFFFD369)
123+
val onTertiaryContainerDark = Color(0xFF775A00)
124+
val errorDark = Color(0xFFFFB3AF)
125+
val onErrorDark = Color(0xFF68000E)
126+
val errorContainerDark = Color(0xFFF65D5D)
127+
val onErrorContainerDark = Color(0xFF4A0007)
128+
val backgroundDark = Color(0xFF131314)
129+
val onBackgroundDark = Color(0xFFE5E2E2)
130+
val surfaceDark = Color(0xFF141313)
131+
val onSurfaceDark = Color(0xFFE5E2E1)
132+
val surfaceVariantDark = Color(0xFF444748)
133+
val onSurfaceVariantDark = Color(0xFFC4C7C8)
134+
val outlineDark = Color(0xFF8E9192)
135+
val outlineVariantDark = Color(0xFF444748)
136+
val scrimDark = Color(0xFF000000)
137+
val inverseSurfaceDark = Color(0xFFE5E2E1)
138+
val inverseOnSurfaceDark = Color(0xFF313030)
139+
val inversePrimaryDark = Color(0xFF595F69)
140+
val surfaceDimDark = Color(0xFF141313)
141+
val surfaceBrightDark = Color(0xFF3A3939)
142+
val surfaceContainerLowestDark = Color(0xFF0E0E0E)
143+
val surfaceContainerLowDark = Color(0xFF1C1B1B)
144+
val surfaceContainerDark = Color(0xFF201F1F)
145+
val surfaceContainerHighDark = Color(0xFF2A2A2A)
146+
val surfaceContainerHighestDark = Color(0xFF353434)
147+
148+
val primaryDarkMediumContrast = Color(0xFFD7DCE9)
149+
val onPrimaryDarkMediumContrast = Color(0xFF20262F)
150+
val primaryContainerDarkMediumContrast = Color(0xFF8B919C)
151+
val onPrimaryContainerDarkMediumContrast = Color(0xFF000000)
152+
val secondaryDarkMediumContrast = Color(0xFFD8DCE6)
153+
val onSecondaryDarkMediumContrast = Color(0xFF21262D)
154+
val secondaryContainerDarkMediumContrast = Color(0xFF8C919A)
155+
val onSecondaryContainerDarkMediumContrast = Color(0xFF000000)
156+
val tertiaryDarkMediumContrast = Color(0xFFFFF3E1)
157+
val onTertiaryDarkMediumContrast = Color(0xFF3F2E00)
158+
val tertiaryContainerDarkMediumContrast = Color(0xFFFFD369)
159+
val onTertiaryContainerDarkMediumContrast = Color(0xFF543F00)
160+
val errorDarkMediumContrast = Color(0xFFFFD2CF)
161+
val onErrorDarkMediumContrast = Color(0xFF540009)
162+
val errorContainerDarkMediumContrast = Color(0xFFF65D5D)
163+
val onErrorContainerDarkMediumContrast = Color(0xFF000000)
164+
val backgroundDarkMediumContrast = Color(0xFF131314)
165+
val onBackgroundDarkMediumContrast = Color(0xFFE5E2E2)
166+
val surfaceDarkMediumContrast = Color(0xFF141313)
167+
val onSurfaceDarkMediumContrast = Color(0xFFFFFFFF)
168+
val surfaceVariantDarkMediumContrast = Color(0xFF444748)
169+
val onSurfaceVariantDarkMediumContrast = Color(0xFFDADDDD)
170+
val outlineDarkMediumContrast = Color(0xFFAFB2B3)
171+
val outlineVariantDarkMediumContrast = Color(0xFF8D9191)
172+
val scrimDarkMediumContrast = Color(0xFF000000)
173+
val inverseSurfaceDarkMediumContrast = Color(0xFFE5E2E1)
174+
val inverseOnSurfaceDarkMediumContrast = Color(0xFF2A2A2A)
175+
val inversePrimaryDarkMediumContrast = Color(0xFF424852)
176+
val surfaceDimDarkMediumContrast = Color(0xFF141313)
177+
val surfaceBrightDarkMediumContrast = Color(0xFF454444)
178+
val surfaceContainerLowestDarkMediumContrast = Color(0xFF070707)
179+
val surfaceContainerLowDarkMediumContrast = Color(0xFF1E1D1D)
180+
val surfaceContainerDarkMediumContrast = Color(0xFF282828)
181+
val surfaceContainerHighDarkMediumContrast = Color(0xFF333232)
182+
val surfaceContainerHighestDarkMediumContrast = Color(0xFF3E3D3D)
183+
184+
val primaryDarkHighContrast = Color(0xFFEBF0FD)
185+
val onPrimaryDarkHighContrast = Color(0xFF000000)
186+
val primaryContainerDarkHighContrast = Color(0xFFBDC3CF)
187+
val onPrimaryContainerDarkHighContrast = Color(0xFF060C14)
188+
val secondaryDarkHighContrast = Color(0xFFECF0FA)
189+
val onSecondaryDarkHighContrast = Color(0xFF000000)
190+
val secondaryContainerDarkHighContrast = Color(0xFFBEC3CD)
191+
val onSecondaryContainerDarkHighContrast = Color(0xFF070C12)
192+
val tertiaryDarkHighContrast = Color(0xFFFFF3E1)
193+
val onTertiaryDarkHighContrast = Color(0xFF000000)
194+
val tertiaryContainerDarkHighContrast = Color(0xFFFFD369)
195+
val onTertiaryContainerDarkHighContrast = Color(0xFF2E2100)
196+
val errorDarkHighContrast = Color(0xFFFFECEA)
197+
val onErrorDarkHighContrast = Color(0xFF000000)
198+
val errorContainerDarkHighContrast = Color(0xFFFFAEA9)
199+
val onErrorContainerDarkHighContrast = Color(0xFF220002)
200+
val backgroundDarkHighContrast = Color(0xFF131314)
201+
val onBackgroundDarkHighContrast = Color(0xFFE5E2E2)
202+
val surfaceDarkHighContrast = Color(0xFF141313)
203+
val onSurfaceDarkHighContrast = Color(0xFFFFFFFF)
204+
val surfaceVariantDarkHighContrast = Color(0xFF444748)
205+
val onSurfaceVariantDarkHighContrast = Color(0xFFFFFFFF)
206+
val outlineDarkHighContrast = Color(0xFFEEF0F1)
207+
val outlineVariantDarkHighContrast = Color(0xFFC0C3C4)
208+
val scrimDarkHighContrast = Color(0xFF000000)
209+
val inverseSurfaceDarkHighContrast = Color(0xFFE5E2E1)
210+
val inverseOnSurfaceDarkHighContrast = Color(0xFF000000)
211+
val inversePrimaryDarkHighContrast = Color(0xFF424852)
212+
val surfaceDimDarkHighContrast = Color(0xFF141313)
213+
val surfaceBrightDarkHighContrast = Color(0xFF51504F)
214+
val surfaceContainerLowestDarkHighContrast = Color(0xFF000000)
215+
val surfaceContainerLowDarkHighContrast = Color(0xFF201F1F)
216+
val surfaceContainerDarkHighContrast = Color(0xFF313030)
217+
val surfaceContainerHighDarkHighContrast = Color(0xFF3C3B3B)
218+
val surfaceContainerHighestDarkHighContrast = Color(0xFF474646)

0 commit comments

Comments
 (0)