Loading packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java +29 −5 Original line number Diff line number Diff line Loading @@ -158,7 +158,7 @@ public class KeyguardService extends Service { Rect localBounds = new Rect(change.getEndAbsBounds()); localBounds.offsetTo(change.getEndRelOffset().x, change.getEndRelOffset().y); out.add(new RemoteAnimationTarget( final RemoteAnimationTarget target = new RemoteAnimationTarget( taskId, newModeToLegacyMode(change.getMode()), change.getLeash(), Loading @@ -169,7 +169,15 @@ public class KeyguardService extends Service { info.getChanges().size() - i, new Point(), localBounds, new Rect(change.getEndAbsBounds()), windowConfiguration, isNotInRecents, null /* startLeash */, change.getStartAbsBounds(), taskInfo, false /* allowEnterPip */)); change.getStartAbsBounds(), taskInfo, false /* allowEnterPip */); // Use hasAnimatingParent to mark the anything below root task if (taskId != -1 && change.getParent() != null) { final TransitionInfo.Change parentChange = info.getChange(change.getParent()); if (parentChange != null && parentChange.getTaskInfo() != null) { target.hasAnimatingParent = true; } } out.add(target); } return out.toArray(new RemoteAnimationTarget[out.size()]); } Loading @@ -190,6 +198,7 @@ public class KeyguardService extends Service { } } // Wrap Keyguard going away animation private static IRemoteTransition wrap(IRemoteAnimationRunner runner) { return new IRemoteTransition.Stub() { final ArrayMap<IBinder, IRemoteTransitionFinishedCallback> mFinishCallbacks = Loading @@ -204,9 +213,24 @@ public class KeyguardService extends Service { final RemoteAnimationTarget[] wallpapers = wrap(info, true /* wallpapers */); final RemoteAnimationTarget[] nonApps = new RemoteAnimationTarget[0]; // TODO: Remove this, and update alpha value in the IAnimationRunner. for (TransitionInfo.Change change : info.getChanges()) { t.setAlpha(change.getLeash(), 1.0f); // Sets the alpha to 0 for the opening root task for fade in animation. And since // the fade in animation can only apply on the first opening app, so set alpha to 1 // for anything else. boolean foundOpening = false; for (RemoteAnimationTarget target : apps) { if (target.taskId != -1 && target.mode == RemoteAnimationTarget.MODE_OPENING && !target.hasAnimatingParent) { if (foundOpening) { Log.w(TAG, "More than one opening target"); t.setAlpha(target.leash, 1.0f); continue; } t.setAlpha(target.leash, 0.0f); foundOpening = true; } else { t.setAlpha(target.leash, 1.0f); } } t.apply(); synchronized (mFinishCallbacks) { Loading packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt +30 −10 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.os.Handler import android.os.RemoteException import android.util.Log import android.view.RemoteAnimationTarget import android.view.SurfaceControl import android.view.SyncRtSurfaceTransactionApplier import android.view.View import androidx.annotation.VisibleForTesting Loading Loading @@ -293,6 +294,8 @@ class KeyguardUnlockAnimationController @Inject constructor( private val handler = Handler() private val tmpFloat = FloatArray(9) init { with(surfaceBehindAlphaAnimator) { duration = SURFACE_BEHIND_SWIPE_FADE_DURATION_MS Loading Loading @@ -723,13 +726,27 @@ class KeyguardUnlockAnimationController @Inject constructor( if (keyguardStateController.isSnappingKeyguardBackAfterSwipe) amount else surfaceBehindAlpha // SyncRtSurfaceTransactionApplier cannot apply transaction when the target view is unable // to draw val sc: SurfaceControl? = surfaceBehindRemoteAnimationTarget?.leash if (keyguardViewController.viewRootImpl.view?.visibility != View.VISIBLE && sc?.isValid == true) { with(SurfaceControl.Transaction()) { setMatrix(sc, surfaceBehindMatrix, tmpFloat) setCornerRadius(sc, roundedCornerRadius) setAlpha(sc, animationAlpha) apply() } } else { applyParamsToSurface( SyncRtSurfaceTransactionApplier.SurfaceParams.Builder( surfaceBehindRemoteAnimationTarget!!.leash) .withMatrix(surfaceBehindMatrix) .withCornerRadius(roundedCornerRadius) .withAlpha(animationAlpha) .build()) .build() ) } } /** Loading @@ -744,8 +761,11 @@ class KeyguardUnlockAnimationController @Inject constructor( handler.removeCallbacksAndMessages(null) // Make sure we made the surface behind fully visible, just in case. It should already be // fully visible. If the launcher is doing its own animation, let it continue without // forcing it to 1f. // fully visible. The exit animation is finished, and we should not hold the leash anymore, // so forcing it to 1f. surfaceBehindAlphaAnimator.cancel() surfaceBehindEntryAnimator.cancel() surfaceBehindAlpha = 1f setSurfaceBehindAppearAmount(1f) launcherUnlockController?.setUnlockAmount(1f, false /* forceIfAnimating */) Loading packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +9 −1 Original line number Diff line number Diff line Loading @@ -2503,10 +2503,18 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, mInteractionJankMonitor.begin( createInteractionJankMonitorConf("DismissPanel")); // Apply the opening animation on root task if exists RemoteAnimationTarget aniTarget = apps[0]; for (RemoteAnimationTarget tmpTarget : apps) { if (tmpTarget.taskId != -1 && !tmpTarget.hasAnimatingParent) { aniTarget = tmpTarget; break; } } // Pass the surface and metadata to the unlock animation controller. mKeyguardUnlockAnimationControllerLazy.get() .notifyStartSurfaceBehindRemoteAnimation( apps[0], startTime, mSurfaceBehindRemoteAnimationRequested); aniTarget, startTime, mSurfaceBehindRemoteAnimationRequested); } else { mInteractionJankMonitor.begin( createInteractionJankMonitorConf("RemoteAnimationDisabled")); Loading Loading
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java +29 −5 Original line number Diff line number Diff line Loading @@ -158,7 +158,7 @@ public class KeyguardService extends Service { Rect localBounds = new Rect(change.getEndAbsBounds()); localBounds.offsetTo(change.getEndRelOffset().x, change.getEndRelOffset().y); out.add(new RemoteAnimationTarget( final RemoteAnimationTarget target = new RemoteAnimationTarget( taskId, newModeToLegacyMode(change.getMode()), change.getLeash(), Loading @@ -169,7 +169,15 @@ public class KeyguardService extends Service { info.getChanges().size() - i, new Point(), localBounds, new Rect(change.getEndAbsBounds()), windowConfiguration, isNotInRecents, null /* startLeash */, change.getStartAbsBounds(), taskInfo, false /* allowEnterPip */)); change.getStartAbsBounds(), taskInfo, false /* allowEnterPip */); // Use hasAnimatingParent to mark the anything below root task if (taskId != -1 && change.getParent() != null) { final TransitionInfo.Change parentChange = info.getChange(change.getParent()); if (parentChange != null && parentChange.getTaskInfo() != null) { target.hasAnimatingParent = true; } } out.add(target); } return out.toArray(new RemoteAnimationTarget[out.size()]); } Loading @@ -190,6 +198,7 @@ public class KeyguardService extends Service { } } // Wrap Keyguard going away animation private static IRemoteTransition wrap(IRemoteAnimationRunner runner) { return new IRemoteTransition.Stub() { final ArrayMap<IBinder, IRemoteTransitionFinishedCallback> mFinishCallbacks = Loading @@ -204,9 +213,24 @@ public class KeyguardService extends Service { final RemoteAnimationTarget[] wallpapers = wrap(info, true /* wallpapers */); final RemoteAnimationTarget[] nonApps = new RemoteAnimationTarget[0]; // TODO: Remove this, and update alpha value in the IAnimationRunner. for (TransitionInfo.Change change : info.getChanges()) { t.setAlpha(change.getLeash(), 1.0f); // Sets the alpha to 0 for the opening root task for fade in animation. And since // the fade in animation can only apply on the first opening app, so set alpha to 1 // for anything else. boolean foundOpening = false; for (RemoteAnimationTarget target : apps) { if (target.taskId != -1 && target.mode == RemoteAnimationTarget.MODE_OPENING && !target.hasAnimatingParent) { if (foundOpening) { Log.w(TAG, "More than one opening target"); t.setAlpha(target.leash, 1.0f); continue; } t.setAlpha(target.leash, 0.0f); foundOpening = true; } else { t.setAlpha(target.leash, 1.0f); } } t.apply(); synchronized (mFinishCallbacks) { Loading
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardUnlockAnimationController.kt +30 −10 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.os.Handler import android.os.RemoteException import android.util.Log import android.view.RemoteAnimationTarget import android.view.SurfaceControl import android.view.SyncRtSurfaceTransactionApplier import android.view.View import androidx.annotation.VisibleForTesting Loading Loading @@ -293,6 +294,8 @@ class KeyguardUnlockAnimationController @Inject constructor( private val handler = Handler() private val tmpFloat = FloatArray(9) init { with(surfaceBehindAlphaAnimator) { duration = SURFACE_BEHIND_SWIPE_FADE_DURATION_MS Loading Loading @@ -723,13 +726,27 @@ class KeyguardUnlockAnimationController @Inject constructor( if (keyguardStateController.isSnappingKeyguardBackAfterSwipe) amount else surfaceBehindAlpha // SyncRtSurfaceTransactionApplier cannot apply transaction when the target view is unable // to draw val sc: SurfaceControl? = surfaceBehindRemoteAnimationTarget?.leash if (keyguardViewController.viewRootImpl.view?.visibility != View.VISIBLE && sc?.isValid == true) { with(SurfaceControl.Transaction()) { setMatrix(sc, surfaceBehindMatrix, tmpFloat) setCornerRadius(sc, roundedCornerRadius) setAlpha(sc, animationAlpha) apply() } } else { applyParamsToSurface( SyncRtSurfaceTransactionApplier.SurfaceParams.Builder( surfaceBehindRemoteAnimationTarget!!.leash) .withMatrix(surfaceBehindMatrix) .withCornerRadius(roundedCornerRadius) .withAlpha(animationAlpha) .build()) .build() ) } } /** Loading @@ -744,8 +761,11 @@ class KeyguardUnlockAnimationController @Inject constructor( handler.removeCallbacksAndMessages(null) // Make sure we made the surface behind fully visible, just in case. It should already be // fully visible. If the launcher is doing its own animation, let it continue without // forcing it to 1f. // fully visible. The exit animation is finished, and we should not hold the leash anymore, // so forcing it to 1f. surfaceBehindAlphaAnimator.cancel() surfaceBehindEntryAnimator.cancel() surfaceBehindAlpha = 1f setSurfaceBehindAppearAmount(1f) launcherUnlockController?.setUnlockAmount(1f, false /* forceIfAnimating */) Loading
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +9 −1 Original line number Diff line number Diff line Loading @@ -2503,10 +2503,18 @@ public class KeyguardViewMediator extends CoreStartable implements Dumpable, mInteractionJankMonitor.begin( createInteractionJankMonitorConf("DismissPanel")); // Apply the opening animation on root task if exists RemoteAnimationTarget aniTarget = apps[0]; for (RemoteAnimationTarget tmpTarget : apps) { if (tmpTarget.taskId != -1 && !tmpTarget.hasAnimatingParent) { aniTarget = tmpTarget; break; } } // Pass the surface and metadata to the unlock animation controller. mKeyguardUnlockAnimationControllerLazy.get() .notifyStartSurfaceBehindRemoteAnimation( apps[0], startTime, mSurfaceBehindRemoteAnimationRequested); aniTarget, startTime, mSurfaceBehindRemoteAnimationRequested); } else { mInteractionJankMonitor.begin( createInteractionJankMonitorConf("RemoteAnimationDisabled")); Loading