Example usage for android.view DragEvent getY

List of usage examples for android.view DragEvent getY

Introduction

In this page you can find the example usage for android.view DragEvent getY.

Prototype

public float getY() 

Source Link

Document

Gets the Y coordinate of the drag point.

Usage

From source file:com.jaspersoft.android.jaspermobile.widget.DraggableViewsContainer.java

@Override
public boolean onDrag(View v, DragEvent event) {
    int viewId;//ww  w.ja  v a 2 s .com
    View noteView;
    switch (event.getAction()) {
    case DragEvent.ACTION_DRAG_STARTED:
        viewId = Integer.parseInt(event.getClipDescription().getLabel().toString());
        noteView = findViewById(viewId);
        noteView.setVisibility(View.GONE);
        return true;
    case DragEvent.ACTION_DROP:
        viewId = Integer.parseInt(event.getClipDescription().getLabel().toString());
        noteView = findViewById(viewId);
        noteView.setX(event.getX() - noteView.getWidth() / 2);
        noteView.setY(event.getY() - noteView.getHeight() / 2);
        noteView.setVisibility(View.VISIBLE);
        return true;
    default:
        return false;
    }
}

From source file:com.google.blockly.android.ui.Dragger.java

/**
 * Move the currently dragged block in response to a new {@link MotionEvent}.
 * <p/>//ww w .j  a  v  a 2s.c  om
 * All of the child blocks move with the root block based on its position during layout.
 *
 * @param event The {@link MotionEvent} to react to.
 */
private void updateBlockPosition(DragEvent event) {
    // The event is relative to the WorkspaceView. Grab the pixel offset within.
    ViewPoint curDragLocationPixels = mTempViewPoint;
    curDragLocationPixels.set((int) event.getX(), (int) event.getY());
    WorkspacePoint curDragPositionWorkspace = mTempWorkspacePoint;
    mHelper.virtualViewToWorkspaceCoordinates(curDragLocationPixels, curDragPositionWorkspace);

    WorkspacePoint touchDownWorkspace = mPendingDrag.getTouchDownWorkspaceCoordinates();
    // Subtract original drag location from current location to get delta
    int workspaceDeltaX = curDragPositionWorkspace.x - touchDownWorkspace.x;
    int workspaceDeltaY = curDragPositionWorkspace.y - touchDownWorkspace.y;

    WorkspacePoint blockOrigPosition = mPendingDrag.getOriginalBlockPosition();
    mPendingDrag.getRootDraggedBlock().setPosition(blockOrigPosition.x + workspaceDeltaX,
            blockOrigPosition.y + workspaceDeltaY);
    mPendingDrag.getDragGroup().requestLayout();
}

From source file:com.google.blockly.android.ui.Dragger.java

/**
 * Check whether the given event occurred on top of the trash can button.  Should be called from
 * {@link WorkspaceView}.//from   w  w w.java2s  . c  om
 *
 * @param event The event whose location should be checked, with position in WorkspaceView
 * coordinates.
 * @return Whether the event was on top of the trash can button.
 */
// TODO(#210): Generalize this to other possible block drop targets.
private boolean touchingTrashView(DragEvent event) {
    if (mTrashView == null) {
        return false;
    }

    mTrashView.getLocationOnScreen(mTempScreenCoord1);
    mTrashView.getHitRect(mTrashRect);

    mTrashRect.offset((mTempScreenCoord1[0] - mTrashRect.left), (mTempScreenCoord1[1] - mTrashRect.top));
    // Get the touch location on the screen
    mTempViewPoint.set((int) event.getX(), (int) event.getY());
    mHelper.virtualViewToScreenCoordinates(mTempViewPoint, mTempViewPoint);

    // Check if the touch location was on the trash
    return mTrashRect.contains(mTempViewPoint.x, mTempViewPoint.y);
}

From source file:com.launcher.silverfish.HomeScreenFragment.java

