summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaj Yengisetty <rajesh@cyngn.com>2015-07-08 16:00:37 -0700
committerRajesh Yengisetty <rajesh@cyngn.com>2015-07-08 16:15:35 -0700
commitd358043729b435fe39f57bc267188414f3041bde (patch)
treede2fb1f6e2ba3473dd08e24bb247bcb83100f86c
parentf82af5f76280a11475a2b7d8460761a961371e73 (diff)
downloadandroid_packages_apps_Gallery2-d358043729b435fe39f57bc267188414f3041bde.tar.gz
android_packages_apps_Gallery2-d358043729b435fe39f57bc267188414f3041bde.tar.bz2
android_packages_apps_Gallery2-d358043729b435fe39f57bc267188414f3041bde.zip
Photo Gallery widget: fix NPE in getViewAt
Repro: - Add Photo Gallery widget to a home screen - Select "Shuffle all images" - Immediately drag widget to "Remove" - Observe NPE The remote view is destroyed and the reference to mSource is null. By making onDestroy and getViewAt synchronized methods, we ensure that destroy cannot be executed to null out mSource while getViewAt is being called. Change-Id: I470f9f6227f437039cf111071c905268db1bd62e (cherry picked from commit 9abe70951b1cc559f82bbf803a1f4893105c27c9)
-rw-r--r--src/com/android/gallery3d/gadget/WidgetService.java8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/com/android/gallery3d/gadget/WidgetService.java b/src/com/android/gallery3d/gadget/WidgetService.java
index fc54fb6e8..854433776 100644
--- a/src/com/android/gallery3d/gadget/WidgetService.java
+++ b/src/com/android/gallery3d/gadget/WidgetService.java
@@ -80,7 +80,7 @@ public class WidgetService extends RemoteViewsService {
}
@Override
- public void onDestroy() {
+ public synchronized void onDestroy() {
mSource.close();
mSource = null;
}
@@ -115,7 +115,11 @@ public class WidgetService extends RemoteViewsService {
}
@Override
- public RemoteViews getViewAt(int position) {
+ public synchronized RemoteViews getViewAt(int position) {
+ if (mSource == null) {
+ // This instance has been destroyed, exit out
+ return null;
+ }
Bitmap bitmap = mSource.getImage(position);
if (bitmap == null) return getLoadingView();
RemoteViews views = new RemoteViews(