Merge "Make sure startAnimation won't be called after onPause." into ics-mr1
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index ec7d161..5d0fd15 100644
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -17,8 +17,8 @@
package com.android.gallery3d.app;
import android.app.ActionBar;
-import android.app.Activity;
import android.app.ActionBar.OnMenuVisibilityListener;
+import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
@@ -30,8 +30,8 @@
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
-import android.view.WindowManager;
import android.view.View.MeasureSpec;
+import android.view.WindowManager;
import android.widget.ShareActionProvider;
import android.widget.Toast;
@@ -344,6 +344,7 @@
}
}
+ @Override
public void onUserInteraction() {
showBars();
refreshHidingMessage();
@@ -359,15 +360,21 @@
}
}
+ @Override
public void onUserInteractionBegin() {
showBars();
mIsInteracting = true;
refreshHidingMessage();
}
+ @Override
public void onUserInteractionEnd() {
mIsInteracting = false;
- refreshHidingMessage();
+
+ // This function could be called from GL thread (in SlotView.render)
+ // and post to the main thread. So, it could be executed while the
+ // activity is paused.
+ if (mIsActive) refreshHidingMessage();
}
@Override
diff --git a/src/com/android/gallery3d/ui/SlotView.java b/src/com/android/gallery3d/ui/SlotView.java
index a6e94d2..3e0e2f2 100644
--- a/src/com/android/gallery3d/ui/SlotView.java
+++ b/src/com/android/gallery3d/ui/SlotView.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.graphics.Rect;
+import android.os.Handler;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.animation.DecelerateInterpolator;
@@ -81,6 +82,7 @@
// whether the down action happened while the view is scrolling.
private boolean mDownInScrolling;
private int mOverscrollEffect = OVERSCROLL_3D;
+ private final Handler mHandler;
public static final int OVERSCROLL_3D = 0;
public static final int OVERSCROLL_SYSTEM = 1;
@@ -90,6 +92,7 @@
mGestureDetector =
new GestureDetector(context, new MyGestureListener());
mScroller = new ScrollerHelper(context);
+ mHandler = new Handler(context.getMainLooper());
}
public void setCenterIndex(int index) {
@@ -323,8 +326,15 @@
}
if (more) invalidate();
- if (mMoreAnimation && !more && mUIListener != null) {
- mUIListener.onUserInteractionEnd();
+
+ final UserInteractionListener listener = mUIListener;
+ if (mMoreAnimation && !more && listener != null) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ listener.onUserInteractionEnd();
+ }
+ });
}
mMoreAnimation = more;
}