private void setOnDragListener() {
    rootView.setOnDragListener(new View.OnDragListener() {
        @Override/*from   w  w w .  j  a  v  a2  s. co m*/
        public boolean onDrag(View view, DragEvent dragEvent) {
            switch (dragEvent.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
                // Check that it is a shortcut removal gesture
                ClipDescription cd = dragEvent.getClipDescription();
                if (!cd.getLabel().toString().equals(Constants.DRAG_SHORTCUT_REMOVAL)) {
                    return false;
                }
                break;
            case DragEvent.ACTION_DRAG_ENTERED:
                // Don't do anything
                break;
            case DragEvent.ACTION_DRAG_LOCATION:
                //Don't do anything
                break;
            case DragEvent.ACTION_DROP:

                // If outside of bound, remove the app
                if (Utils.onBottomCenterScreenEdge(getActivity(), dragEvent.getX(), dragEvent.getY())) {
                    String appId = dragEvent.getClipData().getItemAt(0).getText().toString();
                    String appIndex = dragEvent.getClipData().getItemAt(1).getText().toString();
                    removeApp(Integer.parseInt(appIndex), Long.parseLong(appId));
                    updateShortcuts();
                }

                break;
            case DragEvent.ACTION_DRAG_ENDED:
                // Hide the remove-indicator
                FrameLayout rem_ind = (FrameLayout) rootView.findViewById(R.id.remove_indicator);
                rem_ind.setVisibility(View.INVISIBLE);
                break;

            }
            return true;
        }
    });
}

From source file:com.launcher.silverfish.launcher.appdrawer.TabbedAppDrawerFragment.java

private void setOnDragListener() {

    rootView.setOnDragListener(new View.OnDragListener() {
        @Override/*from ww w .  j  av a  2s.c o m*/
        public boolean onDrag(View view, DragEvent dragEvent) {

            switch (dragEvent.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED: {
                // Care only about DRAG_APP_MOVE drags.
                ClipDescription cd = dragEvent.getClipDescription();
                if (!cd.getLabel().toString().equals(Constants.DRAG_APP_MOVE))
                    return false;

                // Starting movement, drag offset is now reset to 0
                dragOffsetX = 0;
                dragOffsetY = 0;

                // Show the uninstall indicator
                showUninstallIndicator();
                break;
            }

            case DragEvent.ACTION_DRAG_ENTERED: {
                // Don't do anything
                break;
            }

            case DragEvent.ACTION_DRAG_LOCATION: {
                // getX() and getY() now return relative offsets,
                // so accumulate them to get the total movement
                dragOffsetX += dragEvent.getX();
                dragOffsetY += dragEvent.getY();

                // If drag is on the way out of this page then stop receiving drag events
                int threshold = Constants.SCREEN_CORNER_THRESHOLD;
                // Get display size
                int screen_width = Utils.getScreenDimensions(getActivity()).x;
                if (dragEvent.getX() > screen_width - threshold) {
                    return false;

                } else {

                    // Check if the drag is hovering over a tab button
                    int i = tabHandler.getHoveringTab(dragEvent.getX(), dragEvent.getY());

                    // If so, change to that tab
                    if (i > -1)
                        tabHandler.setTab(i);
                }
                break;
            }

            case DragEvent.ACTION_DROP: {
                String appName = dragEvent.getClipData().getItemAt(0).getText().toString();

                // If app is dropped on the uninstall indicator uninstall the app
                if (Utils.onBottomCenterScreenEdge(getActivity(), dragEvent.getX(), dragEvent.getY())) {
                    launchUninstallIntent(appName);
                } else {
                    // If the user didn't move the application from its original
                    // place (too much), then they might want to show a menu with more options
                    float distSq = (dragOffsetX * dragOffsetX) + (dragOffsetY * dragOffsetY);
                    if (distSq < Constants.NO_DRAG_THRESHOLD_SQ) {
                        showExtraOptionsMenu(appName);
                    } else {
                        // Retrieve tha drop information  and remove it from the original tab
                        int appIndex = Integer
                                .parseInt(dragEvent.getClipData().getItemAt(1).getText().toString());

                        String tabTag = dragEvent.getClipData().getItemAt(2).getText().toString();

                        removeAppFromTab(appIndex, tabTag);

                        // add it to the new tab
                        String app_name = dragEvent.getClipData().getItemAt(0).getText().toString();
                        dropAppInTab(app_name);
                    }
                }
                break;
            }

            case DragEvent.ACTION_DRAG_ENDED: {
                // Just hide the uninstall indicator
                hideUninstallIndicator();
                break;
            }

            }
            return true;
        }

    });
}

