diff options
author | Bobby Georgescu <georgescu@google.com> | 2012-10-10 21:08:47 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-10-10 21:08:47 -0700 |
commit | a3917bb0f70d998201ed3d72ad58dbc02cc85a2c (patch) | |
tree | 2e7f0c06412bc76f0df90b5136dae3acf5a76321 /src/com/android/gallery3d | |
parent | 50150ace712bb4a70301fc4b6c24a1728024098c (diff) | |
parent | ed2205d0c091f090ef2476e6e58ac29da7768f54 (diff) | |
download | android_packages_apps_Snap-a3917bb0f70d998201ed3d72ad58dbc02cc85a2c.tar.gz android_packages_apps_Snap-a3917bb0f70d998201ed3d72ad58dbc02cc85a2c.tar.bz2 android_packages_apps_Snap-a3917bb0f70d998201ed3d72ad58dbc02cc85a2c.zip |
am f8a46874: Merge "Defer expensive UI updates in filmstrip" into gb-ub-photos-arches
* commit 'f8a46874235b3169a68f8bd6566c81b44de34e7a':
Defer expensive UI updates in filmstrip
Diffstat (limited to 'src/com/android/gallery3d')
-rw-r--r-- | src/com/android/gallery3d/app/PhotoPage.java | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java index 2e19a2ba8..f6e3fb745 100644 --- a/src/com/android/gallery3d/app/PhotoPage.java +++ b/src/com/android/gallery3d/app/PhotoPage.java @@ -93,6 +93,7 @@ public class PhotoPage extends ActivityState implements private static final int MSG_ON_CAMERA_CENTER = 9; private static final int MSG_ON_PICTURE_CENTER = 10; private static final int MSG_REFRESH_IMAGE = 11; + private static final int MSG_UPDATE_DEFERRED = 12; private static final int HIDE_BARS_TIMEOUT = 3500; private static final int UNFREEZE_GLROOT_TIMEOUT = 250; @@ -169,6 +170,10 @@ public class PhotoPage extends ActivityState implements private boolean mSkipUpdateCurrentPhoto = false; private static final long CAMERA_SWITCH_CUTOFF_THRESHOLD_MS = 300; + private static final long DEFERRED_UPDATE_MS = 150; + private boolean mDeferredUpdateWaiting = false; + private long mDeferUpdateUntil = Long.MAX_VALUE; + private RawTexture mFadeOutTexture; private Rect mOpenAnimationRect; public static final int ANIM_TIME_OPENING = 300; @@ -314,6 +319,16 @@ public class PhotoPage extends ActivityState implements mActivity.getGLRoot().unfreeze(); break; } + case MSG_UPDATE_DEFERRED: { + long nextUpdate = mDeferUpdateUntil - SystemClock.uptimeMillis(); + if (nextUpdate <= 0) { + mDeferredUpdateWaiting = false; + updateUIForCurrentPhoto(); + } else { + mHandler.sendEmptyMessageDelayed(MSG_UPDATE_DEFERRED, nextUpdate); + } + break; + } case MSG_ON_CAMERA_CENTER: { mSkipUpdateCurrentPhoto = false; boolean stayedOnCamera = false; @@ -334,7 +349,7 @@ public class PhotoPage extends ActivityState implements break; } case MSG_ON_PICTURE_CENTER: { - if (mCurrentPhoto != null + if (!mPhotoView.getFilmMode() && mCurrentPhoto != null && (mCurrentPhoto.getSupportedOperations() & MediaObject.SUPPORT_ACTION) != 0) { mPhotoView.setFilmMode(true); } @@ -639,15 +654,21 @@ public class PhotoPage extends ActivityState implements setNfcBeamPushUri(uri); } - private void updateCurrentPhoto(MediaItem photo) { - if (mCurrentPhoto == photo) return; - mCurrentPhoto = photo; + private void requestDeferredUpdate() { + mDeferUpdateUntil = SystemClock.uptimeMillis() + DEFERRED_UPDATE_MS; + if (!mDeferredUpdateWaiting) { + mDeferredUpdateWaiting = true; + mHandler.sendEmptyMessageDelayed(MSG_UPDATE_DEFERRED, DEFERRED_UPDATE_MS); + } + } + + private void updateUIForCurrentPhoto() { if (mCurrentPhoto == null) return; // If by swiping or deletion the user ends up on an action item // and zoomed in, zoom out so that the context of the action is // more clear - if ((photo.getSupportedOperations() & MediaObject.SUPPORT_ACTION) != 0 + if ((mCurrentPhoto.getSupportedOperations() & MediaObject.SUPPORT_ACTION) != 0 && !mPhotoView.getFilmMode()) { mPhotoView.setWantPictureCenterCallbacks(true); } @@ -658,8 +679,18 @@ public class PhotoPage extends ActivityState implements mDetailsHelper.reloadDetails(); } if ((mSecureAlbum == null) - && (photo.getSupportedOperations() & MediaItem.SUPPORT_SHARE) != 0) { - updateShareURI(photo.getPath()); + && (mCurrentPhoto.getSupportedOperations() & MediaItem.SUPPORT_SHARE) != 0) { + updateShareURI(mCurrentPhoto.getPath()); + } + } + + private void updateCurrentPhoto(MediaItem photo) { + if (mCurrentPhoto == photo) return; + mCurrentPhoto = photo; + if (mPhotoView.getFilmMode()) { + requestDeferredUpdate(); + } else { + updateUIForCurrentPhoto(); } if (mProgressBar != null) { mProgressBar.hideProgress(); |