Loading packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +31 −6 Original line number Diff line number Diff line Loading @@ -94,7 +94,6 @@ import android.view.WindowManager; import android.view.WindowManagerPolicyConstants; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.window.IRemoteTransition; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -162,7 +161,6 @@ import dagger.Lazy; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Optional; import java.util.concurrent.Executor; /** Loading Loading @@ -1913,19 +1911,19 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, } public IRemoteAnimationRunner getExitAnimationRunner() { return mExitAnimationRunner; return validatingRemoteAnimationRunner(mExitAnimationRunner); } public IRemoteAnimationRunner getOccludeAnimationRunner() { return mOccludeAnimationRunner; return validatingRemoteAnimationRunner(mOccludeAnimationRunner); } public IRemoteAnimationRunner getOccludeByDreamAnimationRunner() { return mOccludeByDreamAnimationRunner; return validatingRemoteAnimationRunner(mOccludeByDreamAnimationRunner); } public IRemoteAnimationRunner getUnoccludeAnimationRunner() { return mUnoccludeAnimationRunner; return validatingRemoteAnimationRunner(mUnoccludeAnimationRunner); } public boolean isHiding() { Loading Loading @@ -3439,6 +3437,10 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, Trace.traceCounter(Trace.TRACE_TAG_APP, "pendingLock", mPendingLock ? 1 : 0); } private boolean isViewRootReady() { return mKeyguardViewControllerLazy.get().getViewRootImpl() != null; } public void addStateMonitorCallback(IKeyguardStateCallback callback) { synchronized (this) { mKeyguardStateCallbacks.add(callback); Loading Loading @@ -3541,4 +3543,27 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, mInteractionJankMonitor.cancel(CUJ_LOCKSCREEN_OCCLUSION); } } private IRemoteAnimationRunner validatingRemoteAnimationRunner(IRemoteAnimationRunner wrapped) { return new IRemoteAnimationRunner.Stub() { @Override public void onAnimationCancelled() throws RemoteException { wrapped.onAnimationCancelled(); } @Override public void onAnimationStart(int transit, RemoteAnimationTarget[] apps, RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, IRemoteAnimationFinishedCallback finishedCallback) throws RemoteException { if (!isViewRootReady()) { Log.w(TAG, "Skipping remote animation - view root not ready"); return; } wrapped.onAnimationStart(transit, apps, wallpapers, nonApps, finishedCallback); } }; } } Loading
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +31 −6 Original line number Diff line number Diff line Loading @@ -94,7 +94,6 @@ import android.view.WindowManager; import android.view.WindowManagerPolicyConstants; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.window.IRemoteTransition; import androidx.annotation.NonNull; import androidx.annotation.Nullable; Loading Loading @@ -162,7 +161,6 @@ import dagger.Lazy; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Optional; import java.util.concurrent.Executor; /** Loading Loading @@ -1913,19 +1911,19 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, } public IRemoteAnimationRunner getExitAnimationRunner() { return mExitAnimationRunner; return validatingRemoteAnimationRunner(mExitAnimationRunner); } public IRemoteAnimationRunner getOccludeAnimationRunner() { return mOccludeAnimationRunner; return validatingRemoteAnimationRunner(mOccludeAnimationRunner); } public IRemoteAnimationRunner getOccludeByDreamAnimationRunner() { return mOccludeByDreamAnimationRunner; return validatingRemoteAnimationRunner(mOccludeByDreamAnimationRunner); } public IRemoteAnimationRunner getUnoccludeAnimationRunner() { return mUnoccludeAnimationRunner; return validatingRemoteAnimationRunner(mUnoccludeAnimationRunner); } public boolean isHiding() { Loading Loading @@ -3439,6 +3437,10 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, Trace.traceCounter(Trace.TRACE_TAG_APP, "pendingLock", mPendingLock ? 1 : 0); } private boolean isViewRootReady() { return mKeyguardViewControllerLazy.get().getViewRootImpl() != null; } public void addStateMonitorCallback(IKeyguardStateCallback callback) { synchronized (this) { mKeyguardStateCallbacks.add(callback); Loading Loading @@ -3541,4 +3543,27 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable, mInteractionJankMonitor.cancel(CUJ_LOCKSCREEN_OCCLUSION); } } private IRemoteAnimationRunner validatingRemoteAnimationRunner(IRemoteAnimationRunner wrapped) { return new IRemoteAnimationRunner.Stub() { @Override public void onAnimationCancelled() throws RemoteException { wrapped.onAnimationCancelled(); } @Override public void onAnimationStart(int transit, RemoteAnimationTarget[] apps, RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, IRemoteAnimationFinishedCallback finishedCallback) throws RemoteException { if (!isViewRootReady()) { Log.w(TAG, "Skipping remote animation - view root not ready"); return; } wrapped.onAnimationStart(transit, apps, wallpapers, nonApps, finishedCallback); } }; } }