From source file:com.launcher.silverfish.TabbedAppDrawerFragment.java

private void setOnDragListener() {

    rootView.setOnDragListener(new View.OnDragListener() {
        @Override/*w  w  w. j a v a  2 s  . c om*/
        public boolean onDrag(View view, DragEvent dragEvent) {

            switch (dragEvent.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED: {

                // Care only about DRAG_APP_MOVE drags.
                ClipDescription cd = dragEvent.getClipDescription();
                if (!cd.getLabel().toString().equals(Constants.DRAG_APP_MOVE))
                    return false;

                // Show the uninstall indicator
                showUninstallIndicator();
                break;
            }

            case DragEvent.ACTION_DRAG_ENTERED: {
                // Don't do anything
                break;
            }

            case DragEvent.ACTION_DRAG_LOCATION: {
                // If drag is on the way out of this page then stop receiving drag events
                int threshold = Constants.SCREEN_CORNER_THRESHOLD;
                // Get display size
                int screen_width = Utils.getScreenDimensions(getActivity()).x;
                if (dragEvent.getX() > screen_width - threshold) {
                    return false;

                } else {

                    // Check if the drag is hovering over a tab button
                    int i = tabHandler.getHoveringTab(dragEvent.getX(), dragEvent.getY());

                    // If so, change to that tab
                    if (i > -1)
                        tabHandler.setTab(i);
                }
                break;
            }

            case DragEvent.ACTION_DROP: {

                // If app is dropped on the uninstall indicator uninstall the app
                if (Utils.onBottomCenterScreenEdge(getActivity(), dragEvent.getX(), dragEvent.getY())) {
                    String app_name = dragEvent.getClipData().getItemAt(0).getText().toString();
                    launchUninstallIntent(app_name);

                } else {
                    // retrieve tha drop information  and remove it from the original tab
                    int app_index = Integer.parseInt(dragEvent.getClipData().getItemAt(1).getText().toString());

                    String tab_tag = dragEvent.getClipData().getItemAt(2).getText().toString();

                    removeAppFromTab(app_index, tab_tag);

                    // add it to the new tab
                    String app_name = dragEvent.getClipData().getItemAt(0).getText().toString();
                    dropAppInTab(app_name);

                }
                break;
            }

            case DragEvent.ACTION_DRAG_ENDED: {
                // Just hide the uninstall indicator
                hideUninstallIndicator();
                break;
            }

            }
            return true;
        }

    });
}

From source file:rosmi.acagild.alarmclock.ringing.AlarmRingingFragment.java

