Skip to content

Commit 1bfca19

Browse files
authored
Merge pull request #357 from cbalster/migrate_to_kotlin_and_compose
Migrate to kotlin and compose
2 parents df05be2 + 66d663b commit 1bfca19

File tree

7 files changed

+243
-1
lines changed

7 files changed

+243
-1
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
/captures
1010
/projectFilesBackup*
1111
/keystore.properties
12+
/.kotlin

app/build.gradle.kts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import java.io.FileInputStream
44
plugins {
55
alias(libs.plugins.android.application)
66
alias(libs.plugins.unmock)
7+
alias(libs.plugins.kotlin.android)
8+
alias(libs.plugins.kotlin.compose)
79
}
810

911
// Place actual signing configuration in "keystore.properties"
@@ -74,9 +76,14 @@ android {
7476
targetCompatibility = JavaVersion.VERSION_11
7577
}
7678

79+
kotlinOptions {
80+
jvmTarget = "11"
81+
}
82+
7783
buildFeatures {
7884
viewBinding = true
7985
buildConfig = true
86+
compose = true
8087
}
8188

8289
lint {
@@ -99,7 +106,10 @@ dependencies {
99106
implementation(libs.okhttp)
100107
implementation(libs.typed.preferences)
101108
implementation(libs.material)
109+
implementation(libs.androidx.ui.tooling.preview)
110+
implementation(libs.androidx.material3)
102111
implementation(libs.androidx.core)
112+
implementation(libs.androidx.core.ktx)
103113
implementation(libs.androidx.appcompat)
104114
implementation(libs.androidx.annotation)
105115
implementation(libs.androidx.exifinterface)
@@ -109,6 +119,7 @@ dependencies {
109119
annotationProcessor(libs.dagger.compiler)
110120

111121
debugImplementation(libs.leakcanary)
122+
debugImplementation(libs.androidx.ui.tooling)
112123

113124
testImplementation(libs.junit)
114125
testImplementation(libs.com.google.truth)
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package de.stephanlindauer.criticalmaps.ui.theme
2+
3+
import androidx.compose.ui.graphics.Color
4+
5+
val primaryLight = Color(0xFF111111)
6+
val onPrimaryLight = Color(0xFFFFFFFF)
7+
val primaryContainerLight = Color(0xFF262626)
8+
val onPrimaryContainerLight = Color(0xFF8E8D8C)
9+
val secondaryLight = Color(0xFF5C5B5C)
10+
val onSecondaryLight = Color(0xFFFFFFFF)
11+
val secondaryContainerLight = Color(0xFF757474)
12+
val onSecondaryContainerLight = Color(0xFFFEFBFB)
13+
val tertiaryLight = Color(0xFF715D00)
14+
val onTertiaryLight = Color(0xFFFFFFFF)
15+
val tertiaryContainerLight = Color(0xFFFFD733)
16+
val onTertiaryContainerLight = Color(0xFF725D00)
17+
val errorLight = Color(0xFF91000A)
18+
val onErrorLight = Color(0xFFFFFFFF)
19+
val errorContainerLight = Color(0xFFB71C1C)
20+
val onErrorContainerLight = Color(0xFFFFCAC4)
21+
val backgroundLight = Color(0xFFFDF8F8)
22+
val onBackgroundLight = Color(0xFF1C1B1B)
23+
val surfaceLight = Color(0xFFFDF8F8)
24+
val onSurfaceLight = Color(0xFF1C1B1B)
25+
val surfaceVariantLight = Color(0xFFE0E3E3)
26+
val onSurfaceVariantLight = Color(0xFF444748)
27+
val outlineLight = Color(0xFF747878)
28+
val outlineVariantLight = Color(0xFFC4C7C7)
29+
val scrimLight = Color(0xFF000000)
30+
val inverseSurfaceLight = Color(0xFF313030)
31+
val inverseOnSurfaceLight = Color(0xFFF4F0EF)
32+
val inversePrimaryLight = Color(0xFFC8C6C5)
33+
val surfaceDimLight = Color(0xFFDDD9D8)
34+
val surfaceBrightLight = Color(0xFFFDF8F8)
35+
val surfaceContainerLowestLight = Color(0xFFFFFFFF)
36+
val surfaceContainerLowLight = Color(0xFFF7F3F2)
37+
val surfaceContainerLight = Color(0xFFF1EDEC)
38+
val surfaceContainerHighLight = Color(0xFFEBE7E6)
39+
val surfaceContainerHighestLight = Color(0xFFE5E2E1)
40+
41+
val primaryDark = Color(0xFFC8C6C5)
42+
val onPrimaryDark = Color(0xFF303030)
43+
val primaryContainerDark = Color(0xFF262626)
44+
val onPrimaryContainerDark = Color(0xFF8E8D8C)
45+
val secondaryDark = Color(0xFFC8C6C6)
46+
val onSecondaryDark = Color(0xFF303030)
47+
val secondaryContainerDark = Color(0xFF757474)
48+
val onSecondaryContainerDark = Color(0xFFFEFBFB)
49+
val tertiaryDark = Color(0xFFFFF6E2)
50+
val onTertiaryDark = Color(0xFF3B2F00)
51+
val tertiaryContainerDark = Color(0xFFFFD733)
52+
val onTertiaryContainerDark = Color(0xFF725D00)
53+
val errorDark = Color(0xFFFFB4AB)
54+
val onErrorDark = Color(0xFF690005)
55+
val errorContainerDark = Color(0xFFB71C1C)
56+
val onErrorContainerDark = Color(0xFFFFCAC4)
57+
val backgroundDark = Color(0xFF141313)
58+
val onBackgroundDark = Color(0xFFE5E2E1)
59+
val surfaceDark = Color(0xFF141313)
60+
val onSurfaceDark = Color(0xFFE5E2E1)
61+
val surfaceVariantDark = Color(0xFF444748)
62+
val onSurfaceVariantDark = Color(0xFFC4C7C7)
63+
val outlineDark = Color(0xFF8E9192)
64+
val outlineVariantDark = Color(0xFF444748)
65+
val scrimDark = Color(0xFF000000)
66+
val inverseSurfaceDark = Color(0xFFE5E2E1)
67+
val inverseOnSurfaceDark = Color(0xFF313030)
68+
val inversePrimaryDark = Color(0xFF5F5E5E)
69+
val surfaceDimDark = Color(0xFF141313)
70+
val surfaceBrightDark = Color(0xFF3A3939)
71+
val surfaceContainerLowestDark = Color(0xFF0E0E0E)
72+
val surfaceContainerLowDark = Color(0xFF1C1B1B)
73+
val surfaceContainerDark = Color(0xFF201F1F)
74+
val surfaceContainerHighDark = Color(0xFF2B2A2A)
75+
val surfaceContainerHighestDark = Color(0xFF353434)
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package de.stephanlindauer.criticalmaps.ui.theme
2+
3+
import android.os.Build
4+
import androidx.compose.foundation.isSystemInDarkTheme
5+
import androidx.compose.material3.MaterialTheme
6+
import androidx.compose.material3.lightColorScheme
7+
import androidx.compose.material3.darkColorScheme
8+
import androidx.compose.material3.dynamicDarkColorScheme
9+
import androidx.compose.material3.dynamicLightColorScheme
10+
import androidx.compose.runtime.Composable
11+
import androidx.compose.runtime.Immutable
12+
import androidx.compose.ui.graphics.Color
13+
import androidx.compose.ui.platform.LocalContext
14+
15+
private val lightScheme = lightColorScheme(
16+
primary = primaryLight,
17+
onPrimary = onPrimaryLight,
18+
primaryContainer = primaryContainerLight,
19+
onPrimaryContainer = onPrimaryContainerLight,
20+
secondary = secondaryLight,
21+
onSecondary = onSecondaryLight,
22+
secondaryContainer = secondaryContainerLight,
23+
onSecondaryContainer = onSecondaryContainerLight,
24+
tertiary = tertiaryLight,
25+
onTertiary = onTertiaryLight,
26+
tertiaryContainer = tertiaryContainerLight,
27+
onTertiaryContainer = onTertiaryContainerLight,
28+
error = errorLight,
29+
onError = onErrorLight,
30+
errorContainer = errorContainerLight,
31+
onErrorContainer = onErrorContainerLight,
32+
background = backgroundLight,
33+
onBackground = onBackgroundLight,
34+
surface = surfaceLight,
35+
onSurface = onSurfaceLight,
36+
surfaceVariant = surfaceVariantLight,
37+
onSurfaceVariant = onSurfaceVariantLight,
38+
outline = outlineLight,
39+
outlineVariant = outlineVariantLight,
40+
scrim = scrimLight,
41+
inverseSurface = inverseSurfaceLight,
42+
inverseOnSurface = inverseOnSurfaceLight,
43+
inversePrimary = inversePrimaryLight,
44+
surfaceDim = surfaceDimLight,
45+
surfaceBright = surfaceBrightLight,
46+
surfaceContainerLowest = surfaceContainerLowestLight,
47+
surfaceContainerLow = surfaceContainerLowLight,
48+
surfaceContainer = surfaceContainerLight,
49+
surfaceContainerHigh = surfaceContainerHighLight,
50+
surfaceContainerHighest = surfaceContainerHighestLight,
51+
)
52+
53+
private val darkScheme = darkColorScheme(
54+
primary = primaryDark,
55+
onPrimary = onPrimaryDark,
56+
primaryContainer = primaryContainerDark,
57+
onPrimaryContainer = onPrimaryContainerDark,
58+
secondary = secondaryDark,
59+
onSecondary = onSecondaryDark,
60+
secondaryContainer = secondaryContainerDark,
61+
onSecondaryContainer = onSecondaryContainerDark,
62+
tertiary = tertiaryDark,
63+
onTertiary = onTertiaryDark,
64+
tertiaryContainer = tertiaryContainerDark,
65+
onTertiaryContainer = onTertiaryContainerDark,
66+
error = errorDark,
67+
onError = onErrorDark,
68+
errorContainer = errorContainerDark,
69+
onErrorContainer = onErrorContainerDark,
70+
background = backgroundDark,
71+
onBackground = onBackgroundDark,
72+
surface = surfaceDark,
73+
onSurface = onSurfaceDark,
74+
surfaceVariant = surfaceVariantDark,
75+
onSurfaceVariant = onSurfaceVariantDark,
76+
outline = outlineDark,
77+
outlineVariant = outlineVariantDark,
78+
scrim = scrimDark,
79+
inverseSurface = inverseSurfaceDark,
80+
inverseOnSurface = inverseOnSurfaceDark,
81+
inversePrimary = inversePrimaryDark,
82+
surfaceDim = surfaceDimDark,
83+
surfaceBright = surfaceBrightDark,
84+
surfaceContainerLowest = surfaceContainerLowestDark,
85+
surfaceContainerLow = surfaceContainerLowDark,
86+
surfaceContainer = surfaceContainerDark,
87+
surfaceContainerHigh = surfaceContainerHighDark,
88+
surfaceContainerHighest = surfaceContainerHighestDark,
89+
)
90+
91+
@Composable
92+
fun AppTheme(
93+
darkTheme: Boolean = isSystemInDarkTheme(),
94+
dynamicColor: Boolean = false,
95+
content: @Composable() () -> Unit
96+
) {
97+
98+
val colorScheme = darkScheme /*when {
99+
dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
100+
val context = LocalContext.current
101+
if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
102+
}
103+
104+
darkTheme -> darkScheme
105+
else -> lightScheme
106+
}
107+
*/
108+
109+
MaterialTheme(
110+
colorScheme = colorScheme,
111+
typography = AppTypography,
112+
content = content
113+
)
114+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package de.stephanlindauer.criticalmaps.ui.theme
2+
3+
import androidx.compose.material3.Typography
4+
import androidx.compose.ui.text.font.FontFamily
5+
6+
val bodyFontFamily = FontFamily.Default
7+
8+
val displayFontFamily = FontFamily.Serif
9+
10+
// Default Material 3 typography values
11+
val baseline = Typography()
12+
13+
val AppTypography = Typography(
14+
displayLarge = baseline.displayLarge.copy(fontFamily = displayFontFamily),
15+
displayMedium = baseline.displayMedium.copy(fontFamily = displayFontFamily),
16+
displaySmall = baseline.displaySmall.copy(fontFamily = displayFontFamily),
17+
headlineLarge = baseline.headlineLarge.copy(fontFamily = displayFontFamily),
18+
headlineMedium = baseline.headlineMedium.copy(fontFamily = displayFontFamily),
19+
headlineSmall = baseline.headlineSmall.copy(fontFamily = displayFontFamily),
20+
titleLarge = baseline.titleLarge.copy(fontFamily = displayFontFamily),
21+
titleMedium = baseline.titleMedium.copy(fontFamily = displayFontFamily),
22+
titleSmall = baseline.titleSmall.copy(fontFamily = displayFontFamily),
23+
bodyLarge = baseline.bodyLarge.copy(fontFamily = bodyFontFamily),
24+
bodyMedium = baseline.bodyMedium.copy(fontFamily = bodyFontFamily),
25+
bodySmall = baseline.bodySmall.copy(fontFamily = bodyFontFamily),
26+
labelLarge = baseline.labelLarge.copy(fontFamily = bodyFontFamily),
27+
labelMedium = baseline.labelMedium.copy(fontFamily = bodyFontFamily),
28+
labelSmall = baseline.labelSmall.copy(fontFamily = bodyFontFamily),
29+
)

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
plugins {
22
alias(libs.plugins.android.application) apply false
33
alias(libs.plugins.unmock) apply false
4+
alias(libs.plugins.kotlin.android) apply false
5+
alias(libs.plugins.kotlin.compose) apply false
46
}

gradle/libs.versions.toml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ timber = "5.0.1"
77
okhttp = "5.3.2"
88
typedPreferences = "2.1.0"
99
material = "1.13.0"
10+
material3 = "1.4.0"
1011
core = "1.17.0"
1112
appcompat = "1.7.1"
1213
annotation = "1.9.1"
@@ -22,6 +23,9 @@ androidTest = "1.7.0"
2223
espressoCore = "3.7.0"
2324
agp = "8.13.2"
2425
unmock = "0.9.0"
26+
kotlin = "2.2.21"
27+
uiToolingPreview = "1.9.4"
28+
uiTooling = "1.9.4"
2529

2630
[libraries]
2731
otto = { group = "com.squareup", name = "otto", version.ref = "otto" }
@@ -31,7 +35,9 @@ timber = { group = "com.jakewharton.timber", name = "timber", version.ref = "tim
3135
okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }
3236
typed-preferences = { group = "info.metadude.android", name = "typed-preferences", version.ref = "typedPreferences" }
3337
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
38+
androidx-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material3" }
3439
androidx-core = { group = "androidx.core", name = "core", version.ref = "core" }
40+
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core" }
3541
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
3642
androidx-annotation = { group = "androidx.annotation", name = "annotation", version.ref = "annotation" }
3743
androidx-exifinterface = { group = "androidx.exifinterface", name = "exifinterface", version.ref = "exifinterface" }
@@ -47,7 +53,11 @@ androidx-test-core = { group = "androidx.test", name = "core", version.ref = "an
4753
androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidTest" }
4854
androidx-test-rules = { group = "androidx.test", name = "rules", version.ref = "androidTest" }
4955
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
56+
androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview", version.ref = "uiToolingPreview" }
57+
androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "uiTooling" }
5058

5159
[plugins]
5260
android-application = { id = "com.android.application", version.ref = "agp" }
53-
unmock = {id = "de.mobilej.unmock", version.ref= "unmock"}
61+
unmock = {id = "de.mobilej.unmock", version.ref= "unmock"}
62+
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
63+
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }

0 commit comments

Comments
 (0)