Loading core/java/com/android/internal/jank/InteractionJankMonitor.java +57 −3 Original line number Diff line number Diff line Loading @@ -16,12 +16,21 @@ package com.android.internal.jank; import static com.android.internal.jank.FrameTracker.*; import static com.android.internal.jank.FrameTracker.ChoreographerWrapper; import static com.android.internal.jank.FrameTracker.SurfaceControlWrapper; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_CLOSE_TO_HOME; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_CLOSE_TO_PIP; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_ICON; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_RECENTS; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_QUICK_SWITCH; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_APPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_DISAPPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_APPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_DISAPPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_APPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_DISAPPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_FROM_AOD; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_TO_AOD; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__NOTIFICATION_SHADE_SWIPE; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_EXPAND_COLLAPSE_LOCK; Loading @@ -44,7 +53,6 @@ import android.provider.DeviceConfig; import android.util.Log; import android.util.SparseArray; import android.view.Choreographer; import android.view.SurfaceControl; import android.view.View; import com.android.internal.annotations.VisibleForTesting; Loading Loading @@ -97,6 +105,14 @@ public class InteractionJankMonitor { public static final int CUJ_NOTIFICATION_ADD = 14; public static final int CUJ_NOTIFICATION_REMOVE = 15; public static final int CUJ_NOTIFICATION_APP_START = 16; public static final int CUJ_LOCKSCREEN_PASSWORD_APPEAR = 17; public static final int CUJ_LOCKSCREEN_PATTERN_APPEAR = 18; public static final int CUJ_LOCKSCREEN_PIN_APPEAR = 19; public static final int CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR = 20; public static final int CUJ_LOCKSCREEN_PATTERN_DISAPPEAR = 21; public static final int CUJ_LOCKSCREEN_PIN_DISAPPEAR = 22; public static final int CUJ_LOCKSCREEN_TRANSITION_FROM_AOD = 23; public static final int CUJ_LOCKSCREEN_TRANSITION_TO_AOD = 24; private static final int NO_STATSD_LOGGING = -1; Loading @@ -122,6 +138,14 @@ public class InteractionJankMonitor { UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_ADD, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_REMOVE, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_APPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_APPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_APPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_DISAPPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_DISAPPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_DISAPPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_FROM_AOD, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_TO_AOD, }; private static volatile InteractionJankMonitor sInstance; Loading Loading @@ -158,6 +182,14 @@ public class InteractionJankMonitor { CUJ_NOTIFICATION_ADD, CUJ_NOTIFICATION_REMOVE, CUJ_NOTIFICATION_APP_START, CUJ_LOCKSCREEN_PASSWORD_APPEAR, CUJ_LOCKSCREEN_PATTERN_APPEAR, CUJ_LOCKSCREEN_PIN_APPEAR, CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR, CUJ_LOCKSCREEN_PATTERN_DISAPPEAR, CUJ_LOCKSCREEN_PIN_DISAPPEAR, CUJ_LOCKSCREEN_TRANSITION_FROM_AOD, CUJ_LOCKSCREEN_TRANSITION_TO_AOD, }) @Retention(RetentionPolicy.SOURCE) public @interface CujType { Loading Loading @@ -366,7 +398,13 @@ public class InteractionJankMonitor { return getNameOfCuj(interactionType - 1); } private static String getNameOfCuj(int cujType) { /** * A helper method to translate CUJ type to CUJ name. * * @param cujType the cuj type defined in this file * @return the name of the cuj type */ public static String getNameOfCuj(int cujType) { switch (cujType) { case CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE: return "SHADE_EXPAND_COLLAPSE"; Loading Loading @@ -402,6 +440,22 @@ public class InteractionJankMonitor { return "NOTIFICATION_REMOVE"; case CUJ_NOTIFICATION_APP_START: return "NOTIFICATION_APP_START"; case CUJ_LOCKSCREEN_PASSWORD_APPEAR: return "CUJ_LOCKSCREEN_PASSWORD_APPEAR"; case CUJ_LOCKSCREEN_PATTERN_APPEAR: return "CUJ_LOCKSCREEN_PATTERN_APPEAR"; case CUJ_LOCKSCREEN_PIN_APPEAR: return "CUJ_LOCKSCREEN_PIN_APPEAR"; case CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR: return "CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR"; case CUJ_LOCKSCREEN_PATTERN_DISAPPEAR: return "CUJ_LOCKSCREEN_PATTERN_DISAPPEAR"; case CUJ_LOCKSCREEN_PIN_DISAPPEAR: return "CUJ_LOCKSCREEN_PIN_DISAPPEAR"; case CUJ_LOCKSCREEN_TRANSITION_FROM_AOD: return "CUJ_LOCKSCREEN_TRANSITION_FROM_AOD"; case CUJ_LOCKSCREEN_TRANSITION_TO_AOD: return "CUJ_LOCKSCREEN_TRANSITION_TO_AOD"; } return "UNKNOWN"; } Loading packages/SettingsLib/src/com/android/settingslib/animation/AppearAnimationUtils.java +14 −0 Original line number Diff line number Diff line Loading @@ -219,8 +219,19 @@ public class AppearAnimationUtils implements AppearAnimationCreator<View> { } } /** * A static method to start translation y animation */ public static void startTranslationYAnimation(View view, long delay, long duration, float endTranslationY, Interpolator interpolator) { startTranslationYAnimation(view, delay, duration, endTranslationY, interpolator, null); } /** * A static method to start translation y animation */ public static void startTranslationYAnimation(View view, long delay, long duration, float endTranslationY, Interpolator interpolator, Animator.AnimatorListener listener) { Animator translationAnim; if (view.isHardwareAccelerated()) { RenderNodeAnimator translationAnimRt = new RenderNodeAnimator( Loading @@ -234,6 +245,9 @@ public class AppearAnimationUtils implements AppearAnimationCreator<View> { translationAnim.setInterpolator(interpolator); translationAnim.setDuration(duration); translationAnim.setStartDelay(delay); if (listener != null) { translationAnim.addListener(listener); } translationAnim.start(); } Loading packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java +29 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; Loading @@ -23,6 +25,7 @@ import android.widget.LinearLayout; import androidx.annotation.Nullable; import com.android.internal.jank.InteractionJankMonitor; import com.android.systemui.Gefingerpoken; import java.util.ArrayList; Loading Loading @@ -83,4 +86,30 @@ public abstract class KeyguardInputView extends LinearLayout { listener -> listener.onInterceptTouchEvent(event)) || super.onInterceptTouchEvent(event); } protected AnimatorListenerAdapter getAnimationListener(int cuj) { return new AnimatorListenerAdapter() { private boolean mIsCancel; @Override public void onAnimationCancel(Animator animation) { mIsCancel = true; } @Override public void onAnimationEnd(Animator animation) { if (mIsCancel) { InteractionJankMonitor.getInstance().cancel(cuj); } else { InteractionJankMonitor.getInstance().end(cuj); } } @Override public void onAnimationStart(Animator animation) { InteractionJankMonitor.getInstance().begin(KeyguardInputView.this, cuj); } }; } } packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java +5 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import com.android.internal.jank.InteractionJankMonitor; import com.android.settingslib.animation.AppearAnimationUtils; import com.android.settingslib.animation.DisappearAnimationUtils; import com.android.systemui.R; Loading Loading @@ -116,7 +117,8 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { setAlpha(1f); setTranslationY(mAppearAnimationUtils.getStartTranslation()); AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, 500 /* duration */, 0, mAppearAnimationUtils.getInterpolator()); 0, mAppearAnimationUtils.getInterpolator(), getAnimationListener(InteractionJankMonitor.CUJ_LOCKSCREEN_PIN_APPEAR)); mAppearAnimationUtils.startAnimation2d(mViews, new Runnable() { @Override Loading @@ -132,7 +134,8 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { enableClipping(false); setTranslationY(0); AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, 280 /* duration */, mDisappearYTranslation, mDisappearAnimationUtils.getInterpolator()); mDisappearYTranslation, mDisappearAnimationUtils.getInterpolator(), getAnimationListener(InteractionJankMonitor.CUJ_LOCKSCREEN_PIN_DISAPPEAR)); DisappearAnimationUtils disappearAnimationUtils = needsSlowUnlockTransition ? mDisappearAnimationUtilsLocked : mDisappearAnimationUtils; Loading packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java +5 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.widget.LockPatternView; import com.android.settingslib.animation.AppearAnimationCreator; import com.android.settingslib.animation.AppearAnimationUtils; Loading Loading @@ -143,7 +144,8 @@ public class KeyguardPatternView extends KeyguardInputView setAlpha(1f); setTranslationY(mAppearAnimationUtils.getStartTranslation()); AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, 500 /* duration */, 0, mAppearAnimationUtils.getInterpolator()); 0, mAppearAnimationUtils.getInterpolator(), getAnimationListener(InteractionJankMonitor.CUJ_LOCKSCREEN_PATTERN_APPEAR)); mAppearAnimationUtils.startAnimation2d( mLockPatternView.getCellStates(), () -> enableClipping(true), Loading @@ -167,7 +169,8 @@ public class KeyguardPatternView extends KeyguardInputView AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, (long) (300 * durationMultiplier), -mDisappearAnimationUtils.getStartTranslation(), mDisappearAnimationUtils.getInterpolator()); mDisappearAnimationUtils.getInterpolator(), getAnimationListener(InteractionJankMonitor.CUJ_LOCKSCREEN_PATTERN_DISAPPEAR)); DisappearAnimationUtils disappearAnimationUtils = needsSlowUnlockTransition ? mDisappearAnimationUtilsLocked : mDisappearAnimationUtils; Loading Loading
core/java/com/android/internal/jank/InteractionJankMonitor.java +57 −3 Original line number Diff line number Diff line Loading @@ -16,12 +16,21 @@ package com.android.internal.jank; import static com.android.internal.jank.FrameTracker.*; import static com.android.internal.jank.FrameTracker.ChoreographerWrapper; import static com.android.internal.jank.FrameTracker.SurfaceControlWrapper; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_CLOSE_TO_HOME; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_CLOSE_TO_PIP; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_ICON; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_APP_LAUNCH_FROM_RECENTS; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_QUICK_SWITCH; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_APPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_DISAPPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_APPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_DISAPPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_APPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_DISAPPEAR; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_FROM_AOD; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_TO_AOD; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__NOTIFICATION_SHADE_SWIPE; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH; import static com.android.internal.util.FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_EXPAND_COLLAPSE_LOCK; Loading @@ -44,7 +53,6 @@ import android.provider.DeviceConfig; import android.util.Log; import android.util.SparseArray; import android.view.Choreographer; import android.view.SurfaceControl; import android.view.View; import com.android.internal.annotations.VisibleForTesting; Loading Loading @@ -97,6 +105,14 @@ public class InteractionJankMonitor { public static final int CUJ_NOTIFICATION_ADD = 14; public static final int CUJ_NOTIFICATION_REMOVE = 15; public static final int CUJ_NOTIFICATION_APP_START = 16; public static final int CUJ_LOCKSCREEN_PASSWORD_APPEAR = 17; public static final int CUJ_LOCKSCREEN_PATTERN_APPEAR = 18; public static final int CUJ_LOCKSCREEN_PIN_APPEAR = 19; public static final int CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR = 20; public static final int CUJ_LOCKSCREEN_PATTERN_DISAPPEAR = 21; public static final int CUJ_LOCKSCREEN_PIN_DISAPPEAR = 22; public static final int CUJ_LOCKSCREEN_TRANSITION_FROM_AOD = 23; public static final int CUJ_LOCKSCREEN_TRANSITION_TO_AOD = 24; private static final int NO_STATSD_LOGGING = -1; Loading @@ -122,6 +138,14 @@ public class InteractionJankMonitor { UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_ADD, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_NOTIFICATION_REMOVE, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__SHADE_APP_LAUNCH, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_APPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_APPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_APPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PASSWORD_DISAPPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PATTERN_DISAPPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_PIN_DISAPPEAR, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_FROM_AOD, UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LOCKSCREEN_TRANSITION_TO_AOD, }; private static volatile InteractionJankMonitor sInstance; Loading Loading @@ -158,6 +182,14 @@ public class InteractionJankMonitor { CUJ_NOTIFICATION_ADD, CUJ_NOTIFICATION_REMOVE, CUJ_NOTIFICATION_APP_START, CUJ_LOCKSCREEN_PASSWORD_APPEAR, CUJ_LOCKSCREEN_PATTERN_APPEAR, CUJ_LOCKSCREEN_PIN_APPEAR, CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR, CUJ_LOCKSCREEN_PATTERN_DISAPPEAR, CUJ_LOCKSCREEN_PIN_DISAPPEAR, CUJ_LOCKSCREEN_TRANSITION_FROM_AOD, CUJ_LOCKSCREEN_TRANSITION_TO_AOD, }) @Retention(RetentionPolicy.SOURCE) public @interface CujType { Loading Loading @@ -366,7 +398,13 @@ public class InteractionJankMonitor { return getNameOfCuj(interactionType - 1); } private static String getNameOfCuj(int cujType) { /** * A helper method to translate CUJ type to CUJ name. * * @param cujType the cuj type defined in this file * @return the name of the cuj type */ public static String getNameOfCuj(int cujType) { switch (cujType) { case CUJ_NOTIFICATION_SHADE_EXPAND_COLLAPSE: return "SHADE_EXPAND_COLLAPSE"; Loading Loading @@ -402,6 +440,22 @@ public class InteractionJankMonitor { return "NOTIFICATION_REMOVE"; case CUJ_NOTIFICATION_APP_START: return "NOTIFICATION_APP_START"; case CUJ_LOCKSCREEN_PASSWORD_APPEAR: return "CUJ_LOCKSCREEN_PASSWORD_APPEAR"; case CUJ_LOCKSCREEN_PATTERN_APPEAR: return "CUJ_LOCKSCREEN_PATTERN_APPEAR"; case CUJ_LOCKSCREEN_PIN_APPEAR: return "CUJ_LOCKSCREEN_PIN_APPEAR"; case CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR: return "CUJ_LOCKSCREEN_PASSWORD_DISAPPEAR"; case CUJ_LOCKSCREEN_PATTERN_DISAPPEAR: return "CUJ_LOCKSCREEN_PATTERN_DISAPPEAR"; case CUJ_LOCKSCREEN_PIN_DISAPPEAR: return "CUJ_LOCKSCREEN_PIN_DISAPPEAR"; case CUJ_LOCKSCREEN_TRANSITION_FROM_AOD: return "CUJ_LOCKSCREEN_TRANSITION_FROM_AOD"; case CUJ_LOCKSCREEN_TRANSITION_TO_AOD: return "CUJ_LOCKSCREEN_TRANSITION_TO_AOD"; } return "UNKNOWN"; } Loading
packages/SettingsLib/src/com/android/settingslib/animation/AppearAnimationUtils.java +14 −0 Original line number Diff line number Diff line Loading @@ -219,8 +219,19 @@ public class AppearAnimationUtils implements AppearAnimationCreator<View> { } } /** * A static method to start translation y animation */ public static void startTranslationYAnimation(View view, long delay, long duration, float endTranslationY, Interpolator interpolator) { startTranslationYAnimation(view, delay, duration, endTranslationY, interpolator, null); } /** * A static method to start translation y animation */ public static void startTranslationYAnimation(View view, long delay, long duration, float endTranslationY, Interpolator interpolator, Animator.AnimatorListener listener) { Animator translationAnim; if (view.isHardwareAccelerated()) { RenderNodeAnimator translationAnimRt = new RenderNodeAnimator( Loading @@ -234,6 +245,9 @@ public class AppearAnimationUtils implements AppearAnimationCreator<View> { translationAnim.setInterpolator(interpolator); translationAnim.setDuration(duration); translationAnim.setStartDelay(delay); if (listener != null) { translationAnim.addListener(listener); } translationAnim.start(); } Loading
packages/SystemUI/src/com/android/keyguard/KeyguardInputView.java +29 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.keyguard; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; Loading @@ -23,6 +25,7 @@ import android.widget.LinearLayout; import androidx.annotation.Nullable; import com.android.internal.jank.InteractionJankMonitor; import com.android.systemui.Gefingerpoken; import java.util.ArrayList; Loading Loading @@ -83,4 +86,30 @@ public abstract class KeyguardInputView extends LinearLayout { listener -> listener.onInterceptTouchEvent(event)) || super.onInterceptTouchEvent(event); } protected AnimatorListenerAdapter getAnimationListener(int cuj) { return new AnimatorListenerAdapter() { private boolean mIsCancel; @Override public void onAnimationCancel(Animator animation) { mIsCancel = true; } @Override public void onAnimationEnd(Animator animation) { if (mIsCancel) { InteractionJankMonitor.getInstance().cancel(cuj); } else { InteractionJankMonitor.getInstance().end(cuj); } } @Override public void onAnimationStart(Animator animation) { InteractionJankMonitor.getInstance().begin(KeyguardInputView.this, cuj); } }; } }
packages/SystemUI/src/com/android/keyguard/KeyguardPINView.java +5 −2 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import com.android.internal.jank.InteractionJankMonitor; import com.android.settingslib.animation.AppearAnimationUtils; import com.android.settingslib.animation.DisappearAnimationUtils; import com.android.systemui.R; Loading Loading @@ -116,7 +117,8 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { setAlpha(1f); setTranslationY(mAppearAnimationUtils.getStartTranslation()); AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, 500 /* duration */, 0, mAppearAnimationUtils.getInterpolator()); 0, mAppearAnimationUtils.getInterpolator(), getAnimationListener(InteractionJankMonitor.CUJ_LOCKSCREEN_PIN_APPEAR)); mAppearAnimationUtils.startAnimation2d(mViews, new Runnable() { @Override Loading @@ -132,7 +134,8 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { enableClipping(false); setTranslationY(0); AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, 280 /* duration */, mDisappearYTranslation, mDisappearAnimationUtils.getInterpolator()); mDisappearYTranslation, mDisappearAnimationUtils.getInterpolator(), getAnimationListener(InteractionJankMonitor.CUJ_LOCKSCREEN_PIN_DISAPPEAR)); DisappearAnimationUtils disappearAnimationUtils = needsSlowUnlockTransition ? mDisappearAnimationUtilsLocked : mDisappearAnimationUtils; Loading
packages/SystemUI/src/com/android/keyguard/KeyguardPatternView.java +5 −2 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import com.android.internal.jank.InteractionJankMonitor; import com.android.internal.widget.LockPatternView; import com.android.settingslib.animation.AppearAnimationCreator; import com.android.settingslib.animation.AppearAnimationUtils; Loading Loading @@ -143,7 +144,8 @@ public class KeyguardPatternView extends KeyguardInputView setAlpha(1f); setTranslationY(mAppearAnimationUtils.getStartTranslation()); AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, 500 /* duration */, 0, mAppearAnimationUtils.getInterpolator()); 0, mAppearAnimationUtils.getInterpolator(), getAnimationListener(InteractionJankMonitor.CUJ_LOCKSCREEN_PATTERN_APPEAR)); mAppearAnimationUtils.startAnimation2d( mLockPatternView.getCellStates(), () -> enableClipping(true), Loading @@ -167,7 +169,8 @@ public class KeyguardPatternView extends KeyguardInputView AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, (long) (300 * durationMultiplier), -mDisappearAnimationUtils.getStartTranslation(), mDisappearAnimationUtils.getInterpolator()); mDisappearAnimationUtils.getInterpolator(), getAnimationListener(InteractionJankMonitor.CUJ_LOCKSCREEN_PATTERN_DISAPPEAR)); DisappearAnimationUtils disappearAnimationUtils = needsSlowUnlockTransition ? mDisappearAnimationUtilsLocked : mDisappearAnimationUtils; Loading