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 | 4e88a8c2a2addfadb05ca9699f505a3f348f3692 (patch) | |
| tree | d97b35fa5ff90e833f3b806b29afa589d9a68b1c /src | |
| parent | c760a5c49774c90b97ae818c6ee4e14825361b4b (diff) | |
| download | android_packages_apps_Gallery2-4e88a8c2a2addfadb05ca9699f505a3f348f3692.tar.gz android_packages_apps_Gallery2-4e88a8c2a2addfadb05ca9699f505a3f348f3692.tar.bz2 android_packages_apps_Gallery2-4e88a8c2a2addfadb05ca9699f505a3f348f3692.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; } |
