Merge "Reset the preferred top focus stack when task visibility changes" into rvc-dev am: 5d9b12ce23

Change-Id: If2ab42ff43bf04ef6285a7a8ab569158ecc23ce7
This commit is contained in:
Winson Chung
2020-05-04 16:59:44 +00:00
committed by Automerger Merge Worker
3 changed files with 24 additions and 10 deletions

View File

@@ -1010,16 +1010,6 @@ class ActivityStack extends Task {
} }
} }
boolean isTopActivityFocusable() {
final ActivityRecord r = topRunningActivity();
return r != null ? r.isFocusable()
: (isFocusable() && getWindowConfiguration().canReceiveKeys());
}
boolean isFocusableAndVisible() {
return isTopActivityFocusable() && shouldBeVisible(null /* starting */);
}
// TODO: Should each user have there own stacks? // TODO: Should each user have there own stacks?
@Override @Override
void switchUser(int userId) { void switchUser(int userId) {

View File

@@ -3334,6 +3334,16 @@ class Task extends WindowContainer<WindowContainer> {
}); });
} }
boolean isTopActivityFocusable() {
final ActivityRecord r = topRunningActivity();
return r != null ? r.isFocusable()
: (isFocusable() && getWindowConfiguration().canReceiveKeys());
}
boolean isFocusableAndVisible() {
return isTopActivityFocusable() && shouldBeVisible(null /* starting */);
}
void positionChildAtTop(ActivityRecord child) { void positionChildAtTop(ActivityRecord child) {
positionChildAt(child, POSITION_TOP); positionChildAt(child, POSITION_TOP);
} }
@@ -4552,7 +4562,14 @@ class Task extends WindowContainer<WindowContainer> {
if (mForceHiddenFlags == newFlags) { if (mForceHiddenFlags == newFlags) {
return false; return false;
} }
final boolean wasHidden = isForceHidden();
mForceHiddenFlags = newFlags; mForceHiddenFlags = newFlags;
if (wasHidden && isFocusableAndVisible()) {
// The change in force-hidden state will change visibility without triggering a stack
// order change, so we should reset the preferred top focusable stack to ensure it's not
// used if a new activity is started from this task.
getDisplayArea().resetPreferredTopFocusableStackIfBelow(this);
}
return true; return true;
} }

View File

@@ -680,6 +680,13 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
onStackOrderChanged(stack); onStackOrderChanged(stack);
} }
void resetPreferredTopFocusableStackIfBelow(Task task) {
if (mPreferredTopFocusableStack != null
&& mPreferredTopFocusableStack.compareTo(task) < 0) {
mPreferredTopFocusableStack = null;
}
}
void positionStackAt(int position, ActivityStack child, boolean includingParents) { void positionStackAt(int position, ActivityStack child, boolean includingParents) {
positionChildAt(position, child, includingParents); positionChildAt(position, child, includingParents);
mDisplayContent.layoutAndAssignWindowLayersIfNeeded(); mDisplayContent.layoutAndAssignWindowLayersIfNeeded();