summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2019-07-08 08:02:33 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-07-08 08:02:33 +0000
commit36151597fb13979eb4f435e86fd7949642b80e54 (patch)
treeaee0a445f8d7fb949458b7e2a1c56d805412cde7
parentb37de73103e2b155dbd77909587d65cf390f0d6e (diff)
parent2351d5f48f10d26cd6aabb163b0b19a0b406e089 (diff)
downloadbase-36151597fb13979eb4f435e86fd7949642b80e54.tar.gz
Merge "GestureExclusion: Fix restriction priority" into qt-dev
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java6
-rw-r--r--services/core/java/com/android/server/wm/utils/RegionUtils.java13
2 files changed, 14 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 675483442300..b837d9ec874b 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -140,7 +140,7 @@ import static com.android.server.wm.WindowManagerService.logSurface;
import static com.android.server.wm.WindowState.RESIZE_HANDLE_WIDTH_IN_DP;
import static com.android.server.wm.WindowStateAnimator.DRAW_PENDING;
import static com.android.server.wm.WindowStateAnimator.READY_TO_SHOW;
-import static com.android.server.wm.utils.RegionUtils.forEachRect;
+import static com.android.server.wm.utils.RegionUtils.forEachRectReverse;
import static com.android.server.wm.utils.RegionUtils.rectListToRegion;
import android.animation.AnimationHandler;
@@ -5227,13 +5227,13 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
r.op(edge, Op.INTERSECT);
final int[] remaining = {limit};
- forEachRect(r, rect -> {
+ forEachRectReverse(r, rect -> {
if (remaining[0] <= 0) {
return;
}
final int height = rect.height();
if (height > remaining[0]) {
- rect.bottom = rect.top + remaining[0];
+ rect.top = rect.bottom - remaining[0];
}
remaining[0] -= height;
global.op(rect, Op.UNION);
diff --git a/services/core/java/com/android/server/wm/utils/RegionUtils.java b/services/core/java/com/android/server/wm/utils/RegionUtils.java
index 8cd6f8826083..b1b30701df4f 100644
--- a/services/core/java/com/android/server/wm/utils/RegionUtils.java
+++ b/services/core/java/com/android/server/wm/utils/RegionUtils.java
@@ -20,6 +20,8 @@ import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.RegionIterator;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
@@ -48,14 +50,21 @@ public class RegionUtils {
/**
* Applies actions on each rect contained within a {@code Region}.
*
+ * Order is bottom to top, then right to left.
+ *
* @param region the given region.
* @param rectConsumer the action holder.
*/
- public static void forEachRect(Region region, Consumer<Rect> rectConsumer) {
+ public static void forEachRectReverse(Region region, Consumer<Rect> rectConsumer) {
final RegionIterator it = new RegionIterator(region);
+ final ArrayList<Rect> rects = new ArrayList<>();
final Rect rect = new Rect();
while (it.next(rect)) {
- rectConsumer.accept(rect);
+ rects.add(new Rect(rect));
}
+ // TODO: instead of creating an array and reversing it, expose the reverse iterator through
+ // JNI.
+ Collections.reverse(rects);
+ rects.forEach(rectConsumer);
}
}