Merge "Fix the overview tutorial step success animation" into udc-dev

This commit is contained in:
Schneider Victor-tulias
2023-05-12 22:40:14 +00:00
committed by Android (Google) Code Review
4 changed files with 41 additions and 41 deletions
@@ -21,7 +21,6 @@ import static com.android.launcher3.config.FeatureFlags.ENABLE_NEW_GESTURE_NAV_T
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.annotation.Nullable;
import android.annotation.TargetApi;
import android.graphics.PointF;
import android.os.Build;
@@ -147,30 +146,11 @@ final class OverviewGestureTutorialController extends SwipeUpGestureTutorialCont
showFeedback(R.string.overview_gesture_feedback_swipe_too_far_from_edge);
break;
case OVERVIEW_GESTURE_COMPLETED:
setGestureCompleted();
mTutorialFragment.releaseFeedbackAnimation();
if (ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()) {
onMotionPaused(true /*arbitrary value*/);
animateTaskViewToOverview(() -> {
mFakeTaskView.setVisibility(View.INVISIBLE);
if(!mTutorialFragment.isLargeScreen()){
mFakePreviousTaskView.animateToFillScreen(() -> {
mFakeLauncherView.setBackgroundColor(
mContext.getColor(
R.color.gesture_overview_tutorial_swipe_rect
));
showSuccessFeedback();
});
} else {
mFakeLauncherView.setBackgroundColor(
mContext.getColor(
R.color.gesture_overview_tutorial_swipe_rect
));
showSuccessFeedback();
}
});
} else {
animateTaskViewToOverview(null);
onMotionPaused(true /*arbitrary value*/);
animateTaskViewToOverview(ENABLE_NEW_GESTURE_NAV_TUTORIAL.get());
onMotionPaused(true /*arbitrary value*/);
if (!ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()) {
showSuccessFeedback();
}
break;
@@ -191,21 +171,28 @@ final class OverviewGestureTutorialController extends SwipeUpGestureTutorialCont
/**
* runnable executed with slight delay to ease the swipe animation after landing on overview
* @param runnable
*/
public void animateTaskViewToOverview(@Nullable Runnable runnable) {
public void animateTaskViewToOverview(boolean animateDelayedSuccessFeedback) {
PendingAnimation anim = new PendingAnimation(TASK_VIEW_END_ANIMATION_DURATION_MILLIS);
anim.setFloat(mTaskViewSwipeUpAnimation
.getCurrentShift(), AnimatedFloat.VALUE, 1, ACCEL);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animator) {
if (runnable != null) {
new Handler().postDelayed(runnable, 300);
if (animateDelayedSuccessFeedback) {
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animator) {
new Handler().postDelayed(() -> {
mFakeTaskView.setVisibility(View.INVISIBLE);
if (!mTutorialFragment.isLargeScreen()) {
mFakePreviousTaskView.animateToFillScreen(
() -> onSuccessAnimationComplete());
} else {
onSuccessAnimationComplete();
}
}, TASK_VIEW_FILL_SCREEN_ANIMATION_DELAY_MILLIS);
}
}
});
});
}
ArrayList<Animator> animators = new ArrayList<>();
@@ -224,4 +211,9 @@ final class OverviewGestureTutorialController extends SwipeUpGestureTutorialCont
animset.start();
mRunningWindowAnim = SwipeUpAnimationLogic.RunningWindowAnim.wrap(animset);
}
private void onSuccessAnimationComplete() {
setLauncherViewColor(R.color.gesture_overview_tutorial_swipe_rect);
showSuccessFeedback();
}
}
@@ -73,7 +73,7 @@ public class OverviewGestureTutorialFragment extends TutorialFragment {
@Override
public void onAnimationStart(Animator animation) {
super.onAnimationStart(animation);
controller.animateTaskViewToOverview(null);
controller.animateTaskViewToOverview(false);
}
});
@@ -64,6 +64,7 @@ abstract class SwipeUpGestureTutorialController extends TutorialController {
private static final int FAKE_PREVIOUS_TASK_MARGIN = Utilities.dpToPx(24);
protected static final long TASK_VIEW_END_ANIMATION_DURATION_MILLIS = 300;
protected static final long TASK_VIEW_FILL_SCREEN_ANIMATION_DELAY_MILLIS = 300;
private static final long HOME_SWIPE_ANIMATION_DURATION_MILLIS = 625;
private static final long OVERVIEW_SWIPE_ANIMATION_DURATION_MILLIS = 1000;
@@ -316,6 +316,14 @@ abstract class TutorialController implements BackGestureAttemptCallback,
}
}
/**
* Only use this when a gesture is completed, but the feedback shouldn't be shown immediately.
* In that case, call this method immediately instead.
*/
public void setGestureCompleted() {
mGestureCompleted = true;
}
/**
* Show feedback reflecting a successful gesture attempt.
**/
@@ -641,13 +649,17 @@ abstract class TutorialController implements BackGestureAttemptCallback,
}
}
void setLauncherViewColor(@ColorRes int backgroundColorRes) {
mFakeLauncherView.setBackgroundColor(mContext.getColor(backgroundColorRes));
}
private void updateDrawables() {
if (mContext != null) {
mTutorialFragment.getRootView().setBackground(AppCompatResources.getDrawable(
mContext, getMockWallpaperResId()));
mTutorialFragment.updateFeedbackAnimation();
mFakeLauncherView.setBackgroundColor(
mContext.getColor(R.color.gesture_tutorial_fake_wallpaper_color));
setLauncherViewColor(ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()
? getSwipeActionColorResId() : R.color.gesture_tutorial_fake_wallpaper_color);
updateFakeViewLayout(mFakeHotseatView, getMockHotseatResId());
mHotseatIconView = mFakeHotseatView.findViewById(R.id.hotseat_icon_1);
updateFakeViewLayout(mFakeTaskView, getMockAppTaskLayoutResId());
@@ -657,11 +669,6 @@ abstract class TutorialController implements BackGestureAttemptCallback,
getMockPreviousAppTaskThumbnailColorResId()));
mFakeIconView.setBackground(AppCompatResources.getDrawable(
mContext, getMockAppIconResId()));
if (ENABLE_NEW_GESTURE_NAV_TUTORIAL.get()) {
mFakeLauncherView.setBackgroundColor(
mContext.getColor(getSwipeActionColorResId()));
}
}
}