diff options
| author | 2024-12-03 18:03:03 +0000 | |
|---|---|---|
| committer | 2024-12-03 18:03:03 +0000 | |
| commit | b1c2ecde96bd06b425e19622f2c642d66801723d (patch) | |
| tree | a0cb2d0f63d181daed4527906eae8c7c3a584833 | |
| parent | c4d1be2125d258013a5d3bb1be03e7c9c2be9352 (diff) | |
| parent | b0e9a27493bc4ec96f6d5b52c8dc7454731f5cc9 (diff) | |
Merge "Fix an issue with alarm message accidentally deleted" into main
| -rw-r--r-- | services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 762665c00e05..cffdfbd36532 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -330,6 +330,8 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku // Handler to the background thread that saves states to disk. private Handler mSaveStateHandler; + + private Handler mAlarmHandler; // Handler to the background thread that saves generated previews to disk. All operations that // modify saved previews must be run on this Handler. private Handler mSavePreviewsHandler; @@ -373,6 +375,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku if (removeAppWidgetServiceIoFromCriticalPath()) { mSaveStateHandler = new Handler(BackgroundThread.get().getLooper(), this::handleSaveMessage); + mAlarmHandler = new Handler(BackgroundThread.get().getLooper()); } else { mSaveStateHandler = BackgroundThread.getHandler(); } @@ -2739,10 +2742,15 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } if (provider.broadcast != null) { final PendingIntent broadcast = provider.broadcast; - mSaveStateHandler.post(() -> { - mAlarmManager.cancel(broadcast); - broadcast.cancel(); - }); + Runnable cancelRunnable = () -> { + mAlarmManager.cancel(broadcast); + broadcast.cancel(); + }; + if (removeAppWidgetServiceIoFromCriticalPath()) { + mAlarmHandler.post(cancelRunnable); + } else { + mSaveStateHandler.post(cancelRunnable); + } provider.broadcast = null; } } @@ -3422,10 +3430,16 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku // invariant and established the PendingIntent safely. final long period = Math.max(info.updatePeriodMillis, MIN_UPDATE_PERIOD); final PendingIntent broadcast = provider.broadcast; - mSaveStateHandler.post(() -> + + Runnable repeatRunnable = () -> { mAlarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, - SystemClock.elapsedRealtime() + period, period, broadcast) - ); + SystemClock.elapsedRealtime() + period, period, broadcast); + }; + if (removeAppWidgetServiceIoFromCriticalPath()) { + mAlarmHandler.post(repeatRunnable); + } else { + mSaveStateHandler.post(repeatRunnable); + } } } } |