Report orientation change when visibility changes.

AppWindowToken#getOrientation(int) consults visibility to decide if it
returns requested orientation or SCREEN_ORIENTATION_UNSET. Therefore
if the requested orientation is not unset, the requested orientation
exposed will be changed.

This gives corresponding task a chance to letterbox when the visibility
of top activity changes, which covers cases where top activity changes.

To make this change less risky at this moment, only call it when we're
sure that display doesn't rotate for app requested orientation.

Add a null check in Task#onDescednantOrientationChanged() because it now
may be called when app is closing and TaskRecord has been detached from
its ActivityStack.

Bug: 123716525
Test: Manual tests. go/wm-smoke on default mode.
atest AppWindowTokenTests
Change-Id: I6f4fba9f98c134e64f1d06e8556069b5609ef925
4 files changed