Skip to content

Commit e4736e1

Browse files
authored
Merge pull request #633 from skydoves/improve/remember-states
Remember the internal image states
2 parents 08b7e17 + 425b7aa commit e4736e1

File tree

14 files changed

+85
-59
lines changed

14 files changed

+85
-59
lines changed

app/src/main/kotlin/com/github/skydoves/landscapistdemo/ui/MainPosters.kt

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,14 @@ fun DisneyPosters(
104104
PosterItem(poster, vm)
105105
}
106106
}
107-
SelectedPoster(poster)
107+
108+
var palette by rememberPaletteState()
109+
110+
SelectedPoster(poster = poster, onPaletteUpdated = { palette = it })
111+
112+
palette?.let {
113+
PosterInformation(poster = poster, it)
114+
}
108115
}
109116
}
110117

@@ -131,9 +138,8 @@ private fun PosterItem(
131138
@Composable
132139
private fun SelectedPoster(
133140
poster: Poster,
141+
onPaletteUpdated: (Palette) -> Unit,
134142
) {
135-
var palette by rememberPaletteState(null)
136-
137143
CoilImage(
138144
imageModel = { poster.image },
139145
modifier = Modifier.aspectRatio(0.8f),
@@ -149,11 +155,17 @@ private fun SelectedPoster(
149155
),
150156
)
151157
+CircularRevealPlugin()
152-
+PalettePlugin { palette = it }
158+
+PalettePlugin { onPaletteUpdated.invoke(it) }
153159
},
154160
previewPlaceholder = painterResource(id = R.drawable.poster),
155161
)
162+
}
156163

