Handle different scale and offset for pointers in InputTarget.

This change allows an InputTarget to have multiple pointers in different
scale and offsets. This was done by using an array to store each
pointerId to PointerInfo. PointerInfo contains the information that's
unique to each pointer, scale and offset.

Once the dispatcher is ready to queue the event, the dispatcher will
request the InputTarget to gather all it's pointer information and
normalize them to a single offset and scale. It will generate a new
DispatcherEntry with a new MotionEvent that has all the coordinates in a
single offset and scale. It will also set that offset and scale in the
MotionEvent so it can be handled properly when sent to the client.

This is the 3rd attempt since it was breaking tests

Change-Id: Ic75c7df06cf4a881da6ac0c57013e29a84533d1e
Test: InputDispatcherMultiWindowSameTokenTests
Test: manually with magnification
Test: NexusLauncherOutOfProcTests:TaplTestsLauncher3
Test: NexusLauncherOutOfProcTests:TaplTestsQuickstep
Fixes: 140756730
Fixes: 147371357
4 files changed