From ad870c3d9c58a9ee31cdf4a9807a4cec2e68ab04 Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Tue, 7 Oct 2014 19:26:28 -0700 Subject: [PATCH] Restored widget provider id not properly updated. During restore first the provider records and then the applications are restored. Therefore, we keep the restored provider records in a zombie state and once we get the package install broadcasts from the package manager we update the zombie providers to be real ones. The bug was that while doing this we were not updating the provider id from one with an undefined UID to the one with the UID under which its package now runs. bug:17869323 Change-Id: I20b7cbfd2f90e2f5bf3a6b858d8da99cc1c82841 --- .../com/android/server/appwidget/AppWidgetServiceImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index fca13f8f91c79..76235146cdb63 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -1839,13 +1839,14 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku // If the provider was not found it may be because it was restored and // we did not know its UID so let us find if there is such one. if (existing == null) { - providerId = new ProviderId(UNKNOWN_UID, componentName); - existing = lookupProviderLocked(providerId); + ProviderId restoredProviderId = new ProviderId(UNKNOWN_UID, componentName); + existing = lookupProviderLocked(restoredProviderId); } if (existing != null) { if (existing.zombie && !mSafeMode) { // it's a placeholder that was set up during an app restore + existing.id = providerId; existing.zombie = false; existing.info = provider.info; // the real one filled out from the ResolveInfo if (DEBUG) {