Merge changes I48079ecb,Ifda20367 into main
* changes: Revert "Re-use existing method to get split root" Revert "Reset leashes before starting taskbar app pair launch animation"
This commit is contained in:
@@ -65,7 +65,6 @@ import com.android.launcher3.util.MultiPropertyFactory.MULTI_PROPERTY_VALUE
|
||||
import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource
|
||||
import com.android.launcher3.views.BaseDragLayer
|
||||
import com.android.quickstep.TaskViewUtils
|
||||
import com.android.quickstep.util.SplitScreenUtils.Companion.extractTopParentAndChildren
|
||||
import com.android.quickstep.views.FloatingAppPairView
|
||||
import com.android.quickstep.views.FloatingTaskView
|
||||
import com.android.quickstep.views.GroupedTaskView
|
||||
@@ -982,14 +981,35 @@ class SplitAnimationController(val splitSelectStateController: SplitSelectStateC
|
||||
progressUpdater.setDuration(QuickstepTransitionManager.APP_LAUNCH_DURATION)
|
||||
progressUpdater.interpolator = Interpolators.EMPHASIZED
|
||||
|
||||
val splitTree: Pair<Change, List<Change>>? = extractTopParentAndChildren(transitionInfo)
|
||||
check(splitTree != null) { "Could not find a split root candidate" }
|
||||
val rootCandidate = splitTree.first
|
||||
val stageRootTaskIds: Set<Int> = splitTree.second.map { it.taskInfo!!.taskId }.toSet()
|
||||
val leafTasks: List<Change> =
|
||||
transitionInfo.changes
|
||||
.filter { it.taskInfo != null && it.taskInfo!!.parentTaskId in stageRootTaskIds }
|
||||
.toList()
|
||||
var rootCandidate: Change? = null
|
||||
|
||||
for (change in transitionInfo.changes) {
|
||||
val taskInfo: RunningTaskInfo = change.taskInfo ?: continue
|
||||
|
||||
// TODO (b/316490565): Replace this logic when SplitBounds is available to
|
||||
// startAnimation() and we can know the precise taskIds of launching tasks.
|
||||
if (
|
||||
taskInfo.windowingMode == windowingMode &&
|
||||
(change.mode == TRANSIT_OPEN || change.mode == TRANSIT_TO_FRONT)
|
||||
) {
|
||||
// Found one!
|
||||
rootCandidate = change
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// If we could not find a proper root candidate, something went wrong.
|
||||
check(rootCandidate != null) { "Could not find a split root candidate" }
|
||||
|
||||
// Recurse up the tree until parent is null, then we've found our root.
|
||||
var parentToken: WindowContainerToken? = rootCandidate.parent
|
||||
while (parentToken != null) {
|
||||
rootCandidate = transitionInfo.getChange(parentToken) ?: break
|
||||
parentToken = rootCandidate.parent
|
||||
}
|
||||
|
||||
// Make sure nothing weird happened, like getChange() returning null.
|
||||
check(rootCandidate != null) { "Failed to find a root leash" }
|
||||
|
||||
// Starting position is a 34% size tile centered in the middle of the screen.
|
||||
// Ending position is the full device screen.
|
||||
@@ -1023,42 +1043,6 @@ class SplitAnimationController(val splitSelectStateController: SplitSelectStateC
|
||||
override fun onAnimationEnd(animation: Animator) {
|
||||
finishCallback.run()
|
||||
}
|
||||
|
||||
override fun onAnimationStart(animation: Animator) {
|
||||
// Reset leaf and stage root tasks, animation can begin from freeform windows
|
||||
for (leaf in leafTasks) {
|
||||
val endAbsBounds = leaf.endAbsBounds
|
||||
|
||||
t.setAlpha(leaf.leash, 1f)
|
||||
t.setCrop(
|
||||
leaf.leash,
|
||||
0f,
|
||||
0f,
|
||||
endAbsBounds.width().toFloat(),
|
||||
endAbsBounds.height().toFloat(),
|
||||
)
|
||||
t.setPosition(leaf.leash, 0f, 0f)
|
||||
}
|
||||
|
||||
for (stageRoot in splitTree.second) {
|
||||
val endAbsBounds = stageRoot.endAbsBounds
|
||||
|
||||
t.setAlpha(stageRoot.leash, 1f)
|
||||
t.setCrop(
|
||||
stageRoot.leash,
|
||||
0f,
|
||||
0f,
|
||||
endAbsBounds.width().toFloat(),
|
||||
endAbsBounds.height().toFloat(),
|
||||
)
|
||||
t.setPosition(
|
||||
stageRoot.leash,
|
||||
endAbsBounds.left.toFloat(),
|
||||
endAbsBounds.top.toFloat(),
|
||||
)
|
||||
}
|
||||
t.apply()
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@@ -46,8 +46,8 @@ class SplitScreenUtils {
|
||||
* Given a TransitionInfo, generates the tree structure for those changes and extracts out
|
||||
* the top most root and it's two immediate children. Changes can be provided in any order.
|
||||
*
|
||||
* @return null if no root is found, otherwise a [Pair] where first -> top most split root,
|
||||
* second -> [List] of 2, leftTop/bottomRight stage roots
|
||||
* @return a [Pair] where first -> top most split root, second -> [List] of 2,
|
||||
* leftTop/bottomRight stage roots
|
||||
*/
|
||||
fun extractTopParentAndChildren(
|
||||
transitionInfo: TransitionInfo
|
||||
|
||||
Reference in New Issue
Block a user