Loading services/core/java/com/android/server/wm/AppTransition.java +41 −6 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ import static com.android.server.wm.AppTransitionProto.APP_TRANSITION_STATE; import static com.android.server.wm.AppTransitionProto.LAST_USED_APP_TRANSITION; import android.annotation.DrawableRes; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.content.ComponentName; Loading @@ -93,6 +94,7 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Binder; import android.os.Debug; import android.os.Handler; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.RemoteException; Loading Loading @@ -120,8 +122,8 @@ import android.view.animation.TranslateAnimation; import com.android.internal.R; import com.android.internal.util.DumpUtils.Dump; import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.AttributeCache; import com.android.server.wm.WindowManagerService.H; import com.android.server.wm.animation.ClipRectLRAnimation; import com.android.server.wm.animation.ClipRectTBAnimation; import com.android.server.wm.animation.CurvedTranslateAnimation; Loading Loading @@ -252,9 +254,13 @@ public class AppTransition implements Dump { private RemoteAnimationController mRemoteAnimationController; final Handler mHandler; final Runnable mHandleAppTransitionTimeoutRunnable = () -> handleAppTransitionTimeout(); AppTransition(Context context, WindowManagerService service) { mContext = context; mService = service; mHandler = new Handler(service.mH.getLooper()); mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context, com.android.internal.R.interpolator.linear_out_slow_in); mFastOutLinearInInterpolator = AnimationUtils.loadInterpolator(context, Loading Loading @@ -1349,7 +1355,8 @@ public class AppTransition implements Dump { @Override public void onAnimationEnd(Animation animation) { mService.mH.obtainMessage(H.DO_ANIMATION_CALLBACK, callback).sendToTarget(); mHandler.sendMessage(PooledLambda.obtainMessage( AppTransition::doAnimationCallback, callback)); } @Override Loading Loading @@ -1756,7 +1763,7 @@ public class AppTransition implements Dump { void postAnimationCallback() { if (mNextAppTransitionCallback != null) { mService.mH.sendMessage(mService.mH.obtainMessage(H.DO_ANIMATION_CALLBACK, mHandler.sendMessage(PooledLambda.obtainMessage(AppTransition::doAnimationCallback, mNextAppTransitionCallback)); mNextAppTransitionCallback = null; } Loading Loading @@ -1869,7 +1876,7 @@ public class AppTransition implements Dump { clear(); mNextAppTransitionType = NEXT_TRANSIT_TYPE_REMOTE; mRemoteAnimationController = new RemoteAnimationController(mService, remoteAnimationAdapter, mService.mH); remoteAnimationAdapter, mHandler); } } Loading Loading @@ -2162,8 +2169,8 @@ public class AppTransition implements Dump { } boolean prepared = prepare(); if (isTransitionSet()) { mService.mH.removeMessages(H.APP_TRANSITION_TIMEOUT); mService.mH.sendEmptyMessageDelayed(H.APP_TRANSITION_TIMEOUT, APP_TRANSITION_TIMEOUT_MS); removeAppTransitionTimeoutCallbacks(); mHandler.postDelayed(mHandleAppTransitionTimeoutRunnable, APP_TRANSITION_TIMEOUT_MS); } return prepared; } Loading Loading @@ -2208,4 +2215,32 @@ public class AppTransition implements Dump { return mGridLayoutRecentsEnabled || orientation == Configuration.ORIENTATION_PORTRAIT; } private void handleAppTransitionTimeout() { synchronized (mService.mWindowMap) { if (isTransitionSet() || !mService.mOpeningApps.isEmpty() || !mService.mClosingApps.isEmpty()) { if (DEBUG_APP_TRANSITIONS) { Slog.v(TAG_WM, "*** APP TRANSITION TIMEOUT." + " isTransitionSet()=" + mService.mAppTransition.isTransitionSet() + " mOpeningApps.size()=" + mService.mOpeningApps.size() + " mClosingApps.size()=" + mService.mClosingApps.size()); } setTimeout(); mService.mWindowPlacerLocked.performSurfacePlacement(); } } } private static void doAnimationCallback(@NonNull IRemoteCallback callback) { try { ((IRemoteCallback) callback).sendResult(null); } catch (RemoteException e) { } } void removeAppTransitionTimeoutCallbacks() { mHandler.removeCallbacks(mHandleAppTransitionTimeoutRunnable); } } services/core/java/com/android/server/wm/WindowManagerService.java +0 −25 Original line number Diff line number Diff line Loading @@ -4477,7 +4477,6 @@ public class WindowManagerService extends IWindowManager.Stub public static final int REPORT_LOSING_FOCUS = 3; public static final int WINDOW_FREEZE_TIMEOUT = 11; public static final int APP_TRANSITION_TIMEOUT = 13; public static final int PERSIST_ANIMATION_SCALE = 14; public static final int FORCE_GC = 15; public static final int ENABLE_SCREEN = 16; Loading @@ -4489,7 +4488,6 @@ public class WindowManagerService extends IWindowManager.Stub public static final int BOOT_TIMEOUT = 23; public static final int WAITING_FOR_DRAWN_TIMEOUT = 24; public static final int SHOW_STRICT_MODE_VIOLATION = 25; public static final int DO_ANIMATION_CALLBACK = 26; public static final int CLIENT_FREEZE_TIMEOUT = 30; public static final int NOTIFY_ACTIVITY_DRAWN = 32; Loading Loading @@ -4607,21 +4605,6 @@ public class WindowManagerService extends IWindowManager.Stub break; } case APP_TRANSITION_TIMEOUT: { synchronized (mWindowMap) { if (mAppTransition.isTransitionSet() || !mOpeningApps.isEmpty() || !mClosingApps.isEmpty()) { if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "*** APP TRANSITION TIMEOUT." + " isTransitionSet()=" + mAppTransition.isTransitionSet() + " mOpeningApps.size()=" + mOpeningApps.size() + " mClosingApps.size()=" + mClosingApps.size()); mAppTransition.setTimeout(); mWindowPlacerLocked.performSurfacePlacement(); } } break; } case PERSIST_ANIMATION_SCALE: { Settings.Global.putFloat(mContext.getContentResolver(), Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting); Loading Loading @@ -4774,14 +4757,6 @@ public class WindowManagerService extends IWindowManager.Stub break; } case DO_ANIMATION_CALLBACK: { try { ((IRemoteCallback)msg.obj).sendResult(null); } catch (RemoteException e) { } break; } case NOTIFY_ACTIVITY_DRAWN: try { mActivityTaskManager.notifyActivityDrawn((IBinder) msg.obj); Loading services/core/java/com/android/server/wm/WindowSurfacePlacer.java +1 −2 Original line number Diff line number Diff line Loading @@ -69,7 +69,6 @@ import android.view.WindowManager.TransitionType; import android.view.animation.Animation; import com.android.internal.annotations.VisibleForTesting; import com.android.server.wm.WindowManagerService.H; import java.io.PrintWriter; import java.util.function.Predicate; Loading Loading @@ -252,7 +251,7 @@ class WindowSurfacePlacer { mService.mSkipAppTransitionAnimation = false; mService.mNoAnimationNotifyOnTransitionFinished.clear(); mService.mH.removeMessages(H.APP_TRANSITION_TIMEOUT); mService.mAppTransition.removeAppTransitionTimeoutCallbacks(); final DisplayContent displayContent = mService.getDefaultDisplayContentLocked(); Loading services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java +1 −1 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ public class BoundsAnimationControllerTests extends WindowTestsBase { private AppTransitionListener mListener; MockAppTransition(Context context) { super(context, null); super(context, sWm); } @Override Loading Loading
services/core/java/com/android/server/wm/AppTransition.java +41 −6 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ import static com.android.server.wm.AppTransitionProto.APP_TRANSITION_STATE; import static com.android.server.wm.AppTransitionProto.LAST_USED_APP_TRANSITION; import android.annotation.DrawableRes; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityManager; import android.content.ComponentName; Loading @@ -93,6 +94,7 @@ import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Binder; import android.os.Debug; import android.os.Handler; import android.os.IBinder; import android.os.IRemoteCallback; import android.os.RemoteException; Loading Loading @@ -120,8 +122,8 @@ import android.view.animation.TranslateAnimation; import com.android.internal.R; import com.android.internal.util.DumpUtils.Dump; import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.AttributeCache; import com.android.server.wm.WindowManagerService.H; import com.android.server.wm.animation.ClipRectLRAnimation; import com.android.server.wm.animation.ClipRectTBAnimation; import com.android.server.wm.animation.CurvedTranslateAnimation; Loading Loading @@ -252,9 +254,13 @@ public class AppTransition implements Dump { private RemoteAnimationController mRemoteAnimationController; final Handler mHandler; final Runnable mHandleAppTransitionTimeoutRunnable = () -> handleAppTransitionTimeout(); AppTransition(Context context, WindowManagerService service) { mContext = context; mService = service; mHandler = new Handler(service.mH.getLooper()); mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context, com.android.internal.R.interpolator.linear_out_slow_in); mFastOutLinearInInterpolator = AnimationUtils.loadInterpolator(context, Loading Loading @@ -1349,7 +1355,8 @@ public class AppTransition implements Dump { @Override public void onAnimationEnd(Animation animation) { mService.mH.obtainMessage(H.DO_ANIMATION_CALLBACK, callback).sendToTarget(); mHandler.sendMessage(PooledLambda.obtainMessage( AppTransition::doAnimationCallback, callback)); } @Override Loading Loading @@ -1756,7 +1763,7 @@ public class AppTransition implements Dump { void postAnimationCallback() { if (mNextAppTransitionCallback != null) { mService.mH.sendMessage(mService.mH.obtainMessage(H.DO_ANIMATION_CALLBACK, mHandler.sendMessage(PooledLambda.obtainMessage(AppTransition::doAnimationCallback, mNextAppTransitionCallback)); mNextAppTransitionCallback = null; } Loading Loading @@ -1869,7 +1876,7 @@ public class AppTransition implements Dump { clear(); mNextAppTransitionType = NEXT_TRANSIT_TYPE_REMOTE; mRemoteAnimationController = new RemoteAnimationController(mService, remoteAnimationAdapter, mService.mH); remoteAnimationAdapter, mHandler); } } Loading Loading @@ -2162,8 +2169,8 @@ public class AppTransition implements Dump { } boolean prepared = prepare(); if (isTransitionSet()) { mService.mH.removeMessages(H.APP_TRANSITION_TIMEOUT); mService.mH.sendEmptyMessageDelayed(H.APP_TRANSITION_TIMEOUT, APP_TRANSITION_TIMEOUT_MS); removeAppTransitionTimeoutCallbacks(); mHandler.postDelayed(mHandleAppTransitionTimeoutRunnable, APP_TRANSITION_TIMEOUT_MS); } return prepared; } Loading Loading @@ -2208,4 +2215,32 @@ public class AppTransition implements Dump { return mGridLayoutRecentsEnabled || orientation == Configuration.ORIENTATION_PORTRAIT; } private void handleAppTransitionTimeout() { synchronized (mService.mWindowMap) { if (isTransitionSet() || !mService.mOpeningApps.isEmpty() || !mService.mClosingApps.isEmpty()) { if (DEBUG_APP_TRANSITIONS) { Slog.v(TAG_WM, "*** APP TRANSITION TIMEOUT." + " isTransitionSet()=" + mService.mAppTransition.isTransitionSet() + " mOpeningApps.size()=" + mService.mOpeningApps.size() + " mClosingApps.size()=" + mService.mClosingApps.size()); } setTimeout(); mService.mWindowPlacerLocked.performSurfacePlacement(); } } } private static void doAnimationCallback(@NonNull IRemoteCallback callback) { try { ((IRemoteCallback) callback).sendResult(null); } catch (RemoteException e) { } } void removeAppTransitionTimeoutCallbacks() { mHandler.removeCallbacks(mHandleAppTransitionTimeoutRunnable); } }
services/core/java/com/android/server/wm/WindowManagerService.java +0 −25 Original line number Diff line number Diff line Loading @@ -4477,7 +4477,6 @@ public class WindowManagerService extends IWindowManager.Stub public static final int REPORT_LOSING_FOCUS = 3; public static final int WINDOW_FREEZE_TIMEOUT = 11; public static final int APP_TRANSITION_TIMEOUT = 13; public static final int PERSIST_ANIMATION_SCALE = 14; public static final int FORCE_GC = 15; public static final int ENABLE_SCREEN = 16; Loading @@ -4489,7 +4488,6 @@ public class WindowManagerService extends IWindowManager.Stub public static final int BOOT_TIMEOUT = 23; public static final int WAITING_FOR_DRAWN_TIMEOUT = 24; public static final int SHOW_STRICT_MODE_VIOLATION = 25; public static final int DO_ANIMATION_CALLBACK = 26; public static final int CLIENT_FREEZE_TIMEOUT = 30; public static final int NOTIFY_ACTIVITY_DRAWN = 32; Loading Loading @@ -4607,21 +4605,6 @@ public class WindowManagerService extends IWindowManager.Stub break; } case APP_TRANSITION_TIMEOUT: { synchronized (mWindowMap) { if (mAppTransition.isTransitionSet() || !mOpeningApps.isEmpty() || !mClosingApps.isEmpty()) { if (DEBUG_APP_TRANSITIONS) Slog.v(TAG_WM, "*** APP TRANSITION TIMEOUT." + " isTransitionSet()=" + mAppTransition.isTransitionSet() + " mOpeningApps.size()=" + mOpeningApps.size() + " mClosingApps.size()=" + mClosingApps.size()); mAppTransition.setTimeout(); mWindowPlacerLocked.performSurfacePlacement(); } } break; } case PERSIST_ANIMATION_SCALE: { Settings.Global.putFloat(mContext.getContentResolver(), Settings.Global.WINDOW_ANIMATION_SCALE, mWindowAnimationScaleSetting); Loading Loading @@ -4774,14 +4757,6 @@ public class WindowManagerService extends IWindowManager.Stub break; } case DO_ANIMATION_CALLBACK: { try { ((IRemoteCallback)msg.obj).sendResult(null); } catch (RemoteException e) { } break; } case NOTIFY_ACTIVITY_DRAWN: try { mActivityTaskManager.notifyActivityDrawn((IBinder) msg.obj); Loading
services/core/java/com/android/server/wm/WindowSurfacePlacer.java +1 −2 Original line number Diff line number Diff line Loading @@ -69,7 +69,6 @@ import android.view.WindowManager.TransitionType; import android.view.animation.Animation; import com.android.internal.annotations.VisibleForTesting; import com.android.server.wm.WindowManagerService.H; import java.io.PrintWriter; import java.util.function.Predicate; Loading Loading @@ -252,7 +251,7 @@ class WindowSurfacePlacer { mService.mSkipAppTransitionAnimation = false; mService.mNoAnimationNotifyOnTransitionFinished.clear(); mService.mH.removeMessages(H.APP_TRANSITION_TIMEOUT); mService.mAppTransition.removeAppTransitionTimeoutCallbacks(); final DisplayContent displayContent = mService.getDefaultDisplayContentLocked(); Loading
services/tests/servicestests/src/com/android/server/wm/BoundsAnimationControllerTests.java +1 −1 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ public class BoundsAnimationControllerTests extends WindowTestsBase { private AppTransitionListener mListener; MockAppTransition(Context context) { super(context, null); super(context, sWm); } @Override Loading