summaryrefslogtreecommitdiffstats
path: root/services/appwidget
diff options
context:
space:
mode:
authorSvetoslav <svetoslavganov@google.com>2014-09-22 12:25:24 -0700
committerSvetoslav <svetoslavganov@google.com>2014-09-22 12:31:04 -0700
commitc616b3e2f16c99c51e0543256c219e799ff32232 (patch)
treedb5b88f1804acd20d3028f870db395c251fa5052 /services/appwidget
parentfdb35f0526e63dc4d6882d86029d9beacc6a2d07 (diff)
downloadframeworks_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.java16
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;