Add pre/post callback to IDragDropCallback

Previoulsy we uses mWriteLock to avoid race condition between
DragDropController and IDragDropCallback. However it turns out we have
dead lock here.

1. DragDropController invokes performDrag for drag operation B with
   holding write lock.
2. The Callback initiates other drag operation A before processing B.
3. A does not complete because DragDropController holding write lock for
   B. B does not complete because the callback try to process request A
   before B.

The CL removes write lock and separates the existing callback methods
into two: pre and post callbacks.

1. DragDropController invokes prePerfromDrag for drag operaiton B, which
   blocks.
2. The callback initiates other drag operation A before processing B.
3. DragDropController invokes prePerfromDrag for drag operaiton A, which
   returns immediately. DragDropController processes A and invokes
   postPefromCallback for A.
4. The Callback unblocks prePerfromDrag for B.

Bug: 65564090
Test: android.server.wm.CrossAppDragAndDropTests, manually check the
      drag and drop behavior on test app.
Change-Id: I393a031cb276d6fa7ea56909959d0f2c5d621125
2 files changed