@Nullable
@Override//w w w .  j  a v a2 s . c  o m
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    Logger.init(getActivity());
    Bundle args = getArguments();
    UUID alarmId = UUID.fromString(args.getString(ARGS_ALARM_ID));
    mAlarm = AlarmList.get(getContext()).getAlarm(alarmId);

    View view = inflater.inflate(R.layout.fragment_alarm_ringing, container, false);

    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) {
        TextView timeField = (TextView) view.findViewById(R.id.alarm_ringing_time);
        timeField.setText(DateTimeUtilities.getUserTimeString(getContext(), mAlarm.getTimeHour(),
                mAlarm.getTimeMinute()));
    }

    TextView dateField = (TextView) view.findViewById(R.id.alarm_ringing_date);
    dateField.setText(DateTimeUtilities.getFullDateStringForNow());

    String name = mAlarm.getTitle();
    TextView titleField = (TextView) view.findViewById(R.id.alarm_ringing_title);
    titleField.setText(name);

    ImageView dismissButton = (ImageView) view.findViewById(R.id.alarm_ringing_dismiss);
    dismissButton.setOnDragListener(new View.OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch (event.getAction()) {
            case DragEvent.ACTION_DROP:
                dismissAlarm();
                break;
            case DragEvent.ACTION_DRAG_ENDED:
                if (mShowClockOnDragEnd) {
                    mAlarmRingingClock.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            mAlarmRingingClock.setVisibility(View.VISIBLE);
                        }
                    }, SHOW_CLOCK_AFTER_UNSUCCESSFUL_DRAG_DELAY);
                }
                break;
            default:
                break;
            }
            return true;
        }
    });

    // Dismiss ringing if someone presses the dismiss button directly
    dismissButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dismissAlarm();
        }
    });

    ImageView snoozeButton = (ImageView) view.findViewById(R.id.alarm_ringing_snooze);
    snoozeButton.setOnDragListener(new View.OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch (event.getAction()) {
            case DragEvent.ACTION_DROP:
                mCallback.onRingingSnooze();
                break;
            default:
                break;
            }
            return true;
        }
    });

    // Snooze ringing if someone presses the snooze button directly
    snoozeButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mCallback.onRingingSnooze();
        }
    });

    // Allow the view to listen to the drag event to update arrow animations accordingly
    view.setOnDragListener(new View.OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_LOCATION:
                // Update the left/right arrow visibility based on the current drag location.
                onClockDragLocation(event.getX(), event.getY(), v.getWidth() / 2);
                break;
            case DragEvent.ACTION_DROP:
                // The user has dropped the drag, but it is dropped within the view, instead of the target
                // drop zones to dismiss or snooze.
                // Restore to show both left arrow and right arrow animations.
                mDragZone = DragZone.NEAR_MIDDLE_OF_VIEW;
                updateArrowsBasedOnDragZone(mDragZone);
                break;
            default:
                break;
            }
            return true;
        }
    });

    mAlarmRingingClock = (ImageView) view.findViewById(R.id.alarm_ringing_clock);
    mAlarmRingingClock.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                ClipData dragData = ClipData.newPlainText("", "");
                View.DragShadowBuilder shadow = new View.DragShadowBuilder(mAlarmRingingClock);
                mAlarmRingingClock.startDrag(dragData, shadow, null, 0);
                mAlarmRingingClock.setVisibility(View.INVISIBLE);
                return true;
            } else {
                return false;
            }

        }
    });

    initializeClockAnimation(view);

    Loggable.AppAction appAction = new Loggable.AppAction(Loggable.Key.APP_ALARM_RINGING);

    appAction.putJSON(mAlarm.toJSON());
    Logger.track(appAction);

    return view;
}

From source file:com.microsoft.mimickeralarm.ringing.AlarmRingingFragment.java

@Nullable
@Override/*  w ww . j  a v a 2  s . c  o m*/
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    Logger.init(getActivity());
    Bundle args = getArguments();
    UUID alarmId = UUID.fromString(args.getString(ARGS_ALARM_ID));
    mAlarm = AlarmList.get(getContext()).getAlarm(alarmId);

    View view = inflater.inflate(R.layout.fragment_alarm_ringing, container, false);

    if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) {
        TextView timeField = (TextView) view.findViewById(R.id.alarm_ringing_time);
        timeField.setText(DateTimeUtilities.getUserTimeString(getContext(), mAlarm.getTimeHour(),
                mAlarm.getTimeMinute()));
    }

    TextView dateField = (TextView) view.findViewById(R.id.alarm_ringing_date);
    dateField.setText(DateTimeUtilities.getFullDateStringForNow());

    String name = mAlarm.getTitle();
    TextView titleField = (TextView) view.findViewById(R.id.alarm_ringing_title);
    titleField.setText(name);

    ImageView dismissButton = (ImageView) view.findViewById(R.id.alarm_ringing_dismiss);
    dismissButton.setOnDragListener(new View.OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch (event.getAction()) {
            case DragEvent.ACTION_DROP:
                dismissAlarm();
                break;
            case DragEvent.ACTION_DRAG_ENDED:
                if (mShowClockOnDragEnd) {
                    mAlarmRingingClock.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            mAlarmRingingClock.setVisibility(View.VISIBLE);
                        }
                    }, SHOW_CLOCK_AFTER_UNSUCCESSFUL_DRAG_DELAY);
                }
                break;
            default:
                break;
            }
            return true;
        }
    });

    // Dismiss ringing if someone presses the dismiss button directly
    dismissButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dismissAlarm();
        }
    });

    ImageView snoozeButton = (ImageView) view.findViewById(R.id.alarm_ringing_snooze);
    snoozeButton.setOnDragListener(new View.OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch (event.getAction()) {
            case DragEvent.ACTION_DROP:
                mCallback.onRingingSnooze();
                break;
            default:
                break;
            }
            return true;
        }
    });

    // Snooze ringing if someone presses the snooze button directly
    snoozeButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            mCallback.onRingingSnooze();
        }
    });

    // Allow the view to listen to the drag event to update arrow animations accordingly
    view.setOnDragListener(new View.OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_LOCATION:
                // Update the left/right arrow visibility based on the current drag location.
                onClockDragLocation(event.getX(), event.getY(), v.getWidth() / 2);
                break;
            case DragEvent.ACTION_DROP:
                // The user has dropped the drag, but it is dropped within the view, instead of the target
                // drop zones to dismiss or snooze.
                // Restore to show both left arrow and right arrow animations.
                mDragZone = DragZone.NEAR_MIDDLE_OF_VIEW;
                updateArrowsBasedOnDragZone(mDragZone);
                break;
            default:
                break;
            }
            return true;
        }
    });

    mAlarmRingingClock = (ImageView) view.findViewById(R.id.alarm_ringing_clock);
    mAlarmRingingClock.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                ClipData dragData = ClipData.newPlainText("", "");
                View.DragShadowBuilder shadow = new View.DragShadowBuilder(mAlarmRingingClock);
                mAlarmRingingClock.startDrag(dragData, shadow, null, 0);
                mAlarmRingingClock.setVisibility(View.INVISIBLE);
                return true;
            } else {
                return false;
            }

        }
    });

    initializeClockAnimation(view);

    Loggable.AppAction appAction = new Loggable.AppAction(Loggable.Key.APP_ALARM_RINGING);

    appAction.putJSON(mAlarm.toJSON());
    Logger.track(appAction);

    return view;
}

