1524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler/* 2524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * Copyright (C) 2010 The Android Open Source Project 3524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * 4524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * Licensed under the Apache License, Version 2.0 (the "License"); 5524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * you may not use this file except in compliance with the License. 6524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * You may obtain a copy of the License at 7524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * 8524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * http://www.apache.org/licenses/LICENSE-2.0 9524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * 10524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * Unless required by applicable law or agreed to in writing, software 11524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * distributed under the License is distributed on an "AS IS" BASIS, 12524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * See the License for the specific language governing permissions and 14524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler * limitations under the License. 15524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler */ 16524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 17524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandlerpackage com.android.systemui.statusbar.tablet; 18524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 191cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.animation.Animator; 201cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.animation.AnimatorListenerAdapter; 21524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandlerimport android.animation.ObjectAnimator; 22524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandlerimport android.content.ClipData; 23524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandlerimport android.content.ClipDescription; 241cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.content.Context; 25524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandlerimport android.graphics.Bitmap; 26524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandlerimport android.graphics.Canvas; 271cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.graphics.Paint; 281cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.graphics.PixelFormat; 29524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandlerimport android.graphics.Point; 301cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.util.AttributeSet; 311cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.util.Slog; 321cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.view.DragEvent; 331cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.view.Gravity; 341cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.view.MotionEvent; 351cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.view.View; 36524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandlerimport android.view.WindowManager; 37524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandlerimport android.view.WindowManagerImpl; 381cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.widget.FrameLayout; 391cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.widget.ImageView; 401cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandlerimport android.widget.TextView; 41524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 42524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandlerimport com.android.systemui.R; 43524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 440ad460b087abbd4b523a2e61ff27b0bf6fb5be92Daniel Sandlerpublic class ShirtPocket extends ImageView { 45524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler private static final boolean DEBUG = false; 46524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler private static final String TAG = "StatusBar/ShirtPocket"; 47524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 48524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler private ClipData mClipping = null; 49524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 50524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler private ImageView mPreviewIcon; 51524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 521cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public static class DropZone extends View { 531cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler ShirtPocket mPocket; 541cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public DropZone(Context context, AttributeSet attrs) { 551cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler super(context, attrs); 561cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 571cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public void setPocket(ShirtPocket p) { 581cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler mPocket = p; 591cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 60524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 611cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public void onAttachedToWindow() { 621cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler super.onAttachedToWindow(); 631cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler if (mPocket.holding()) { 641cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler show(false); 651cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } else { 661cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler hide(false); 671cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 681cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 69524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 701cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler // Drag API notes: we must be visible to receive drag events 711cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler private void show(boolean animate) { 721cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler setTranslationY(0f); 731cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler if (animate) { 741cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler setAlpha(0f); 751cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler ObjectAnimator.ofFloat(this, "alpha", 0f, 1f).start(); 761cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } else { 771cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler setAlpha(1f); 781cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 791cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 80524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 811cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler private void hide(boolean animate) { 821cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler AnimatorListenerAdapter onEnd = new AnimatorListenerAdapter() { 831cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler @Override 841cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public void onAnimationEnd(Animator _a) { 851cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler DropZone.this.setTranslationY(getHeight() + 2); 861cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler DropZone.this.setAlpha(0f); 87524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 881cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler }; 891cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler if (animate) { 901cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler Animator a = ObjectAnimator.ofFloat(this, "alpha", getAlpha(), 0f); 911cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler a.addListener(onEnd); 921cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler a.start(); 931cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } else { 941cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler onEnd.onAnimationEnd(null); 95524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 961cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 97524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 981cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler @Override 991cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public boolean onDragEvent(DragEvent event) { 1001cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler if (DEBUG) Slog.d(TAG, "onDragEvent: " + event); 1011cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler switch (event.getAction()) { 1021cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler // We want to appear whenever a potential drag takes off from anywhere in the UI. 1031cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler case DragEvent.ACTION_DRAG_STARTED: 1041cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler show(true); 1051cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler break; 1061cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler case DragEvent.ACTION_DRAG_ENTERED: 1071cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler if (DEBUG) Slog.d(TAG, "entered!"); 1081cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler // XXX: TODO 1091cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler break; 1101cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler case DragEvent.ACTION_DRAG_EXITED: 1111cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler if (DEBUG) Slog.d(TAG, "exited!"); 1121cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler break; 1131cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler case DragEvent.ACTION_DROP: 1141cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler if (DEBUG) Slog.d(TAG, "dropped!"); 1151cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler mPocket.stash(event.getClipData()); 1161cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler break; 1171cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler case DragEvent.ACTION_DRAG_ENDED: 1181cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler hide(true); 1191cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler break; 120524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 1211cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler return true; // we want everything, thank you 1221cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 123524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 124524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 1251cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public ShirtPocket(Context context, AttributeSet attrs) { 1261cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler super(context, attrs); 127524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 1281cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler 1291cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler // TODO: "pin area" panel, dragging things out 1301cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler ObjectAnimator mAnimHide, mAnimShow; 131524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 1321cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler protected void onAttachedToWindow() { 1331cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 1341cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler 1351cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public boolean holding() { 1361cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler return (mClipping != null); 137524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 138524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 139524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler private void stash(ClipData clipping) { 140524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler mClipping = clipping; 141524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler if (mClipping != null) { 1421cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler setVisibility(View.VISIBLE); 143524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler Bitmap icon = mClipping.getIcon(); 1441cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler// mDescription.setText(mClipping.getDescription().getLabel()); 145524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler if (icon != null) { 1461cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler setImageBitmap(icon); 147524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } else { 148524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler if (mClipping.getItemCount() > 0) { 149524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler // TODO: figure out how to visualize every kind of ClipData! 1501cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler //mAltText.setText(mClipping.getItemAt(0).coerceToText(getContext())); 151524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 152524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 1531cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } else { 1541cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler setVisibility(View.GONE); 155524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 156524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 157524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 1581cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler @Override 1591cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public boolean onTouchEvent(MotionEvent ev) { 1601cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler final int action = ev.getAction(); 1611cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler if (action == MotionEvent.ACTION_DOWN) { 1621cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler final ClipData clip = mClipping; 1631cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler if (clip != null) { 1641cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler final Bitmap icon = clip.getIcon(); 1651cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler DragShadowBuilder shadow; 1661cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler if (icon != null) { 1671cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler shadow = new DragShadowBuilder(this) { 1681cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) { 1691cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler shadowSize.set(icon.getWidth(), icon.getHeight()); 1701cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler shadowTouchPoint.set(shadowSize.x / 2, shadowSize.y / 2); 1711cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 1721cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler public void onDrawShadow(Canvas canvas) { 1731cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler canvas.drawBitmap(icon, 0, 0, new Paint()); 1741cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 1751cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler }; 1761cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } else { 1771cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler // uhhh, what now? 1781cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler shadow = new DragShadowBuilder(this); 1791cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 1801cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler 1811cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler startDrag(clip, shadow, null, 0); 1821cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler 1831cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler // TODO: only discard the clipping if it was accepted 1841cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler stash(null); 1851cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler 1861cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler return true; 1871cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 1881cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 1891cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler return false; 1901cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler } 1911cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler 1921cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler /* 193524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler private boolean isInViewContentArea(View v, int x, int y) { 194524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler final int l = v.getPaddingLeft(); 195524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler final int r = v.getWidth() - v.getPaddingRight(); 196524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler final int t = v.getPaddingTop(); 197524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler final int b = v.getHeight() - v.getPaddingBottom(); 198524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler return x >= l && x < r && y >= t && y < b; 199524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 200524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 201524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler View.OnTouchListener mWindowTouchListener = new View.OnTouchListener() { 202524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler public boolean onTouch(View v, MotionEvent ev) { 203524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler final int action = ev.getAction(); 204524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler if (action == MotionEvent.ACTION_OUTSIDE 205524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler || (action == MotionEvent.ACTION_DOWN 206524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler && !isInViewContentArea(mWindow, (int)ev.getX(), (int)ev.getY()))) { 207524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler hideWindow(); 208524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler return true; 209524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } else if (action == MotionEvent.ACTION_DOWN) { 210524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler final ClipData clip = mClipping; 211524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler if (clip != null) { 212524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler final Bitmap icon = clip.getIcon(); 21336d4c3f02b4c3366b965896bc3da8bb332db1a64Christopher Tate DragShadowBuilder shadow; 214524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler if (icon != null) { 21536d4c3f02b4c3366b965896bc3da8bb332db1a64Christopher Tate shadow = new DragShadowBuilder(v) { 21636d4c3f02b4c3366b965896bc3da8bb332db1a64Christopher Tate public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) { 21736d4c3f02b4c3366b965896bc3da8bb332db1a64Christopher Tate shadowSize.set(icon.getWidth(), icon.getHeight()); 21836d4c3f02b4c3366b965896bc3da8bb332db1a64Christopher Tate shadowTouchPoint.set(shadowSize.x / 2, shadowSize.y / 2); 219524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 22036d4c3f02b4c3366b965896bc3da8bb332db1a64Christopher Tate public void onDrawShadow(Canvas canvas) { 221524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler canvas.drawBitmap(icon, 0, 0, new Paint()); 222524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 223524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler }; 224524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } else { 225524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler // uhhh, what now? 22636d4c3f02b4c3366b965896bc3da8bb332db1a64Christopher Tate shadow = new DragShadowBuilder(mWindow.findViewById(R.id.preview)); 227524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 228524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 22902d2b3ba9ba830a8147db2739613f7bbb2d0fcbfChristopher Tate v.startDrag(clip, shadow, null, 0); 230524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 231524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler // TODO: only discard the clipping if it was accepted 232524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler stash(null); 233524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 234524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler return true; 235524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 236524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 237524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler return false; 238524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler } 239524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler }; 2401cfe75301724d324c4f2e216dfef09ca2a474025Daniel Sandler */ 241524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler} 242524f568802c32ba1126fe2886f3e96d018d7f23dDaniel Sandler 243