From 410a4d11bd69471c6bdf306ea958632c323e3edc Mon Sep 17 00:00:00 2001 From: Evan Rosky Date: Mon, 15 May 2023 18:55:59 -0700 Subject: [PATCH] Remove unnecessary copy of transition adapter utils. This is no-longer needed now that shell.util is accessible to shared and it was becoming out-of-sync with TransitionUtil resulting in some potential NPEs and such. Bug: 281869091 Test: existing tests, this should be a net-no-op. Change-Id: Ib891d67f07d15f2e0efcaff123d1fec02abea1d7 --- .../android/wm/shell/util/TransitionUtil.java | 3 +- .../animation/RemoteTransitionAdapter.kt | 455 ------------------ .../system/RemoteAnimationRunnerCompat.java | 54 ++- .../statusbar/phone/CentralSurfaces.java | 8 +- 4 files changed, 45 insertions(+), 475 deletions(-) delete mode 100644 packages/SystemUI/animation/src/com/android/systemui/animation/RemoteTransitionAdapter.kt diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/util/TransitionUtil.java b/libs/WindowManager/Shell/src/com/android/wm/shell/util/TransitionUtil.java index 6d37e58c59ad3..64f3c76c8b8a6 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/util/TransitionUtil.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/util/TransitionUtil.java @@ -24,9 +24,7 @@ import static android.view.WindowManager.LayoutParams.INVALID_WINDOW_TYPE; import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER; import static android.view.WindowManager.TRANSIT_CHANGE; import static android.view.WindowManager.TRANSIT_CLOSE; -import static android.view.WindowManager.TRANSIT_FLAG_KEYGUARD_GOING_AWAY; import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY; -import static android.view.WindowManager.TRANSIT_KEYGUARD_UNOCCLUDE; import static android.view.WindowManager.TRANSIT_OPEN; import static android.view.WindowManager.TRANSIT_TO_BACK; import static android.view.WindowManager.TRANSIT_TO_FRONT; @@ -312,6 +310,7 @@ public class TransitionUtil { target.setWillShowImeOnTarget( (change.getFlags() & TransitionInfo.FLAG_WILL_IME_SHOWN) != 0); target.setRotationChange(change.getEndRotation() - change.getStartRotation()); + target.backgroundColor = change.getBackgroundColor(); return target; } diff --git a/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteTransitionAdapter.kt b/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteTransitionAdapter.kt deleted file mode 100644 index 197b217f96ebd..0000000000000 --- a/packages/SystemUI/animation/src/com/android/systemui/animation/RemoteTransitionAdapter.kt +++ /dev/null @@ -1,455 +0,0 @@ -/* - * Copyright (C) 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.animation - -import android.annotation.SuppressLint -import android.app.WindowConfiguration -import android.graphics.Point -import android.graphics.Rect -import android.os.IBinder -import android.os.RemoteException -import android.util.ArrayMap -import android.util.Log -import android.util.RotationUtils -import android.view.IRemoteAnimationFinishedCallback -import android.view.IRemoteAnimationRunner -import android.view.RemoteAnimationAdapter -import android.view.RemoteAnimationTarget -import android.view.SurfaceControl -import android.view.WindowManager -import android.window.IRemoteTransition -import android.window.IRemoteTransitionFinishedCallback -import android.window.RemoteTransition -import android.window.TransitionInfo - -class RemoteTransitionAdapter { - companion object { - /** - * Almost a copy of Transitions#setupStartState. - * - * TODO: remove when there is proper cross-process transaction sync. - */ - @SuppressLint("NewApi") - private fun setupLeash( - leash: SurfaceControl, - change: TransitionInfo.Change, - layer: Int, - info: TransitionInfo, - t: SurfaceControl.Transaction - ) { - val isOpening = - info.type == WindowManager.TRANSIT_OPEN || - info.type == WindowManager.TRANSIT_TO_FRONT - // Put animating stuff above this line and put static stuff below it. - val zSplitLine = info.changes.size - // changes should be ordered top-to-bottom in z - val mode = change.mode - - var rootIdx = info.findRootIndex(change.endDisplayId) - if (rootIdx < 0) rootIdx = 0 - // Launcher animates leaf tasks directly, so always reparent all task leashes to root. - t.reparent(leash, info.getRoot(rootIdx).leash) - t.setPosition( - leash, - (change.startAbsBounds.left - info.getRoot(rootIdx).offset.x).toFloat(), - (change.startAbsBounds.top - info.getRoot(rootIdx).offset.y).toFloat() - ) - t.show(leash) - // Put all the OPEN/SHOW on top - if (mode == WindowManager.TRANSIT_OPEN || mode == WindowManager.TRANSIT_TO_FRONT) { - if (isOpening) { - t.setLayer(leash, zSplitLine + info.changes.size - layer) - if ( - change.flags and TransitionInfo.FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT == 0 - ) { - // if transferred, it should be left visible. - t.setAlpha(leash, 0f) - } - } else { - // put on bottom and leave it visible - t.setLayer(leash, zSplitLine - layer) - } - } else if ( - mode == WindowManager.TRANSIT_CLOSE || mode == WindowManager.TRANSIT_TO_BACK - ) { - if (isOpening) { - // put on bottom and leave visible - t.setLayer(leash, zSplitLine - layer) - } else { - // put on top - t.setLayer(leash, zSplitLine + info.changes.size - layer) - } - } else { // CHANGE - t.setLayer(leash, zSplitLine + info.changes.size - layer) - } - } - - @SuppressLint("NewApi") - private fun createLeash( - info: TransitionInfo, - change: TransitionInfo.Change, - order: Int, - t: SurfaceControl.Transaction - ): SurfaceControl { - // TODO: once we can properly sync transactions across process, then get rid of this. - if (change.parent != null && change.flags and TransitionInfo.FLAG_IS_WALLPAPER != 0) { - // Special case for wallpaper atm. Normally these are left alone; but, a quirk of - // making leashes means we have to handle them specially. - return change.leash - } - val leashSurface = - SurfaceControl.Builder() - .setName(change.leash.toString() + "_transition-leash") - .setContainerLayer() - .setParent( - if (change.parent == null) { - var rootIdx = info.findRootIndex(change.endDisplayId) - if (rootIdx < 0) rootIdx = 0 - info.getRoot(rootIdx).leash - } else info.getChange(change.parent!!)!!.leash - ) - .build() - // Copied Transitions setup code (which expects bottom-to-top order, so we swap here) - setupLeash(leashSurface, change, info.changes.size - order, info, t) - t.reparent(change.leash, leashSurface) - t.setAlpha(change.leash, 1.0f) - t.show(change.leash) - t.setPosition(change.leash, 0f, 0f) - t.setLayer(change.leash, 0) - return leashSurface - } - - private fun newModeToLegacyMode(newMode: Int): Int { - return when (newMode) { - WindowManager.TRANSIT_OPEN, - WindowManager.TRANSIT_TO_FRONT -> RemoteAnimationTarget.MODE_OPENING - WindowManager.TRANSIT_CLOSE, - WindowManager.TRANSIT_TO_BACK -> RemoteAnimationTarget.MODE_CLOSING - else -> RemoteAnimationTarget.MODE_CHANGING - } - } - - private fun rectOffsetTo(rect: Rect, offset: Point): Rect { - val out = Rect(rect) - out.offsetTo(offset.x, offset.y) - return out - } - - fun createTarget( - change: TransitionInfo.Change, - order: Int, - info: TransitionInfo, - t: SurfaceControl.Transaction - ): RemoteAnimationTarget { - val target = - RemoteAnimationTarget( - /* taskId */ if (change.taskInfo != null) change.taskInfo!!.taskId else -1, - /* mode */ newModeToLegacyMode(change.mode), - /* leash */ createLeash(info, change, order, t), - /* isTranslucent */ (change.flags and TransitionInfo.FLAG_TRANSLUCENT != 0 || - change.flags and TransitionInfo.FLAG_SHOW_WALLPAPER != 0), - /* clipRect */ null, - /* contentInsets */ Rect(0, 0, 0, 0), - /* prefixOrderIndex */ order, - /* position */ null, - /* localBounds */ rectOffsetTo(change.endAbsBounds, change.endRelOffset), - /* screenSpaceBounds */ Rect(change.endAbsBounds), - /* windowConfig */ if (change.taskInfo != null) - change.taskInfo!!.configuration.windowConfiguration - else WindowConfiguration(), - /* isNotInRecents */ if (change.taskInfo != null) !change.taskInfo!!.isRunning - else true, - /* startLeash */ null, - /* startBounds */ Rect(change.startAbsBounds), - /* taskInfo */ change.taskInfo, - /* allowEnterPip */ change.allowEnterPip, - /* windowType */ WindowManager.LayoutParams.INVALID_WINDOW_TYPE - ) - target.backgroundColor = change.backgroundColor - return target - } - - /** - * Represents a TransitionInfo object as an array of old-style targets - * - * @param wallpapers If true, this will return wallpaper targets; otherwise it returns - * non-wallpaper targets. - * @param leashMap Temporary map of change leash -> launcher leash. Is an output, so should - * be populated by this function. If null, it is ignored. - */ - fun wrapTargets( - info: TransitionInfo, - wallpapers: Boolean, - t: SurfaceControl.Transaction, - leashMap: ArrayMap? - ): Array { - val out = ArrayList() - for (i in info.changes.indices) { - val change = info.changes[i] - if (change.hasFlags(TransitionInfo.FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY)) { - // For embedded container, when the parent Task is also in the transition, we - // should only animate the parent Task. - if (change.parent != null) continue - // For embedded container without parent, we should only animate if it fills - // the Task. Otherwise we may animate only partial of the Task. - if (!change.hasFlags(TransitionInfo.FLAG_FILLS_TASK)) continue - } - // Check if it is wallpaper - if (wallpapers != change.hasFlags(TransitionInfo.FLAG_IS_WALLPAPER)) continue - out.add(createTarget(change, info.changes.size - i, info, t)) - if (leashMap != null) { - leashMap[change.leash] = out[out.size - 1].leash - } - } - return out.toTypedArray() - } - - @JvmStatic - fun adaptRemoteRunner(runner: IRemoteAnimationRunner): IRemoteTransition.Stub { - return object : IRemoteTransition.Stub() { - override fun startAnimation( - token: IBinder, - info: TransitionInfo, - t: SurfaceControl.Transaction, - finishCallback: IRemoteTransitionFinishedCallback - ) { - val leashMap = ArrayMap() - val appsCompat = wrapTargets(info, false /* wallpapers */, t, leashMap) - val wallpapersCompat = wrapTargets(info, true /* wallpapers */, t, leashMap) - // TODO(bc-unlock): Build wrapped object for non-apps target. - val nonAppsCompat = arrayOfNulls(0) - - // TODO(b/177438007): Move this set-up logic into launcher's animation impl. - var isReturnToHome = false - var launcherTask: TransitionInfo.Change? = null - var wallpaper: TransitionInfo.Change? = null - var launcherLayer = 0 - var rotateDelta = 0 - var displayW = 0f - var displayH = 0f - for (i in info.changes.indices.reversed()) { - val change = info.changes[i] - if ( - change.taskInfo != null && - change.taskInfo!!.activityType == - WindowConfiguration.ACTIVITY_TYPE_HOME - ) { - isReturnToHome = - (change.mode == WindowManager.TRANSIT_OPEN || - change.mode == WindowManager.TRANSIT_TO_FRONT) - launcherTask = change - launcherLayer = info.changes.size - i - } else if (change.flags and TransitionInfo.FLAG_IS_WALLPAPER != 0) { - wallpaper = change - } - if ( - change.parent == null && - change.endRotation >= 0 && - change.endRotation != change.startRotation - ) { - rotateDelta = change.endRotation - change.startRotation - displayW = change.endAbsBounds.width().toFloat() - displayH = change.endAbsBounds.height().toFloat() - } - } - - // Prepare for rotation if there is one - val counterLauncher = CounterRotator() - val counterWallpaper = CounterRotator() - if (launcherTask != null && rotateDelta != 0 && launcherTask.parent != null) { - counterLauncher.setup( - t, - info.getChange(launcherTask.parent!!)!!.leash, - rotateDelta, - displayW, - displayH - ) - if (counterLauncher.surface != null) { - t.setLayer(counterLauncher.surface!!, launcherLayer) - } - } - if (isReturnToHome) { - if (counterLauncher.surface != null) { - t.setLayer(counterLauncher.surface!!, info.changes.size * 3) - } - // Need to "boost" the closing things since that's what launcher expects. - for (i in info.changes.indices.reversed()) { - val change = info.changes[i] - val leash = leashMap[change.leash] - val mode = info.changes[i].mode - // Only deal with independent layers - if (!TransitionInfo.isIndependent(change, info)) continue - if ( - mode == WindowManager.TRANSIT_CLOSE || - mode == WindowManager.TRANSIT_TO_BACK - ) { - t.setLayer(leash!!, info.changes.size * 3 - i) - counterLauncher.addChild(t, leash) - } - } - // Make wallpaper visible immediately since sysui apparently won't do this. - for (i in wallpapersCompat.indices.reversed()) { - t.show(wallpapersCompat[i].leash) - t.setAlpha(wallpapersCompat[i].leash, 1f) - } - } else { - if (launcherTask != null) { - counterLauncher.addChild(t, leashMap[launcherTask.leash]) - } - if (wallpaper != null && rotateDelta != 0 && wallpaper.parent != null) { - counterWallpaper.setup( - t, - info.getChange(wallpaper.parent!!)!!.leash, - rotateDelta, - displayW, - displayH - ) - if (counterWallpaper.surface != null) { - t.setLayer(counterWallpaper.surface!!, -1) - counterWallpaper.addChild(t, leashMap[wallpaper.leash]) - } - } - } - t.apply() - val animationFinishedCallback = - object : IRemoteAnimationFinishedCallback { - override fun onAnimationFinished() { - val finishTransaction = SurfaceControl.Transaction() - counterLauncher.cleanUp(finishTransaction) - counterWallpaper.cleanUp(finishTransaction) - // Release surface references now. This is apparently to free GPU - // memory while doing quick operations (eg. during CTS). - info.releaseAllSurfaces() - for (i in leashMap.size - 1 downTo 0) { - leashMap.valueAt(i).release() - } - try { - finishCallback.onTransitionFinished( - null /* wct */, - finishTransaction - ) - finishTransaction.close() - } catch (e: RemoteException) { - Log.e( - "ActivityOptionsCompat", - "Failed to call app controlled" + - " animation finished callback", - e - ) - } - } - - override fun asBinder(): IBinder? { - return null - } - } - // TODO(bc-unlcok): Pass correct transit type. - runner.onAnimationStart( - WindowManager.TRANSIT_OLD_NONE, - appsCompat, - wallpapersCompat, - nonAppsCompat, - animationFinishedCallback - ) - } - - override fun mergeAnimation( - token: IBinder, - info: TransitionInfo, - t: SurfaceControl.Transaction, - mergeTarget: IBinder, - finishCallback: IRemoteTransitionFinishedCallback - ) { - // TODO: hook up merge to recents onTaskAppeared if applicable. Until then, - // ignore any incoming merges. - // Clean up stuff though cuz GC takes too long for benchmark tests. - t.close() - info.releaseAllSurfaces() - } - } - } - - @JvmStatic - fun adaptRemoteAnimation( - adapter: RemoteAnimationAdapter, - debugName: String - ): RemoteTransition { - return RemoteTransition( - adaptRemoteRunner(adapter.runner), - adapter.callingApplication, - debugName - ) - } - } - - /** Utility class that takes care of counter-rotating surfaces during a transition animation. */ - class CounterRotator { - /** Gets the surface with the counter-rotation. */ - var surface: SurfaceControl? = null - private set - - /** - * Sets up this rotator. - * - * @param rotateDelta is the forward rotation change (the rotation the display is making). - * @param parentW (and H) Is the size of the rotating parent. - */ - fun setup( - t: SurfaceControl.Transaction, - parent: SurfaceControl, - rotateDelta: Int, - parentW: Float, - parentH: Float - ) { - if (rotateDelta == 0) return - val surface = - SurfaceControl.Builder() - .setName("Transition Unrotate") - .setContainerLayer() - .setParent(parent) - .build() - // Rotate forward to match the new rotation (rotateDelta is the forward rotation the - // parent already took). Child surfaces will be in the old rotation relative to the new - // parent rotation, so we need to forward-rotate the child surfaces to match. - RotationUtils.rotateSurface(t, surface, rotateDelta) - val tmpPt = Point(0, 0) - // parentW/H are the size in the END rotation, the rotation utilities expect the - // starting size. So swap them if necessary - val flipped = rotateDelta % 2 != 0 - val pw = if (flipped) parentH else parentW - val ph = if (flipped) parentW else parentH - RotationUtils.rotatePoint(tmpPt, rotateDelta, pw.toInt(), ph.toInt()) - t.setPosition(surface, tmpPt.x.toFloat(), tmpPt.y.toFloat()) - t.show(surface) - } - - /** Adds a surface that needs to be counter-rotate. */ - fun addChild(t: SurfaceControl.Transaction, child: SurfaceControl?) { - if (surface == null) return - t.reparent(child!!, surface) - } - - /** - * Clean-up. Since finishTransaction should reset all change leashes, we only need to remove - * the counter rotation surface. - */ - fun cleanUp(finishTransaction: SurfaceControl.Transaction) { - if (surface == null) return - finishTransaction.remove(surface!!) - } - } -} diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationRunnerCompat.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationRunnerCompat.java index 8dcd2aaac9ef1..1e7222de91d9a 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationRunnerCompat.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/RemoteAnimationRunnerCompat.java @@ -41,6 +41,7 @@ import android.window.TransitionInfo; import com.android.wm.shell.util.CounterRotator; public abstract class RemoteAnimationRunnerCompat extends IRemoteAnimationRunner.Stub { + private static final String TAG = "RemoteAnimRunnerCompat"; public abstract void onAnimationStart(@WindowManager.TransitionOldType int transit, RemoteAnimationTarget[] apps, RemoteAnimationTarget[] wallpapers, @@ -58,20 +59,24 @@ public abstract class RemoteAnimationRunnerCompat extends IRemoteAnimationRunner try { finishedCallback.onAnimationFinished(); } catch (RemoteException e) { - Log.e("ActivityOptionsCompat", "Failed to call app controlled animation" - + " finished callback", e); + Log.e(TAG, "Failed to call app controlled animation finished callback", e); } }); } public IRemoteTransition toRemoteTransition() { + return wrap(this); + } + + /** Wraps a remote animation runner in a remote-transition. */ + public static IRemoteTransition.Stub wrap(IRemoteAnimationRunner runner) { return new IRemoteTransition.Stub() { final ArrayMap mFinishRunnables = new ArrayMap<>(); @Override public void startAnimation(IBinder token, TransitionInfo info, SurfaceControl.Transaction t, - IRemoteTransitionFinishedCallback finishCallback) { + IRemoteTransitionFinishedCallback finishCallback) throws RemoteException { final ArrayMap leashMap = new ArrayMap<>(); final RemoteAnimationTarget[] apps = RemoteAnimationTargetCompat.wrapApps(info, t, leashMap); @@ -115,8 +120,14 @@ public abstract class RemoteAnimationRunnerCompat extends IRemoteAnimationRunner final CounterRotator counterLauncher = new CounterRotator(); final CounterRotator counterWallpaper = new CounterRotator(); if (launcherTask != null && rotateDelta != 0 && launcherTask.getParent() != null) { - counterLauncher.setup(t, info.getChange(launcherTask.getParent()).getLeash(), - rotateDelta, displayW, displayH); + final TransitionInfo.Change parent = info.getChange(launcherTask.getParent()); + if (parent != null) { + counterLauncher.setup(t, parent.getLeash(), rotateDelta, displayW, + displayH); + } else { + Log.e(TAG, "Malformed: " + launcherTask + " has parent=" + + launcherTask.getParent() + " but it's not in info."); + } if (counterLauncher.getSurface() != null) { t.setLayer(counterLauncher.getSurface(), launcherLayer); } @@ -150,8 +161,14 @@ public abstract class RemoteAnimationRunnerCompat extends IRemoteAnimationRunner counterLauncher.addChild(t, leashMap.get(launcherTask.getLeash())); } if (wallpaper != null && rotateDelta != 0 && wallpaper.getParent() != null) { - counterWallpaper.setup(t, info.getChange(wallpaper.getParent()).getLeash(), - rotateDelta, displayW, displayH); + final TransitionInfo.Change parent = info.getChange(wallpaper.getParent()); + if (parent != null) { + counterWallpaper.setup(t, parent.getLeash(), rotateDelta, displayW, + displayH); + } else { + Log.e(TAG, "Malformed: " + wallpaper + " has parent=" + + wallpaper.getParent() + " but it's not in info."); + } if (counterWallpaper.getSurface() != null) { t.setLayer(counterWallpaper.getSurface(), -1); counterWallpaper.addChild(t, leashMap.get(wallpaper.getLeash())); @@ -175,20 +192,27 @@ public abstract class RemoteAnimationRunnerCompat extends IRemoteAnimationRunner finishCallback.onTransitionFinished(null /* wct */, finishTransaction); finishTransaction.close(); } catch (RemoteException e) { - Log.e("ActivityOptionsCompat", "Failed to call app controlled animation" - + " finished callback", e); + Log.e(TAG, "Failed to call app controlled animation finished callback", e); } }; synchronized (mFinishRunnables) { mFinishRunnables.put(token, animationFinishedCallback); } // TODO(bc-unlcok): Pass correct transit type. - onAnimationStart(TRANSIT_OLD_NONE, - apps, wallpapers, nonApps, () -> { - synchronized (mFinishRunnables) { - if (mFinishRunnables.remove(token) == null) return; + runner.onAnimationStart(TRANSIT_OLD_NONE, + apps, wallpapers, nonApps, new IRemoteAnimationFinishedCallback() { + @Override + public void onAnimationFinished() { + synchronized (mFinishRunnables) { + if (mFinishRunnables.remove(token) == null) return; + } + animationFinishedCallback.run(); + } + + @Override + public IBinder asBinder() { + return null; } - animationFinishedCallback.run(); }); } @@ -206,7 +230,7 @@ public abstract class RemoteAnimationRunnerCompat extends IRemoteAnimationRunner t.close(); info.releaseAllSurfaces(); if (finishRunnable == null) return; - onAnimationCancelled(); + runner.onAnimationCancelled(); finishRunnable.run(); } }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java index 4e690696b5d33..e1eb04fd22ca6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfaces.java @@ -32,6 +32,7 @@ import android.view.KeyEvent; import android.view.RemoteAnimationAdapter; import android.view.View; import android.view.ViewGroup; +import android.window.RemoteTransition; import android.window.SplashScreen; import androidx.annotation.NonNull; @@ -43,7 +44,6 @@ import com.android.internal.statusbar.RegisterStatusBarResult; import com.android.keyguard.AuthKeyguardMessageArea; import com.android.systemui.Dumpable; import com.android.systemui.animation.ActivityLaunchAnimator; -import com.android.systemui.animation.RemoteTransitionAdapter; import com.android.systemui.navigationbar.NavigationBarView; import com.android.systemui.plugins.ActivityStarter.Callback; import com.android.systemui.plugins.ActivityStarter.OnDismissAction; @@ -52,6 +52,7 @@ import com.android.systemui.qs.QSPanelController; import com.android.systemui.shade.NotificationShadeWindowView; import com.android.systemui.shade.NotificationShadeWindowViewController; import com.android.systemui.shade.ShadeViewController; +import com.android.systemui.shared.system.RemoteAnimationRunnerCompat; import com.android.systemui.statusbar.LightRevealScrim; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow; @@ -160,8 +161,9 @@ public interface CentralSurfaces extends Dumpable, LifecycleOwner { if (animationAdapter != null) { if (ENABLE_SHELL_TRANSITIONS) { options = ActivityOptions.makeRemoteTransition( - RemoteTransitionAdapter.adaptRemoteAnimation(animationAdapter, - "SysUILaunch")); + new RemoteTransition( + RemoteAnimationRunnerCompat.wrap(animationAdapter.getRunner()), + animationAdapter.getCallingApplication(), "SysUILaunch")); } else { options = ActivityOptions.makeRemoteAnimation(animationAdapter); }