DragLayer.java revision 2801cafe62653131fdc9da402e5c44e5ffd0bf47
131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/*
231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * you may not use this file except in compliance with the License.
631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * You may obtain a copy of the License at
731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
1031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * See the License for the specific language governing permissions and
1431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * limitations under the License.
1531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
1631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
17a5902524d4403885eb4c50360bf3465c6be796efJoe Onoratopackage com.android.launcher2;
1831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
196788269814a678af976dfc7d6135993e172ce586Adam Cohenimport java.util.ArrayList;
20d4844c3e731b00547a31f23a00f8bd4a271e2b62Adam Cohen
2131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.Context;
22120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohenimport android.graphics.Bitmap;
236788269814a678af976dfc7d6135993e172ce586Adam Cohenimport android.graphics.Rect;
2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.util.AttributeSet;
2531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.view.KeyEvent;
260e26059548e429e5d1c973bebe4c561bead2926fMichael Jurkaimport android.view.MotionEvent;
27ea3763c2672f77539538af8cdd395ad97058eaabRomain Guyimport android.view.View;
2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.widget.FrameLayout;
29120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohenimport android.widget.ImageView;
3031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
316788269814a678af976dfc7d6135993e172ce586Adam Cohenimport com.android.launcher.R;
326788269814a678af976dfc7d6135993e172ce586Adam Cohen
3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/**
340e26059548e429e5d1c973bebe4c561bead2926fMichael Jurka * A ViewGroup that coordinates dragging across its descendants
3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
3600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratopublic class DragLayer extends FrameLayout {
37120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen    private DragController mDragController;
38120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen    private int[] mTmpXY = new int[2];
3931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
406788269814a678af976dfc7d6135993e172ce586Adam Cohen    // Variables relating to resizing widgets
416788269814a678af976dfc7d6135993e172ce586Adam Cohen    private final ArrayList<AppWidgetResizeFrame> mResizeFrames =
426788269814a678af976dfc7d6135993e172ce586Adam Cohen            new ArrayList<AppWidgetResizeFrame>();
436788269814a678af976dfc7d6135993e172ce586Adam Cohen    private AppWidgetResizeFrame mCurrentResizeFrame;
446788269814a678af976dfc7d6135993e172ce586Adam Cohen    private int mXDown, mYDown;
452801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen    private Folder mCurrentFolder = null;
462801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen    private Launcher mLauncher;
476788269814a678af976dfc7d6135993e172ce586Adam Cohen
4831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
4931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Used to create a new DragLayer from XML.
5031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     *
5131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * @param context The application's context.
520e26059548e429e5d1c973bebe4c561bead2926fMichael Jurka     * @param attrs The attributes set containing the Workspace's customization values.
5331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
5431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public DragLayer(Context context, AttributeSet attrs) {
5531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        super(context, attrs);
56be62afa34d58edab0fc9ba7499f0dd543039c903Winson Chung
57be62afa34d58edab0fc9ba7499f0dd543039c903Winson Chung        // Disable multitouch across the workspace/all apps/customize tray
58be62afa34d58edab0fc9ba7499f0dd543039c903Winson Chung        setMotionEventSplittingEnabled(false);
5931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
6031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato    public void setDragController(DragController controller) {
6200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato        mDragController = controller;
6331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
6400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato
6531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
6631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public boolean dispatchKeyEvent(KeyEvent event) {
6700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato        return mDragController.dispatchKeyEvent(event) || super.dispatchKeyEvent(event);
6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
6931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
706788269814a678af976dfc7d6135993e172ce586Adam Cohen    private boolean handleTouchDown(MotionEvent ev) {
716788269814a678af976dfc7d6135993e172ce586Adam Cohen        Rect hitRect = new Rect();
726788269814a678af976dfc7d6135993e172ce586Adam Cohen        int x = (int) ev.getX();
736788269814a678af976dfc7d6135993e172ce586Adam Cohen        int y = (int) ev.getY();
746788269814a678af976dfc7d6135993e172ce586Adam Cohen
756788269814a678af976dfc7d6135993e172ce586Adam Cohen        for (AppWidgetResizeFrame child: mResizeFrames) {
766788269814a678af976dfc7d6135993e172ce586Adam Cohen            child.getHitRect(hitRect);
776788269814a678af976dfc7d6135993e172ce586Adam Cohen            if (hitRect.contains(x, y)) {
786788269814a678af976dfc7d6135993e172ce586Adam Cohen                if (child.beginResizeIfPointInRegion(x - child.getLeft(), y - child.getTop())) {
796788269814a678af976dfc7d6135993e172ce586Adam Cohen                    mCurrentResizeFrame = child;
806788269814a678af976dfc7d6135993e172ce586Adam Cohen                    mXDown = x;
816788269814a678af976dfc7d6135993e172ce586Adam Cohen                    mYDown = y;
826788269814a678af976dfc7d6135993e172ce586Adam Cohen                    requestDisallowInterceptTouchEvent(true);
836788269814a678af976dfc7d6135993e172ce586Adam Cohen                    return true;
846788269814a678af976dfc7d6135993e172ce586Adam Cohen                }
856788269814a678af976dfc7d6135993e172ce586Adam Cohen            }
866788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
872801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen        if (mCurrentFolder != null) {
882801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen            mCurrentFolder.getHitRect(hitRect);
892801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen            int[] screenPos = new int[2];
902801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen            View parent = (View) mCurrentFolder.getParent();
912801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen            if (parent != null) {
922801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen                parent.getLocationOnScreen(screenPos);
932801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen                hitRect.offset(screenPos[0], screenPos[1]);
942801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen                if (!hitRect.contains(x, y)) {
952801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen                    mLauncher.closeFolder();
962801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen                }
972801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen            }
982801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen        }
996788269814a678af976dfc7d6135993e172ce586Adam Cohen        return false;
1006788269814a678af976dfc7d6135993e172ce586Adam Cohen    }
1016788269814a678af976dfc7d6135993e172ce586Adam Cohen
10231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
10331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public boolean onInterceptTouchEvent(MotionEvent ev) {
1046788269814a678af976dfc7d6135993e172ce586Adam Cohen        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
1056788269814a678af976dfc7d6135993e172ce586Adam Cohen            if (handleTouchDown(ev)) {
1066788269814a678af976dfc7d6135993e172ce586Adam Cohen                return true;
107d1837cc69eb222371afdd30890f7215d117510f2Patrick Dubroy            }
1081b607ed454ed22c2fd855cb3e428376520fb2388Adam Cohen        }
1096788269814a678af976dfc7d6135993e172ce586Adam Cohen        clearAllResizeFrames();
1104db52312c10e822162a21c60404f06f6e507f0d6Joe Onorato        return mDragController.onInterceptTouchEvent(ev);
11131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
11231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
11331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
11431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public boolean onTouchEvent(MotionEvent ev) {
1156788269814a678af976dfc7d6135993e172ce586Adam Cohen        boolean handled = false;
1166788269814a678af976dfc7d6135993e172ce586Adam Cohen        int action = ev.getAction();
1176788269814a678af976dfc7d6135993e172ce586Adam Cohen
1186788269814a678af976dfc7d6135993e172ce586Adam Cohen        int x = (int) ev.getX();
1196788269814a678af976dfc7d6135993e172ce586Adam Cohen        int y = (int) ev.getY();
1206788269814a678af976dfc7d6135993e172ce586Adam Cohen
1216788269814a678af976dfc7d6135993e172ce586Adam Cohen        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
1226788269814a678af976dfc7d6135993e172ce586Adam Cohen            if (ev.getAction() == MotionEvent.ACTION_DOWN) {
1236788269814a678af976dfc7d6135993e172ce586Adam Cohen                if (handleTouchDown(ev)) {
1246788269814a678af976dfc7d6135993e172ce586Adam Cohen                    return true;
1256788269814a678af976dfc7d6135993e172ce586Adam Cohen                }
1266788269814a678af976dfc7d6135993e172ce586Adam Cohen            }
1276788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
1286788269814a678af976dfc7d6135993e172ce586Adam Cohen
1296788269814a678af976dfc7d6135993e172ce586Adam Cohen        if (mCurrentResizeFrame != null) {
1306788269814a678af976dfc7d6135993e172ce586Adam Cohen            handled = true;
1316788269814a678af976dfc7d6135993e172ce586Adam Cohen            switch (action) {
1326788269814a678af976dfc7d6135993e172ce586Adam Cohen                case MotionEvent.ACTION_MOVE:
1336788269814a678af976dfc7d6135993e172ce586Adam Cohen                    mCurrentResizeFrame.visualizeResizeForDelta(x - mXDown, y - mYDown);
1346788269814a678af976dfc7d6135993e172ce586Adam Cohen                    break;
1356788269814a678af976dfc7d6135993e172ce586Adam Cohen                case MotionEvent.ACTION_CANCEL:
1366788269814a678af976dfc7d6135993e172ce586Adam Cohen                case MotionEvent.ACTION_UP:
1376788269814a678af976dfc7d6135993e172ce586Adam Cohen                    mCurrentResizeFrame.commitResizeForDelta(x - mXDown, y - mYDown);
1386788269814a678af976dfc7d6135993e172ce586Adam Cohen                    mCurrentResizeFrame = null;
1396788269814a678af976dfc7d6135993e172ce586Adam Cohen            }
1406788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
1416788269814a678af976dfc7d6135993e172ce586Adam Cohen        if (handled) return true;
1424db52312c10e822162a21c60404f06f6e507f0d6Joe Onorato        return mDragController.onTouchEvent(ev);
14391a9c9636f10f1e12cd1f660b2e330634fbdc7dcRomain Guy    }
144ea3763c2672f77539538af8cdd395ad97058eaabRomain Guy
145ea3763c2672f77539538af8cdd395ad97058eaabRomain Guy    @Override
146ea3763c2672f77539538af8cdd395ad97058eaabRomain Guy    public boolean dispatchUnhandledMove(View focused, int direction) {
147ea3763c2672f77539538af8cdd395ad97058eaabRomain Guy        return mDragController.dispatchUnhandledMove(focused, direction);
148ea3763c2672f77539538af8cdd395ad97058eaabRomain Guy    }
149120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen
150120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen    public View createDragView(Bitmap b, int xPos, int yPos) {
151120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen        ImageView imageView = new ImageView(mContext);
152120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen        imageView.setImageBitmap(b);
153120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen        imageView.setX(xPos);
154120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen        imageView.setY(yPos);
155120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen        addView(imageView, b.getWidth(), b.getHeight());
156120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen
157120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen        return imageView;
158120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen    }
159120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen
160120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen    public View createDragView(View v) {
161120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen        v.getLocationOnScreen(mTmpXY);
162120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen        return createDragView(mDragController.getViewBitmap(v), mTmpXY[0], mTmpXY[1]);
163120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen    }
1646788269814a678af976dfc7d6135993e172ce586Adam Cohen
1656788269814a678af976dfc7d6135993e172ce586Adam Cohen    public static class LayoutParams extends FrameLayout.LayoutParams {
1666788269814a678af976dfc7d6135993e172ce586Adam Cohen        public int x, y;
1676788269814a678af976dfc7d6135993e172ce586Adam Cohen        public boolean customPosition = false;
1686788269814a678af976dfc7d6135993e172ce586Adam Cohen
1696788269814a678af976dfc7d6135993e172ce586Adam Cohen        /**
1706788269814a678af976dfc7d6135993e172ce586Adam Cohen         * {@inheritDoc}
1716788269814a678af976dfc7d6135993e172ce586Adam Cohen         */
1726788269814a678af976dfc7d6135993e172ce586Adam Cohen        public LayoutParams(int width, int height) {
1736788269814a678af976dfc7d6135993e172ce586Adam Cohen            super(width, height);
1746788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
1756788269814a678af976dfc7d6135993e172ce586Adam Cohen
1766788269814a678af976dfc7d6135993e172ce586Adam Cohen        public void setWidth(int width) {
1776788269814a678af976dfc7d6135993e172ce586Adam Cohen            this.width = width;
1786788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
1796788269814a678af976dfc7d6135993e172ce586Adam Cohen
1806788269814a678af976dfc7d6135993e172ce586Adam Cohen        public int getWidth() {
1816788269814a678af976dfc7d6135993e172ce586Adam Cohen            return width;
1826788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
1836788269814a678af976dfc7d6135993e172ce586Adam Cohen
1846788269814a678af976dfc7d6135993e172ce586Adam Cohen        public void setHeight(int height) {
1856788269814a678af976dfc7d6135993e172ce586Adam Cohen            this.height = height;
1866788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
1876788269814a678af976dfc7d6135993e172ce586Adam Cohen
1886788269814a678af976dfc7d6135993e172ce586Adam Cohen        public int getHeight() {
1896788269814a678af976dfc7d6135993e172ce586Adam Cohen            return height;
1906788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
1916788269814a678af976dfc7d6135993e172ce586Adam Cohen
1926788269814a678af976dfc7d6135993e172ce586Adam Cohen        public void setX(int x) {
1936788269814a678af976dfc7d6135993e172ce586Adam Cohen            this.x = x;
1946788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
1956788269814a678af976dfc7d6135993e172ce586Adam Cohen
1966788269814a678af976dfc7d6135993e172ce586Adam Cohen        public int getX() {
1976788269814a678af976dfc7d6135993e172ce586Adam Cohen            return x;
1986788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
1996788269814a678af976dfc7d6135993e172ce586Adam Cohen
2006788269814a678af976dfc7d6135993e172ce586Adam Cohen        public void setY(int y) {
2016788269814a678af976dfc7d6135993e172ce586Adam Cohen            this.y = y;
2026788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
2036788269814a678af976dfc7d6135993e172ce586Adam Cohen
2046788269814a678af976dfc7d6135993e172ce586Adam Cohen        public int getY() {
2056788269814a678af976dfc7d6135993e172ce586Adam Cohen            return y;
2066788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
2076788269814a678af976dfc7d6135993e172ce586Adam Cohen    }
2086788269814a678af976dfc7d6135993e172ce586Adam Cohen
2096788269814a678af976dfc7d6135993e172ce586Adam Cohen    protected void onLayout(boolean changed, int l, int t, int r, int b) {
2106788269814a678af976dfc7d6135993e172ce586Adam Cohen        super.onLayout(changed, l, t, r, b);
2116788269814a678af976dfc7d6135993e172ce586Adam Cohen        int count = getChildCount();
2126788269814a678af976dfc7d6135993e172ce586Adam Cohen        for (int i = 0; i < count; i++) {
2136788269814a678af976dfc7d6135993e172ce586Adam Cohen            View child = getChildAt(i);
2146788269814a678af976dfc7d6135993e172ce586Adam Cohen            final FrameLayout.LayoutParams flp = (FrameLayout.LayoutParams) child.getLayoutParams();
2156788269814a678af976dfc7d6135993e172ce586Adam Cohen            if (flp instanceof LayoutParams) {
2166788269814a678af976dfc7d6135993e172ce586Adam Cohen                final LayoutParams lp = (LayoutParams) flp;
2176788269814a678af976dfc7d6135993e172ce586Adam Cohen                if (lp.customPosition) {
2186788269814a678af976dfc7d6135993e172ce586Adam Cohen                    child.layout(lp.x, lp.y, lp.x + lp.width, lp.y + lp.height);
2196788269814a678af976dfc7d6135993e172ce586Adam Cohen                }
2206788269814a678af976dfc7d6135993e172ce586Adam Cohen            }
2216788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
2226788269814a678af976dfc7d6135993e172ce586Adam Cohen    }
2236788269814a678af976dfc7d6135993e172ce586Adam Cohen
2246788269814a678af976dfc7d6135993e172ce586Adam Cohen    public void clearAllResizeFrames() {
2256788269814a678af976dfc7d6135993e172ce586Adam Cohen        if (mResizeFrames.size() > 0) {
2266788269814a678af976dfc7d6135993e172ce586Adam Cohen            for (AppWidgetResizeFrame frame: mResizeFrames) {
2276788269814a678af976dfc7d6135993e172ce586Adam Cohen                removeView(frame);
2286788269814a678af976dfc7d6135993e172ce586Adam Cohen            }
2296788269814a678af976dfc7d6135993e172ce586Adam Cohen            mResizeFrames.clear();
2306788269814a678af976dfc7d6135993e172ce586Adam Cohen        }
2316788269814a678af976dfc7d6135993e172ce586Adam Cohen    }
2326788269814a678af976dfc7d6135993e172ce586Adam Cohen
2336788269814a678af976dfc7d6135993e172ce586Adam Cohen    public boolean hasResizeFrames() {
2346788269814a678af976dfc7d6135993e172ce586Adam Cohen        return mResizeFrames.size() > 0;
2356788269814a678af976dfc7d6135993e172ce586Adam Cohen    }
2366788269814a678af976dfc7d6135993e172ce586Adam Cohen
2376788269814a678af976dfc7d6135993e172ce586Adam Cohen    public boolean isWidgetBeingResized() {
2386788269814a678af976dfc7d6135993e172ce586Adam Cohen        return mCurrentResizeFrame != null;
2396788269814a678af976dfc7d6135993e172ce586Adam Cohen    }
2406788269814a678af976dfc7d6135993e172ce586Adam Cohen
2416788269814a678af976dfc7d6135993e172ce586Adam Cohen    public void addResizeFrame(ItemInfo itemInfo, LauncherAppWidgetHostView widget,
2426788269814a678af976dfc7d6135993e172ce586Adam Cohen            CellLayout cellLayout) {
2436788269814a678af976dfc7d6135993e172ce586Adam Cohen        AppWidgetResizeFrame resizeFrame = new AppWidgetResizeFrame(getContext(),
2446788269814a678af976dfc7d6135993e172ce586Adam Cohen                itemInfo, widget, cellLayout, this);
2456788269814a678af976dfc7d6135993e172ce586Adam Cohen
2466788269814a678af976dfc7d6135993e172ce586Adam Cohen        LayoutParams lp = new LayoutParams(-1, -1);
2476788269814a678af976dfc7d6135993e172ce586Adam Cohen        lp.customPosition = true;
2486788269814a678af976dfc7d6135993e172ce586Adam Cohen
2496788269814a678af976dfc7d6135993e172ce586Adam Cohen        addView(resizeFrame, lp);
2506788269814a678af976dfc7d6135993e172ce586Adam Cohen        mResizeFrames.add(resizeFrame);
2516788269814a678af976dfc7d6135993e172ce586Adam Cohen
2526788269814a678af976dfc7d6135993e172ce586Adam Cohen        resizeFrame.snapToWidget(false);
2536788269814a678af976dfc7d6135993e172ce586Adam Cohen    }
2542801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen
2552801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen    public void setLauncher(Launcher l) {
2562801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen        mLauncher = l;
2572801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen    }
2582801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen
2592801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen    public void setCurrentFolder(Folder f) {
2602801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen        mCurrentFolder = f;
2612801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen    }
26231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project}
263