From source file:app.umitems.greenclock.widget.sgv.StaggeredGridView.java

@Override
public boolean onDragEvent(DragEvent ev) {
    if (!isDragReorderingSupported()) {
        // If the consumer of this StaggeredGridView has not registered a ReorderListener,
        // don't bother handling drag events.
        return false;
    }/*w w w . j  a  v a 2  s  .com*/

    final int x = (int) ev.getX();
    final int y = (int) ev.getY();

    switch (ev.getAction()) {
    case DragEvent.ACTION_DRAG_LOCATION:
        if (mDragState == ReorderUtils.DRAG_STATE_DRAGGING) {
            handleDrag(x, y);
            mLastTouchY = y;
        }

        // Kick off the scroll handler on the first drag location event,
        // if it's not already running
        if (!mIsDragScrollerRunning &&
        // And if the distance traveled while dragging exceeds the touch slop
                ((Math.abs(x - mTouchDownForDragStartX) >= 4 * mTouchSlop)
                        || (Math.abs(y - mTouchDownForDragStartY) >= 4 * mTouchSlop))) {
            // Set true because that the scroller is running now
            mIsDragScrollerRunning = true;

            if (mScrollHandler == null) {
                mScrollHandler = getHandler();
            }
            mScrollHandler.postDelayed(mDragScroller, SCROLL_HANDLER_DELAY);
        }

        return true;

    case DragEvent.ACTION_DROP:
    case DragEvent.ACTION_DRAG_ENDED:
        // We can either expect to receive:
        // 1. Both {@link DragEvent#ACTION_DROP} and then
        //    {@link DragEvent#ACTION_DRAG_ENDED} if the drop is over this view.
        // 2. Only {@link DragEvent#ACTION_DRAG_ENDED} if the drop happened over a
        //    different view.
        // For this reason, we should always handle the drop. In case #1, if this code path
        // gets executed again then nothing will happen because we will have already
        // updated {@link #mDragState} to not be {@link ReorderUtils#DRAG_STATE_DRAGGING}.
        if (mScrollHandler != null) {
            mScrollHandler.removeCallbacks(mDragScroller);
            // Scroller is no longer running
            mIsDragScrollerRunning = false;
        }

        return true;
    }

    return false;
}

From source file:com.android.systemui.qs.QSDragPanel.java

