Skip to content
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
44 changes: 28 additions & 16 deletions androidApp/src/main/java/com/maxrave/simpmusic/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import androidx.core.net.toUri
import androidx.core.os.LocaleListCompat
import androidx.lifecycle.lifecycleScope
import androidx.work.Constraints
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.NetworkType
Expand All @@ -30,6 +31,7 @@ import com.maxrave.common.STATUS_DONE
import com.maxrave.common.SUPPORTED_LANGUAGE
import com.maxrave.common.SUPPORTED_LOCATION
import com.maxrave.domain.data.model.intent.GenericIntent
import com.maxrave.domain.manager.DataStoreManager
import com.maxrave.domain.mediaservice.handler.MediaPlayerHandler
import com.maxrave.domain.mediaservice.handler.ToastType
import com.maxrave.logger.Logger
Expand All @@ -40,6 +42,7 @@ import com.maxrave.simpmusic.service.test.notification.NotifyWork
import com.maxrave.simpmusic.utils.ComposeResUtils
import com.maxrave.simpmusic.utils.VersionManager
import com.maxrave.simpmusic.viewModel.SharedViewModel
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import org.koin.android.ext.android.inject
import org.koin.core.context.loadKoinModules
Expand All @@ -54,6 +57,7 @@ import java.util.concurrent.TimeUnit
class MainActivity : AppCompatActivity() {
val viewModel: SharedViewModel by inject()
val mediaPlayerHandler by inject<MediaPlayerHandler>()
val dataStoreManager: DataStoreManager by inject()

private var mBound = false
private var shouldUnbind = false
Expand Down Expand Up @@ -200,22 +204,30 @@ class MainActivity : AppCompatActivity() {
ExistingPeriodicWorkPolicy.KEEP,
request,
)
val rssRequest =
PeriodicWorkRequestBuilder<RssFeedNotifyWork>(
24L,
TimeUnit.HOURS,
).addTag("Blog RSS Worker")
.setConstraints(
Constraints
.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build(),
).build()
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
"Blog RSS Worker",
ExistingPeriodicWorkPolicy.KEEP,
rssRequest,
)
lifecycleScope.launch {
dataStoreManager.blogNotificationEnabled.collect { enabled ->
if (enabled == DataStoreManager.TRUE) {
val rssRequest =
PeriodicWorkRequestBuilder<RssFeedNotifyWork>(
24L,
TimeUnit.HOURS,
).addTag("Blog RSS Worker")
.setConstraints(
Constraints
.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build(),
).build()
WorkManager.getInstance(this@MainActivity).enqueueUniquePeriodicWork(
"Blog RSS Worker",
ExistingPeriodicWorkPolicy.KEEP,
rssRequest,
)
} else {
WorkManager.getInstance(this@MainActivity).cancelUniqueWork("Blog RSS Worker")
}
}
}

if (!EasyPermissions.hasPermissions(this, Manifest.permission.POST_NOTIFICATIONS)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Expand Down
24 changes: 24 additions & 0 deletions composeApp/proguard-desktop-rules.pro
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
# ProGuard's return-type specialization narrows ActualParagraph()'s declared return type
# from the Paragraph interface down to its only impl (SkiaParagraph). The bytecode still
# pushes a Paragraph-typed value, so JVM 21's verifier rejects it at runtime with
# "VerifyError: Bad return type" the moment any Text() renders (androidx.compose.ui.text).
# Disable only method type-specialization; shrinking, obfuscation, class-merging,
# inlining and every other optimization stay on.
-optimizations !method/specialization/*

-keepclasseswithmembers class * {
native <methods>;
}
Expand All @@ -20,6 +28,22 @@
-dontnote org.slf4j.**
-dontnote kotlinx.serialization.**

# Skiko / Skia + Compose AWT interop. ProGuard obfuscation renames these classes, which
# breaks compose.interop.blending on the transparent desktop window — Canvas/video then
# render see-through (you can see the desktop behind them). Keep them un-obfuscated.
-keep class org.jetbrains.skiko.** { *; }
-keep class org.jetbrains.skia.** { *; }
-keep class androidx.compose.ui.awt.** { *; }
-keep class androidx.compose.ui.interop.** { *; }
-dontwarn org.jetbrains.skiko.**
-dontwarn org.jetbrains.skia.**

# compottie (Lottie renderer) draws via skiko (PlatformShader.skiko, SkikoPathBuilder).
# On release, proguard obfuscation mangles its internal classes so the renderer runs but
# paints nothing — the animation stays blank with no crash. Keep them un-obfuscated.
-keep class io.github.alexzhirkevich.compottie.** { *; }
-dontwarn io.github.alexzhirkevich.compottie.**

# Okhttp3
-keep class okhttp3.** { *; }
-keep class okio.** { *; }
Expand Down
Loading
Loading