DragLayer.java revision 76fc085d28178a5d4fb3787ede956281a2cc3179
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; 2876fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohenimport android.view.ViewParent; 2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.widget.FrameLayout; 30120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohenimport android.widget.ImageView; 3131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 326788269814a678af976dfc7d6135993e172ce586Adam Cohenimport com.android.launcher.R; 336788269814a678af976dfc7d6135993e172ce586Adam Cohen 3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/** 350e26059548e429e5d1c973bebe4c561bead2926fMichael Jurka * A ViewGroup that coordinates dragging across its descendants 3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 3700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onoratopublic class DragLayer extends FrameLayout { 38120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen private DragController mDragController; 39120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen private int[] mTmpXY = new int[2]; 4031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 416788269814a678af976dfc7d6135993e172ce586Adam Cohen // Variables relating to resizing widgets 426788269814a678af976dfc7d6135993e172ce586Adam Cohen private final ArrayList<AppWidgetResizeFrame> mResizeFrames = 436788269814a678af976dfc7d6135993e172ce586Adam Cohen new ArrayList<AppWidgetResizeFrame>(); 446788269814a678af976dfc7d6135993e172ce586Adam Cohen private AppWidgetResizeFrame mCurrentResizeFrame; 456788269814a678af976dfc7d6135993e172ce586Adam Cohen private int mXDown, mYDown; 462801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen private Folder mCurrentFolder = null; 472801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen private Launcher mLauncher; 486788269814a678af976dfc7d6135993e172ce586Adam Cohen 4931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project /** 5031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Used to create a new DragLayer from XML. 5131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * 5231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * @param context The application's context. 530e26059548e429e5d1c973bebe4c561bead2926fMichael Jurka * @param attrs The attributes set containing the Workspace's customization values. 5431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */ 5531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public DragLayer(Context context, AttributeSet attrs) { 5631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project super(context, attrs); 57be62afa34d58edab0fc9ba7499f0dd543039c903Winson Chung 58be62afa34d58edab0fc9ba7499f0dd543039c903Winson Chung // Disable multitouch across the workspace/all apps/customize tray 59be62afa34d58edab0fc9ba7499f0dd543039c903Winson Chung setMotionEventSplittingEnabled(false); 6031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 6131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 624c98d9235d164680186180974719f551cf935d08Winson Chung public void setup(Launcher launcher, DragController controller) { 634c98d9235d164680186180974719f551cf935d08Winson Chung mLauncher = launcher; 6400acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato mDragController = controller; 6531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 6676fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen 6731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project @Override 6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public boolean dispatchKeyEvent(KeyEvent event) { 6900acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato return mDragController.dispatchKeyEvent(event) || super.dispatchKeyEvent(event); 7031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 7131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 7276fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen private boolean handleTouchDown(MotionEvent ev, boolean intercept) { 736788269814a678af976dfc7d6135993e172ce586Adam Cohen Rect hitRect = new Rect(); 746788269814a678af976dfc7d6135993e172ce586Adam Cohen int x = (int) ev.getX(); 756788269814a678af976dfc7d6135993e172ce586Adam Cohen int y = (int) ev.getY(); 766788269814a678af976dfc7d6135993e172ce586Adam Cohen 776788269814a678af976dfc7d6135993e172ce586Adam Cohen for (AppWidgetResizeFrame child: mResizeFrames) { 786788269814a678af976dfc7d6135993e172ce586Adam Cohen child.getHitRect(hitRect); 796788269814a678af976dfc7d6135993e172ce586Adam Cohen if (hitRect.contains(x, y)) { 806788269814a678af976dfc7d6135993e172ce586Adam Cohen if (child.beginResizeIfPointInRegion(x - child.getLeft(), y - child.getTop())) { 816788269814a678af976dfc7d6135993e172ce586Adam Cohen mCurrentResizeFrame = child; 826788269814a678af976dfc7d6135993e172ce586Adam Cohen mXDown = x; 836788269814a678af976dfc7d6135993e172ce586Adam Cohen mYDown = y; 846788269814a678af976dfc7d6135993e172ce586Adam Cohen requestDisallowInterceptTouchEvent(true); 856788269814a678af976dfc7d6135993e172ce586Adam Cohen return true; 866788269814a678af976dfc7d6135993e172ce586Adam Cohen } 876788269814a678af976dfc7d6135993e172ce586Adam Cohen } 886788269814a678af976dfc7d6135993e172ce586Adam Cohen } 8976fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen 9076fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen if (mCurrentFolder != null && intercept) { 9176fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen if (mCurrentFolder.isEditingName()) { 9276fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen getDescendantRectRelativeToSelf(mCurrentFolder.getEditTextRegion(), hitRect); 932801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen if (!hitRect.contains(x, y)) { 9476fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen mCurrentFolder.dismissEditingName(); 9576fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen return true; 962801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen } 972801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen } 9876fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen 9976fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen getDescendantRectRelativeToSelf(mCurrentFolder, hitRect); 10076fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen if (!hitRect.contains(x, y)) { 10176fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen mLauncher.closeFolder(); 10276fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen return true; 10376fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen } 1042801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen } 1056788269814a678af976dfc7d6135993e172ce586Adam Cohen return false; 1066788269814a678af976dfc7d6135993e172ce586Adam Cohen } 1076788269814a678af976dfc7d6135993e172ce586Adam Cohen 10831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project @Override 10931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public boolean onInterceptTouchEvent(MotionEvent ev) { 1106788269814a678af976dfc7d6135993e172ce586Adam Cohen if (ev.getAction() == MotionEvent.ACTION_DOWN) { 11176fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen if (handleTouchDown(ev, true)) { 1126788269814a678af976dfc7d6135993e172ce586Adam Cohen return true; 113d1837cc69eb222371afdd30890f7215d117510f2Patrick Dubroy } 1141b607ed454ed22c2fd855cb3e428376520fb2388Adam Cohen } 1156788269814a678af976dfc7d6135993e172ce586Adam Cohen clearAllResizeFrames(); 1164db52312c10e822162a21c60404f06f6e507f0d6Joe Onorato return mDragController.onInterceptTouchEvent(ev); 11731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project } 11831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project 11931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project @Override 12031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project public boolean onTouchEvent(MotionEvent ev) { 1216788269814a678af976dfc7d6135993e172ce586Adam Cohen boolean handled = false; 1226788269814a678af976dfc7d6135993e172ce586Adam Cohen int action = ev.getAction(); 1236788269814a678af976dfc7d6135993e172ce586Adam Cohen 1246788269814a678af976dfc7d6135993e172ce586Adam Cohen int x = (int) ev.getX(); 1256788269814a678af976dfc7d6135993e172ce586Adam Cohen int y = (int) ev.getY(); 1266788269814a678af976dfc7d6135993e172ce586Adam Cohen 1276788269814a678af976dfc7d6135993e172ce586Adam Cohen if (ev.getAction() == MotionEvent.ACTION_DOWN) { 1286788269814a678af976dfc7d6135993e172ce586Adam Cohen if (ev.getAction() == MotionEvent.ACTION_DOWN) { 12976fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen if (handleTouchDown(ev, false)) { 1306788269814a678af976dfc7d6135993e172ce586Adam Cohen return true; 1316788269814a678af976dfc7d6135993e172ce586Adam Cohen } 1326788269814a678af976dfc7d6135993e172ce586Adam Cohen } 1336788269814a678af976dfc7d6135993e172ce586Adam Cohen } 1346788269814a678af976dfc7d6135993e172ce586Adam Cohen 1356788269814a678af976dfc7d6135993e172ce586Adam Cohen if (mCurrentResizeFrame != null) { 1366788269814a678af976dfc7d6135993e172ce586Adam Cohen handled = true; 1376788269814a678af976dfc7d6135993e172ce586Adam Cohen switch (action) { 1386788269814a678af976dfc7d6135993e172ce586Adam Cohen case MotionEvent.ACTION_MOVE: 1396788269814a678af976dfc7d6135993e172ce586Adam Cohen mCurrentResizeFrame.visualizeResizeForDelta(x - mXDown, y - mYDown); 1406788269814a678af976dfc7d6135993e172ce586Adam Cohen break; 1416788269814a678af976dfc7d6135993e172ce586Adam Cohen case MotionEvent.ACTION_CANCEL: 1426788269814a678af976dfc7d6135993e172ce586Adam Cohen case MotionEvent.ACTION_UP: 1436788269814a678af976dfc7d6135993e172ce586Adam Cohen mCurrentResizeFrame.commitResizeForDelta(x - mXDown, y - mYDown); 1446788269814a678af976dfc7d6135993e172ce586Adam Cohen mCurrentResizeFrame = null; 1456788269814a678af976dfc7d6135993e172ce586Adam Cohen } 1466788269814a678af976dfc7d6135993e172ce586Adam Cohen } 1476788269814a678af976dfc7d6135993e172ce586Adam Cohen if (handled) return true; 1484db52312c10e822162a21c60404f06f6e507f0d6Joe Onorato return mDragController.onTouchEvent(ev); 14991a9c9636f10f1e12cd1f660b2e330634fbdc7dcRomain Guy } 150ea3763c2672f77539538af8cdd395ad97058eaabRomain Guy 15176fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen private void getDescendantRectRelativeToSelf(View descendant, Rect r) { 15276fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen descendant.getHitRect(r); 15376fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen 15476fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen ViewParent viewParent = descendant.getParent(); 15576fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen while (viewParent instanceof View && viewParent != this) { 15676fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen final View view = (View)viewParent; 15776fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen r.offset(view.getLeft() + (int) (view.getTranslationX() + 0.5f) - view.getScrollX(), 15876fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen view.getTop() + (int) (view.getTranslationY() + 0.5f) - view.getScrollY()); 15976fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen viewParent = view.getParent(); 16076fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen } 16176fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen } 16276fc085d28178a5d4fb3787ede956281a2cc3179Adam Cohen 163ea3763c2672f77539538af8cdd395ad97058eaabRomain Guy @Override 164ea3763c2672f77539538af8cdd395ad97058eaabRomain Guy public boolean dispatchUnhandledMove(View focused, int direction) { 165ea3763c2672f77539538af8cdd395ad97058eaabRomain Guy return mDragController.dispatchUnhandledMove(focused, direction); 166ea3763c2672f77539538af8cdd395ad97058eaabRomain Guy } 167120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen 168120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen public View createDragView(Bitmap b, int xPos, int yPos) { 169120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen ImageView imageView = new ImageView(mContext); 170120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen imageView.setImageBitmap(b); 171120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen imageView.setX(xPos); 172120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen imageView.setY(yPos); 173120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen addView(imageView, b.getWidth(), b.getHeight()); 174120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen 175120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen return imageView; 176120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen } 177120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen 178120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen public View createDragView(View v) { 179120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen v.getLocationOnScreen(mTmpXY); 180120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen return createDragView(mDragController.getViewBitmap(v), mTmpXY[0], mTmpXY[1]); 181120980bd00f5eecec5717f49a3d7db96571025a9Adam Cohen } 1826788269814a678af976dfc7d6135993e172ce586Adam Cohen 1836788269814a678af976dfc7d6135993e172ce586Adam Cohen public static class LayoutParams extends FrameLayout.LayoutParams { 1846788269814a678af976dfc7d6135993e172ce586Adam Cohen public int x, y; 1856788269814a678af976dfc7d6135993e172ce586Adam Cohen public boolean customPosition = false; 1866788269814a678af976dfc7d6135993e172ce586Adam Cohen 1876788269814a678af976dfc7d6135993e172ce586Adam Cohen /** 1886788269814a678af976dfc7d6135993e172ce586Adam Cohen * {@inheritDoc} 1896788269814a678af976dfc7d6135993e172ce586Adam Cohen */ 1906788269814a678af976dfc7d6135993e172ce586Adam Cohen public LayoutParams(int width, int height) { 1916788269814a678af976dfc7d6135993e172ce586Adam Cohen super(width, height); 1926788269814a678af976dfc7d6135993e172ce586Adam Cohen } 1936788269814a678af976dfc7d6135993e172ce586Adam Cohen 1946788269814a678af976dfc7d6135993e172ce586Adam Cohen public void setWidth(int width) { 1956788269814a678af976dfc7d6135993e172ce586Adam Cohen this.width = width; 1966788269814a678af976dfc7d6135993e172ce586Adam Cohen } 1976788269814a678af976dfc7d6135993e172ce586Adam Cohen 1986788269814a678af976dfc7d6135993e172ce586Adam Cohen public int getWidth() { 1996788269814a678af976dfc7d6135993e172ce586Adam Cohen return width; 2006788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2016788269814a678af976dfc7d6135993e172ce586Adam Cohen 2026788269814a678af976dfc7d6135993e172ce586Adam Cohen public void setHeight(int height) { 2036788269814a678af976dfc7d6135993e172ce586Adam Cohen this.height = height; 2046788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2056788269814a678af976dfc7d6135993e172ce586Adam Cohen 2066788269814a678af976dfc7d6135993e172ce586Adam Cohen public int getHeight() { 2076788269814a678af976dfc7d6135993e172ce586Adam Cohen return height; 2086788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2096788269814a678af976dfc7d6135993e172ce586Adam Cohen 2106788269814a678af976dfc7d6135993e172ce586Adam Cohen public void setX(int x) { 2116788269814a678af976dfc7d6135993e172ce586Adam Cohen this.x = x; 2126788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2136788269814a678af976dfc7d6135993e172ce586Adam Cohen 2146788269814a678af976dfc7d6135993e172ce586Adam Cohen public int getX() { 2156788269814a678af976dfc7d6135993e172ce586Adam Cohen return x; 2166788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2176788269814a678af976dfc7d6135993e172ce586Adam Cohen 2186788269814a678af976dfc7d6135993e172ce586Adam Cohen public void setY(int y) { 2196788269814a678af976dfc7d6135993e172ce586Adam Cohen this.y = y; 2206788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2216788269814a678af976dfc7d6135993e172ce586Adam Cohen 2226788269814a678af976dfc7d6135993e172ce586Adam Cohen public int getY() { 2236788269814a678af976dfc7d6135993e172ce586Adam Cohen return y; 2246788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2256788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2266788269814a678af976dfc7d6135993e172ce586Adam Cohen 2276788269814a678af976dfc7d6135993e172ce586Adam Cohen protected void onLayout(boolean changed, int l, int t, int r, int b) { 2286788269814a678af976dfc7d6135993e172ce586Adam Cohen super.onLayout(changed, l, t, r, b); 2296788269814a678af976dfc7d6135993e172ce586Adam Cohen int count = getChildCount(); 2306788269814a678af976dfc7d6135993e172ce586Adam Cohen for (int i = 0; i < count; i++) { 2316788269814a678af976dfc7d6135993e172ce586Adam Cohen View child = getChildAt(i); 2326788269814a678af976dfc7d6135993e172ce586Adam Cohen final FrameLayout.LayoutParams flp = (FrameLayout.LayoutParams) child.getLayoutParams(); 2336788269814a678af976dfc7d6135993e172ce586Adam Cohen if (flp instanceof LayoutParams) { 2346788269814a678af976dfc7d6135993e172ce586Adam Cohen final LayoutParams lp = (LayoutParams) flp; 2356788269814a678af976dfc7d6135993e172ce586Adam Cohen if (lp.customPosition) { 2366788269814a678af976dfc7d6135993e172ce586Adam Cohen child.layout(lp.x, lp.y, lp.x + lp.width, lp.y + lp.height); 2376788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2386788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2396788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2406788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2416788269814a678af976dfc7d6135993e172ce586Adam Cohen 2426788269814a678af976dfc7d6135993e172ce586Adam Cohen public void clearAllResizeFrames() { 2436788269814a678af976dfc7d6135993e172ce586Adam Cohen if (mResizeFrames.size() > 0) { 2446788269814a678af976dfc7d6135993e172ce586Adam Cohen for (AppWidgetResizeFrame frame: mResizeFrames) { 2456788269814a678af976dfc7d6135993e172ce586Adam Cohen removeView(frame); 2466788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2476788269814a678af976dfc7d6135993e172ce586Adam Cohen mResizeFrames.clear(); 2486788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2496788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2506788269814a678af976dfc7d6135993e172ce586Adam Cohen 2516788269814a678af976dfc7d6135993e172ce586Adam Cohen public boolean hasResizeFrames() { 2526788269814a678af976dfc7d6135993e172ce586Adam Cohen return mResizeFrames.size() > 0; 2536788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2546788269814a678af976dfc7d6135993e172ce586Adam Cohen 2556788269814a678af976dfc7d6135993e172ce586Adam Cohen public boolean isWidgetBeingResized() { 2566788269814a678af976dfc7d6135993e172ce586Adam Cohen return mCurrentResizeFrame != null; 2576788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2586788269814a678af976dfc7d6135993e172ce586Adam Cohen 2596788269814a678af976dfc7d6135993e172ce586Adam Cohen public void addResizeFrame(ItemInfo itemInfo, LauncherAppWidgetHostView widget, 2606788269814a678af976dfc7d6135993e172ce586Adam Cohen CellLayout cellLayout) { 2616788269814a678af976dfc7d6135993e172ce586Adam Cohen AppWidgetResizeFrame resizeFrame = new AppWidgetResizeFrame(getContext(), 2626788269814a678af976dfc7d6135993e172ce586Adam Cohen itemInfo, widget, cellLayout, this); 2636788269814a678af976dfc7d6135993e172ce586Adam Cohen 2646788269814a678af976dfc7d6135993e172ce586Adam Cohen LayoutParams lp = new LayoutParams(-1, -1); 2656788269814a678af976dfc7d6135993e172ce586Adam Cohen lp.customPosition = true; 2666788269814a678af976dfc7d6135993e172ce586Adam Cohen 2676788269814a678af976dfc7d6135993e172ce586Adam Cohen addView(resizeFrame, lp); 2686788269814a678af976dfc7d6135993e172ce586Adam Cohen mResizeFrames.add(resizeFrame); 2696788269814a678af976dfc7d6135993e172ce586Adam Cohen 2706788269814a678af976dfc7d6135993e172ce586Adam Cohen resizeFrame.snapToWidget(false); 2716788269814a678af976dfc7d6135993e172ce586Adam Cohen } 2722801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen 2732801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen public void setCurrentFolder(Folder f) { 2742801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen mCurrentFolder = f; 2752801cafe62653131fdc9da402e5c44e5ffd0bf47Adam Cohen } 27631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project} 277