| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.launcher2; |
| |
| import android.content.Context; |
| import android.graphics.PointF; |
| import android.graphics.Rect; |
| import android.util.Log; |
| |
| /** |
| * Interface defining an object that can receive a drag. |
| * |
| */ |
| public interface DropTarget { |
| |
| public static final String TAG = "DropTarget"; |
| |
| class DragObject { |
| public int x = -1; |
| public int y = -1; |
| |
| /** X offset from the upper-left corner of the cell to where we touched. */ |
| public int xOffset = -1; |
| |
| /** Y offset from the upper-left corner of the cell to where we touched. */ |
| public int yOffset = -1; |
| |
| /** This indicates whether a drag is in final stages, either drop or cancel. It |
| * differentiates onDragExit, since this is called when the drag is ending, above |
| * the current drag target, or when the drag moves off the current drag object. |
| */ |
| public boolean dragComplete = false; |
| |
| /** The view that moves around while you drag. */ |
| public DragView dragView = null; |
| |
| /** The data associated with the object being dragged */ |
| public Object dragInfo = null; |
| |
| /** Where the drag originated */ |
| public DragSource dragSource = null; |
| |
| /** Post drag animation runnable */ |
| public Runnable postAnimationRunnable = null; |
| |
| /** Indicates that the drag operation was cancelled */ |
| public boolean cancelled = false; |
| |
| /** Defers removing the DragView from the DragLayer until after the drop animation. */ |
| public boolean deferDragViewCleanupPostAnimation = true; |
| |
| public DragObject() { |
| } |
| } |
| |
| public static class DragEnforcer implements DragController.DragListener { |
| int dragParity = 0; |
| |
| public DragEnforcer(Context context) { |
| Launcher launcher = (Launcher) context; |
| launcher.getDragController().addDragListener(this); |
| } |
| |
| void onDragEnter() { |
| dragParity++; |
| if (dragParity != 1) { |
| Log.e(TAG, "onDragEnter: Drag contract violated: " + dragParity); |
| } |
| } |
| |
| void onDragExit() { |
| dragParity--; |
| if (dragParity != 0) { |
| Log.e(TAG, "onDragExit: Drag contract violated: " + dragParity); |
| } |
| } |
| |
| @Override |
| public void onDragStart(DragSource source, Object info, int dragAction) { |
| if (dragParity != 0) { |
| Log.e(TAG, "onDragEnter: Drag contract violated: " + dragParity); |
| } |
| } |
| |
| @Override |
| public void onDragEnd() { |
| if (dragParity != 0) { |
| Log.e(TAG, "onDragExit: Drag contract violated: " + dragParity); |
| } |
| } |
| } |
| |
| /** |
| * Used to temporarily disable certain drop targets |
| * |
| * @return boolean specifying whether this drop target is currently enabled |
| */ |
| boolean isDropEnabled(); |
| |
| /** |
| * Handle an object being dropped on the DropTarget |
| * |
| * @param source DragSource where the drag started |
| * @param x X coordinate of the drop location |
| * @param y Y coordinate of the drop location |
| * @param xOffset Horizontal offset with the object being dragged where the original |
| * touch happened |
| * @param yOffset Vertical offset with the object being dragged where the original |
| * touch happened |
| * @param dragView The DragView that's being dragged around on screen. |
| * @param dragInfo Data associated with the object being dragged |
| * |
| */ |
| void onDrop(DragObject dragObject); |
| |
| void onDragEnter(DragObject dragObject); |
| |
| void onDragOver(DragObject dragObject); |
| |
| void onDragExit(DragObject dragObject); |
| |
| /** |
| * Handle an object being dropped as a result of flinging to delete and will be called in place |
| * of onDrop(). (This is only called on objects that are set as the DragController's |
| * fling-to-delete target. |
| */ |
| void onFlingToDelete(DragObject dragObject, int x, int y, PointF vec); |
| |
| /** |
| * Allows a DropTarget to delegate drag and drop events to another object. |
| * |
| * Most subclasses will should just return null from this method. |
| * |
| * @param source DragSource where the drag started |
| * @param x X coordinate of the drop location |
| * @param y Y coordinate of the drop location |
| * @param xOffset Horizontal offset with the object being dragged where the original |
| * touch happened |
| * @param yOffset Vertical offset with the object being dragged where the original |
| * touch happened |
| * @param dragView The DragView that's being dragged around on screen. |
| * @param dragInfo Data associated with the object being dragged |
| * |
| * @return The DropTarget to delegate to, or null to not delegate to another object. |
| */ |
| DropTarget getDropTargetDelegate(DragObject dragObject); |
| |
| /** |
| * Check if a drop action can occur at, or near, the requested location. |
| * This will be called just before onDrop. |
| * |
| * @param source DragSource where the drag started |
| * @param x X coordinate of the drop location |
| * @param y Y coordinate of the drop location |
| * @param xOffset Horizontal offset with the object being dragged where the |
| * original touch happened |
| * @param yOffset Vertical offset with the object being dragged where the |
| * original touch happened |
| * @param dragView The DragView that's being dragged around on screen. |
| * @param dragInfo Data associated with the object being dragged |
| * @return True if the drop will be accepted, false otherwise. |
| */ |
| boolean acceptDrop(DragObject dragObject); |
| |
| // These methods are implemented in Views |
| void getHitRect(Rect outRect); |
| void getLocationInDragLayer(int[] loc); |
| int getLeft(); |
| int getTop(); |
| } |