-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathHeadlinesGlanceWidget.kt
More file actions
61 lines (54 loc) · 2.37 KB
/
HeadlinesGlanceWidget.kt
File metadata and controls
61 lines (54 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package to.bitkit.appwidget.ui.headlines
import android.content.Context
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.glance.GlanceId
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.GlanceAppWidgetManager
import androidx.glance.appwidget.SizeMode
import androidx.glance.appwidget.provideContent
import dagger.hilt.android.EntryPointAccessors
import to.bitkit.appwidget.AppWidgetEntryPoint
import to.bitkit.appwidget.model.AppWidgetData
import to.bitkit.appwidget.model.AppWidgetEntry
import to.bitkit.appwidget.model.AppWidgetType
import to.bitkit.appwidget.ui.components.GlanceLayoutDimens
import to.bitkit.models.widget.toArticleModel
import kotlin.random.Random
class HeadlinesGlanceWidget : GlanceAppWidget() {
override val sizeMode = SizeMode.Responsive(
setOf(GlanceLayoutDimens.COMPACT_WIDGET_SIZE, GlanceLayoutDimens.WIDE_WIDGET_SIZE),
)
override suspend fun provideGlance(context: Context, id: GlanceId) {
val store = EntryPointAccessors
.fromApplication(context, AppWidgetEntryPoint::class.java)
.appWidgetPreferencesStore()
val appWidgetId = GlanceAppWidgetManager(context).getAppWidgetId(id)
provideContent {
val data by store.data.collectAsState(initial = AppWidgetData())
val entry = data.entries.find { it.appWidgetId == appWidgetId }
?: AppWidgetEntry(appWidgetId = appWidgetId, type = AppWidgetType.HEADLINES)
val article = remember(data.cachedArticles, data.articleRotationTick) {
if (data.cachedArticles.isEmpty()) {
null
} else {
data.cachedArticles
.random(Random(data.articleRotationTick.toLong()))
.toArticleModel()
}
}
HeadlinesGlanceContent(
entry = entry,
article = article,
)
}
}
override suspend fun onDelete(context: Context, glanceId: GlanceId) {
val appWidgetId = GlanceAppWidgetManager(context).getAppWidgetId(glanceId)
EntryPointAccessors
.fromApplication(context, AppWidgetEntryPoint::class.java)
.appWidgetPreferencesStore()
.unregisterWidget(appWidgetId)
}
}