1 package com.android.dialer.list; 2 3 import android.view.View; 4 5 import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow; 6 7 import java.util.ArrayList; 8 import java.util.List; 9 10 /** 11 * Class that handles and combines drag events generated from multiple views, and then fires 12 * off events to any OnDragDropListeners that have registered for callbacks. 13 */ 14 public class DragDropController { 15 private List<OnDragDropListener> mOnDragDropListeners = new ArrayList<OnDragDropListener>(); 16 17 /** 18 * @return True if the drag is started, false if the drag is cancelled for some reason. 19 */ handleDragStarted(int x, int y, ContactTileRow tileRow)20 boolean handleDragStarted(int x, int y, ContactTileRow tileRow) { 21 final PhoneFavoriteTileView tileView = 22 (PhoneFavoriteTileView) tileRow.getViewAtPosition(x, y); 23 24 final int itemIndex = tileRow.getItemIndex(x, y); 25 if (itemIndex != -1 && !mOnDragDropListeners.isEmpty()) { 26 for (int i = 0; i < mOnDragDropListeners.size(); i++) { 27 mOnDragDropListeners.get(i).onDragStarted(itemIndex, x, y, tileView); 28 } 29 } 30 31 return true; 32 } 33 handleDragHovered(int x, int y, View view)34 public void handleDragHovered(int x, int y, View view) { 35 int itemIndex; 36 if (!(view instanceof ContactTileRow)) { 37 itemIndex = -1; 38 } else { 39 final ContactTileRow tile = (ContactTileRow) view; 40 itemIndex = tile.getItemIndex(x, y); 41 } 42 for (int i = 0; i < mOnDragDropListeners.size(); i++) { 43 mOnDragDropListeners.get(i).onDragHovered(itemIndex, x, y); 44 } 45 } 46 handleDragFinished(int x, int y, boolean isRemoveView)47 public void handleDragFinished(int x, int y, boolean isRemoveView) { 48 if (isRemoveView) { 49 for (int i = 0; i < mOnDragDropListeners.size(); i++) { 50 mOnDragDropListeners.get(i).onDroppedOnRemove(); 51 } 52 } 53 54 for (int i = 0; i < mOnDragDropListeners.size(); i++) { 55 mOnDragDropListeners.get(i).onDragFinished(x, y); 56 } 57 } 58 addOnDragDropListener(OnDragDropListener listener)59 public void addOnDragDropListener(OnDragDropListener listener) { 60 if (!mOnDragDropListeners.contains(listener)) { 61 mOnDragDropListeners.add(listener); 62 } 63 } 64 removeOnDragDropListener(OnDragDropListener listener)65 public void removeOnDragDropListener(OnDragDropListener listener) { 66 if (mOnDragDropListeners.contains(listener)) { 67 mOnDragDropListeners.remove(listener); 68 } 69 } 70 71 }