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