Merge "Polish reveal animation after onTasksAppeared." into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8b71205fa9
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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)
|
||||
@@ -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.
|
||||
@@ -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);
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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.
|
||||
@@ -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();
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1192,6 +1192,17 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
.setMatrix(matrix);
|
||||
surfaceApplier.scheduleApply(transaction);
|
||||
});
|
||||
appAnimator.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
public void onAnimationStart(Animator animation) {
|
||||
super.onAnimationStart(animation);
|
||||
final SurfaceTransaction showTransaction = new SurfaceTransaction();
|
||||
for (int i = apps.length - 1; i >= 0; --i) {
|
||||
showTransaction.getTransaction().show(apps[i].leash);
|
||||
}
|
||||
surfaceApplier.scheduleApply(showTransaction);
|
||||
}
|
||||
});
|
||||
anim.play(appAnimator);
|
||||
anim.addListener(new AnimatorListenerAdapter() {
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user