Merge "Reset the preferred top focus stack when task visibility changes" into rvc-dev am: 5d9b12ce23
Change-Id: If2ab42ff43bf04ef6285a7a8ab569158ecc23ce7
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user