diff options
author | Bobby Georgescu <georgescu@google.com> | 2012-08-23 14:35:18 -0700 |
---|---|---|
committer | Bobby Georgescu <georgescu@google.com> | 2012-08-23 14:40:11 -0700 |
commit | cd05ff0772df2c87b29180f0f8a90842c6ac8e52 (patch) | |
tree | 2fc9db143b0a3bd73ad7f86c2174360c22b0b21a /src | |
parent | b0b56b7d5e2d707c8094b23b058da3cfd1446d3c (diff) | |
download | android_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.java | 21 | ||||
-rw-r--r-- | src/com/android/gallery3d/ui/PreparePageFadeoutTexture.java | 16 |
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; } |