164+
@Composable
165+
private fun PosterInformation(
166+
poster: Poster,
167+
palette: Palette,
168+
) {
157169
ColorPalettes(palette)
158170

159171
Text(
@@ -190,7 +202,7 @@ private fun SelectedPoster(
190202
}
191203

192204
@Composable
193-
private fun ColorPalettes(palette: Palette?) {
205+
private fun ColorPalettes(palette: Palette) {
194206
val colorList: List<Int> = palette.paletteColorList()
195207

196208
LazyRow(
@@ -224,7 +236,7 @@ private fun SelectedPosterPreview() {
224236
.fillMaxSize()
225237
.verticalScroll(rememberScrollState()),
226238
) {
227-
SelectedPoster(poster = MockUtil.getMockPoster())
239+
SelectedPoster(poster = MockUtil.getMockPoster()) {}
228240
}
229241
}
230242
}

build-logic/convention/src/main/kotlin/com/skydoves/landscapist/AndroidCompose.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@ internal fun Project.configureAndroidCompose(
4040
compose = true
4141
}
4242

43-
composeOptions {
44-
kotlinCompilerExtensionVersion = "1.5.14"
45-
}
46-
4743
packaging {
4844
resources {
4945
excludes.add("/META-INF/{AL2.0,LGPL2.1}")

coil/src/main/kotlin/com/skydoves/landscapist/coil/CoilImage.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,14 @@ public fun CoilImage(
214214
imageOptions = imageOptions,
215215
modifier = modifier,
216216
) ImageRequest@{ imageState ->
217-
when (
218-
val coilImageState = imageState.toCoilImageState().apply {
217+
218+
val coilImageState: CoilImageState = remember(imageState) {
219+
imageState.toCoilImageState().apply {
219220
onImageStateChanged.invoke(this)
220221
}
221-
) {
222+
}
223+
224+
when (coilImageState) {
222225
is CoilImageState.None -> Unit
223226

224227
is CoilImageState.Loading -> {

coil3/build.gradle.kts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616
import com.github.skydoves.landscapist.Configuration
17+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
18+
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
1719

1820
plugins {
1921
id("landscapist.library.compose.multiplatformWasm")
@@ -115,14 +117,10 @@ baselineProfile {
115117
}
116118
}
117119

118-
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
119-
kotlinOptions {
120-
jvmTarget = "1.8"
121-
freeCompilerArgs += listOf(
122-
"-Xexplicit-api=strict",
123-
"-opt-in=kotlin.RequiresOptIn",
124-
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
125-
"-opt-in=com.skydoves.landscapist.InternalLandscapistApi",
120+
tasks.withType<KotlinJvmCompile>().configureEach {
121+
compilerOptions {
122+
jvmTarget.set(JvmTarget.JVM_1_8)
123+
freeCompilerArgs.addAll(
126124
"-opt-in=coil3.annotation.ExperimentalCoilApi",
127125
)
128126
}

coil3/src/commonMain/kotlin/com/skydoves/landscapist/coil3/CoilImage.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,14 @@ public fun CoilImage(
192192
imageOptions = imageOptions,
193193
modifier = modifier,
194194
) ImageRequest@{ imageState ->
195-
when (
196-
val coilImageState = imageState.toCoilImageState().apply {
195+
196+
val coilImageState: CoilImageState = remember(imageState) {
197+
imageState.toCoilImageState().apply {
197198
onImageStateChanged.invoke(this)
198199
}
199-
) {
200+
}
201+
202+
when (coilImageState) {
200203
is CoilImageState.None -> Unit
201204

202205
is CoilImageState.Loading -> {

fresco/src/main/kotlin/com/skydoves/landscapist/fresco/FrescoImage.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,15 @@ public fun FrescoImage(
121121
imageRequest = StableHolder(imageRequest.invoke()),
122122
modifier = modifier,
123123
) ImageRequest@{ imageState ->
124-
when (
125-
val frescoImageState = imageState.toFrescoImageState().apply {
124+
125+
val state: FrescoImageState = imageState.toFrescoImageState()
126+
val frescoImageState = remember(state) {
127+
state.apply {
126128
onImageStateChanged.invoke(this)
127129
}
128-
) {
130+
}
131+
132+
when (frescoImageState) {
129133
is FrescoImageState.None -> Unit
130134

131135
is FrescoImageState.Loading -> {

glide/src/main/kotlin/com/skydoves/landscapist/glide/GlideImage.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ import androidx.compose.foundation.Image
2525
import androidx.compose.foundation.layout.BoxScope
2626
import androidx.compose.foundation.layout.BoxWithConstraintsScope
2727
import androidx.compose.runtime.Composable
28+
import androidx.compose.runtime.getValue
29+
import androidx.compose.runtime.remember
2830
import androidx.compose.ui.Modifier
2931
import androidx.compose.ui.graphics.painter.Painter
3032
import androidx.compose.ui.platform.LocalInspectionMode
@@ -149,11 +151,14 @@ public fun GlideImage(
149151
clearTarget = clearTarget,
150152
modifier = modifier,
151153
) ImageRequest@{ imageState ->
152-
when (
153-
val glideImageState = imageState.toGlideImageState(
154+
155+
val glideImageState: GlideImageState = remember(imageState) {
156+
imageState.toGlideImageState(
154157
glideRequestType = glideRequestType,
155158
).apply { onImageStateChanged.invoke(this) }
156-
) {
159+
}
160+
161+
when (glideImageState) {
157162
is GlideImageState.None -> Unit
158163

159164
is GlideImageState.Loading -> {

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ dokka = "2.0.0"
44
jvmTarget = "11"
55
nexusPlugin = "0.30.0"
66
kotlinxCoroutines = "1.9.0"
7-
kotlinBinaryCompatibility = "0.16.3"
7+
kotlinBinaryCompatibility = "0.17.0"
88
androidGradlePlugin = "8.7.3"
99
androidxActivity = "1.9.3"
1010
androidxMaterial = "1.12.0"

landscapist-animation/build.gradle.kts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616
import com.github.skydoves.landscapist.Configuration
17+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
18+
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
1719

1820
plugins {
1921
id("landscapist.library.compose.multiplatformWasm")
@@ -86,10 +88,10 @@ baselineProfile {
8688
}
8789
}
8890

89-
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
90-
kotlinOptions {
91-
jvmTarget = "1.8"
92-
freeCompilerArgs += listOf(
91+
tasks.withType<KotlinJvmCompile>().configureEach {
92+
compilerOptions {
93+
jvmTarget.set(JvmTarget.JVM_1_8)
94+
freeCompilerArgs.addAll(
9395
"-Xexplicit-api=strict",
9496
"-opt-in=kotlin.RequiresOptIn",
9597
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",

landscapist-palette/build.gradle.kts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
* limitations under the License.
1515
*/
1616
import com.github.skydoves.landscapist.Configuration
17+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
18+
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
1719

1820
plugins {
1921
id("landscapist.library.compose.multiplatform")
@@ -81,10 +83,10 @@ baselineProfile {
8183
}
8284
}
8385

84-
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
85-
kotlinOptions {
86-
jvmTarget = "1.8"
87-
freeCompilerArgs += listOf(
86+
tasks.withType<KotlinJvmCompile>().configureEach {
87+
compilerOptions {
88+
jvmTarget.set(JvmTarget.JVM_1_8)
89+
freeCompilerArgs.addAll(
8890
"-Xexplicit-api=strict",
8991
"-opt-in=kotlin.RequiresOptIn",
9092
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",

0 commit comments

Comments
 (0)