diff options
Diffstat (limited to 'src/com/android/launcher2/AllAppsView.java')
-rw-r--r-- | src/com/android/launcher2/AllAppsView.java | 121 |
1 files changed, 78 insertions, 43 deletions
diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java index e2f3be3bf..388a9bffe 100644 --- a/src/com/android/launcher2/AllAppsView.java +++ b/src/com/android/launcher2/AllAppsView.java @@ -67,9 +67,6 @@ public class AllAppsView extends RSSurfaceView /** 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; @@ -98,10 +95,11 @@ public class AllAppsView extends RSSurfaceView public static final int ALLOC_PARAMS = 0; public static final int ALLOC_STATE = 1; - public static final int ALLOC_ICON_IDS = 2; - public static final int ALLOC_LABEL_IDS = 3; - public static final int ALLOC_X_BORDERS = 4; - public static final int ALLOC_Y_BORDERS = 5; + public static final int ALLOC_READBACK = 2; + public static final int ALLOC_ICON_IDS = 3; + public static final int ALLOC_LABEL_IDS = 4; + public static final int ALLOC_X_BORDERS = 5; + public static final int ALLOC_Y_BORDERS = 6; public static final int COLUMNS_PER_PAGE = 4; public static final int ROWS_PER_PAGE = 4; @@ -143,6 +141,15 @@ public class AllAppsView extends RSSurfaceView } @Override + public void surfaceDestroyed(SurfaceHolder holder) { + super.surfaceDestroyed(holder); + + destroyRenderScript(); + mRS = null; + mRollo = null; + } + + @Override public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { super.surfaceChanged(holder, format, w, h); @@ -174,7 +181,7 @@ public class AllAppsView extends RSSurfaceView @Override public boolean onTouchEvent(MotionEvent ev) { - if (mRollo.mState.visible == 0) { + if (!isVisible()) { return true; } @@ -191,15 +198,15 @@ public class AllAppsView extends RSSurfaceView mMotionDownRawX = (int)ev.getRawX(); mMotionDownRawY = (int)ev.getRawY(); mLastMotionX = x; - mRollo.mState.read(); + mRollo.mReadback.read(); mRollo.mState.newPositionX = ev.getRawX() / Defines.SCREEN_WIDTH_PX; mRollo.mState.newTouchDown = 1; - if (mRollo.mState.readVel != 0) { + if (mRollo.mReadback.velocity != 0) { mRollo.clearSelectedIcon(); } else { - mRollo.selectIcon(x, (int)ev.getY(), mRollo.mState.readPosX); + mRollo.selectIcon(x, (int)ev.getY(), mRollo.mReadback.posX); } mRollo.mState.save(); mRollo.mInvokeMove.execute(); @@ -249,7 +256,7 @@ public class AllAppsView extends RSSurfaceView } public void onClick(View v) { - if (mLocks != 0) { + if (mLocks != 0 || !isVisible()) { return; } int index = mRollo.mState.selectedIconIndex; @@ -260,7 +267,7 @@ public class AllAppsView extends RSSurfaceView } public boolean onLongClick(View v) { - if (mLocks != 0) { + if (mLocks != 0 || !isVisible()) { return true; } int index = mRollo.mState.selectedIconIndex; @@ -278,7 +285,7 @@ public class AllAppsView extends RSSurfaceView left, top, Defines.ICON_WIDTH_PX, Defines.ICON_HEIGHT_PX, this, app, DragController.DRAG_ACTION_COPY); - mLauncher.closeAllApps(); + mLauncher.closeAllApps(true); } return true; } @@ -290,38 +297,49 @@ public class AllAppsView extends RSSurfaceView public void onDropCompleted(View target, boolean success) { } - public void setZoom(float v) { - mRollo.mState.zoom = v; - mRollo.mState.save(); - mRollo.mInvokeZoom.execute(); + public void setZoomTarget(float amount) { + zoom(amount, true); + } + + public void setZoom(float amount) { + zoom(amount, false); } - public void setScale(float amount) { + private void zoom(float amount, boolean animate) { + if (mRollo == null) { + return; + } + cancelLongPress(); - mRollo.mState.read(); mRollo.clearSelectedIcon(); if (amount > 0.001f) { - mRollo.mState.visible = 1; - mRollo.mState.zoom = amount; + mRollo.mState.zoomTarget = amount; + if (!animate) { + // set in readback, so we're correct even before the next frame + mRollo.mReadback.zoom = mRollo.mState.zoom = amount; + mRollo.mReadback.save(); + } } else { - mRollo.mState.visible = 0; - mRollo.mState.zoom = 0; + mRollo.mState.zoomTarget = 0; + if (!animate) { + mRollo.mReadback.zoom = mRollo.mState.zoom = 0; + mRollo.mReadback.save(); + } } - if (amount > 0.001f && amount < 0.999f) { - mLocks |= LOCK_ZOOMING; + mRollo.mState.save(); + if (!animate) { + mRollo.mInvokeSetZoom.execute(); } else { - mLocks &= ~LOCK_ZOOMING; + mRollo.mInvokeSetZoomTarget.execute(); } - mRollo.mState.save(); - mRollo.mInvokeZoom.execute(); - } - - public boolean isZooming() { - return (mLocks & LOCK_ZOOMING) != 0; } public boolean isVisible() { - return mRollo != null && mRollo.mState.visible != 0; + if (mRollo == null) { + return false; + } + mRollo.mReadback.read(); + return mRollo.mReadback.zoom > 0.001f; } @Override @@ -372,7 +390,8 @@ public class AllAppsView extends RSSurfaceView private Script.Invokable mInvokeMove; private Script.Invokable mInvokeFling; - private Script.Invokable mInvokeZoom; + private Script.Invokable mInvokeSetZoomTarget; + private Script.Invokable mInvokeSetZoom; private Sampler mSampler; private Sampler mSamplerText; @@ -407,6 +426,7 @@ public class AllAppsView extends RSSurfaceView Params mParams; State mState; + Readback mReadback; class BaseAlloc { Allocation mAlloc; @@ -415,10 +435,6 @@ public class AllAppsView extends RSSurfaceView void save() { mAlloc.data(this); } - - void read() { - mAlloc.read(this); - } } class Params extends BaseAlloc { @@ -439,14 +455,12 @@ public class AllAppsView extends RSSurfaceView class State extends BaseAlloc { public float newPositionX; public int newTouchDown; - public float readPosX; - public float readVel; public float flingVelocityX; public int iconCount; public int scrollX; public int selectedIconIndex = -1; public int selectedIconTexture; - public int visible; + public float zoomTarget; public float zoom; State() { @@ -456,6 +470,22 @@ public class AllAppsView extends RSSurfaceView } } + class Readback extends BaseAlloc { + public float posX; + public float velocity; + public float zoom; + + Readback() { + mType = Type.createFromClass(mRS, Readback.class, 1, "ReadbackClass"); + mAlloc = Allocation.createTyped(mRS, mType); + save(); + } + + void read() { + mAlloc.read(this); + } + } + public RolloRS() { } @@ -548,6 +578,7 @@ public class AllAppsView extends RSSurfaceView private void initData() { mParams = new Params(); mState = new State(); + mReadback = new Readback(); final Utilities.BubbleText bubble = new Utilities.BubbleText(getContext()); @@ -567,6 +598,7 @@ public class AllAppsView extends RSSurfaceView mParams.save(); mState.save(); + mReadback.save(); mSelectionBitmap = Bitmap.createBitmap(Defines.ICON_TEXTURE_WIDTH_PX, Defines.ICON_TEXTURE_HEIGHT_PX, Bitmap.Config.ARGB_8888); @@ -583,14 +615,17 @@ public class AllAppsView extends RSSurfaceView sb.addDefines(Defines.class); sb.setType(mParams.mType, "params", Defines.ALLOC_PARAMS); sb.setType(mState.mType, "state", Defines.ALLOC_STATE); + sb.setType(mReadback.mType, "readback", Defines.ALLOC_READBACK); mInvokeMove = sb.addInvokable("move"); mInvokeFling = sb.addInvokable("fling"); - mInvokeZoom = sb.addInvokable("setZoomTarget"); + mInvokeSetZoomTarget = sb.addInvokable("setZoomTarget"); + mInvokeSetZoom = sb.addInvokable("setZoom"); mScript = sb.create(); mScript.setClearColor(0.0f, 0.0f, 0.0f, 0.0f); mScript.bindAllocation(mParams.mAlloc, Defines.ALLOC_PARAMS); mScript.bindAllocation(mState.mAlloc, Defines.ALLOC_STATE); + mScript.bindAllocation(mReadback.mAlloc, Defines.ALLOC_READBACK); mScript.bindAllocation(mAllocIconID, Defines.ALLOC_ICON_IDS); mScript.bindAllocation(mAllocLabelID, Defines.ALLOC_LABEL_IDS); mScript.bindAllocation(mAllocTouchXBorders, Defines.ALLOC_X_BORDERS); |