Skip to content

Commit

Permalink
Mark stable classes and enable Compose Compiler reports (#2280)
Browse files Browse the repository at this point in the history
* Remove org.jetbrains.kotlinx:kotlinx-collections-immutable

* Enable stabilityConfigurationFile and reportsDestination

https://developer.android.com/develop/ui/compose/performance/stability/fix#configuration-file
  • Loading branch information
Goooler authored Sep 6, 2024
1 parent f401a40 commit a966f85
Show file tree
Hide file tree
Showing 11 changed files with 31 additions and 35 deletions.
6 changes: 5 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,11 @@ tasks.withType<MergeResources>().configureEach {
dependsOn(projects.svgProcessor.dependencyProject.tasks.named("run"))
}

composeCompiler {
stabilityConfigurationFile = layout.projectDirectory.file("compose_compiler_config.conf")
reportsDestination = layout.buildDirectory.dir("compose_build_reports")
}

licensee {
allow("Apache-2.0")
allow("MIT")
Expand All @@ -153,7 +158,6 @@ dependencies {
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.5")

implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2")
implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.8")

val hiltVersion = "2.52"
implementation("com.google.dagger:hilt-android:$hiltVersion")
Expand Down
7 changes: 7 additions & 0 deletions app/compose_compiler_config.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
kotlin.collections.*
kotlin.time.Duration

kotlinx.coroutines.CoroutineScope

// All models should be stable.
app.lawnchair.lawnicons.model.*
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package app.lawnchair.lawnicons.model

import kotlinx.collections.immutable.ImmutableList

/**
* Data class to hold information about icons.
*
* @property iconInfo A list of `IconInfo` objects.
* @property iconCount The total number of icons.
*/
data class IconInfoModel(
val iconInfo: ImmutableList<IconInfo>,
val iconCount: Int,
val iconInfo: List<IconInfo> = emptyList(),
val iconCount: Int = 0,
)
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package app.lawnchair.lawnicons.model

import kotlinx.collections.immutable.ImmutableList

data class IconRequest(
val label: String,
val componentName: String,
)

data class IconRequestModel(
val list: ImmutableList<IconRequest>,
val list: List<IconRequest>,
val iconCount: Int,
)
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ import app.lawnchair.lawnicons.model.splitByComponentName
import app.lawnchair.lawnicons.util.getIconInfo
import app.lawnchair.lawnicons.util.getSystemIconInfoAppfilter
import javax.inject.Inject
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
import kotlinx.collections.immutable.toPersistentList
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
Expand All @@ -36,10 +33,10 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep

private val coroutineScope = CoroutineScope(Dispatchers.IO)

private val _iconInfoModel = MutableStateFlow(IconInfoModel(persistentListOf(), 0))
private val _iconInfoModel = MutableStateFlow(IconInfoModel())
override val iconInfoModel = _iconInfoModel.asStateFlow()

private val _searchedIconInfoModel = MutableStateFlow(IconInfoModel(persistentListOf(), 0))
private val _searchedIconInfoModel = MutableStateFlow(IconInfoModel())
override val searchedIconInfoModel = _searchedIconInfoModel.asStateFlow()

override val iconRequestList = MutableStateFlow<IconRequestModel?>(value = null)
Expand All @@ -51,7 +48,7 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep
val iconCount = groupedIcons.size

_iconInfoModel.value = IconInfoModel(
iconInfo = iconList.toPersistentList(),
iconInfo = iconList,
iconCount = iconCount,
)
_searchedIconInfoModel.value = _iconInfoModel.value
Expand Down Expand Up @@ -92,7 +89,7 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep
),
).map { searchInfo ->
searchInfo.iconInfo
}.toPersistentList()
}

_searchedIconInfoModel.value = IconInfoModel(
iconCount = _searchedIconInfoModel.value.iconCount,
Expand Down Expand Up @@ -127,7 +124,7 @@ class IconRepositoryImpl @Inject constructor(application: Application) : IconRep
}

