Loading libs/WindowManager/Shell/src/com/android/wm/shell/appzoomout/AppZoomOut.java +5 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.wm.shell.appzoomout; import android.os.Handler; import com.android.wm.shell.shared.annotations.ExternalThread; /** Loading Loading @@ -45,7 +47,9 @@ public interface AppZoomOut { * </ul> * * @param progress The progress to set the squeeze zoom effect to. * @param vsyncId The vsync id to align the frame to. * @param sysuiMainHandler The main handler from SystemUI (required for CUJ tracking) */ void setTopLevelProgress(float progress); void setTopLevelProgress(float progress, long vsyncId, Handler sysuiMainHandler); } libs/WindowManager/Shell/src/com/android/wm/shell/appzoomout/AppZoomOutController.java +9 −6 Original line number Diff line number Diff line Loading @@ -84,12 +84,12 @@ public class AppZoomOutController implements RemoteCallable<AppZoomOutController public static AppZoomOutController create(Context context, ShellInit shellInit, ShellTaskOrganizer shellTaskOrganizer, DisplayController displayController, DisplayLayout displayLayout, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler, InteractionJankMonitor interactionJankMonitor) { InteractionJankMonitor interactionJankMonitor) { AppZoomOutDisplayAreaOrganizer appDisplayAreaOrganizer = new AppZoomOutDisplayAreaOrganizer( context, displayLayout, mainExecutor); TopLevelZoomOutDisplayAreaOrganizer topLevelDisplayAreaOrganizer = new TopLevelZoomOutDisplayAreaOrganizer(displayLayout, context, mainExecutor, mainHandler, interactionJankMonitor); interactionJankMonitor); return new AppZoomOutController(context, shellInit, shellTaskOrganizer, displayController, appDisplayAreaOrganizer, topLevelDisplayAreaOrganizer, mainExecutor); } Loading Loading @@ -142,10 +142,12 @@ public class AppZoomOutController implements RemoteCallable<AppZoomOutController * {@link DisplayAreaOrganizer#FEATURE_WINDOWED_MAGNIFICATION} and applies a cropping. * * @param progress progress to be applied to the top-level zoom effect. * @param vsyncId The vsync id to align the frame to. * @param sysuiMainHandler The main handler from SystemUI (required for CUJ tracking) */ private void setTopLevelProgress(float progress) { private void setTopLevelProgress(float progress, long vsyncId, Handler sysuiMainHandler) { if (enableLppAssistInvocationEffect()) { mTopLevelDisplayAreaOrganizer.setProgress(progress); mTopLevelDisplayAreaOrganizer.setProgress(progress, vsyncId, sysuiMainHandler); } } Loading Loading @@ -201,8 +203,9 @@ public class AppZoomOutController implements RemoteCallable<AppZoomOutController } @Override public void setTopLevelProgress(float progress) { mMainExecutor.execute(() -> AppZoomOutController.this.setTopLevelProgress(progress)); public void setTopLevelProgress(float progress, long vsyncId, Handler sysuiMainHandler) { mMainExecutor.execute(() -> AppZoomOutController.this.setTopLevelProgress(progress, vsyncId, sysuiMainHandler)); } } } libs/WindowManager/Shell/src/com/android/wm/shell/appzoomout/TopLevelZoomOutDisplayAreaOrganizer.kt +11 −12 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.wm.shell.appzoomout import android.content.Context import android.os.Handler import android.util.ArrayMap import android.view.Choreographer import android.view.Display import android.view.SurfaceControl import android.window.DisplayAreaInfo Loading @@ -42,7 +41,6 @@ class TopLevelZoomOutDisplayAreaOrganizer( displayLayout: DisplayLayout, private val context: Context, mainExecutor: Executor, private val mainHandler: Handler, private val interactionJankMonitor: InteractionJankMonitor, ) : DisplayAreaOrganizer(mainExecutor) { Loading Loading @@ -86,32 +84,33 @@ class TopLevelZoomOutDisplayAreaOrganizer( reset() } fun setProgress(progress: Float) { fun setProgress(progress: Float, vsyncId: Long, sysuiMainHandler: Handler?) { if (mProgress == progress) { return } updateCuj(lastProgress = mProgress, progress = progress) updateCuj(lastProgress = mProgress, progress = progress, sysuiMainHandler = sysuiMainHandler) mProgress = progress apply() apply(vsyncId) } private fun apply() { private fun apply(vsyncId: Long) { val tx = SurfaceControl.Transaction() mDisplayAreaTokenMap.values.forEach { leash: SurfaceControl -> updateSurface(tx, leash, mProgress) updateSurface(tx, leash, mProgress, vsyncId) } tx.apply() } private fun reset() { setProgress(0f) setProgress(0f, 0, null) } private fun updateSurface( tx: SurfaceControl.Transaction, leash: SurfaceControl, progress: Float progress: Float, vsyncId: Long, ) { if (progress == 0f) { // Reset when scale is set back to 0. Loading Loading @@ -168,10 +167,10 @@ class TopLevelZoomOutDisplayAreaOrganizer( .setCornerRadius(leash, cornerRadius * zoomOutScale) .setScale(leash, zoomOutScale, zoomOutScale) .setPosition(leash, positionXOffset, positionYOffset) .setFrameTimelineVsync(Choreographer.getInstance().vsyncId) .setFrameTimelineVsync(vsyncId) } private fun updateCuj(lastProgress: Float, progress: Float) { private fun updateCuj(lastProgress: Float, progress: Float, sysuiMainHandler: Handler?) { // TODO(b/418136893): Send clearer start/cancel/end signals from SysUI instead if (progress == 1f) { // If the animation reaches a progress of 1f, it means that assistant is being launched Loading @@ -186,7 +185,7 @@ class TopLevelZoomOutDisplayAreaOrganizer( interactionJankMonitor.begin( it, context, mainHandler, sysuiMainHandler, CUJ_LPP_ASSIST_INVOCATION_EFFECT ) } Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +1 −3 Original line number Diff line number Diff line Loading @@ -1772,11 +1772,9 @@ public abstract class WMShellModule { DisplayController displayController, DisplayLayout displayLayout, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler, InteractionJankMonitor interactionJankMonitor) { return AppZoomOutController.create(context, shellInit, shellTaskOrganizer, displayController, displayLayout, mainExecutor, mainHandler, interactionJankMonitor); displayController, displayLayout, mainExecutor, interactionJankMonitor); } // Loading packages/SystemUI/multivalentTests/src/com/android/systemui/topwindoweffects/TopLevelWindowEffectsTest.kt +2 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.systemui.topwindoweffects import android.os.VibrationEffect import android.os.fakeHandler import android.testing.TestableLooper.RunWithLooper import androidx.core.animation.AnimatorTestRule import androidx.test.ext.junit.runners.AndroidJUnit4 Loading Loading @@ -97,6 +98,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { notificationShadeWindowController = notificationShadeWindowController, topUiController = mockTopUiController, mainExecutor = fakeExecutor, mainHandler = kosmos.fakeHandler, ) } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/appzoomout/AppZoomOut.java +5 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.wm.shell.appzoomout; import android.os.Handler; import com.android.wm.shell.shared.annotations.ExternalThread; /** Loading Loading @@ -45,7 +47,9 @@ public interface AppZoomOut { * </ul> * * @param progress The progress to set the squeeze zoom effect to. * @param vsyncId The vsync id to align the frame to. * @param sysuiMainHandler The main handler from SystemUI (required for CUJ tracking) */ void setTopLevelProgress(float progress); void setTopLevelProgress(float progress, long vsyncId, Handler sysuiMainHandler); }
libs/WindowManager/Shell/src/com/android/wm/shell/appzoomout/AppZoomOutController.java +9 −6 Original line number Diff line number Diff line Loading @@ -84,12 +84,12 @@ public class AppZoomOutController implements RemoteCallable<AppZoomOutController public static AppZoomOutController create(Context context, ShellInit shellInit, ShellTaskOrganizer shellTaskOrganizer, DisplayController displayController, DisplayLayout displayLayout, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler, InteractionJankMonitor interactionJankMonitor) { InteractionJankMonitor interactionJankMonitor) { AppZoomOutDisplayAreaOrganizer appDisplayAreaOrganizer = new AppZoomOutDisplayAreaOrganizer( context, displayLayout, mainExecutor); TopLevelZoomOutDisplayAreaOrganizer topLevelDisplayAreaOrganizer = new TopLevelZoomOutDisplayAreaOrganizer(displayLayout, context, mainExecutor, mainHandler, interactionJankMonitor); interactionJankMonitor); return new AppZoomOutController(context, shellInit, shellTaskOrganizer, displayController, appDisplayAreaOrganizer, topLevelDisplayAreaOrganizer, mainExecutor); } Loading Loading @@ -142,10 +142,12 @@ public class AppZoomOutController implements RemoteCallable<AppZoomOutController * {@link DisplayAreaOrganizer#FEATURE_WINDOWED_MAGNIFICATION} and applies a cropping. * * @param progress progress to be applied to the top-level zoom effect. * @param vsyncId The vsync id to align the frame to. * @param sysuiMainHandler The main handler from SystemUI (required for CUJ tracking) */ private void setTopLevelProgress(float progress) { private void setTopLevelProgress(float progress, long vsyncId, Handler sysuiMainHandler) { if (enableLppAssistInvocationEffect()) { mTopLevelDisplayAreaOrganizer.setProgress(progress); mTopLevelDisplayAreaOrganizer.setProgress(progress, vsyncId, sysuiMainHandler); } } Loading Loading @@ -201,8 +203,9 @@ public class AppZoomOutController implements RemoteCallable<AppZoomOutController } @Override public void setTopLevelProgress(float progress) { mMainExecutor.execute(() -> AppZoomOutController.this.setTopLevelProgress(progress)); public void setTopLevelProgress(float progress, long vsyncId, Handler sysuiMainHandler) { mMainExecutor.execute(() -> AppZoomOutController.this.setTopLevelProgress(progress, vsyncId, sysuiMainHandler)); } } }
libs/WindowManager/Shell/src/com/android/wm/shell/appzoomout/TopLevelZoomOutDisplayAreaOrganizer.kt +11 −12 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.wm.shell.appzoomout import android.content.Context import android.os.Handler import android.util.ArrayMap import android.view.Choreographer import android.view.Display import android.view.SurfaceControl import android.window.DisplayAreaInfo Loading @@ -42,7 +41,6 @@ class TopLevelZoomOutDisplayAreaOrganizer( displayLayout: DisplayLayout, private val context: Context, mainExecutor: Executor, private val mainHandler: Handler, private val interactionJankMonitor: InteractionJankMonitor, ) : DisplayAreaOrganizer(mainExecutor) { Loading Loading @@ -86,32 +84,33 @@ class TopLevelZoomOutDisplayAreaOrganizer( reset() } fun setProgress(progress: Float) { fun setProgress(progress: Float, vsyncId: Long, sysuiMainHandler: Handler?) { if (mProgress == progress) { return } updateCuj(lastProgress = mProgress, progress = progress) updateCuj(lastProgress = mProgress, progress = progress, sysuiMainHandler = sysuiMainHandler) mProgress = progress apply() apply(vsyncId) } private fun apply() { private fun apply(vsyncId: Long) { val tx = SurfaceControl.Transaction() mDisplayAreaTokenMap.values.forEach { leash: SurfaceControl -> updateSurface(tx, leash, mProgress) updateSurface(tx, leash, mProgress, vsyncId) } tx.apply() } private fun reset() { setProgress(0f) setProgress(0f, 0, null) } private fun updateSurface( tx: SurfaceControl.Transaction, leash: SurfaceControl, progress: Float progress: Float, vsyncId: Long, ) { if (progress == 0f) { // Reset when scale is set back to 0. Loading Loading @@ -168,10 +167,10 @@ class TopLevelZoomOutDisplayAreaOrganizer( .setCornerRadius(leash, cornerRadius * zoomOutScale) .setScale(leash, zoomOutScale, zoomOutScale) .setPosition(leash, positionXOffset, positionYOffset) .setFrameTimelineVsync(Choreographer.getInstance().vsyncId) .setFrameTimelineVsync(vsyncId) } private fun updateCuj(lastProgress: Float, progress: Float) { private fun updateCuj(lastProgress: Float, progress: Float, sysuiMainHandler: Handler?) { // TODO(b/418136893): Send clearer start/cancel/end signals from SysUI instead if (progress == 1f) { // If the animation reaches a progress of 1f, it means that assistant is being launched Loading @@ -186,7 +185,7 @@ class TopLevelZoomOutDisplayAreaOrganizer( interactionJankMonitor.begin( it, context, mainHandler, sysuiMainHandler, CUJ_LPP_ASSIST_INVOCATION_EFFECT ) } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +1 −3 Original line number Diff line number Diff line Loading @@ -1772,11 +1772,9 @@ public abstract class WMShellModule { DisplayController displayController, DisplayLayout displayLayout, @ShellMainThread ShellExecutor mainExecutor, @ShellMainThread Handler mainHandler, InteractionJankMonitor interactionJankMonitor) { return AppZoomOutController.create(context, shellInit, shellTaskOrganizer, displayController, displayLayout, mainExecutor, mainHandler, interactionJankMonitor); displayController, displayLayout, mainExecutor, interactionJankMonitor); } // Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/topwindoweffects/TopLevelWindowEffectsTest.kt +2 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.systemui.topwindoweffects import android.os.VibrationEffect import android.os.fakeHandler import android.testing.TestableLooper.RunWithLooper import androidx.core.animation.AnimatorTestRule import androidx.test.ext.junit.runners.AndroidJUnit4 Loading Loading @@ -97,6 +98,7 @@ class TopLevelWindowEffectsTest : SysuiTestCase() { notificationShadeWindowController = notificationShadeWindowController, topUiController = mockTopUiController, mainExecutor = fakeExecutor, mainHandler = kosmos.fakeHandler, ) } Loading