Skip to content

Commit

Permalink
Merge pull request #550 from DimensionDev/feature/cmp
Browse files Browse the repository at this point in the history
migrate about screen to cmp
  • Loading branch information
Tlaster authored Nov 20, 2024
2 parents 1e6e4df + e0a488b commit c73e125
Show file tree
Hide file tree
Showing 80 changed files with 651 additions and 368 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: 17
java-version: 21

- name: Setup Android SDK
uses: android-actions/setup-android@v2
Expand Down
5 changes: 4 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,8 @@ dependencies {
implementation(libs.bundles.koin)
implementation(libs.ktorfit.lib)
ksp(libs.ktorfit.ksp)
implementation(libs.bundles.coil)
implementation(libs.bundles.coil3)
implementation(libs.bundles.coil3.extensions)
implementation(libs.bundles.ktor)
implementation(libs.molecule.runtime)
implementation(libs.ksoup)
Expand Down Expand Up @@ -145,6 +146,8 @@ dependencies {
implementation(libs.colorpicker.compose)
implementation(libs.material.motion.compose)
implementation(libs.nestedScrollView)
implementation(libs.precompose.molecule)
implementation(libs.compose.placeholder.material3)

if (project.file("google-services.json").exists()) {
implementation(platform(libs.firebase.bom))
Expand Down
18 changes: 10 additions & 8 deletions app/src/main/java/dev/dimension/flare/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ package dev.dimension.flare

import android.app.Application
import android.os.Build
import coil.ImageLoader
import coil.ImageLoaderFactory
import coil.decode.GifDecoder
import coil.decode.ImageDecoderDecoder
import coil.decode.SvgDecoder
import coil3.ImageLoader
import coil3.PlatformContext
import coil3.SingletonImageLoader
import coil3.gif.AnimatedImageDecoder
import coil3.gif.GifDecoder
import coil3.request.crossfade
import coil3.svg.SvgDecoder
import dev.dimension.flare.common.AnimatedPngDecoder
import dev.dimension.flare.common.AnimatedWebPDecoder
import dev.dimension.flare.di.androidModule
Expand All @@ -16,7 +18,7 @@ import org.koin.core.context.startKoin

class App :
Application(),
ImageLoaderFactory {
SingletonImageLoader.Factory {
override fun onCreate() {
super.onCreate()
startKoin {
Expand All @@ -25,12 +27,12 @@ class App :
}
}

override fun newImageLoader(): ImageLoader =
override fun newImageLoader(context: PlatformContext): ImageLoader =
ImageLoader
.Builder(this)
.components {
if (Build.VERSION.SDK_INT >= 28) {
add(ImageDecoderDecoder.Factory())
add(factory = AnimatedImageDecoder.Factory())
} else {
add(GifDecoder.Factory())
}
Expand Down
19 changes: 10 additions & 9 deletions app/src/main/java/dev/dimension/flare/common/AnimatedPngDecoder.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package dev.dimension.flare.common

import coil.ImageLoader
import coil.annotation.ExperimentalCoilApi
import coil.decode.DecodeResult
import coil.decode.Decoder
import coil.decode.ImageSource
import coil.fetch.SourceResult
import coil.request.Options
import coil3.ImageLoader
import coil3.annotation.ExperimentalCoilApi
import coil3.asImage
import coil3.decode.DecodeResult
import coil3.decode.Decoder
import coil3.decode.ImageSource
import coil3.fetch.SourceFetchResult
import coil3.request.Options
import com.github.penfeizhou.animation.apng.APNGDrawable
import com.github.penfeizhou.animation.apng.decode.APNGParser

Expand All @@ -16,13 +17,13 @@ internal class AnimatedPngDecoder(
@OptIn(ExperimentalCoilApi::class)
override suspend fun decode(): DecodeResult =
DecodeResult(
drawable = APNGDrawable.fromFile(source.file().toString()),
image = APNGDrawable.fromFile(source.file().toString()).asImage(),
isSampled = false,
)

class Factory : Decoder.Factory {
override fun create(
result: SourceResult,
result: SourceFetchResult,
options: Options,
imageLoader: ImageLoader,
): Decoder? =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
package dev.dimension.flare.common

import coil.ImageLoader
import coil.decode.DecodeResult
import coil.decode.Decoder
import coil.decode.ImageSource
import coil.fetch.SourceResult
import coil.request.Options
import coil3.ImageLoader
import coil3.annotation.ExperimentalCoilApi
import coil3.asImage
import coil3.decode.DecodeResult
import coil3.decode.Decoder
import coil3.decode.ImageSource
import coil3.fetch.SourceFetchResult
import coil3.request.Options
import com.github.penfeizhou.animation.webp.WebPDrawable
import com.github.penfeizhou.animation.webp.decode.WebPParser

internal class AnimatedWebPDecoder(
private val source: ImageSource,
) : Decoder {
@OptIn(ExperimentalCoilApi::class)
override suspend fun decode(): DecodeResult =
DecodeResult(
drawable = WebPDrawable.fromFile(source.file().toString()),
image = WebPDrawable.fromFile(source.file().toString()).asImage(),
isSampled = false,
)

class Factory : Decoder.Factory {
override fun create(
result: SourceResult,
result: SourceFetchResult,
options: Options,
imageLoader: ImageLoader,
): Decoder? =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,17 +35,20 @@ data class AppearanceSettings(
val compatLinkPreview: Boolean = false,
)

@Serializable
enum class Theme {
LIGHT,
DARK,
SYSTEM,
}

@Serializable
enum class AvatarShape {
CIRCLE,
SQUARE,
}

@Serializable
enum class VideoAutoplay {
ALWAYS,
WIFI,
Expand Down
42 changes: 0 additions & 42 deletions app/src/main/java/dev/dimension/flare/molecule/Molecule.kt

This file was deleted.

25 changes: 14 additions & 11 deletions app/src/main/java/dev/dimension/flare/ui/component/NetworkImage.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
Expand All @@ -15,14 +17,14 @@ import androidx.compose.ui.graphics.DefaultAlpha
import androidx.compose.ui.graphics.FilterQuality
import androidx.compose.ui.graphics.drawscope.DrawScope
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImagePainter
import coil.compose.SubcomposeAsyncImage
import coil.compose.rememberAsyncImagePainter
import coil.request.ImageRequest
import coil.size.Size
import com.eygraber.compose.placeholder.material3.placeholder
import coil3.compose.AsyncImagePainter
import coil3.compose.LocalPlatformContext
import coil3.compose.SubcomposeAsyncImage
import coil3.compose.rememberAsyncImagePainter
import coil3.request.ImageRequest
import coil3.size.Size
import io.github.fornewid.placeholder.material3.placeholder

@Composable
fun NetworkImage(
Expand All @@ -46,7 +48,7 @@ fun NetworkImage(
SubcomposeAsyncImage(
model =
ImageRequest
.Builder(LocalContext.current)
.Builder(LocalPlatformContext.current)
.data(model)
.let {
if (model is String) {
Expand All @@ -69,11 +71,11 @@ fun NetworkImage(
}

@Composable
fun EmojiImage(
internal fun EmojiImage(
uri: String,
modifier: Modifier = Modifier,
) {
val context = LocalContext.current
val context = LocalPlatformContext.current
val painter =
rememberAsyncImagePainter(
model =
Expand All @@ -85,7 +87,8 @@ fun EmojiImage(
.build()
},
)
if (painter.state is AsyncImagePainter.State.Success) {
val state by painter.state.collectAsState(AsyncImagePainter.State.Loading(painter))
if (state is AsyncImagePainter.State.Success) {
val aspectRatio =
remember(painter.intrinsicSize) {
val size = painter.intrinsicSize
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ import androidx.compose.ui.text.intl.Locale
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import com.eygraber.compose.placeholder.material3.placeholder
import com.fleeksoft.ksoup.nodes.Element
import compose.icons.FontAwesomeIcons
import compose.icons.fontawesomeicons.Regular
Expand All @@ -83,7 +82,6 @@ import dev.dimension.flare.data.datasource.microblog.StatusAction
import dev.dimension.flare.data.model.AppearanceSettings
import dev.dimension.flare.data.model.LocalAppearanceSettings
import dev.dimension.flare.model.MicroBlogKey
import dev.dimension.flare.molecule.producePresenter
import dev.dimension.flare.ui.component.AdaptiveGrid
import dev.dimension.flare.ui.component.EmojiImage
import dev.dimension.flare.ui.component.FAIcon
Expand All @@ -99,8 +97,10 @@ import dev.dimension.flare.ui.model.onLoading
import dev.dimension.flare.ui.model.onSuccess
import dev.dimension.flare.ui.screen.status.statusTranslatePresenter
import dev.dimension.flare.ui.theme.MediumAlpha
import io.github.fornewid.placeholder.material3.placeholder
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
import moe.tlaster.precompose.molecule.producePresenter

@Composable
fun CommonStatusComponent(
Expand All @@ -112,7 +112,7 @@ fun CommonStatusComponent(
val appearanceSettings = LocalAppearanceSettings.current
Column(
modifier =
modifier
Modifier
.let {
if (isDetail) {
it
Expand All @@ -127,7 +127,7 @@ fun CommonStatusComponent(
)
}
}
},
}.then(modifier),
) {
item.user?.let { user ->
CommonStatusHeaderComponent(
Expand Down Expand Up @@ -823,7 +823,7 @@ private fun StatusPollComponent(
text =
stringResource(
id = R.string.poll_expired_at,
poll.expiresAt.localizedFullTime,
poll.expiredAt.value.localizedFullTime,
),
modifier =
Modifier
Expand Down Expand Up @@ -964,14 +964,14 @@ private fun ExpandedCard(
val appearanceSettings = LocalAppearanceSettings.current
Column(
modifier =
modifier
Modifier
.border(
FlareDividerDefaults.thickness,
color = FlareDividerDefaults.color,
shape = MaterialTheme.shapes.medium,
).clip(
shape = MaterialTheme.shapes.medium,
),
).then(modifier),
) {
card.media?.let {
AdaptiveGrid(
Expand Down Expand Up @@ -1016,14 +1016,14 @@ fun CompatCard(
) {
Row(
modifier =
modifier
Modifier
.border(
FlareDividerDefaults.thickness,
color = FlareDividerDefaults.color,
shape = MaterialTheme.shapes.medium,
).clip(
shape = MaterialTheme.shapes.medium,
),
).then(modifier),
) {
card.media?.let {
MediaItem(
Expand Down
Loading

0 comments on commit c73e125

Please sign in to comment.