@@ -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