Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mark stable classes and enable Compose Compiler reports #2280

Merged
merged 4 commits into from
Sep 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading