summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d
diff options
context:
space:
mode:
authorBobby Georgescu <georgescu@google.com>2012-10-10 21:08:47 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-10-10 21:08:47 -0700
commita3917bb0f70d998201ed3d72ad58dbc02cc85a2c (patch)
tree2e7f0c06412bc76f0df90b5136dae3acf5a76321 /src/com/android/gallery3d
parent50150ace712bb4a70301fc4b6c24a1728024098c (diff)
parented2205d0c091f090ef2476e6e58ac29da7768f54 (diff)
downloadandroid_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.java45
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();