summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Amith Yamasani <yamasani@google.com> 2012-11-27 11:31:14 -0800
committer Android Git Automerger <android-git-automerger@android.com> 2012-11-27 11:31:14 -0800
commiteb933360ee4249a453d2df4b77fbab0179abee2e (patch)
treecc6205b3eba1856827b7536740a1ca1b33bbaf92
parent9f6e8ddf5d48a695b26f1d9759696b56952177bd (diff)
parent7be52cbc33157e4700b7d04e69d1149cd80e9096 (diff)
am 7be52cbc: Merge "Logging to help find the cause of widget crash in clock widget." into jb-mr1.1-dev
* commit '7be52cbc33157e4700b7d04e69d1149cd80e9096': Logging to help find the cause of widget crash in clock widget.
-rw-r--r--services/java/com/android/server/AppWidgetServiceImpl.java24
1 files changed, 24 insertions, 0 deletions
diff --git a/services/java/com/android/server/AppWidgetServiceImpl.java b/services/java/com/android/server/AppWidgetServiceImpl.java
index fe92b264fef8..bba5192d9440 100644
--- a/services/java/com/android/server/AppWidgetServiceImpl.java
+++ b/services/java/com/android/server/AppWidgetServiceImpl.java
@@ -336,6 +336,7 @@ class AppWidgetServiceImpl {
pw.print(info.autoAdvanceViewId);
pw.print(" initialLayout=#");
pw.print(Integer.toHexString(info.initialLayout));
+ pw.print(" uid="); pw.print(p.uid);
pw.print(" zombie="); pw.println(p.zombie);
}
@@ -699,6 +700,10 @@ class AppWidgetServiceImpl {
}
int userId = UserHandle.getUserId(id.provider.uid);
+ if (userId != mUserId) {
+ Slog.w(TAG, "AppWidgetServiceImpl of user " + mUserId
+ + " binding to provider on user " + userId);
+ }
// Bind to the RemoteViewsService (which will trigger a callback to the
// RemoteViewsAdapter.onServiceConnected())
final long token = Binder.clearCallingIdentity();
@@ -966,6 +971,13 @@ class AppWidgetServiceImpl {
ensureStateLoadedLocked();
for (int i = 0; i < N; i++) {
AppWidgetId id = lookupAppWidgetIdLocked(appWidgetIds[i]);
+ if (id == null) {
+ String message = "AppWidgetId NPE: mUserId=" + mUserId
+ + ", callingUid=" + Binder.getCallingUid()
+ + ", appWidgetIds[i]=" + appWidgetIds[i]
+ + "\n mAppWidgets:\n" + getUserWidgets();
+ throw new NullPointerException(message);
+ }
if (id.views != null) {
// Only trigger a partial update for a widget if it has received a full update
updateAppWidgetInstanceLocked(id, views, true);
@@ -974,6 +986,18 @@ class AppWidgetServiceImpl {
}
}
+ private String getUserWidgets() {
+ StringBuffer sb = new StringBuffer();
+ for (AppWidgetId widget: mAppWidgetIds) {
+ sb.append(" id="); sb.append(widget.appWidgetId);
+ sb.append(", hostUid="); sb.append(widget.host.uid);
+ sb.append(", provider="); sb.append(widget.provider.info.provider.toString());
+ sb.append("\n");
+ }
+ sb.append("\n");
+ return sb.toString();
+ }
+
public void notifyAppWidgetViewDataChanged(int[] appWidgetIds, int viewId) {
if (appWidgetIds == null) {
return;