Loading quickstep/src/com/android/launcher3/statehandlers/DepthController.java +1 −0 Original line number Diff line number Diff line Loading @@ -166,5 +166,6 @@ public class DepthController extends BaseDepthController implements StateHandler writer.println(prefix + "\tmInEarlyWakeUp=" + mInEarlyWakeUp); writer.println(prefix + "\tmIgnoreStateChangesDuringMultiWindowAnimation=" + mIgnoreStateChangesDuringMultiWindowAnimation); writer.println(prefix + "\tmPauseBlurs=" + mPauseBlurs); } } quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +22 −7 Original line number Diff line number Diff line Loading @@ -105,6 +105,7 @@ import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.taskbar.TaskbarUIController; import com.android.launcher3.tracing.InputConsumerProto; import com.android.launcher3.tracing.SwipeHandlerProto; import com.android.launcher3.uioverrides.QuickstepLauncher; import com.android.launcher3.util.ActivityLifecycleCallbacksAdapter; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.TraceHelper; Loading Loading @@ -2168,7 +2169,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, ActiveGestureLog.INSTANCE.addLog("Unexpected task appeared" + " id=" + taskInfo.taskId + " pkg=" + taskInfo.baseIntent.getComponent().getPackageName()); finishRecentsAnimationOnTasksAppeared(); finishRecentsAnimationOnTasksAppeared(null /* onFinishComplete */); } else if (handleTaskAppeared(appearedTaskTargets)) { Optional<RemoteAnimationTarget> taskTargetOptional = Arrays.stream(appearedTaskTargets) Loading @@ -2176,17 +2177,22 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, targetCompat.taskId == mGestureState.getLastStartedTaskId()) .findFirst(); if (!taskTargetOptional.isPresent()) { finishRecentsAnimationOnTasksAppeared(); finishRecentsAnimationOnTasksAppeared(null /* onFinishComplete */); return; } RemoteAnimationTarget taskTarget = taskTargetOptional.get(); TaskView taskView = mRecentsView.getTaskViewByTaskId(taskTarget.taskId); if (taskView == null || !taskView.getThumbnail().shouldShowSplashView()) { finishRecentsAnimationOnTasksAppeared(); finishRecentsAnimationOnTasksAppeared(null /* onFinishComplete */); return; } ViewGroup splashView = mActivity.getDragLayer(); final QuickstepLauncher quickstepLauncher = mActivity instanceof QuickstepLauncher ? (QuickstepLauncher) mActivity : null; if (quickstepLauncher != null) { quickstepLauncher.getDepthController().pauseBlursOnWindows(true); } // When revealing the app with launcher splash screen, make the app visible // and behind the splash view before the splash is animated away. Loading @@ -2194,7 +2200,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, new SurfaceTransactionApplier(splashView); SurfaceTransaction transaction = new SurfaceTransaction(); for (RemoteAnimationTarget target : appearedTaskTargets) { transaction.forSurface(target.leash).setAlpha(1).setLayer(-1); transaction.forSurface(target.leash).setAlpha(1).setLayer(-1).setShow(); } surfaceApplier.scheduleApply(transaction); Loading @@ -2206,16 +2212,25 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { finishRecentsAnimationOnTasksAppeared(); // Hiding launcher which shows the app surface behind, then // finishing recents to the app. After transition finish, showing // the views on launcher again, so it can be visible when next // animation starts. splashView.setAlpha(0); if (quickstepLauncher != null) { quickstepLauncher.getDepthController() .pauseBlursOnWindows(false); } finishRecentsAnimationOnTasksAppeared(() -> splashView.setAlpha(1)); } }); } } } private void finishRecentsAnimationOnTasksAppeared() { private void finishRecentsAnimationOnTasksAppeared(Runnable onFinishComplete) { if (mRecentsAnimationController != null) { mRecentsAnimationController.finish(false /* toRecents */, null /* onFinishComplete */); mRecentsAnimationController.finish(false /* toRecents */, onFinishComplete); } ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimationOnTasksAppeared"); } Loading quickstep/src/com/android/quickstep/TaskViewUtils.java +11 −1 Original line number Diff line number Diff line Loading @@ -243,7 +243,17 @@ public final class TaskViewUtils { TOUCH_RESPONSE_INTERPOLATOR); out.setFloat(tvsLocal.recentsViewScroll, AnimatedFloat.VALUE, 0, TOUCH_RESPONSE_INTERPOLATOR); out.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { super.onAnimationStart(animation); final SurfaceTransaction showTransaction = new SurfaceTransaction(); for (int i = targets.apps.length - 1; i >= 0; --i) { showTransaction.getTransaction().show(targets.apps[i].leash); } applier.scheduleApply(showTransaction); } }); out.addOnFrameCallback(() -> { for (RemoteTargetHandle handle : remoteTargetHandles) { handle.getTaskViewSimulator().apply(handle.getTransformParams()); Loading quickstep/src/com/android/quickstep/util/BaseDepthController.java +13 −2 Original line number Diff line number Diff line Loading @@ -74,6 +74,10 @@ public class BaseDepthController { // Hints that there is potentially content behind Launcher and that we shouldn't optimize by // marking the launcher surface as opaque. Only used in certain Launcher states. private boolean mHasContentBehindLauncher; /** Pause applying depth and blur, can be used when something behind the Launcher. */ protected boolean mPauseBlurs; /** * Last blur value, in pixels, that was applied. * For debugging purposes. Loading Loading @@ -104,6 +108,13 @@ public class BaseDepthController { mHasContentBehindLauncher = hasContentBehindLauncher; } public void pauseBlursOnWindows(boolean pause) { if (pause != mPauseBlurs) { mPauseBlurs = pause; applyDepthAndBlur(); } } protected void applyDepthAndBlur() { float depth = mDepth; IBinder windowToken = mLauncher.getRootView().getWindowToken(); Loading @@ -121,9 +132,9 @@ public class BaseDepthController { return; } boolean hasOpaqueBg = mLauncher.getScrimView().isFullyOpaque(); boolean isSurfaceOpaque = !mHasContentBehindLauncher && hasOpaqueBg; boolean isSurfaceOpaque = mPauseBlurs || (!mHasContentBehindLauncher && hasOpaqueBg); mCurrentBlur = !mCrossWindowBlursEnabled || hasOpaqueBg mCurrentBlur = !mCrossWindowBlursEnabled || hasOpaqueBg || mPauseBlurs ? 0 : (int) (depth * mMaxBlurRadius); SurfaceControl.Transaction transaction = new SurfaceControl.Transaction() .setBackgroundBlurRadius(mSurface, mCurrentBlur) Loading quickstep/src/com/android/quickstep/util/SurfaceTransaction.java +9 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,15 @@ public class SurfaceTransaction { mTransaction.setShadowRadius(mSurface, radius); return this; } /** * Requests to show the given surface. * @return this Builder */ public SurfaceProperties setShow() { mTransaction.show(mSurface); return this; } } /** Loading Loading
quickstep/src/com/android/launcher3/statehandlers/DepthController.java +1 −0 Original line number Diff line number Diff line Loading @@ -166,5 +166,6 @@ public class DepthController extends BaseDepthController implements StateHandler writer.println(prefix + "\tmInEarlyWakeUp=" + mInEarlyWakeUp); writer.println(prefix + "\tmIgnoreStateChangesDuringMultiWindowAnimation=" + mIgnoreStateChangesDuringMultiWindowAnimation); writer.println(prefix + "\tmPauseBlurs=" + mPauseBlurs); } }
quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +22 −7 Original line number Diff line number Diff line Loading @@ -105,6 +105,7 @@ import com.android.launcher3.statemanager.StatefulActivity; import com.android.launcher3.taskbar.TaskbarUIController; import com.android.launcher3.tracing.InputConsumerProto; import com.android.launcher3.tracing.SwipeHandlerProto; import com.android.launcher3.uioverrides.QuickstepLauncher; import com.android.launcher3.util.ActivityLifecycleCallbacksAdapter; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.TraceHelper; Loading Loading @@ -2168,7 +2169,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, ActiveGestureLog.INSTANCE.addLog("Unexpected task appeared" + " id=" + taskInfo.taskId + " pkg=" + taskInfo.baseIntent.getComponent().getPackageName()); finishRecentsAnimationOnTasksAppeared(); finishRecentsAnimationOnTasksAppeared(null /* onFinishComplete */); } else if (handleTaskAppeared(appearedTaskTargets)) { Optional<RemoteAnimationTarget> taskTargetOptional = Arrays.stream(appearedTaskTargets) Loading @@ -2176,17 +2177,22 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, targetCompat.taskId == mGestureState.getLastStartedTaskId()) .findFirst(); if (!taskTargetOptional.isPresent()) { finishRecentsAnimationOnTasksAppeared(); finishRecentsAnimationOnTasksAppeared(null /* onFinishComplete */); return; } RemoteAnimationTarget taskTarget = taskTargetOptional.get(); TaskView taskView = mRecentsView.getTaskViewByTaskId(taskTarget.taskId); if (taskView == null || !taskView.getThumbnail().shouldShowSplashView()) { finishRecentsAnimationOnTasksAppeared(); finishRecentsAnimationOnTasksAppeared(null /* onFinishComplete */); return; } ViewGroup splashView = mActivity.getDragLayer(); final QuickstepLauncher quickstepLauncher = mActivity instanceof QuickstepLauncher ? (QuickstepLauncher) mActivity : null; if (quickstepLauncher != null) { quickstepLauncher.getDepthController().pauseBlursOnWindows(true); } // When revealing the app with launcher splash screen, make the app visible // and behind the splash view before the splash is animated away. Loading @@ -2194,7 +2200,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, new SurfaceTransactionApplier(splashView); SurfaceTransaction transaction = new SurfaceTransaction(); for (RemoteAnimationTarget target : appearedTaskTargets) { transaction.forSurface(target.leash).setAlpha(1).setLayer(-1); transaction.forSurface(target.leash).setAlpha(1).setLayer(-1).setShow(); } surfaceApplier.scheduleApply(transaction); Loading @@ -2206,16 +2212,25 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>, new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { finishRecentsAnimationOnTasksAppeared(); // Hiding launcher which shows the app surface behind, then // finishing recents to the app. After transition finish, showing // the views on launcher again, so it can be visible when next // animation starts. splashView.setAlpha(0); if (quickstepLauncher != null) { quickstepLauncher.getDepthController() .pauseBlursOnWindows(false); } finishRecentsAnimationOnTasksAppeared(() -> splashView.setAlpha(1)); } }); } } } private void finishRecentsAnimationOnTasksAppeared() { private void finishRecentsAnimationOnTasksAppeared(Runnable onFinishComplete) { if (mRecentsAnimationController != null) { mRecentsAnimationController.finish(false /* toRecents */, null /* onFinishComplete */); mRecentsAnimationController.finish(false /* toRecents */, onFinishComplete); } ActiveGestureLog.INSTANCE.addLog("finishRecentsAnimationOnTasksAppeared"); } Loading
quickstep/src/com/android/quickstep/TaskViewUtils.java +11 −1 Original line number Diff line number Diff line Loading @@ -243,7 +243,17 @@ public final class TaskViewUtils { TOUCH_RESPONSE_INTERPOLATOR); out.setFloat(tvsLocal.recentsViewScroll, AnimatedFloat.VALUE, 0, TOUCH_RESPONSE_INTERPOLATOR); out.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { super.onAnimationStart(animation); final SurfaceTransaction showTransaction = new SurfaceTransaction(); for (int i = targets.apps.length - 1; i >= 0; --i) { showTransaction.getTransaction().show(targets.apps[i].leash); } applier.scheduleApply(showTransaction); } }); out.addOnFrameCallback(() -> { for (RemoteTargetHandle handle : remoteTargetHandles) { handle.getTaskViewSimulator().apply(handle.getTransformParams()); Loading
quickstep/src/com/android/quickstep/util/BaseDepthController.java +13 −2 Original line number Diff line number Diff line Loading @@ -74,6 +74,10 @@ public class BaseDepthController { // Hints that there is potentially content behind Launcher and that we shouldn't optimize by // marking the launcher surface as opaque. Only used in certain Launcher states. private boolean mHasContentBehindLauncher; /** Pause applying depth and blur, can be used when something behind the Launcher. */ protected boolean mPauseBlurs; /** * Last blur value, in pixels, that was applied. * For debugging purposes. Loading Loading @@ -104,6 +108,13 @@ public class BaseDepthController { mHasContentBehindLauncher = hasContentBehindLauncher; } public void pauseBlursOnWindows(boolean pause) { if (pause != mPauseBlurs) { mPauseBlurs = pause; applyDepthAndBlur(); } } protected void applyDepthAndBlur() { float depth = mDepth; IBinder windowToken = mLauncher.getRootView().getWindowToken(); Loading @@ -121,9 +132,9 @@ public class BaseDepthController { return; } boolean hasOpaqueBg = mLauncher.getScrimView().isFullyOpaque(); boolean isSurfaceOpaque = !mHasContentBehindLauncher && hasOpaqueBg; boolean isSurfaceOpaque = mPauseBlurs || (!mHasContentBehindLauncher && hasOpaqueBg); mCurrentBlur = !mCrossWindowBlursEnabled || hasOpaqueBg mCurrentBlur = !mCrossWindowBlursEnabled || hasOpaqueBg || mPauseBlurs ? 0 : (int) (depth * mMaxBlurRadius); SurfaceControl.Transaction transaction = new SurfaceControl.Transaction() .setBackgroundBlurRadius(mSurface, mCurrentBlur) Loading
quickstep/src/com/android/quickstep/util/SurfaceTransaction.java +9 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,15 @@ public class SurfaceTransaction { mTransaction.setShadowRadius(mSurface, radius); return this; } /** * Requests to show the given surface. * @return this Builder */ public SurfaceProperties setShow() { mTransaction.show(mSurface); return this; } } /** Loading