Extensive handling of fixed rotation launching app

This fixes a case that display does not rotate after multiple
activities in a different rotation than display are launched.

- Link the transform state from the existing one to the new
  launching activity. So the heavy duplicated calculation is
  omitted and they can be recognized as a group to continue
  to update display rotation.
- Add a dedicated transition listener so it will not miss to
  handle display rotation if the reported token is different.
  That avoids leakage if somehow the transition is not notified
  then the listener is not unregistered. The path to finish
  fixed rotation is also simplified because there is always a
  transition listener to handle the incoming record.

Fixes: 154911677
Test: atest DisplayContentTests#testApplyTopFixedRotationTransform

Change-Id: Id370d7980d11553905b6a051482e3765ed61dc39
5 files changed