🐛 Fix android widget don't work fine in release mode

This commit is contained in:
2024-12-15 21:27:49 +08:00
parent 2eb1f4b52b
commit 7508a54907
10 changed files with 80 additions and 52 deletions

View File

@ -1,7 +1,9 @@
package dev.solsynth.solian.data
import androidx.annotation.Keep
import java.time.Instant
@Keep
data class SolarPost(
val id: Int,
val body: SolarPostBody,
@ -13,13 +15,14 @@ data class SolarPost(
val publishedAt: Instant?
)
@Keep
data class SolarPostBody(
val content: String?,
val title: String?,
val description: String?,
val attachments: List<String>?
)
@Keep
data class SolarPublisher(
val id: Int,
val name: String,

View File

@ -1,5 +1,6 @@
package dev.solsynth.solian.data
import androidx.annotation.Keep
import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
@ -11,7 +12,7 @@ import java.lang.reflect.Type
import java.time.Instant
import java.time.format.DateTimeFormatter
@Keep
class InstantAdapter : JsonSerializer<Instant?>,
JsonDeserializer<Instant?> {
override fun serialize(

View File

@ -1,13 +1,16 @@
package dev.solsynth.solian.data
import androidx.annotation.Keep
import java.time.Instant
@Keep
data class SolarUser(
val id: Int,
val name: String,
val nick: String
)
@Keep
data class SolarCheckInRecord(
val id: Int,
val resultTier: Int,

View File

@ -3,7 +3,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.glance.Button
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.appwidget.GlanceAppWidget
@ -14,12 +13,12 @@ import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
import androidx.glance.layout.Row
import androidx.glance.layout.Spacer
import androidx.glance.layout.fillMaxHeight
import androidx.glance.layout.fillMaxWidth
import androidx.glance.layout.height
import androidx.glance.layout.padding
import androidx.glance.state.GlanceStateDefinition
import androidx.glance.text.FontFamily
import androidx.glance.text.FontWeight
import androidx.glance.text.Text
import androidx.glance.text.TextStyle
import com.google.gson.FieldNamingPolicy
@ -31,6 +30,7 @@ import java.time.OffsetDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
class CheckInWidget : GlanceAppWidget() {
override val stateDefinition: GlanceStateDefinition<*>?
get() = HomeWidgetGlanceStateDefinition()
@ -56,6 +56,7 @@ class CheckInWidget : GlanceAppWidget() {
Column(
modifier = GlanceModifier
.fillMaxWidth()
.fillMaxHeight()
.background(Color.White)
.padding(16.dp)
) {
@ -86,11 +87,6 @@ class CheckInWidget : GlanceAppWidget() {
text = "You haven't checked in today",
style = TextStyle(fontSize = 15.sp)
)
Spacer(modifier = GlanceModifier.height(8.dp))
Button(
text = "Check In",
onClick = {}
)
}
}
}

View File

@ -1,7 +1,6 @@
import android.content.Context
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.glance.GlanceId
@ -14,6 +13,7 @@ import androidx.glance.layout.Alignment
import androidx.glance.layout.Column
import androidx.glance.layout.Row
import androidx.glance.layout.Spacer
import androidx.glance.layout.fillMaxHeight
import androidx.glance.layout.fillMaxSize
import androidx.glance.layout.fillMaxWidth
import androidx.glance.layout.height
@ -24,12 +24,9 @@ import androidx.glance.text.FontFamily
import androidx.glance.text.FontWeight
import androidx.glance.text.Text
import androidx.glance.text.TextStyle
import coil3.ImageLoader
import coil3.compose.AsyncImage
import coil3.compose.setSingletonImageLoaderFactory
import coil3.request.crossfade
import com.google.gson.FieldNamingPolicy
import com.google.gson.GsonBuilder
import com.google.gson.TypeAdapterFactory
import dev.solsynth.solian.data.InstantAdapter
import dev.solsynth.solian.data.SolarPost
import java.time.Instant
@ -37,7 +34,6 @@ import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
class FeaturedPostWidget : GlanceAppWidget() {
override val stateDefinition: GlanceStateDefinition<*>?
get() = HomeWidgetGlanceStateDefinition()
@ -48,24 +44,8 @@ class FeaturedPostWidget : GlanceAppWidget() {
}
}
private val serverUrl = "https://api.sn.solsynth.dev"
private fun getAttachmentUrl(identifier: String): String {
return if (identifier.startsWith("http")) {
identifier
} else {
"$serverUrl/cgi/uc/attachments/$identifier"
}
}
@Composable
private fun GlanceContent(context: Context, currentState: HomeWidgetGlanceState) {
setSingletonImageLoaderFactory { context ->
ImageLoader.Builder(context)
.crossfade(true)
.build()
}
val gson =
GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
@ -78,13 +58,12 @@ class FeaturedPostWidget : GlanceAppWidget() {
Column(
modifier = GlanceModifier
.fillMaxWidth()
.fillMaxHeight()
.background(Color.White)
.padding(16.dp)
) {
if (postFeaturedRaw != null) {
val postFeaturedList: Array<SolarPost> =
gson.fromJson(postFeaturedRaw, Array<SolarPost>::class.java)
val postFeatured = postFeaturedList.firstOrNull();
val postFeatured = gson.fromJson(postFeaturedRaw, SolarPost::class.java)
Row {
Text(