|
|
|
@ -1,17 +1,18 @@
|
|
|
|
|
package tachiyomi.presentation.widget
|
|
|
|
|
|
|
|
|
|
import android.app.Application
|
|
|
|
|
import android.content.Context
|
|
|
|
|
import android.graphics.Bitmap
|
|
|
|
|
import android.os.Build
|
|
|
|
|
import androidx.compose.runtime.Composable
|
|
|
|
|
import androidx.core.graphics.drawable.toBitmap
|
|
|
|
|
import androidx.glance.GlanceId
|
|
|
|
|
import androidx.glance.GlanceModifier
|
|
|
|
|
import androidx.glance.ImageProvider
|
|
|
|
|
import androidx.glance.appwidget.GlanceAppWidget
|
|
|
|
|
import androidx.glance.appwidget.GlanceAppWidgetManager
|
|
|
|
|
import androidx.glance.appwidget.SizeMode
|
|
|
|
|
import androidx.glance.appwidget.appWidgetBackground
|
|
|
|
|
import androidx.glance.appwidget.updateAll
|
|
|
|
|
import androidx.glance.appwidget.provideContent
|
|
|
|
|
import androidx.glance.background
|
|
|
|
|
import androidx.glance.layout.fillMaxSize
|
|
|
|
|
import coil.executeBlocking
|
|
|
|
@ -23,8 +24,7 @@ import coil.size.Scale
|
|
|
|
|
import coil.transform.RoundedCornersTransformation
|
|
|
|
|
import eu.kanade.tachiyomi.core.security.SecurityPreferences
|
|
|
|
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
|
|
|
|
import kotlinx.coroutines.MainScope
|
|
|
|
|
import tachiyomi.core.util.lang.launchIO
|
|
|
|
|
import tachiyomi.core.util.lang.withIOContext
|
|
|
|
|
import tachiyomi.domain.manga.model.MangaCover
|
|
|
|
|
import tachiyomi.domain.updates.interactor.GetUpdates
|
|
|
|
|
import tachiyomi.domain.updates.model.UpdatesWithRelations
|
|
|
|
@ -45,33 +45,29 @@ class UpdatesGridGlanceWidget : GlanceAppWidget() {
|
|
|
|
|
private val app: Application by injectLazy()
|
|
|
|
|
private val preferences: SecurityPreferences by injectLazy()
|
|
|
|
|
|
|
|
|
|
private val coroutineScope = MainScope()
|
|
|
|
|
|
|
|
|
|
private var data: List<Pair<Long, Bitmap?>>? = null
|
|
|
|
|
|
|
|
|
|
override val sizeMode = SizeMode.Exact
|
|
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
|
override fun Content() {
|
|
|
|
|
// If app lock enabled, don't do anything
|
|
|
|
|
if (preferences.useAuthenticator().get()) {
|
|
|
|
|
LockedWidget()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
UpdatesWidget(data)
|
|
|
|
|
}
|
|
|
|
|
override suspend fun provideGlance(context: Context, id: GlanceId) {
|
|
|
|
|
val locked = preferences.useAuthenticator().get()
|
|
|
|
|
if (!locked) loadData()
|
|
|
|
|
|
|
|
|
|
fun loadData(list: List<UpdatesWithRelations>? = null) {
|
|
|
|
|
coroutineScope.launchIO {
|
|
|
|
|
// Don't show anything when lock is active
|
|
|
|
|
if (preferences.useAuthenticator().get()) {
|
|
|
|
|
updateAll(app)
|
|
|
|
|
return@launchIO
|
|
|
|
|
provideContent {
|
|
|
|
|
// If app lock enabled, don't do anything
|
|
|
|
|
if (locked) {
|
|
|
|
|
LockedWidget()
|
|
|
|
|
return@provideContent
|
|
|
|
|
}
|
|
|
|
|
UpdatesWidget(data)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private suspend fun loadData(list: List<UpdatesWithRelations>? = null) {
|
|
|
|
|
withIOContext {
|
|
|
|
|
val manager = GlanceAppWidgetManager(app)
|
|
|
|
|
val ids = manager.getGlanceIds(this@UpdatesGridGlanceWidget::class.java)
|
|
|
|
|
if (ids.isEmpty()) return@launchIO
|
|
|
|
|
if (ids.isEmpty()) return@withIOContext
|
|
|
|
|
|
|
|
|
|
val processList = list
|
|
|
|
|
?: Injekt.get<GetUpdates>().await(
|
|
|
|
@ -84,7 +80,6 @@ class UpdatesGridGlanceWidget : GlanceAppWidget() {
|
|
|
|
|
.calculateRowAndColumnCount()
|
|
|
|
|
|
|
|
|
|
data = prepareList(processList, rowCount * columnCount)
|
|
|
|
|
ids.forEach { update(app, it) }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|