public void onDragOver(DragObject d) {
    final DragView dragView = d.dragView;
    final int scrollOffset = mScrollView.getScrollY();
    final float[] r = getDragViewVisualCenter(d.x, d.y, d.xOffset, d.yOffset, dragView, null);
    r[0] -= getPaddingLeft();
    r[1] -= getPaddingTop();

    final long downTime = SystemClock.uptimeMillis();
    final MotionEvent translatedEv =
        MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_MOVE, d.x, d.y, 0);

    if (!mAutoScrollHelper.isEnabled()) {
      mAutoScrollHelper.setEnabled(true);
    }

    final boolean handled = mAutoScrollHelper.onTouch(this, translatedEv);
    translatedEv.recycle();

    if (handled) {
      mReorderAlarm.cancelAlarm();
    } else {
      mTargetCell =
          mContent.findNearestArea((int) r[0], (int) r[1] + scrollOffset, 1, 1, mTargetCell);
      if (isLayoutRtl()) {
        mTargetCell[0] = mContent.getCountX() - mTargetCell[0] - 1;
      }
      if (mTargetCell[0] != mPreviousTargetCell[0] || mTargetCell[1] != mPreviousTargetCell[1]) {
        mReorderAlarm.cancelAlarm();
        mReorderAlarm.setOnAlarmListener(mReorderAlarmListener);
        mReorderAlarm.setAlarm(REORDER_DELAY);
        mPreviousTargetCell[0] = mTargetCell[0];
        mPreviousTargetCell[1] = mTargetCell[1];
      }
    }
  }
Ejemplo n.º 2
0
  public void onDropCompleted(View target, DragObject d, boolean success) {
    if (success) {
      if (mDeleteFolderOnDropCompleted && !mItemAddedBackToSelfViaIcon) {
        replaceFolderWithFinalItem();
      }
    } else {
      // The drag failed, we need to return the item to the folder
      mFolderIcon.onDrop(d);

      // We're going to trigger a "closeFolder" which may occur before this item has
      // been added back to the folder -- this could cause the folder to be deleted
      if (mOnExitAlarm.alarmPending()) {
        mSuppressFolderDeletion = true;
      }
    }

    if (target != this) {
      if (mOnExitAlarm.alarmPending()) {
        mOnExitAlarm.cancelAlarm();
        completeDragExit();
      }
    }
    mDeleteFolderOnDropCompleted = false;
    mDragInProgress = false;
    mItemAddedBackToSelfViaIcon = false;
    mCurrentDragInfo = null;
    mCurrentDragView = null;
    mSuppressOnAdd = false;

    // Reordering may have occured, and we need to save the new item locations. We do this once
    // at the end to prevent unnecessary database operations.
    updateItemLocationsInDatabase();
  }
Ejemplo n.º 3
0
 public void onDragExit(DragObject d) {
   // We only close the folder if this is a true drag exit, ie. not because a drop
   // has occurred above the folder.
   if (!d.dragComplete) {
     mOnExitAlarm.setOnAlarmListener(mOnExitAlarmListener);
     mOnExitAlarm.setAlarm(ON_EXIT_CLOSE_DELAY);
   }
   mReorderAlarm.cancelAlarm();
 }
 public void onDragExit(DragObject d) {
   // Exiting folder; stop the auto scroller.
   mAutoScrollHelper.setEnabled(false);
   // We only close the folder if this is a true drag exit, ie. not because
   // a drop has occurred above the folder.
   if (!d.dragComplete) {
     mOnExitAlarm.setOnAlarmListener(mOnExitAlarmListener);
     mOnExitAlarm.setAlarm(ON_EXIT_CLOSE_DELAY);
   }
   mReorderAlarm.cancelAlarm();
 }
Ejemplo n.º 5
0
  public void onDragOver(DragObject d) {
    float[] r = getDragViewVisualCenter(d.x, d.y, d.xOffset, d.yOffset, d.dragView, null);
    mTargetCell = mContent.findNearestArea((int) r[0], (int) r[1], 1, 1, mTargetCell);

    if (mTargetCell[0] != mPreviousTargetCell[0] || mTargetCell[1] != mPreviousTargetCell[1]) {
      mReorderAlarm.cancelAlarm();
      mReorderAlarm.setOnAlarmListener(mReorderAlarmListener);
      mReorderAlarm.setAlarm(150);
      mPreviousTargetCell[0] = mTargetCell[0];
      mPreviousTargetCell[1] = mTargetCell[1];
    }
  }
  public void onDropCompleted(
      final View target, final DragObject d, final boolean isFlingToDelete, final boolean success) {
    if (mDeferDropAfterUninstall) {
      Log.d(TAG, "Deferred handling drop because waiting for uninstall.");
      mDeferredAction =
          new Runnable() {
            public void run() {
              onDropCompleted(target, d, isFlingToDelete, success);
              mDeferredAction = null;
            }
          };
      return;
    }

    boolean beingCalledAfterUninstall = mDeferredAction != null;
    boolean successfulDrop = success && (!beingCalledAfterUninstall || mUninstallSuccessful);

    if (successfulDrop) {
      if (mDeleteFolderOnDropCompleted && !mItemAddedBackToSelfViaIcon && target != this) {
        replaceFolderWithFinalItem();
      }
    } else {
      setupContentForNumItems(getItemCount());
      // The drag failed, we need to return the item to the folder
      mFolderIcon.onDrop(d);
    }

    if (target != this) {
      if (mOnExitAlarm.alarmPending()) {
        mOnExitAlarm.cancelAlarm();
        if (!successfulDrop) {
          mSuppressFolderDeletion = true;
        }
        completeDragExit();
      }
    }

    mDeleteFolderOnDropCompleted = false;
    mDragInProgress = false;
    mItemAddedBackToSelfViaIcon = false;
    mCurrentDragInfo = null;
    mCurrentDragView = null;
    mSuppressOnAdd = false;

    // Reordering may have occured, and we need to save the new item locations. We do this once
    // at the end to prevent unnecessary database operations.
    updateItemLocationsInDatabaseBatch();
  }
 public void onDragEnter(DragObject d) {
   mPreviousTargetCell[0] = -1;
   mPreviousTargetCell[1] = -1;
   mOnExitAlarm.cancelAlarm();
 }