checkpoint 3d all apps entrance / exit animations
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java
index 5128db3..7bb6c8f 100644
--- a/src/com/android/launcher2/AllAppsView.java
+++ b/src/com/android/launcher2/AllAppsView.java
@@ -64,9 +64,18 @@
implements View.OnClickListener, View.OnLongClickListener, DragSource {
private static final String TAG = "Launcher.AllAppsView";
+ /** Bit for mLocks for when there are icons being loaded. */
+ private static final int LOCK_ICONS_PENDING = 1;
+
+ /** Bit for mLocks for when the enter/exit is going. */
+ private static final int LOCK_ZOOMING = 2;
+
private Launcher mLauncher;
private DragController mDragController;
- private boolean mLocked = true;
+
+ /** When this is 0, modifications are allowed, when it's not, they're not.
+ * TODO: What about scrolling? */
+ private int mLocks = LOCK_ICONS_PENDING;
private RenderScript mRS;
private RolloRS mRollo;
@@ -80,7 +89,6 @@
private int mLastMotionX;
private int mMotionDownRawX;
private int mMotionDownRawY;
- private TouchHandler mTouchHandler;
private int mScrollHandleTop;
static class Defines {
@@ -168,95 +176,74 @@
return true;
}
- if (mLocked) {
+ if (mLocks != 0) {
return true;
}
super.onTouchEvent(ev);
- mTouchHandler = mFlingHandler;
- /*
- int action = ev.getAction();
- if (action == MotionEvent.ACTION_DOWN) {
- if (ev.getY() > mScrollHandleTop) {
- mTouchHandler = mScrollHandler;
+ int x = (int)ev.getX();
+ int deltaX;
+ switch (ev.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ mMotionDownRawX = (int)ev.getRawX();
+ mMotionDownRawY = (int)ev.getRawY();
+ mLastMotionX = x;
+ mRollo.mState.read();
+ mRollo.mState.startScrollX = mRollo.mState.scrollX = mLastScrollX
+ = mRollo.mState.currentScrollX;
+ if (mRollo.mState.flingVelocityX != 0) {
+ mRollo.clearSelectedIcon();
} else {
- mTouchHandler = mFlingHandler;
+ mRollo.selectIcon(x, (int)ev.getY(), mRollo.mState.startScrollX,
+ (-mRollo.mState.startScrollX / Defines.SCREEN_WIDTH_PX));
}
+ mRollo.mState.flingVelocityX = 0;
+ mRollo.mState.adjustedDeceleration = 0;
+ mRollo.mState.save();
+ mVelocity = VelocityTracker.obtain();
+ mVelocity.addMovement(ev);
+ mStartedScrolling = false;
+ break;
+ case MotionEvent.ACTION_MOVE:
+ case MotionEvent.ACTION_OUTSIDE:
+ int slop = Math.abs(x - mLastMotionX);
+ if (!mStartedScrolling && slop < mConfig.getScaledTouchSlop()) {
+ // don't update mLastMotionX so slop is right and when we do start scrolling
+ // below, we get the right delta.
+ } else {
+ mStartedScrolling = true;
+ mRollo.clearSelectedIcon();
+ deltaX = x - mLastMotionX;
+ mVelocity.addMovement(ev);
+ mRollo.mState.currentScrollX = mLastScrollX;
+ mLastScrollX += deltaX;
+ mRollo.mState.scrollX = mLastScrollX;
+ mRollo.mState.save();
+ mLastMotionX = x;
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ mVelocity.computeCurrentVelocity(1000 /* px/sec */,
+ mConfig.getScaledMaximumFlingVelocity());
+ mRollo.mState.flingTimeMs = (int)SystemClock.uptimeMillis(); // TODO: use long
+ mRollo.mState.flingVelocityX = (int)mVelocity.getXVelocity();
+ mRollo.clearSelectedIcon();
+ mRollo.mState.save();
+ mLastMotionX = -10000;
+ mVelocity.recycle();
+ mVelocity = null;
+ break;
}
- */
- mTouchHandler.onTouchEvent(ev);
return true;
}
- private abstract class TouchHandler {
- abstract boolean onTouchEvent(MotionEvent ev);
- };
-
- private TouchHandler mFlingHandler = new TouchHandler() {
- @Override
- public boolean onTouchEvent(MotionEvent ev)
- {
- int x = (int)ev.getX();
- int deltaX;
- switch (ev.getAction()) {
- case MotionEvent.ACTION_DOWN:
- mMotionDownRawX = (int)ev.getRawX();
- mMotionDownRawY = (int)ev.getRawY();
- mLastMotionX = x;
- mRollo.mState.read();
- mRollo.mState.startScrollX = mRollo.mState.scrollX = mLastScrollX
- = mRollo.mState.currentScrollX;
- if (mRollo.mState.flingVelocityX != 0) {
- mRollo.clearSelectedIcon();
- } else {
- mRollo.selectIcon(x, (int)ev.getY(), mRollo.mState.startScrollX,
- (-mRollo.mState.startScrollX / Defines.SCREEN_WIDTH_PX));
- }
- mRollo.mState.flingVelocityX = 0;
- mRollo.mState.adjustedDeceleration = 0;
- mRollo.mState.save();
- mVelocity = VelocityTracker.obtain();
- mVelocity.addMovement(ev);
- mStartedScrolling = false;
- break;
- case MotionEvent.ACTION_MOVE:
- case MotionEvent.ACTION_OUTSIDE:
- int slop = Math.abs(x - mLastMotionX);
- if (!mStartedScrolling && slop < mConfig.getScaledTouchSlop()) {
- // don't update mLastMotionX so slop is right and when we do start scrolling
- // below, we get the right delta.
- } else {
- mStartedScrolling = true;
- mRollo.clearSelectedIcon();
- deltaX = x - mLastMotionX;
- mVelocity.addMovement(ev);
- mRollo.mState.currentScrollX = mLastScrollX;
- mLastScrollX += deltaX;
- mRollo.mState.scrollX = mLastScrollX;
- mRollo.mState.save();
- mLastMotionX = x;
- }
- break;
- case MotionEvent.ACTION_UP:
- case MotionEvent.ACTION_CANCEL:
- mVelocity.computeCurrentVelocity(1000 /* px/sec */,
- mConfig.getScaledMaximumFlingVelocity());
- mRollo.mState.flingTimeMs = (int)SystemClock.uptimeMillis(); // TODO: use long
- mRollo.mState.flingVelocityX = (int)mVelocity.getXVelocity();
- mRollo.clearSelectedIcon();
- mRollo.mState.save();
- mLastMotionX = -10000;
- mVelocity.recycle();
- mVelocity = null;
- break;
- }
- return true;
- }
- };
-
public void onClick(View v) {
+ if (mLocks != 0) {
+ return;
+ }
int index = mRollo.mState.selectedIconIndex;
if (mRollo.mState.flingVelocityX == 0 && index >= 0 && index < mAllAppsList.size()) {
ApplicationInfo app = mAllAppsList.get(index);
@@ -265,6 +252,9 @@
}
public boolean onLongClick(View v) {
+ if (mLocks != 0) {
+ return true;
+ }
int index = mRollo.mState.selectedIconIndex;
Log.d(TAG, "long click! velocity=" + mRollo.mState.flingVelocityX + " index=" + index);
if (mRollo.mState.flingVelocityX == 0 && index >= 0 && index < mAllAppsList.size()) {
@@ -280,7 +270,7 @@
left, top, Defines.ICON_WIDTH_PX, Defines.ICON_HEIGHT_PX,
this, app, DragController.DRAG_ACTION_COPY);
- mLauncher.closeAllAppsDialog(true);
+ mLauncher.closeAllApps(true);
}
return true;
}
@@ -294,15 +284,10 @@
private static final int SCALE_SCALE = 100000;
- public void show() {
- mRollo.mState.read();
- mRollo.mState.visible = 1;
- mRollo.mState.zoom = SCALE_SCALE;
- mRollo.mState.save();
- }
-
public void setScale(float amount) {
+ cancelLongPress();
mRollo.mState.read();
+ mRollo.clearSelectedIcon();
if (amount > 0.001f) {
mRollo.mState.visible = 1;
mRollo.mState.zoom = (int)(SCALE_SCALE*amount);
@@ -310,37 +295,21 @@
mRollo.mState.visible = 0;
mRollo.mState.zoom = 0;
}
- mRollo.mState.save();
- }
-
- public void hide() {
- mRollo.mState.read();
- mRollo.mState.visible = 0;
- mRollo.mState.zoom = 0;
- mRollo.mState.save();
- }
-
- /*
- private TouchHandler mScrollHandler = new TouchHandler() {
- @Override
- public boolean onTouchEvent(MotionEvent ev)
- {
- int x = (int)ev.getX();
- int w = getWidth();
-
- float percent = x / (float)w;
-
- mRollo.mState.read();
-
- mRollo.mState.scrollX = mLastScrollX = -(int)(mPageCount * w * percent);
- mRollo.mState.flingVelocityX = 0;
- mRollo.mState.adjustedDeceleration = 0;
- mRollo.mState.save();
-
- return true;
+ if (amount > 0.001f && amount < 0.999f) {
+ mLocks |= LOCK_ZOOMING;
+ } else {
+ mLocks &= ~LOCK_ZOOMING;
}
- };
- */
+ mRollo.mState.save();
+ }
+
+ public boolean isZooming() {
+ return (mLocks & LOCK_ZOOMING) != 0;
+ }
+
+ public boolean isVisible() {
+ return mRollo != null && mRollo.mState.visible != 0;
+ }
@Override
public boolean onTrackballEvent(MotionEvent ev)
@@ -362,7 +331,7 @@
}
mPageCount = countPages(list.size());
Log.d(TAG, "setApps mRollo=" + mRollo + " list=" + list);
- mLocked = false;
+ mLocks &= ~LOCK_ICONS_PENDING;
}
private void invokeIcon(int index) {