Ensure accessibility updates during the recents animation
- There is no focused window (only the input consumer) during the recents animation so depending on when the window changes are computed for accessibility, it is possible that accessibility will not updated to reflect Launcher being visible. In these cases where we are swiping up to home, we already prevent input from going to the app (via the input consumer) and the home app should be considered for accessibility. Bug: 183238051 Test: Enable live tile, swipe up to enter Overview repeatedly Change-Id: I2503010c9e5dd1898f9c21ff9a9ee91c1be0d16f
This commit is contained in:
@@ -1511,10 +1511,15 @@ final class AccessibilityController {
|
||||
IBinder topFocusedWindowToken = null;
|
||||
|
||||
synchronized (mService.mGlobalLock) {
|
||||
// Do not send the windows if there is no top focus as
|
||||
// the window manager is still looking for where to put it.
|
||||
// We will do the work when we get a focus change callback.
|
||||
final WindowState topFocusedWindowState = getTopFocusWindow();
|
||||
// If there is a recents animation running, then use the animation target as the
|
||||
// top window state. Otherwise,do not send the windows if there is no top focus as
|
||||
// the window manager is still looking for where to put it. We will do the work when
|
||||
// we get a focus change callback.
|
||||
final RecentsAnimationController controller =
|
||||
mService.getRecentsAnimationController();
|
||||
final WindowState topFocusedWindowState = controller != null
|
||||
? controller.getTargetAppMainWindow()
|
||||
: getTopFocusWindow();
|
||||
if (topFocusedWindowState == null) {
|
||||
if (DEBUG) {
|
||||
Slog.d(LOG_TAG, "top focused window is null, compute it again later");
|
||||
|
||||
@@ -568,8 +568,9 @@ public class RecentsAnimationController implements DeathRecipient {
|
||||
? mMinimizedHomeBounds
|
||||
: null;
|
||||
final Rect contentInsets;
|
||||
if (mTargetActivityRecord != null && mTargetActivityRecord.findMainWindow() != null) {
|
||||
contentInsets = mTargetActivityRecord.findMainWindow()
|
||||
final WindowState targetAppMainWindow = getTargetAppMainWindow();
|
||||
if (targetAppMainWindow != null) {
|
||||
contentInsets = targetAppMainWindow
|
||||
.getInsetsStateWithVisibilityOverride()
|
||||
.calculateInsets(mTargetActivityRecord.getBounds(), Type.systemBars(),
|
||||
false /* ignoreVisibility */);
|
||||
@@ -1004,9 +1005,7 @@ public class RecentsAnimationController implements DeathRecipient {
|
||||
|
||||
boolean updateInputConsumerForApp(InputWindowHandle inputWindowHandle) {
|
||||
// Update the input consumer touchable region to match the target app main window
|
||||
final WindowState targetAppMainWindow = mTargetActivityRecord != null
|
||||
? mTargetActivityRecord.findMainWindow()
|
||||
: null;
|
||||
final WindowState targetAppMainWindow = getTargetAppMainWindow();
|
||||
if (targetAppMainWindow != null) {
|
||||
targetAppMainWindow.getBounds(mTmpRect);
|
||||
inputWindowHandle.touchableRegion.set(mTmpRect);
|
||||
@@ -1026,6 +1025,13 @@ public class RecentsAnimationController implements DeathRecipient {
|
||||
return mTargetActivityRecord.windowsCanBeWallpaperTarget();
|
||||
}
|
||||
|
||||
WindowState getTargetAppMainWindow() {
|
||||
if (mTargetActivityRecord == null) {
|
||||
return null;
|
||||
}
|
||||
return mTargetActivityRecord.findMainWindow();
|
||||
}
|
||||
|
||||
boolean isAnimatingTask(Task task) {
|
||||
for (int i = mPendingAnimations.size() - 1; i >= 0; i--) {
|
||||
if (task == mPendingAnimations.get(i).mTask) {
|
||||
|
||||
Reference in New Issue
Block a user