Я создал виджет Android с помощью Jetpack Glance, мне нужно обновить его с помощью CoroutineWorker, поэтому я использую для него WorkManager, вот пример кода
class MyWidget : GlanceAppWidget() {
companion object {
val KEY_TOPIC = stringPreferencesKey("topic")
val KEY_QUOTE = stringPreferencesKey("quote")
}
override val sizeMode = SizeMode.Exact
// override var stateDefinition: GlanceStateDefinition = PreferencesGlanceStateDefinition
override suspend fun provideGlance(context: Context, id: GlanceId) {
provideContent {
val displayText = currentState(KEY_QUOTE) ?: "Quote not found"
val topic = currentState(KEY_TOPIC) ?: ""
GlanceTheme {
Scaffold(
titleBar = {
TitleBar(startIcon = ImageProvider(R.mipmap.ic_launcher), title = "Hello")
}, backgroundColor = GlanceTheme.colors.widgetBackground
) {
Column(
modifier = GlanceModifier.background(color = Color.Red)
.padding(30.dp)
) {
Text(
text = "Display Text is $displayText && Topic is $topic",
style = TextStyle(
color = ColorProvider(
color = Color(0xFF000000)
),
fontSize = 12.sp,
fontWeight = FontWeight.Medium
),
modifier = GlanceModifier.clickable {
actionStartActivity(activity = MainActivity::class.java)
}
)
Button(
"Start Activity", onClick = actionStartActivity(),
style = TextStyle(
color = ColorProvider(
color = Color(0x00FF0000)
),
fontSize = 12.sp,
fontWeight = FontWeight.Medium
),
)
}
}
}
}
}
override fun onCompositionError(
context: Context,
glanceId: GlanceId,
appWidgetId: Int,
throwable: Throwable
) {
super.onCompositionError(context, glanceId, appWidgetId, throwable)
val remoteView = RemoteViews(context.packageName, R.layout.custom_error_layout)
Log.i("errorMessageis", "${throwable.message} ${throwable.localizedMessage}")
remoteView.setTextViewText(
R.id.textview,
"${throwable.message} ${throwable.localizedMessage}"
)
AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, remoteView)
}
}
@HiltWorker
class CustomWorker @AssistedInject constructor(
@Assisted val context: Context,
@Assisted workerParameters: WorkerParameters,
) : CoroutineWorker(context, workerParameters) {
override suspend fun doWork(): Result {
CoroutineScope(Dispatchers.IO).launch {
val currentTimeMillis = System.currentTimeMillis()
val date = Date(currentTimeMillis)
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formattedDate = sdf.format(date)
val glanceIds =
GlanceAppWidgetManager(context).getGlanceIds(MyWidget::class.java)
glanceIds.forEach { id ->
updateAppWidgetState(context, id) { prefs ->
prefs[KEY_QUOTE] = currentTimeMillis.toString()
prefs[KEY_TOPIC] = formattedDate
}
MyWidget().update(context, id)
}
}
return Result.success()
}
}
Теперь, когда я пытаюсь создать виджет из установленного приложения для Android, он просто показывает экран загрузки, созданный из android:initialLayout="@layout/glance_default_loading_layout"
Вот полный исходный код
Я не вижу никаких сообщений об ошибках
Я создал виджет Android с помощью Jetpack Glance, мне нужно обновить его с помощью CoroutineWorker, поэтому я использую для него WorkManager, вот пример кода [code]class MyWidget : GlanceAppWidget() {
companion object { val KEY_TOPIC = stringPreferencesKey("topic") val KEY_QUOTE = stringPreferencesKey("quote") }
override val sizeMode = SizeMode.Exact
// override var stateDefinition: GlanceStateDefinition = PreferencesGlanceStateDefinition
override suspend fun provideGlance(context: Context, id: GlanceId) {
provideContent {
val displayText = currentState(KEY_QUOTE) ?: "Quote not found" val topic = currentState(KEY_TOPIC) ?: ""
GlanceTheme { Scaffold( titleBar = { TitleBar(startIcon = ImageProvider(R.mipmap.ic_launcher), title = "Hello") }, backgroundColor = GlanceTheme.colors.widgetBackground ) { Column( modifier = GlanceModifier.background(color = Color.Red) .padding(30.dp) ) { Text( text = "Display Text is $displayText && Topic is $topic", style = TextStyle( color = ColorProvider( color = Color(0xFF000000) ), fontSize = 12.sp, fontWeight = FontWeight.Medium ), modifier = GlanceModifier.clickable { actionStartActivity(activity = MainActivity::class.java) } )
@HiltWorker class CustomWorker @AssistedInject constructor( @Assisted val context: Context, @Assisted workerParameters: WorkerParameters, ) : CoroutineWorker(context, workerParameters) {
override suspend fun doWork(): Result {
CoroutineScope(Dispatchers.IO).launch { val currentTimeMillis = System.currentTimeMillis() val date = Date(currentTimeMillis) val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) val formattedDate = sdf.format(date)
val glanceIds = GlanceAppWidgetManager(context).getGlanceIds(MyWidget::class.java) glanceIds.forEach { id -> updateAppWidgetState(context, id) { prefs -> prefs[KEY_QUOTE] = currentTimeMillis.toString() prefs[KEY_TOPIC] = formattedDate } MyWidget().update(context, id) } } return Result.success() } } [/code] Теперь, когда я пытаюсь создать виджет из установленного приложения для Android, он просто показывает экран загрузки, созданный из android:initialLayout="@layout/glance_default_loading_layout" Вот полный исходный код Я не вижу никаких сообщений об ошибках
Я создал виджет Android с помощью Jetpack Glance, мне нужно обновить его с помощью CoroutineWorker, поэтому я использую для него WorkManager, вот пример кода
class MyWidget : GlanceAppWidget() {
Я создал виджет Android с помощью Jetpack Glance, мне нужно обновить его с помощью CoroutineWorker, поэтому я использую для него WorkManager, вот пример кода
class MyWidget : GlanceAppWidget() {
Я создал виджет Android с помощью Jetpack Glance, мне нужно обновить его с помощью CoroutineWorker, поэтому я использую для него WorkManager, вот пример кода
class MyWidget : GlanceAppWidget() {
Я создал виджет Android с помощью Jetpack Glance, мне нужно обновить его с помощью CoroutineWorker, поэтому я использую для него WorkManager, вот пример кода
class MyWidget : GlanceAppWidget() {