Skip to content

Commit 5850711

Browse files
authored
Merge pull request #232 from GetStream/agp/8.4.1
Migrate to Kotlin 2.0.0 and Compose compiler plugin
2 parents 9bb039b + 76ae98a commit 5850711

File tree

15 files changed

+81
-77
lines changed

15 files changed

+81
-77
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ android {
3333
versionName = Configurations.versionName
3434
}
3535

36-
packagingOptions {
36+
packaging {
3737
resources {
3838
excludes.add("/META-INF/{AL2.0,LGPL2.1}")
3939
}

build-logic/convention/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ java {
1111

1212
dependencies {
1313
compileOnly(libs.android.gradlePlugin)
14+
compileOnly(libs.compose.compiler.gradlePlugin)
1415
compileOnly(libs.kotlin.gradlePlugin)
1516
compileOnly(libs.spotless.gradlePlugin)
1617
}
Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,27 @@
11
package io.getstream.whatsappclone
22

33
import com.android.build.api.dsl.CommonExtension
4-
import java.io.File
54
import org.gradle.api.Project
6-
import org.gradle.api.artifacts.VersionCatalogsExtension
7-
import org.gradle.kotlin.dsl.getByType
5+
import org.gradle.kotlin.dsl.assign
6+
import org.gradle.kotlin.dsl.configure
7+
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension
88

99
/**
1010
* Configure Compose-specific options
1111
*/
1212
internal fun Project.configureAndroidCompose(
13-
commonExtension: CommonExtension<*, *, *, *, *>,
13+
commonExtension: CommonExtension<*, *, *, *, *, *>,
1414
) {
15-
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
15+
pluginManager.apply("org.jetbrains.kotlin.plugin.compose")
1616

1717
commonExtension.apply {
1818
buildFeatures {
1919
compose = true
2020
}
21-
22-
composeOptions {
23-
kotlinCompilerExtensionVersion = libs.findVersion("androidxComposeCompiler").get().toString()
24-
}
25-
26-
kotlinOptions {
27-
freeCompilerArgs = freeCompilerArgs + buildComposeMetricsParameters()
28-
}
29-
}
30-
}
31-
32-
private fun Project.buildComposeMetricsParameters(): List<String> {
33-
val metricParameters = mutableListOf<String>()
34-
val enableMetricsProvider = project.providers.gradleProperty("enableComposeCompilerMetrics")
35-
val enableMetrics = (enableMetricsProvider.orNull == "true")
36-
if (enableMetrics) {
37-
val metricsFolder = File(project.buildDir, "compose-metrics")
38-
metricParameters.add("-P")
39-
metricParameters.add(
40-
"plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" + metricsFolder.absolutePath
41-
)
4221
}
4322

44-
val enableReportsProvider = project.providers.gradleProperty("enableComposeCompilerReports")
45-
val enableReports = (enableReportsProvider.orNull == "true")
46-
if (enableReports) {
47-
val reportsFolder = File(project.buildDir, "compose-reports")
48-
metricParameters.add("-P")
49-
metricParameters.add(
50-
"plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + reportsFolder.absolutePath
51-
)
23+
extensions.configure<ComposeCompilerGradlePluginExtension> {
24+
enableStrongSkippingMode = true
25+
reportsDestination = layout.buildDirectory.dir("compose_compiler")
5226
}
53-
return metricParameters.toList()
5427
}

build-logic/convention/src/main/kotlin/io/getstream/whatsappclone/KotlinAndroid.kt

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,14 @@ package io.getstream.whatsappclone
33
import com.android.build.api.dsl.CommonExtension
44
import org.gradle.api.JavaVersion
55
import org.gradle.api.Project
6-
import org.gradle.api.artifacts.VersionCatalogsExtension
76
import org.gradle.api.plugins.ExtensionAware
8-
import org.gradle.kotlin.dsl.dependencies
9-
import org.gradle.kotlin.dsl.getByType
107
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
118

129
/**
1310
* Configure base Kotlin with Android options
1411
*/
1512
internal fun Project.configureKotlinAndroid(
16-
commonExtension: CommonExtension<*, *, *, *, *>,
13+
commonExtension: CommonExtension<*, *, *, *, *, *>,
1714
) {
1815
commonExtension.apply {
1916
compileSdk = 34
@@ -25,7 +22,6 @@ internal fun Project.configureKotlinAndroid(
2522
compileOptions {
2623
sourceCompatibility = JavaVersion.VERSION_17
2724
targetCompatibility = JavaVersion.VERSION_17
28-
isCoreLibraryDesugaringEnabled = true
2925
}
3026

3127
lint {
@@ -50,14 +46,8 @@ internal fun Project.configureKotlinAndroid(
5046
jvmTarget = JavaVersion.VERSION_17.toString()
5147
}
5248
}
53-
54-
val libs = extensions.getByType<VersionCatalogsExtension>().named("libs")
55-
56-
dependencies {
57-
add("coreLibraryDesugaring", libs.findLibrary("android.desugarJdkLibs").get())
58-
}
5949
}
6050

61-
fun CommonExtension<*, *, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) {
51+
fun CommonExtension<*, *, *, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) {
6252
(this as ExtensionAware).extensions.configure("kotlinOptions", block)
6353
}

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ plugins {
1212
alias(libs.plugins.kotlin.jvm) apply false
1313
alias(libs.plugins.kotlin.serialization) apply false
1414
alias(libs.plugins.ksp) apply false
15+
alias(libs.plugins.compose.compiler) apply false
1516
alias(libs.plugins.hilt) apply false
1617
alias(libs.plugins.google.secrets) apply false
1718
alias(libs.plugins.spotless) apply false

features/calls/src/main/kotlin/io/getstream/whatsappclone/calls/WhatsAppCallHistory.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import androidx.compose.runtime.Composable
3232
import androidx.compose.ui.Alignment
3333
import androidx.compose.ui.Modifier
3434
import androidx.compose.ui.draw.clip
35+
import androidx.compose.ui.res.painterResource
3536
import androidx.compose.ui.unit.dp
3637
import com.skydoves.landscapist.glide.GlideImage
3738
import io.getstream.whatsappclone.designsystem.icon.WhatsAppIcons
@@ -57,7 +58,9 @@ fun WhatsAppCallHistory(
5758
.size(56.dp)
5859
.clip(CircleShape),
5960
imageModel = { whatsAppUser.picture },
60-
previewPlaceholder = io.getstream.whatsappclone.designsystem.R.drawable.placeholder
61+
previewPlaceholder = painterResource(
62+
id = io.getstream.whatsappclone.designsystem.R.drawable.placeholder
63+
)
6164
)
6265

6366
Column(modifier = Modifier.padding(start = 12.dp)) {

features/calls/src/main/kotlin/io/getstream/whatsappclone/calls/info/WhatsAppCallHistoryInfoBody.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import androidx.compose.material3.Text
2727
import androidx.compose.runtime.Composable
2828
import androidx.compose.ui.Modifier
2929
import androidx.compose.ui.draw.clip
30+
import androidx.compose.ui.res.painterResource
3031
import androidx.compose.ui.unit.dp
3132
import androidx.constraintlayout.compose.ConstraintLayout
3233
import androidx.hilt.navigation.compose.hiltViewModel
@@ -57,7 +58,7 @@ fun WhatsAppCallHistoryInfoBody(
5758
top.linkTo(parent.top)
5859
},
5960
imageModel = { whatsAppUser.picture },
60-
previewPlaceholder = R.drawable.placeholder
61+
previewPlaceholder = painterResource(id = R.drawable.placeholder)
6162
)
6263

6364
Text(

features/chats/src/main/kotlin/io/getstream/whatsappclone/chats/channels/WhatsAppChannels.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ fun WhatsAppChannels(
4242
Box(modifier = Modifier.fillMaxSize()) {
4343
ChannelsScreen(
4444
isShowingHeader = false,
45-
onItemClick = { channel ->
45+
onChannelClick = { channel ->
4646
whatsChannelsViewModel.navigateToMessages(channel.cid)
4747
}
4848
)
@@ -54,7 +54,7 @@ fun WhatsAppChannels(
5454
.size(58.dp),
5555
containerColor = GREEN500,
5656
shape = CircleShape,
57-
onClick = { }
57+
onClick = { whatsChannelsViewModel.createChannel() }
5858
) {
5959
Icon(
6060
imageVector = WhatsAppIcons.Message,

features/chats/src/main/kotlin/io/getstream/whatsappclone/chats/channels/WhatsChannelsViewModel.kt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,38 @@
1717
package io.getstream.whatsappclone.chats.channels
1818

1919
import androidx.lifecycle.ViewModel
20+
import androidx.lifecycle.viewModelScope
2021
import dagger.hilt.android.lifecycle.HiltViewModel
22+
import io.getstream.chat.android.client.ChatClient
2123
import io.getstream.whatsappclone.navigation.AppComposeNavigator
2224
import io.getstream.whatsappclone.navigation.WhatsAppScreens
2325
import javax.inject.Inject
26+
import kotlin.random.Random
27+
import kotlinx.coroutines.launch
2428

2529
@HiltViewModel
2630
class WhatsChannelsViewModel @Inject constructor(
27-
private val composeNavigator: AppComposeNavigator
31+
private val composeNavigator: AppComposeNavigator,
32+
private val chatClient: ChatClient
2833
) : ViewModel() {
2934

35+
private val user = chatClient.clientState.user
36+
3037
fun navigateToMessages(channelId: String) {
3138
composeNavigator.navigate(WhatsAppScreens.Messages.createRoute(channelId))
3239
}
40+
41+
fun createChannel() {
42+
viewModelScope.launch {
43+
val me = user.value
44+
if (me != null) {
45+
chatClient.createChannel(
46+
channelType = "messaging",
47+
channelId = "channel${Random.nextInt(10000)}",
48+
memberIds = listOf(me.id),
49+
extraData = mapOf()
50+
).await()
51+
}
52+
}
53+
}
3354
}

features/chats/src/main/kotlin/io/getstream/whatsappclone/chats/messages/WhatsAppMessageTopBar.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import androidx.compose.material3.Text
3030
import androidx.compose.runtime.Composable
3131
import androidx.compose.ui.Modifier
3232
import androidx.compose.ui.draw.clip
33+
import androidx.compose.ui.res.painterResource
3334
import androidx.compose.ui.tooling.preview.Preview
3435
import androidx.compose.ui.unit.dp
3536
import com.skydoves.landscapist.animation.crossfade.CrossfadePlugin
@@ -121,7 +122,9 @@ private fun WhatsAppMessageUserInfo(
121122
component = rememberImageComponent {
122123
+CrossfadePlugin()
123124
},
124-
previewPlaceholder = io.getstream.whatsappclone.designsystem.R.drawable.placeholder
125+
previewPlaceholder = painterResource(
126+
id = io.getstream.whatsappclone.designsystem.R.drawable.placeholder
127+
)
125128
)
126129

127130
Text(

0 commit comments

Comments
 (0)