summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBobby Georgescu <georgescu@google.com>2012-08-23 14:35:18 -0700
committerBobby Georgescu <georgescu@google.com>2012-08-23 14:40:11 -0700
commitcd05ff0772df2c87b29180f0f8a90842c6ac8e52 (patch)
tree2fc9db143b0a3bd73ad7f86c2174360c22b0b21a /src
parentb0b56b7d5e2d707c8094b23b058da3cfd1446d3c (diff)
downloadandroid_packages_apps_Snap-cd05ff0772df2c87b29180f0f8a90842c6ac8e52.tar.gz
android_packages_apps_Snap-cd05ff0772df2c87b29180f0f8a90842c6ac8e52.tar.bz2
android_packages_apps_Snap-cd05ff0772df2c87b29180f0f8a90842c6ac8e52.zip
Fix NPE, ANRs in Gallery
Bug: 7041482 Bug: 7041769 Change-Id: I06596bd9a058a8fe51c19108a0891c458950f22b
Diffstat (limited to 'src')
-rw-r--r--src/com/android/gallery3d/app/AlbumPage.java21
-rw-r--r--src/com/android/gallery3d/ui/PreparePageFadeoutTexture.java16
2 files changed, 21 insertions, 16 deletions
diff --git a/src/com/android/gallery3d/app/AlbumPage.java b/src/com/android/gallery3d/app/AlbumPage.java
index fe0e07836..a39195007 100644
--- a/src/com/android/gallery3d/app/AlbumPage.java
+++ b/src/com/android/gallery3d/app/AlbumPage.java
@@ -233,25 +233,23 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
}
}
- private PreparePageFadeoutTexture mPrepareFadeoutTask;
-
- private void startPrepareFadeOutTexture() {
+ private void prepareFadeOutTexture() {
GLRoot root = mActivity.getGLRoot();
- mPrepareFadeoutTask = new PreparePageFadeoutTexture(
+ PreparePageFadeoutTexture task = new PreparePageFadeoutTexture(
mSlotView.getWidth(), mSlotView.getHeight() +
mActivity.getGalleryActionBar().getHeight(), mRootPane);
+ RawTexture texture = null;
root.unlockRenderThread();
try {
- root.addOnGLIdleListener(mPrepareFadeoutTask);
+ root.addOnGLIdleListener(task);
+ texture = task.get();
} finally {
root.lockRenderThread();
}
- }
- private void finishPrepareFadeOutTexture() {
- mActivity.getTransitionStore().put(KEY_FADE_TEXTURE,
- mPrepareFadeoutTask.get());
- mPrepareFadeoutTask = null;
+ if (texture != null) {
+ mActivity.getTransitionStore().put(KEY_FADE_TEXTURE, texture);
+ }
}
private void onSingleTapUp(int slotIndex) {
@@ -266,9 +264,9 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
// Show pressed-up animation for the single-tap.
mAlbumView.setPressedIndex(slotIndex);
mAlbumView.setPressedUp();
- startPrepareFadeOutTexture();
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_PICK_PHOTO, slotIndex, 0),
FadeTexture.DURATION);
+ prepareFadeOutTexture();
}
}
@@ -282,7 +280,6 @@ public class AlbumPage extends ActivityState implements GalleryActionBar.Cluster
} else {
// Get into the PhotoPage.
// mAlbumView.savePositions(PositionRepository.getInstance(mActivity));
- finishPrepareFadeOutTexture();
Bundle data = new Bundle();
data.putInt(PhotoPage.KEY_INDEX_HINT, slotIndex);
data.putParcelable(PhotoPage.KEY_OPEN_ANIMATION_RECT,
diff --git a/src/com/android/gallery3d/ui/PreparePageFadeoutTexture.java b/src/com/android/gallery3d/ui/PreparePageFadeoutTexture.java
index 250d17a2b..f2b306ef5 100644
--- a/src/com/android/gallery3d/ui/PreparePageFadeoutTexture.java
+++ b/src/com/android/gallery3d/ui/PreparePageFadeoutTexture.java
@@ -8,6 +8,7 @@ public class PreparePageFadeoutTexture implements OnGLIdleListener {
private static final long TIMEOUT = FadeTexture.DURATION;
private RawTexture mTexture;
private ConditionVariable mResultReady = new ConditionVariable(false);
+ private boolean mCancelled = false;
private GLView mRootPane;
public PreparePageFadeoutTexture(int w, int h, GLView rootPane) {
@@ -16,18 +17,25 @@ public class PreparePageFadeoutTexture implements OnGLIdleListener {
}
public synchronized RawTexture get() {
- if (mResultReady.block(TIMEOUT)) {
+ if (mCancelled) {
+ return null;
+ } else if (mResultReady.block(TIMEOUT)) {
return mTexture;
} else {
+ mCancelled = true;
return null;
}
}
@Override
public boolean onGLIdle(GLCanvas canvas, boolean renderRequested) {
- canvas.beginRenderTarget(mTexture);
- mRootPane.render(canvas);
- canvas.endRenderTarget();
+ if(!mCancelled) {
+ canvas.beginRenderTarget(mTexture);
+ mRootPane.render(canvas);
+ canvas.endRenderTarget();
+ } else {
+ mTexture = null;
+ }
mResultReady.open();
return false;
}