iconRequestList.value = IconRequestModel(
list = commonItems.toImmutableList(),
list = commonItems,
iconCount = commonItems.size,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,14 @@ import app.lawnchair.lawnicons.ui.util.PreviewLawnicons
import app.lawnchair.lawnicons.ui.util.SampleData
import app.lawnchair.lawnicons.ui.util.toPaddingValues
import app.lawnchair.lawnicons.util.appIcon
import kotlinx.collections.immutable.ImmutableList
import my.nanihadesuka.compose.InternalLazyVerticalGridScrollbar
import my.nanihadesuka.compose.ScrollbarSelectionMode
import my.nanihadesuka.compose.ScrollbarSettings

@Composable
@ExperimentalFoundationApi
fun IconPreviewGrid(
iconInfo: ImmutableList<IconInfo>,
iconInfo: List<IconInfo>,
isExpandedScreen: Boolean,
onSendResult: (IconInfo) -> Unit,
modifier: Modifier = Modifier,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,13 @@ import app.lawnchair.lawnicons.model.SearchMode
import app.lawnchair.lawnicons.model.getFirstLabelAndComponent
import app.lawnchair.lawnicons.ui.components.home.IconInfoSheet
import app.lawnchair.lawnicons.ui.components.home.IconPreview
import kotlinx.collections.immutable.ImmutableList

@Composable
fun SearchContents(
searchTerm: String,
searchMode: SearchMode,
onModeChange: (SearchMode) -> Unit,
iconInfo: ImmutableList<IconInfo>,
iconInfo: List<IconInfo>,
modifier: Modifier = Modifier,
onSendResult: (IconInfo) -> Unit = {},
) {
Expand Down Expand Up @@ -167,7 +166,7 @@ fun SearchContents(
}

@Composable
private fun IconInfoListItem(iconInfo: ImmutableList<IconInfo>) {
private fun IconInfoListItem(iconInfo: List<IconInfo>) {
Column(
modifier = Modifier
.fillMaxWidth()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ import app.lawnchair.lawnicons.ui.util.Constants
import app.lawnchair.lawnicons.ui.util.PreviewLawnicons
import app.lawnchair.lawnicons.viewmodel.ContributorsUiState
import app.lawnchair.lawnicons.viewmodel.ContributorsViewModel
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.serialization.Serializable

@Serializable
Expand Down Expand Up @@ -111,7 +109,7 @@ fun Contributors(

@Composable
private fun ContributorList(
contributors: ImmutableList<GitHubContributor>,
contributors: List<GitHubContributor>,
modifier: Modifier = Modifier,
contentPadding: PaddingValues = PaddingValues(),
) {
Expand Down Expand Up @@ -185,7 +183,7 @@ private const val CONTRIBUTOR_URL = "${Constants.GITHUB}/graphs/contributors"
@PreviewLawnicons
@Composable
private fun ContributorsScreenPreview() {
val contributors = persistentListOf(
val contributors = listOf(
GitHubContributor(
id = 1,
login = "Example",
Expand Down Expand Up @@ -219,7 +217,7 @@ private fun ContributorsScreenLoadingPreview() {
@PreviewLawnicons
@Composable
private fun ContributorListPreview() {
val contributors = persistentListOf(
val contributors = listOf(
GitHubContributor(
id = 1,
login = "Example",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ import app.lawnchair.lawnicons.ui.theme.LawniconsTheme
import app.lawnchair.lawnicons.ui.util.PreviewLawnicons
import app.lawnchair.lawnicons.ui.util.SampleData
import app.lawnchair.lawnicons.viewmodel.LawniconsViewModel
import kotlinx.collections.immutable.toImmutableList
import kotlinx.serialization.Serializable

@Serializable
Expand Down Expand Up @@ -196,7 +195,7 @@ private fun HomePreview() {
},
)
IconPreviewGrid(
iconInfo = iconInfo.toImmutableList(),
iconInfo = iconInfo,
isExpandedScreen = false,
{},
Modifier,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.Wallpapers
import app.lawnchair.lawnicons.model.IconInfo
import app.lawnchair.lawnicons.model.LabelAndComponent
import kotlinx.collections.immutable.persistentListOf

@Preview(
name = "Normal",
Expand Down Expand Up @@ -39,7 +38,7 @@ object SampleData {
),
id = 1,
)
val iconInfoList = persistentListOf(
val iconInfoList = listOf(
IconInfo(
drawableName = "@drawable/email",
componentNames = listOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ import app.lawnchair.lawnicons.model.GitHubContributor
import app.lawnchair.lawnicons.repository.GitHubContributorsRepository
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toPersistentList
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.map
Expand All @@ -19,7 +17,7 @@ import kotlinx.coroutines.launch
sealed interface ContributorsUiState {

data class Success(
val contributors: ImmutableList<GitHubContributor>,
val contributors: List<GitHubContributor>,
) : ContributorsUiState

data object Loading : ContributorsUiState
Expand All @@ -28,7 +26,7 @@ sealed interface ContributorsUiState {

private data class ContributorsViewModelState(
val isRefreshing: Boolean,
val contributors: ImmutableList<GitHubContributor>? = null,
val contributors: List<GitHubContributor>? = null,
val hasError: Boolean = false,
) {
fun toUiState(): ContributorsUiState = when {
Expand Down Expand Up @@ -63,7 +61,7 @@ class ContributorsViewModel @Inject constructor(
when {
result.isSuccess -> it.copy(
isRefreshing = false,
contributors = result.getOrThrow().toPersistentList(),
contributors = result.getOrThrow(),
hasError = false,
)

Expand Down

0 comments on commit a966f85

Please sign in to comment.