diff options
3 files changed, 37 insertions, 5 deletions
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig index e5e34695f40c..79ae38946195 100644 --- a/packages/SystemUI/aconfig/systemui.aconfig +++ b/packages/SystemUI/aconfig/systemui.aconfig @@ -345,6 +345,16 @@ flag { } flag { + name: "activity_transition_use_largest_window" + namespace: "systemui" + description: "Target largest opening window during activity transitions." + bug: "323294573" + metadata { + purpose: PURPOSE_BUGFIX + } +} + +flag { name: "centralized_status_bar_height_fix" namespace: "systemui" description: "Refactors shade header and keyguard status bar to read status bar dimens from a" diff --git a/packages/SystemUI/animation/Android.bp b/packages/SystemUI/animation/Android.bp index 99b7c36d6fb9..2268d16e5b0a 100644 --- a/packages/SystemUI/animation/Android.bp +++ b/packages/SystemUI/animation/Android.bp @@ -44,6 +44,7 @@ android_library { "androidx.core_core-animation-nodeps", "androidx.core_core-ktx", "androidx.annotation_annotation", + "com_android_systemui_flags_lib", "SystemUIShaderLib", "WindowManager-Shell-shared", "animationlib", diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt index 1b99e19eeb95..ea1cb3441215 100644 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt +++ b/packages/SystemUI/animation/src/com/android/systemui/animation/ActivityTransitionAnimator.kt @@ -43,6 +43,7 @@ import androidx.annotation.UiThread import com.android.app.animation.Interpolators import com.android.internal.annotations.VisibleForTesting import com.android.internal.policy.ScreenDecorationsUtils +import com.android.systemui.Flags.activityTransitionUseLargestWindow import kotlin.math.roundToInt private const val TAG = "ActivityTransitionAnimator" @@ -648,11 +649,27 @@ class ActivityTransitionAnimator( var candidate: RemoteAnimationTarget? = null for (it in apps) { if (it.mode == RemoteAnimationTarget.MODE_OPENING) { - if (!it.hasAnimatingParent) { - return it - } - if (candidate == null) { - candidate = it + if (activityTransitionUseLargestWindow()) { + if ( + candidate == null || + !it.hasAnimatingParent && candidate.hasAnimatingParent + ) { + candidate = it + continue + } + if ( + !it.hasAnimatingParent && + it.screenSpaceBounds.hasGreaterAreaThan(candidate.screenSpaceBounds) + ) { + candidate = it + } + } else { + if (!it.hasAnimatingParent) { + return it + } + if (candidate == null) { + candidate = it + } } } } @@ -960,5 +977,9 @@ class ActivityTransitionAnimator( e.printStackTrace() } } + + private fun Rect.hasGreaterAreaThan(other: Rect): Boolean { + return (this.width() * this.height()) > (other.width() * other.height()) + } } } |