Merge "Check visibility for TransitionInfo.Change FLAG_FILLS_TASK" into tm-qpr-dev
This commit is contained in:
@@ -1894,14 +1894,8 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
|||||||
// Whether this is in a Task with embedded activity.
|
// Whether this is in a Task with embedded activity.
|
||||||
flags |= FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY;
|
flags |= FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY;
|
||||||
}
|
}
|
||||||
final Rect taskBounds = parentTask.getBounds();
|
if (isWindowFillingTask(wc, parentTask)) {
|
||||||
final Rect startBounds = mAbsoluteBounds;
|
// Whether the container fills its parent Task bounds.
|
||||||
final Rect endBounds = wc.getBounds();
|
|
||||||
if (taskBounds.width() == startBounds.width()
|
|
||||||
&& taskBounds.height() == startBounds.height()
|
|
||||||
&& taskBounds.width() == endBounds.width()
|
|
||||||
&& taskBounds.height() == endBounds.height()) {
|
|
||||||
// Whether the container fills the Task bounds before and after the transition.
|
|
||||||
flags |= FLAG_FILLS_TASK;
|
flags |= FLAG_FILLS_TASK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1923,6 +1917,22 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
|||||||
}
|
}
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Whether the container fills its parent Task bounds before and after the transition. */
|
||||||
|
private boolean isWindowFillingTask(@NonNull WindowContainer wc, @NonNull Task parentTask) {
|
||||||
|
final Rect taskBounds = parentTask.getBounds();
|
||||||
|
final int taskWidth = taskBounds.width();
|
||||||
|
final int taskHeight = taskBounds.height();
|
||||||
|
final Rect startBounds = mAbsoluteBounds;
|
||||||
|
final Rect endBounds = wc.getBounds();
|
||||||
|
// Treat it as filling the task if it is not visible.
|
||||||
|
final boolean isInvisibleOrFillingTaskBeforeTransition = !mVisible
|
||||||
|
|| (taskWidth == startBounds.width() && taskHeight == startBounds.height());
|
||||||
|
final boolean isInVisibleOrFillingTaskAfterTransition = !wc.isVisibleRequested()
|
||||||
|
|| (taskWidth == endBounds.width() && taskHeight == endBounds.height());
|
||||||
|
return isInvisibleOrFillingTaskBeforeTransition
|
||||||
|
&& isInVisibleOrFillingTaskAfterTransition;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1120,7 +1120,7 @@ public class TransitionTests extends WindowTestsBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFlagFillsTask() {
|
public void testFlagFillsTask_embeddingNotFillingTask() {
|
||||||
final Transition transition = createTestTransition(TRANSIT_OPEN);
|
final Transition transition = createTestTransition(TRANSIT_OPEN);
|
||||||
final ArrayMap<WindowContainer, Transition.ChangeInfo> changes = transition.mChanges;
|
final ArrayMap<WindowContainer, Transition.ChangeInfo> changes = transition.mChanges;
|
||||||
final ArraySet<WindowContainer> participants = transition.mParticipants;
|
final ArraySet<WindowContainer> participants = transition.mParticipants;
|
||||||
@@ -1164,6 +1164,67 @@ public class TransitionTests extends WindowTestsBase {
|
|||||||
assertFalse(info.getChanges().get(1).hasFlags(FLAG_FILLS_TASK));
|
assertFalse(info.getChanges().get(1).hasFlags(FLAG_FILLS_TASK));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFlagFillsTask_openActivityFillingTask() {
|
||||||
|
final Transition transition = createTestTransition(TRANSIT_OPEN);
|
||||||
|
final ArrayMap<WindowContainer, Transition.ChangeInfo> changes = transition.mChanges;
|
||||||
|
final ArraySet<WindowContainer> participants = transition.mParticipants;
|
||||||
|
|
||||||
|
final Task task = createTask(mDisplayContent);
|
||||||
|
// Set to multi-windowing mode in order to set bounds.
|
||||||
|
task.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
|
||||||
|
final Rect taskBounds = new Rect(0, 0, 500, 1000);
|
||||||
|
task.setBounds(taskBounds);
|
||||||
|
final ActivityRecord activity = createActivityRecord(task);
|
||||||
|
// Start states: set bounds to make sure the start bounds is ignored if it is not visible.
|
||||||
|
activity.getConfiguration().windowConfiguration.setBounds(new Rect(0, 0, 250, 500));
|
||||||
|
activity.mVisibleRequested = false;
|
||||||
|
changes.put(activity, new Transition.ChangeInfo(activity));
|
||||||
|
// End states: reset bounds to fill Task.
|
||||||
|
activity.getConfiguration().windowConfiguration.setBounds(taskBounds);
|
||||||
|
activity.mVisibleRequested = true;
|
||||||
|
|
||||||
|
participants.add(activity);
|
||||||
|
final ArrayList<WindowContainer> targets = Transition.calculateTargets(
|
||||||
|
participants, changes);
|
||||||
|
final TransitionInfo info = Transition.calculateTransitionInfo(
|
||||||
|
transition.mType, 0 /* flags */, targets, changes, mMockT);
|
||||||
|
|
||||||
|
// Opening activity that is filling Task after transition should have the flag.
|
||||||
|
assertEquals(1, info.getChanges().size());
|
||||||
|
assertTrue(info.getChanges().get(0).hasFlags(FLAG_FILLS_TASK));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFlagFillsTask_closeActivityFillingTask() {
|
||||||
|
final Transition transition = createTestTransition(TRANSIT_CLOSE);
|
||||||
|
final ArrayMap<WindowContainer, Transition.ChangeInfo> changes = transition.mChanges;
|
||||||
|
final ArraySet<WindowContainer> participants = transition.mParticipants;
|
||||||
|
|
||||||
|
final Task task = createTask(mDisplayContent);
|
||||||
|
// Set to multi-windowing mode in order to set bounds.
|
||||||
|
task.setWindowingMode(WINDOWING_MODE_MULTI_WINDOW);
|
||||||
|
final Rect taskBounds = new Rect(0, 0, 500, 1000);
|
||||||
|
task.setBounds(taskBounds);
|
||||||
|
final ActivityRecord activity = createActivityRecord(task);
|
||||||
|
// Start states: fills Task without override.
|
||||||
|
activity.mVisibleRequested = true;
|
||||||
|
changes.put(activity, new Transition.ChangeInfo(activity));
|
||||||
|
// End states: set bounds to make sure the start bounds is ignored if it is not visible.
|
||||||
|
activity.getConfiguration().windowConfiguration.setBounds(new Rect(0, 0, 250, 500));
|
||||||
|
activity.mVisibleRequested = false;
|
||||||
|
|
||||||
|
participants.add(activity);
|
||||||
|
final ArrayList<WindowContainer> targets = Transition.calculateTargets(
|
||||||
|
participants, changes);
|
||||||
|
final TransitionInfo info = Transition.calculateTransitionInfo(
|
||||||
|
transition.mType, 0 /* flags */, targets, changes, mMockT);
|
||||||
|
|
||||||
|
// Closing activity that is filling Task before transition should have the flag.
|
||||||
|
assertEquals(1, info.getChanges().size());
|
||||||
|
assertTrue(info.getChanges().get(0).hasFlags(FLAG_FILLS_TASK));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIncludeEmbeddedActivityReparent() {
|
public void testIncludeEmbeddedActivityReparent() {
|
||||||
final Transition transition = createTestTransition(TRANSIT_OPEN);
|
final Transition transition = createTestTransition(TRANSIT_OPEN);
|
||||||
|
|||||||
Reference in New Issue
Block a user