summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/window/WindowContainerTransaction.java6
-rw-r--r--services/core/java/com/android/server/wm/TaskFragment.java6
-rw-r--r--services/core/java/com/android/server/wm/WindowOrganizerController.java40
3 files changed, 35 insertions, 17 deletions
diff --git a/core/java/android/window/WindowContainerTransaction.java b/core/java/android/window/WindowContainerTransaction.java
index 4148e00e6302..5e88d97c805e 100644
--- a/core/java/android/window/WindowContainerTransaction.java
+++ b/core/java/android/window/WindowContainerTransaction.java
@@ -1298,6 +1298,12 @@ public final class WindowContainerTransaction implements Parcelable {
if ((mChangeMask & CHANGE_FOCUSABLE) != 0) {
sb.append("focusable:" + mFocusable + ",");
}
+ if ((mChangeMask & CHANGE_FORCE_TRANSLUCENT) != 0) {
+ sb.append("forceTranslucent:" + mForceTranslucent + ",");
+ }
+ if ((mChangeMask & CHANGE_HIDDEN) != 0) {
+ sb.append("hidden:" + mHidden + ",");
+ }
if ((mChangeMask & CHANGE_DRAG_RESIZING) != 0) {
sb.append("dragResizing:" + mDragResizing + ",");
}
diff --git a/services/core/java/com/android/server/wm/TaskFragment.java b/services/core/java/com/android/server/wm/TaskFragment.java
index 804201088c59..fc85af5c2303 100644
--- a/services/core/java/com/android/server/wm/TaskFragment.java
+++ b/services/core/java/com/android/server/wm/TaskFragment.java
@@ -906,8 +906,12 @@ class TaskFragment extends WindowContainer<WindowContainer> {
return mForceTranslucent;
}
- void setForceTranslucent(boolean set) {
+ boolean setForceTranslucent(boolean set) {
+ if (mForceTranslucent == set) {
+ return false;
+ }
mForceTranslucent = set;
+ return true;
}
boolean isLeafTaskFragment() {
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index 8c9317a32483..cbf0a62a31fe 100644
--- a/services/core/java/com/android/server/wm/WindowOrganizerController.java
+++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java
@@ -842,8 +842,9 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
}
if ((c.getChangeMask() & CHANGE_FORCE_TRANSLUCENT) != 0) {
- tr.setForceTranslucent(c.getForceTranslucent());
- effects |= TRANSACT_EFFECTS_LIFECYCLE;
+ if (tr.setForceTranslucent(c.getForceTranslucent())) {
+ effects |= TRANSACT_EFFECTS_LIFECYCLE;
+ }
}
if ((c.getChangeMask() & WindowContainerTransaction.Change.CHANGE_DRAG_RESIZING) != 0) {
@@ -964,8 +965,9 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
}
}
if ((c.getChangeMask() & CHANGE_FORCE_TRANSLUCENT) != 0) {
- taskFragment.setForceTranslucent(c.getForceTranslucent());
- effects |= TRANSACT_EFFECTS_LIFECYCLE;
+ if (taskFragment.setForceTranslucent(c.getForceTranslucent())) {
+ effects |= TRANSACT_EFFECTS_LIFECYCLE;
+ }
}
effects |= applyChanges(taskFragment, c);
@@ -1568,26 +1570,32 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
case OP_TYPE_REORDER_TO_BOTTOM_OF_TASK: {
final Task task = taskFragment.getTask();
if (task != null) {
- task.mChildren.remove(taskFragment);
- task.mChildren.add(0, taskFragment);
- if (!taskFragment.hasChild()) {
- // Ensure that the child layers are updated if the TaskFragment is empty.
- task.assignChildLayers();
+ if (task.mChildren.peekFirst() != taskFragment) {
+ task.mChildren.remove(taskFragment);
+ task.mChildren.add(0, taskFragment);
+ if (!taskFragment.hasChild()) {
+ // Ensure that the child layers are updated if the TaskFragment is
+ // empty.
+ task.assignChildLayers();
+ }
+ effects |= TRANSACT_EFFECTS_LIFECYCLE;
}
- effects |= TRANSACT_EFFECTS_LIFECYCLE;
}
break;
}
case OP_TYPE_REORDER_TO_TOP_OF_TASK: {
final Task task = taskFragment.getTask();
if (task != null) {
- task.mChildren.remove(taskFragment);
- task.mChildren.add(taskFragment);
- if (!taskFragment.hasChild()) {
- // Ensure that the child layers are updated if the TaskFragment is empty.
- task.assignChildLayers();
+ if (task.mChildren.peekLast() != taskFragment) {
+ task.mChildren.remove(taskFragment);
+ task.mChildren.add(taskFragment);
+ if (!taskFragment.hasChild()) {
+ // Ensure that the child layers are updated if the TaskFragment is
+ // empty.
+ task.assignChildLayers();
+ }
+ effects |= TRANSACT_EFFECTS_LIFECYCLE;
}
- effects |= TRANSACT_EFFECTS_LIFECYCLE;
}
break;
}