@@ -25,6 +25,7 @@ import android.os.Build
2525import android.content.ComponentName
2626import android.content.Context
2727import android.content.Intent
28+ import android.content.SharedPreferences
2829import android.content.IntentFilter
2930import android.net.NetworkCapabilities
3031import android.app.usage.NetworkStatsManager
@@ -210,8 +211,14 @@ class AwidgetProvider : AppWidgetProvider() {
210211 }
211212
212213 // Suspended function called from Coroutine
213- fun buildAppWidgetRemoteViews (context : Context , mode : UpdateMode = UpdateMode .FULL ): RemoteViews {
214- val prefs = context.getSharedPreferences(" com.leanbitlab.lwidget.PREFS" , Context .MODE_PRIVATE )
214+ fun buildAppWidgetRemoteViews (context : Context , appWidgetId : Int , mode : UpdateMode = UpdateMode .FULL ): RemoteViews {
215+ val globalPrefs = context.getSharedPreferences(" com.leanbitlab.lwidget.PREFS" , Context .MODE_PRIVATE )
216+ val prefs = if (appWidgetId != AppWidgetManager .INVALID_APPWIDGET_ID ) {
217+ val wPrefs = context.getSharedPreferences(" com.leanbitlab.lwidget.PREFS_$appWidgetId " , Context .MODE_PRIVATE )
218+ FallbackPreferences (wPrefs, globalPrefs)
219+ } else {
220+ globalPrefs
221+ }
215222
216223 // --- Load Preferences ---
217224 val showTime = prefs.getBoolean(" show_time" , true )
@@ -491,7 +498,7 @@ class AwidgetProvider : AppWidgetProvider() {
491498 return tickViews
492499 } else if (mode == UpdateMode .CALENDAR_ONLY ) {
493500 val calViews = RemoteViews (context.packageName, layoutId)
494- if (showEvents) loadCalendarEvents(context, calViews, sizeEvents, primaryColor, secondaryColor)
501+ if (showEvents) loadCalendarEvents(context, calViews, sizeEvents, primaryColor, secondaryColor, prefs )
495502 return calViews
496503 } else if (mode == UpdateMode .TASKS_ONLY ) {
497504 val taskViews = RemoteViews (context.packageName, layoutId)
@@ -852,7 +859,7 @@ class AwidgetProvider : AppWidgetProvider() {
852859 views.setViewVisibility(R .id.events_container, if (showEvents || showTasks) android.view.View .VISIBLE else android.view.View .GONE )
853860
854861 if (showEvents) {
855- loadCalendarEvents(context, views, sizeEvents, primaryColor, secondaryColor)
862+ loadCalendarEvents(context, views, sizeEvents, primaryColor, secondaryColor, prefs )
856863 } else if (showTasks) {
857864 loadTasks(context, views, sizeTasks, primaryColor)
858865 }
@@ -882,15 +889,18 @@ class AwidgetProvider : AppWidgetProvider() {
882889 views.setOnClickPendingIntent(R .id.events_container, refreshPendingIntent)
883890 }
884891
885- val settingsIntent = Intent (context, MainActivity ::class .java)
886- val settingsPendingIntent = PendingIntent .getActivity(context, 0 , settingsIntent, PendingIntent .FLAG_IMMUTABLE )
892+ val settingsIntent = Intent (context, MainActivity ::class .java).apply {
893+ putExtra(AppWidgetManager .EXTRA_APPWIDGET_ID , appWidgetId)
894+ data = android.net.Uri .parse(" lwidget://widget/$appWidgetId " )
895+ }
896+ val settingsPendingIntent = PendingIntent .getActivity(context, appWidgetId, settingsIntent, PendingIntent .FLAG_IMMUTABLE )
887897 views.setOnClickPendingIntent(R .id.widget_root, settingsPendingIntent)
888898
889899 return views
890900 }
891901
892902 fun updateAppWidget (context : Context , appWidgetManager : AppWidgetManager , appWidgetId : Int , mode : UpdateMode = UpdateMode .FULL ) {
893- val views = buildAppWidgetRemoteViews(context, mode)
903+ val views = buildAppWidgetRemoteViews(context, appWidgetId, mode)
894904 if (mode == UpdateMode .FULL ) {
895905 appWidgetManager.updateAppWidget(appWidgetId, views)
896906 } else {
@@ -979,8 +989,7 @@ class AwidgetProvider : AppWidgetProvider() {
979989 return events
980990 }
981991
982- private fun bindCalendarEvents (context : Context , views : RemoteViews , events : List <EventInfo >, textSizeSp : Float , primaryColor : Int , secondaryColor : Int , eventViews : List <Int >) {
983- val prefs = context.getSharedPreferences(" com.leanbitlab.lwidget.PREFS" , Context .MODE_PRIVATE )
992+ private fun bindCalendarEvents (context : Context , views : RemoteViews , events : List <EventInfo >, textSizeSp : Float , primaryColor : Int , secondaryColor : Int , eventViews : List <Int >, prefs : SharedPreferences ) {
984993 val showDayAbbr = prefs.getBoolean(" show_day_abbr_in_events" , true )
985994
986995 val timeFormatter = getFormatter(" h:mm" )
@@ -1057,7 +1066,7 @@ class AwidgetProvider : AppWidgetProvider() {
10571066 }
10581067 }
10591068
1060- private fun loadCalendarEvents (context : Context , views : RemoteViews , textSizeSp : Float , primaryColor : Int , secondaryColor : Int ) {
1069+ private fun loadCalendarEvents (context : Context , views : RemoteViews , textSizeSp : Float , primaryColor : Int , secondaryColor : Int , prefs : SharedPreferences ) {
10611070 if (androidx.core.content.ContextCompat .checkSelfPermission(
10621071 context, android.Manifest .permission.READ_CALENDAR
10631072 ) != android.content.pm.PackageManager .PERMISSION_GRANTED ) {
@@ -1073,7 +1082,7 @@ class AwidgetProvider : AppWidgetProvider() {
10731082
10741083 try {
10751084 val events = fetchCalendarEvents(context)
1076- bindCalendarEvents(context, views, events, textSizeSp, primaryColor, secondaryColor, eventViews)
1085+ bindCalendarEvents(context, views, events, textSizeSp, primaryColor, secondaryColor, eventViews, prefs )
10771086 } catch (e: Exception ) {
10781087 // Log and gracefully handle crash
10791088 android.util.Log .e(" LWidget" , " Error loading calendar events" , e)
0 commit comments