Merge "Fix returning an occluded activity below boundary" into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-05-19 11:03:56 +00:00
committed by Android (Google) Code Review
3 changed files with 9 additions and 5 deletions

View File

@@ -3589,7 +3589,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
@Override @Override
ActivityRecord getActivity(Predicate<ActivityRecord> callback, boolean traverseTopToBottom, ActivityRecord getActivity(Predicate<ActivityRecord> callback, boolean traverseTopToBottom,
WindowContainer boundary) { ActivityRecord boundary) {
return callback.test(this) ? this : null; return callback.test(this) ? this : null;
} }

View File

@@ -2708,7 +2708,9 @@ class ActivityStack extends Task {
*/ */
@Nullable @Nullable
private ActivityRecord getOccludingActivityAbove(ActivityRecord activity) { private ActivityRecord getOccludingActivityAbove(ActivityRecord activity) {
return getActivity((ar) -> ar.occludesParent(), true /* traverseTopToBottom */, activity); ActivityRecord top = getActivity((ar) -> ar.occludesParent(),
true /* traverseTopToBottom */, activity);
return top != activity ? top : null;
} }
boolean willActivityBeVisible(IBinder token) { boolean willActivityBeVisible(IBinder token) {

View File

@@ -1415,11 +1415,12 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
} }
ActivityRecord getActivity(Predicate<ActivityRecord> callback, boolean traverseTopToBottom, ActivityRecord getActivity(Predicate<ActivityRecord> callback, boolean traverseTopToBottom,
WindowContainer boundary) { ActivityRecord boundary) {
if (traverseTopToBottom) { if (traverseTopToBottom) {
for (int i = mChildren.size() - 1; i >= 0; --i) { for (int i = mChildren.size() - 1; i >= 0; --i) {
final WindowContainer wc = mChildren.get(i); final WindowContainer wc = mChildren.get(i);
if (wc == boundary) return null; // TODO(b/156986561): Improve the correctness of the boundary check.
if (wc == boundary) return boundary;
final ActivityRecord r = wc.getActivity(callback, traverseTopToBottom, boundary); final ActivityRecord r = wc.getActivity(callback, traverseTopToBottom, boundary);
if (r != null) { if (r != null) {
@@ -1430,7 +1431,8 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
final int count = mChildren.size(); final int count = mChildren.size();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
final WindowContainer wc = mChildren.get(i); final WindowContainer wc = mChildren.get(i);
if (wc == boundary) return null; // TODO(b/156986561): Improve the correctness of the boundary check.
if (wc == boundary) return boundary;
final ActivityRecord r = wc.getActivity(callback, traverseTopToBottom, boundary); final ActivityRecord r = wc.getActivity(callback, traverseTopToBottom, boundary);
if (r != null) { if (r != null) {