@Override
public boolean onDrag(View v, DragEvent event) {
    final DragTileRecord targetTile = (DragTileRecord) getRecord(v);
    boolean originatingTileEvent = mDraggingRecord != null && v == mDraggingRecord.tileView;

    final int dragRecordIndex = mRecords.indexOf(mDraggingRecord);
    boolean dragRecordAttached = dragRecordIndex != -1;
    switch (event.getAction()) {
    case DragEvent.ACTION_DRAG_STARTED:
        if (DEBUG_DRAG) {
            Log.v(TAG, "ACTION_DRAG_STARTED on view: " + v);
        }/* w w  w .  jav  a 2 s  .c om*/

        if (originatingTileEvent) {
            if (DEBUG_DRAG) {
                Log.v(TAG, "ACTION_DRAG_STARTED on target view.");
            }
            mRestored = false;
            mQsPanelTop.setDropIcon(R.drawable.ic_qs_tile_delete_disable, R.color.qs_tile_trash_normal_tint);
        }

        break;

    case DragEvent.ACTION_DRAG_ENTERED:
        if (DEBUG_DRAG) {
            if (targetTile != null) {
                Log.v(TAG, "ACTION_DRAG_ENTERED on view with tile: " + targetTile);
            } else {
                Log.v(TAG, "ACTION_DRAG_ENTERED on view: " + v);
            }
        }
        mLocationHits = 0;
        mMovedByLocation = false;

        if (v == mQsPanelTop) {
            int icon, color;
            if (mDraggingRecord.tile instanceof EditTile) {
                // use a different warning, user can't erase this one
                icon = R.drawable.ic_qs_tile_delete_disable_avd;
                color = R.color.qs_tile_trash_delete_tint_warning;
            } else {
                icon = R.drawable.ic_qs_tile_delete_disable;
                color = R.color.qs_tile_trash_delete_tint;
            }

            mQsPanelTop.setDropIcon(icon, color);
        }

        if (!originatingTileEvent && v != getDropTarget() && targetTile != null) {
            if (DEBUG_DRAG) {
                Log.e(TAG, "entered tile " + targetTile);
            }
            if (mCurrentlyAnimating.isEmpty() && !mViewPager.isFakeDragging() && !dragRecordAttached) {
                mMovedByLocation = true;
                shiftTiles(targetTile, true);
            } else {
                if (DEBUG_DRAG) {
                    Log.w(TAG, "ignoring action enter for animating tiles and fake drags");
                }
            }
        }

        break;
    case DragEvent.ACTION_DRAG_ENDED:
        if (DEBUG_DRAG) {
            Log.v(TAG, "ACTION_DRAG_ENDED on view: " + v + "(tile: " + targetTile + "), result: "
                    + event.getResult());
        }
        if (originatingTileEvent && !event.getResult()) {
            // view pager probably ate the event
            restoreDraggingTilePosition(v, null);
        }

        break;

    case DragEvent.ACTION_DROP:
        if (DEBUG_DRAG) {
            Log.v(TAG, "ACTION_DROP, event loc: " + event.getX() + ", " + event.getY() + " + with tile: "
                    + targetTile + " and view: " + v);
        }
        mLastTouchLocationX = event.getX();
        mLastTouchLocationY = event.getY();

        if (isDropTargetEvent(event, v)) {
            if (DEBUG_DRAG) {
                Log.d(TAG, "dropping on delete target!!");
            }
            if (mDraggingRecord.tile instanceof EditTile) {
                final QSTileView editTileView = mDraggingRecord.tileView;

                mQsPanelTop.toast(R.string.quick_settings_cannot_delete_edit_tile);
                restoreDraggingTilePosition(v, new Runnable() {
                    @Override
                    public void run() {
                        // move edit tile to the back
                        final TileRecord editTile = getRecord(editTileView);
                        if (mRecords.remove(editTile)) {
                            // we depend on mHost.setTiles() placing it on the end
                            persistRecords();
                        }
                    }
                });
                break;
            } else if (mDraggingRecord.tile instanceof CustomQSTile) {
                ((CustomQSTile) mDraggingRecord.tile).setUserRemoved(true);
                final String spec = mHost.getSpec(mDraggingRecord.tile);
                restoreDraggingTilePosition(v, new Runnable() {
                    @Override
                    public void run() {
                        // it might get added back later by the app, but that's ok,
                        // we just want to reset its position after it has been removed.
                        mHost.remove(spec);
                    }
                });
            } else {
                mRestored = true;
                removeDraggingRecord();
            }
        } else {
            restoreDraggingTilePosition(v, null);
        }
        break;

    case DragEvent.ACTION_DRAG_EXITED:
        if (DEBUG_DRAG) {
            if (targetTile != null) {
                Log.v(TAG, "ACTION_DRAG_EXITED on view with tile: " + targetTile);
            } else {
                Log.v(TAG, "ACTION_DRAG_EXITED on view: " + v);
            }
        }

        if (v == mQsPanelTop) {
            mQsPanelTop.setDropIcon(R.drawable.ic_qs_tile_delete_disable, R.color.qs_tile_trash_normal_tint);
        }

        if (originatingTileEvent && mCurrentlyAnimating.isEmpty() && !mViewPager.isFakeDragging()
                && dragRecordAttached && mLastLeftShift == -1) {

            if (DEBUG_DRAG) {
                Log.v(TAG, "target: " + targetTile + ", hit mLastRightShift: " + mLastRightShift
                        + ", mLastLeftShift: " + mLastLeftShift + ", dragRecordIndex: " + dragRecordIndex);
            }

            // move tiles back
            shiftTiles(mDraggingRecord, false);
            break;
        }
        // fall through so exit events can trigger a left shift
    case DragEvent.ACTION_DRAG_LOCATION:
        mLastTouchLocationX = event.getX();
        mLastTouchLocationY = event.getY();

        // do nothing if we're animating tiles
        if (mCurrentlyAnimating.isEmpty() && !mViewPager.isFakeDragging()) {
            if (v == mViewPager) {
                // do we need to change pages?
                int x = (int) event.getX();
                int width = mViewPager.getWidth();
                int scrollPadding = (int) (width * QSViewPager.SCROLL_PERCENT);
                if (x < scrollPadding) {
                    if (mViewPager.canScrollHorizontally(-1)) {
                        mViewPager.animatePagerTransition(false);
                        return true;
                    }
                } else if (x > width - scrollPadding) {
                    if (mViewPager.canScrollHorizontally(1)) {
                        mViewPager.animatePagerTransition(true);
                        return true;
                    }
                }
            }
            if (DEBUG_DRAG) {
                Log.v(TAG, "location hit:// target: " + targetTile + ", hit mLastRightShift: " + mLastRightShift
                        + ", mLastLeftShift: " + mLastLeftShift + ", dragRecordIndex: " + dragRecordIndex
                        + ", originatingTileEvent: " + originatingTileEvent + ", mLocationHits: "
                        + mLocationHits + ", mMovedByLocation: " + mMovedByLocation);
            }

            if (v != getDropTarget() && targetTile != null && !dragRecordAttached) {
                // dragging around on another tile
                if (mLocationHits++ == 30) {
                    if (DEBUG_DRAG) {
                        Log.w(TAG, "shifting right due to location hits.");
                    }
                    // add dragging tile to current page
                    shiftTiles(targetTile, true);
                    mMovedByLocation = true;
                } else {
                    mLocationHits++;
                }
            } else if (mLastRightShift != -1 // right has shifted recently
                    && mLastLeftShift == -1 // -1 means its attached
                    && dragRecordIndex == mLastRightShift && !originatingTileEvent
                    && !mMovedByLocation /* helps avoid continuous shifting */) {
                // check if the location is on another tile/view
                // that is not the last drag index, shift back left to revert back and
                // potentially get ready for shifting right
                if (DEBUG_DRAG) {
                    Log.w(TAG, "conditions met to reverse!!!! shifting left. <<<<<<<");
                }
                shiftTiles((DragTileRecord) mRecords.get(mLastRightShift), false);
                mMovedByLocation = true;
            }

        } else {
            if (DEBUG_DRAG) {
                Log.i(TAG, "ignoring location event because things are animating, size: "
                        + mCurrentlyAnimating.size());
            }
        }
        break;

    default:
        Log.w(TAG, "unhandled event");
        return false;
    }
    return true;
}