docs: private void multiTouchController() {
  		if (DEBUG)
  			Log.i("MultiTouch", "Got here 6 - " + mMode + " " + mCurrPt.getNumTouchPoints() + " " + mCurrPt.isDown() + mCurrPt.isMultiTouch());
  
  		switch (mMode) {
  		case MODE_NOTHING:
              if (DEBUG)
                  Log.i("MultiTouch", "MODE_NOTHING");
  			// Not doing anything currently
  			if (mCurrPt.isDown()) {
  				// Start a new single-point drag
  				selectedObject = objectCanvas.getDraggableObjectAtPoint(mCurrPt);
  				if (selectedObject != null) {
  					// Started a new single-point drag
  					mMode = MODE_DRAG;
  					objectCanvas.selectObject(selectedObject, mCurrPt);
  					anchorAtThisPositionAndScale();
  					// Don't need any settling time if just placing one finger, there is no noise
  					mSettleStartTime = mSettleEndTime = mCurrPt.getEventTime();
  				}
  			}
  			break;
  
  		case MODE_DRAG:
              if (DEBUG)
                  Log.i("MultiTouch", "MODE_DRAG");
  			// Currently in a single-point drag
  			if (!mCurrPt.isDown()) {
  				// First finger was released, stop dragging
  				mMode = MODE_NOTHING;
  				objectCanvas.selectObject((selectedObject = null), mCurrPt);
  
  			} else if (mCurrPt.isMultiTouch()) {
  				// Point 1 was already down and point 2 was just placed down
  				mMode = MODE_PINCH;
  				// Restart the drag with the new drag position (that is at the midpoint between the touchpoints)
  				anchorAtThisPositionAndScale();
  				// Need to let events settle before moving things, to help with event noise on touchdown
  				mSettleStartTime = mCurrPt.getEventTime();
  				mSettleEndTime = mSettleStartTime + EVENT_SETTLE_TIME_INTERVAL;
  
  			} else {
  				// Point 1 is still down and point 2 did not change state, just do single-point drag to new location
  				if (mCurrPt.getEventTime() < mSettleEndTime) {
  					// Ignore the first few events if we just stopped stretching, because if finger 2 was kept down while
  					// finger 1 is lifted, then point 1 gets mapped to finger 2. Restart the drag from the new position.
  					anchorAtThisPositionAndScale();
  				} else {
  					// Keep dragging, move to new point
  					performDragOrPinch();
  				}
  			}
  			break;
  
  		case MODE_PINCH:
              if (DEBUG)
                  Log.i("MultiTouch", "MODE_PINCH");
  			// Two-point pinch-scale/rotate/translate
  			if (!mCurrPt.isMultiTouch() || !mCurrPt.isDown()) {
  				// Dropped one or both points, stop stretching
  
  				if (!mCurrPt.isDown()) {
  					// Dropped both points, go back to doing nothing
  					mMode = MODE_NOTHING;
  					objectCanvas.selectObject((selectedObject = null), mCurrPt);
  
  				} else {
  					// Just dropped point 2, downgrade to a single-point drag
  					mMode = MODE_DRAG;
  					// Restart the pinch with the single-finger position
  					anchorAtThisPositionAndScale();
  					// Ignore the first few events after the drop, in case we dropped finger 1 and left finger 2 down
  					mSettleStartTime = mCurrPt.getEventTime();
  					mSettleEndTime = mSettleStartTime + EVENT_SETTLE_TIME_INTERVAL;
  				}
  
  			} else {
  				// Still pinching
  				if (Math.abs(mCurrPt.getX() - mPrevPt.getX()) > MAX_MULTITOUCH_POS_JUMP_SIZE
  						|| Math.abs(mCurrPt.getY() - mPrevPt.getY()) > MAX_MULTITOUCH_POS_JUMP_SIZE
  						|| Math.abs(mCurrPt.getMultiTouchWidth() - mPrevPt.getMultiTouchWidth()) * .5f > MAX_MULTITOUCH_DIM_JUMP_SIZE
  						|| Math.abs(mCurrPt.getMultiTouchHeight() - mPrevPt.getMultiTouchHeight()) * .5f > MAX_MULTITOUCH_DIM_JUMP_SIZE) {
  					// Jumped too far, probably event noise, reset and ignore events for a bit
  					anchorAtThisPositionAndScale();
  					mSettleStartTime = mCurrPt.getEventTime();
  					mSettleEndTime = mSettleStartTime + EVENT_SETTLE_TIME_INTERVAL;
  
  				} else if (mCurrPt.eventTime < mSettleEndTime) {
  					// Events have not yet settled, reset
  					anchorAtThisPositionAndScale();
  				} else {
  					// Stretch to new position and size
  					performDragOrPinch();
  				}
  			}
  			break;
  		}
  		if (DEBUG)
  			Log.i("MultiTouch", "Got here 7 - " + mMode + " " + mCurrPt.getNumTouchPoints() + " " + mCurrPt.isDown() + mCurrPt.isMultiTouch());
  	}