| /* |
| * Copyright (C) 2020 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.launcher3.dragndrop; |
| |
| import android.graphics.Rect; |
| |
| import androidx.annotation.NonNull; |
| |
| import com.android.launcher3.util.SafeCloseable; |
| |
| /** |
| * Interface defining methods required for drawing and previewing DragViews, drag previews, and |
| * related animations |
| */ |
| public interface DraggableView { |
| int DRAGGABLE_ICON = 0; |
| int DRAGGABLE_WIDGET = 1; |
| |
| /** |
| * Static ctr for a simple instance which just returns the view type. |
| */ |
| static DraggableView ofType(int type) { |
| return () -> type; |
| } |
| |
| /** |
| * Certain handling of DragViews depend only on whether this is an Icon Type item or a Widget |
| * Type item. |
| * |
| * @return DRAGGABLE_ICON or DRAGGABLE_WIDGET as appropriate |
| */ |
| int getViewType(); |
| |
| /** |
| * Before rendering as a DragView bitmap, some views need a preparation step. Returns a |
| * callback to clear any preparation work |
| */ |
| @NonNull default SafeCloseable prepareDrawDragView() { |
| return () -> { }; |
| } |
| |
| /** |
| * If an actual View subclass, this method returns the rectangle (within the View's coordinates) |
| * of the visual region that should get dragged. This is used to extract exactly that element |
| * as well as to offset that element as appropriate for various animations |
| * |
| * @param bounds Visual bounds in the views coordinates will be written here. |
| */ |
| default void getWorkspaceVisualDragBounds(Rect bounds) { } |
| |
| /** |
| * Same as above, but accounts for differing icon sizes between source and destination |
| * |
| * @param bounds Visual bounds in the views coordinates will be written here. |
| */ |
| default void getSourceVisualDragBounds(Rect bounds) { |
| getWorkspaceVisualDragBounds(bounds); |
| } |
| } |