Skip to content

Commit 91a5438

Browse files
author
LeanBitLab
committed
fix: Filter events by visible calendars only
1 parent 4b747ee commit 91a5438

1 file changed

Lines changed: 14 additions & 3 deletions

File tree

app/src/main/java/com/leanbitlab/lwidget/AwidgetProvider.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,11 @@ class AwidgetProvider : AppWidgetProvider() {
311311

312312
// Get holiday/synced calendar IDs (non-local)
313313
val syncedCalendarIds = mutableSetOf<Long>()
314+
val visibleCalendarIds = mutableSetOf<Long>()
315+
316+
// Only query visible calendars
317+
val calSelection = "${android.provider.CalendarContract.Calendars.VISIBLE} = 1"
318+
314319
context.contentResolver.query(
315320
android.provider.CalendarContract.Calendars.CONTENT_URI,
316321
arrayOf(
@@ -319,7 +324,7 @@ class AwidgetProvider : AppWidgetProvider() {
319324
android.provider.CalendarContract.Calendars.ACCOUNT_NAME,
320325
android.provider.CalendarContract.Calendars.CALENDAR_DISPLAY_NAME
321326
),
322-
null, null, null
327+
calSelection, null, null
323328
)?.use { cursor ->
324329
val idIdx = cursor.getColumnIndex(android.provider.CalendarContract.Calendars._ID)
325330
val typeIdx = cursor.getColumnIndex(android.provider.CalendarContract.Calendars.ACCOUNT_TYPE)
@@ -331,6 +336,8 @@ class AwidgetProvider : AppWidgetProvider() {
331336
val accountName = cursor.getString(nameIdx) ?: ""
332337
val displayName = cursor.getString(displayIdx) ?: ""
333338

339+
visibleCalendarIds.add(calId)
340+
334341
// Mark as synced (holiday) if it contains "holiday" in name or display
335342
// Everything else is considered "local" (personal)
336343
if (displayName.contains("holiday", ignoreCase = true) ||
@@ -339,6 +346,8 @@ class AwidgetProvider : AppWidgetProvider() {
339346
}
340347
}
341348
}
349+
350+
if (visibleCalendarIds.isEmpty()) return
342351

343352
val projection = arrayOf(
344353
android.provider.CalendarContract.Instances.EVENT_ID,
@@ -355,8 +364,10 @@ class AwidgetProvider : AppWidgetProvider() {
355364
.appendPath(endQuery.toString())
356365
.build()
357366

358-
// Query without VISIBLE filter to include all calendar providers
359-
val selection = "${android.provider.CalendarContract.Instances.END} >= ?"
367+
// Filter for VISIBLE calendars
368+
// Use IN clause directly in selection
369+
val idList = visibleCalendarIds.joinToString(",")
370+
val selection = "${android.provider.CalendarContract.Instances.END} >= ? AND ${android.provider.CalendarContract.Instances.CALENDAR_ID} IN ($idList)"
360371
val selectionArgs = arrayOf(now.toString())
361372
val sortOrder = "${android.provider.CalendarContract.Instances.BEGIN} ASC"
362373

0 commit comments

Comments
 (0)