diff options
author | Svetoslav <svetoslavganov@google.com> | 2014-09-22 12:25:24 -0700 |
---|---|---|
committer | Svetoslav <svetoslavganov@google.com> | 2014-09-22 12:31:04 -0700 |
commit | c616b3e2f16c99c51e0543256c219e799ff32232 (patch) | |
tree | db5b88f1804acd20d3028f870db395c251fa5052 /services/appwidget | |
parent | fdb35f0526e63dc4d6882d86029d9beacc6a2d07 (diff) | |
download | frameworks_base-c616b3e2f16c99c51e0543256c219e799ff32232.zip frameworks_base-c616b3e2f16c99c51e0543256c219e799ff32232.tar.gz frameworks_base-c616b3e2f16c99c51e0543256c219e799ff32232.tar.bz2 |
Fix a bug in parsing app widget state XML.
When restoring app widget state from XML we read all providers,
hosts, and widgets and only after reading all hosts and providers
for all members of the group we hookup the widgets as they may
cross profile boundary. To esntablish the host-widget and provider-
widget relation we use a tag for the host and the provider that
are assigned before saving the state to XML. When restoring we
are using the tags to match widgets with hosts and providers. The
bug was that we were not clearing the tag of all hosts and providers
before reading from XML as we want the only tags that are defined
to be the ones we are reading. This resulted in wrong app widget
restore for a secondary user.
bug:17505027
Change-Id: I035d8f13142c6b9dbc9d658b82390f9cd8d75e0d
Diffstat (limited to 'services/appwidget')
-rw-r--r-- | services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index d05de69..86cfdb9 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -434,6 +434,8 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } } + clearProvidersAndHostsTagsLocked(); + loadGroupWidgetProvidersLocked(newProfileIds); loadGroupStateLocked(newProfileIds); } @@ -2372,6 +2374,20 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } } + private void clearProvidersAndHostsTagsLocked() { + final int providerCount = mProviders.size(); + for (int i = 0; i < providerCount; i++) { + Provider provider = mProviders.get(i); + provider.tag = TAG_UNDEFINED; + } + + final int hostCount = mHosts.size(); + for (int i = 0; i < hostCount; i++) { + Host host = mHosts.get(i); + host.tag = TAG_UNDEFINED; + } + } + private boolean writeProfileStateToFileLocked(FileOutputStream stream, int userId) { int N; |