1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.launcher2; 18 19 import android.content.Context; 20 import android.content.res.Resources; 21 import android.graphics.PointF; 22 import android.graphics.Rect; 23 import android.graphics.drawable.Drawable; 24 import android.util.AttributeSet; 25 import android.widget.TextView; 26 27 import com.android.launcher.R; 28 29 30 /** 31 * Implements a DropTarget. 32 */ 33 public class ButtonDropTarget extends TextView implements DropTarget, DragController.DragListener { 34 35 protected final int mTransitionDuration; 36 37 protected Launcher mLauncher; 38 private int mBottomDragPadding; 39 protected TextView mText; 40 protected SearchDropTargetBar mSearchDropTargetBar; 41 42 /** Whether this drop target is active for the current drag */ 43 protected boolean mActive; 44 45 /** The paint applied to the drag view on hover */ 46 protected int mHoverColor = 0; 47 ButtonDropTarget(Context context, AttributeSet attrs)48 public ButtonDropTarget(Context context, AttributeSet attrs) { 49 this(context, attrs, 0); 50 } 51 ButtonDropTarget(Context context, AttributeSet attrs, int defStyle)52 public ButtonDropTarget(Context context, AttributeSet attrs, int defStyle) { 53 super(context, attrs, defStyle); 54 55 Resources r = getResources(); 56 mTransitionDuration = r.getInteger(R.integer.config_dropTargetBgTransitionDuration); 57 mBottomDragPadding = r.getDimensionPixelSize(R.dimen.drop_target_drag_padding); 58 } 59 setLauncher(Launcher launcher)60 void setLauncher(Launcher launcher) { 61 mLauncher = launcher; 62 } 63 acceptDrop(DragObject d)64 public boolean acceptDrop(DragObject d) { 65 return false; 66 } 67 setSearchDropTargetBar(SearchDropTargetBar searchDropTargetBar)68 public void setSearchDropTargetBar(SearchDropTargetBar searchDropTargetBar) { 69 mSearchDropTargetBar = searchDropTargetBar; 70 } 71 getCurrentDrawable()72 protected Drawable getCurrentDrawable() { 73 Drawable[] drawables = getCompoundDrawables(); 74 for (int i = 0; i < drawables.length; ++i) { 75 if (drawables[i] != null) { 76 return drawables[i]; 77 } 78 } 79 return null; 80 } 81 onDrop(DragObject d)82 public void onDrop(DragObject d) { 83 } 84 onFlingToDelete(DragObject d, int x, int y, PointF vec)85 public void onFlingToDelete(DragObject d, int x, int y, PointF vec) { 86 // Do nothing 87 } 88 onDragEnter(DragObject d)89 public void onDragEnter(DragObject d) { 90 d.dragView.setColor(mHoverColor); 91 } 92 onDragOver(DragObject d)93 public void onDragOver(DragObject d) { 94 // Do nothing 95 } 96 onDragExit(DragObject d)97 public void onDragExit(DragObject d) { 98 d.dragView.setColor(0); 99 } 100 onDragStart(DragSource source, Object info, int dragAction)101 public void onDragStart(DragSource source, Object info, int dragAction) { 102 // Do nothing 103 } 104 isDropEnabled()105 public boolean isDropEnabled() { 106 return mActive; 107 } 108 onDragEnd()109 public void onDragEnd() { 110 // Do nothing 111 } 112 113 @Override getHitRect(android.graphics.Rect outRect)114 public void getHitRect(android.graphics.Rect outRect) { 115 super.getHitRect(outRect); 116 outRect.bottom += mBottomDragPadding; 117 } 118 getIconRect(int itemWidth, int itemHeight, int drawableWidth, int drawableHeight)119 Rect getIconRect(int itemWidth, int itemHeight, int drawableWidth, int drawableHeight) { 120 DragLayer dragLayer = mLauncher.getDragLayer(); 121 122 // Find the rect to animate to (the view is center aligned) 123 Rect to = new Rect(); 124 dragLayer.getViewRectRelativeToSelf(this, to); 125 int width = drawableWidth; 126 int height = drawableHeight; 127 int left = to.left + getPaddingLeft(); 128 int top = to.top + (getMeasuredHeight() - height) / 2; 129 to.set(left, top, left + width, top + height); 130 131 // Center the destination rect about the trash icon 132 int xOffset = (int) -(itemWidth - width) / 2; 133 int yOffset = (int) -(itemHeight - height) / 2; 134 to.offset(xOffset, yOffset); 135 136 return to; 137 } 138 139 @Override getDropTargetDelegate(DragObject d)140 public DropTarget getDropTargetDelegate(DragObject d) { 141 return null; 142 } 143 getLocationInDragLayer(int[] loc)144 public void getLocationInDragLayer(int[] loc) { 145 mLauncher.getDragLayer().getLocationInDragLayer(this, loc); 146 } 147 } 148