code: void setState(TouchState newState) {
          if (MonocleSettings.settings.traceEvents) {
              MonocleTrace.traceEvent("Set %s", newState);
          }
          newState.sortPointsByID();
          newState.assignPrimaryID();
          // Get the cached window for the old state and compute the window for
          // the new state
          MonocleWindow oldWindow = state.getWindow(false, null);
          boolean recalculateWindow = state.getPointCount() == 0;
          MonocleWindow window = newState.getWindow(recalculateWindow, oldWindow);
          View oldView = oldWindow == null ? null : oldWindow.getView();
          View view = window == null ? null : window.getView();
          if (!newState.equalsSorted(state)) {
              // Post touch events
              if (view != oldView) {
                  postTouchEvent(state, TouchEvent.TOUCH_RELEASED);
                  postTouchEvent(newState,
                                 TouchEvent.TOUCH_PRESSED);
              } else if (view != null) {
                  postTouchEvent(window, view, newState);
              }
              // Post mouse events
              MouseInputSynthesizer.getInstance().setState(newState);
          }
          newState.copyTo(state);
          newState.clearWindow();
      }
docs: Called from the input processor to update the touch state and send
  touch and mouse events.
  
  @param newState The updated touch state