Fix widget when displayed note is deleted

This commit is contained in:
PhilKes 2025-05-10 13:18:54 +02:00
parent 62a35132e0
commit ade08b52ed
2 changed files with 83 additions and 58 deletions

View file

@ -73,7 +73,7 @@ interface BaseNoteDao {
@Query("SELECT id, reminders FROM BaseNote WHERE reminders IS NOT NULL AND reminders != '[]'")
suspend fun getAllReminders(): List<NoteIdReminder>
@Query("SELECT color FROM BaseNote WHERE id = :id ") fun getColorOfNote(id: Long): String
@Query("SELECT color FROM BaseNote WHERE id = :id ") fun getColorOfNote(id: Long): String?
@Query(
"SELECT id, title, type, reminders FROM BaseNote WHERE reminders IS NOT NULL AND reminders != '[]'"

View file

@ -184,13 +184,14 @@ class WidgetProvider : AppWidgetProvider() {
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, id)
intent.embedIntentExtras()
if (!locked) {
val database = NotallyDatabase.getDatabase(context).value
MainScope().launch {
withContext(Dispatchers.IO) {
val color = database.getBaseNoteDao().getColorOfNote(noteId)
val preferences = NotallyXPreferences.getInstance(context)
val (backgroundColor, _) = context.extractWidgetColors(color, preferences)
val database = NotallyDatabase.getDatabase(context).value
val color =
withContext(Dispatchers.IO) { database.getBaseNoteDao().getColorOfNote(noteId) }
if (color == null) {
val app = context.applicationContext as Application
val preferences = NotallyXPreferences.getInstance(app)
preferences.deleteWidget(id)
val view =
RemoteViews(context.packageName, R.layout.widget).apply {
setRemoteAdapter(R.id.ListView, intent)
@ -206,10 +207,36 @@ class WidgetProvider : AppWidgetProvider() {
)
setPendingIntentTemplate(
R.id.ListView,
Intent(context, WidgetProvider::class.java).asPendingIntent(context),
)
}
manager.updateAppWidget(id, view)
manager.notifyAppWidgetViewDataChanged(id, R.id.ListView)
return@launch
}
if (!locked) {
val view =
RemoteViews(context.packageName, R.layout.widget).apply {
setRemoteAdapter(R.id.ListView, intent)
setEmptyView(R.id.ListView, R.id.Empty)
setOnClickPendingIntent(
R.id.Empty,
Intent(context, WidgetProvider::class.java)
.apply {
action = ACTION_SELECT_NOTE
data = Uri.parse(toUri(Intent.URI_INTENT_SCHEME))
}
.asPendingIntent(context),
)
setPendingIntentTemplate(
R.id.ListView,
Intent(context, WidgetProvider::class.java).asPendingIntent(context),
)
val preferences = NotallyXPreferences.getInstance(context)
val (backgroundColor, _) =
context.extractWidgetColors(color, preferences)
noteType?.let {
setOnClickPendingIntent(
R.id.Layout,
@ -218,13 +245,10 @@ class WidgetProvider : AppWidgetProvider() {
.asPendingIntent(context),
)
}
setInt(R.id.Layout, "setBackgroundColor", backgroundColor)
}
manager.updateAppWidget(id, view)
manager.notifyAppWidgetViewDataChanged(id, R.id.ListView)
}
}
} else {
val view =
RemoteViews(context.packageName, R.layout.widget_locked).apply {
@ -245,6 +269,7 @@ class WidgetProvider : AppWidgetProvider() {
manager.updateAppWidget(id, view)
}
}
}
fun getWidgetOpenNoteIntent(noteType: Type, noteId: Long): Intent {
return Intent().setOpenNoteIntent(noteType, noteId)