Merge "Fixes quick switch animations for low end devices" into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0877b99aaf
@@ -24,6 +24,7 @@ import static android.view.View.MeasureSpec;
|
|||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.app.ActivityManager.TaskSnapshot;
|
import android.app.ActivityManager.TaskSnapshot;
|
||||||
import android.app.ActivityOptions;
|
import android.app.ActivityOptions;
|
||||||
|
import android.app.ActivityOptions.OnAnimationFinishedListener;
|
||||||
import android.app.ActivityOptions.OnAnimationStartedListener;
|
import android.app.ActivityOptions.OnAnimationStartedListener;
|
||||||
import android.content.ActivityNotFoundException;
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -663,7 +664,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
|
|||||||
|
|
||||||
mWaitingForTransitionStart = waitingForTransitionStart;
|
mWaitingForTransitionStart = waitingForTransitionStart;
|
||||||
if (!waitingForTransitionStart && mToggleFollowingTransitionStart) {
|
if (!waitingForTransitionStart && mToggleFollowingTransitionStart) {
|
||||||
toggleRecents(DividerView.INVALID_RECENTS_GROW_TARGET);
|
mHandler.post(() -> toggleRecents(DividerView.INVALID_RECENTS_GROW_TARGET));
|
||||||
}
|
}
|
||||||
mToggleFollowingTransitionStart = false;
|
mToggleFollowingTransitionStart = false;
|
||||||
}
|
}
|
||||||
@@ -866,6 +867,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
|
|||||||
private Pair<ActivityOptions, AppTransitionAnimationSpecsFuture>
|
private Pair<ActivityOptions, AppTransitionAnimationSpecsFuture>
|
||||||
getThumbnailTransitionActivityOptions(ActivityManager.RunningTaskInfo runningTask,
|
getThumbnailTransitionActivityOptions(ActivityManager.RunningTaskInfo runningTask,
|
||||||
Rect windowOverrideRect) {
|
Rect windowOverrideRect) {
|
||||||
|
final boolean isLowRamDevice = Recents.getConfiguration().isLowRamDevice;
|
||||||
if (runningTask != null && runningTask.stackId == FREEFORM_WORKSPACE_STACK_ID) {
|
if (runningTask != null && runningTask.stackId == FREEFORM_WORKSPACE_STACK_ID) {
|
||||||
ArrayList<AppTransitionAnimationSpec> specs = new ArrayList<>();
|
ArrayList<AppTransitionAnimationSpec> specs = new ArrayList<>();
|
||||||
ArrayList<Task> tasks;
|
ArrayList<Task> tasks;
|
||||||
@@ -896,8 +898,11 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
|
|||||||
AppTransitionAnimationSpec[] specsArray = new AppTransitionAnimationSpec[specs.size()];
|
AppTransitionAnimationSpec[] specsArray = new AppTransitionAnimationSpec[specs.size()];
|
||||||
specs.toArray(specsArray);
|
specs.toArray(specsArray);
|
||||||
|
|
||||||
|
// For low end ram devices, wait for transition flag is reset when Recents entrance
|
||||||
|
// animation is complete instead of when the transition animation starts
|
||||||
return new Pair<>(ActivityOptions.makeThumbnailAspectScaleDownAnimation(mDummyStackView,
|
return new Pair<>(ActivityOptions.makeThumbnailAspectScaleDownAnimation(mDummyStackView,
|
||||||
specsArray, mHandler, mResetToggleFlagListener, this), null);
|
specsArray, mHandler, isLowRamDevice ? null : mResetToggleFlagListener, this),
|
||||||
|
null);
|
||||||
} else {
|
} else {
|
||||||
// Update the destination rect
|
// Update the destination rect
|
||||||
Task toTask = new Task();
|
Task toTask = new Task();
|
||||||
@@ -916,9 +921,11 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener
|
|||||||
toTask.key.id, thumbnail, rect));
|
toTask.key.id, thumbnail, rect));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// For low end ram devices, wait for transition flag is reset when Recents entrance
|
||||||
|
// animation is complete instead of when the transition animation starts
|
||||||
return new Pair<>(ActivityOptions.makeMultiThumbFutureAspectScaleAnimation(mContext,
|
return new Pair<>(ActivityOptions.makeMultiThumbFutureAspectScaleAnimation(mContext,
|
||||||
mHandler, future.getFuture(), mResetToggleFlagListener, false /* scaleUp */),
|
mHandler, future.getFuture(), isLowRamDevice ? null : mResetToggleFlagListener,
|
||||||
future);
|
false /* scaleUp */), future);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -140,8 +140,10 @@ public class RecentsTransitionHelper {
|
|||||||
mHandler.postDelayed(mStartScreenPinningRunnable, 350);
|
mHandler.postDelayed(mStartScreenPinningRunnable, 350);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset the state where we are waiting for the transition to start
|
if (!Recents.getConfiguration().isLowRamDevice) {
|
||||||
EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
|
// Reset the state where we are waiting for the transition to start
|
||||||
|
EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
@@ -163,8 +165,10 @@ public class RecentsTransitionHelper {
|
|||||||
EventBus.getDefault().send(new ExitRecentsWindowFirstAnimationFrameEvent());
|
EventBus.getDefault().send(new ExitRecentsWindowFirstAnimationFrameEvent());
|
||||||
stackView.cancelAllTaskViewAnimations();
|
stackView.cancelAllTaskViewAnimations();
|
||||||
|
|
||||||
// Reset the state where we are waiting for the transition to start
|
if (!Recents.getConfiguration().isLowRamDevice) {
|
||||||
EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
|
// Reset the state where we are waiting for the transition to start
|
||||||
|
EventBus.getDefault().send(new SetWaitingForTransitionStartEvent(false));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ import com.android.systemui.recents.Recents;
|
|||||||
import com.android.systemui.recents.RecentsActivityLaunchState;
|
import com.android.systemui.recents.RecentsActivityLaunchState;
|
||||||
import com.android.systemui.recents.RecentsConfiguration;
|
import com.android.systemui.recents.RecentsConfiguration;
|
||||||
import com.android.systemui.recents.RecentsDebugFlags;
|
import com.android.systemui.recents.RecentsDebugFlags;
|
||||||
|
import com.android.systemui.recents.events.EventBus;
|
||||||
|
import com.android.systemui.recents.events.component.SetWaitingForTransitionStartEvent;
|
||||||
import com.android.systemui.recents.misc.ReferenceCountedTrigger;
|
import com.android.systemui.recents.misc.ReferenceCountedTrigger;
|
||||||
import com.android.systemui.recents.model.Task;
|
import com.android.systemui.recents.model.Task;
|
||||||
import com.android.systemui.recents.model.TaskStack;
|
import com.android.systemui.recents.model.TaskStack;
|
||||||
@@ -241,6 +243,7 @@ public class TaskStackAnimationHelper {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final boolean isLowRamDevice = Recents.getConfiguration().isLowRamDevice;
|
||||||
int taskViewEnterFromAppDuration = res.getInteger(
|
int taskViewEnterFromAppDuration = res.getInteger(
|
||||||
R.integer.recents_task_enter_from_app_duration);
|
R.integer.recents_task_enter_from_app_duration);
|
||||||
int taskViewEnterFromAffiliatedAppDuration = res.getInteger(
|
int taskViewEnterFromAffiliatedAppDuration = res.getInteger(
|
||||||
@@ -248,6 +251,13 @@ public class TaskStackAnimationHelper {
|
|||||||
int dockGestureAnimDuration = appRes.getInteger(
|
int dockGestureAnimDuration = appRes.getInteger(
|
||||||
R.integer.long_press_dock_anim_duration);
|
R.integer.long_press_dock_anim_duration);
|
||||||
|
|
||||||
|
// Since low ram devices have an animation when entering app -> recents, do not allow
|
||||||
|
// toggle until the animation is complete
|
||||||
|
if (launchState.launchedFromApp && !launchState.launchedViaDockGesture && isLowRamDevice) {
|
||||||
|
postAnimationTrigger.addLastDecrementRunnable(() -> EventBus.getDefault()
|
||||||
|
.send(new SetWaitingForTransitionStartEvent(false)));
|
||||||
|
}
|
||||||
|
|
||||||
// Create enter animations for each of the views from front to back
|
// Create enter animations for each of the views from front to back
|
||||||
List<TaskView> taskViews = mStackView.getTaskViews();
|
List<TaskView> taskViews = mStackView.getTaskViews();
|
||||||
int taskViewCount = taskViews.size();
|
int taskViewCount = taskViews.size();
|
||||||
@@ -296,7 +306,7 @@ public class TaskStackAnimationHelper {
|
|||||||
AnimationProps taskAnimation = new AnimationProps()
|
AnimationProps taskAnimation = new AnimationProps()
|
||||||
.setInterpolator(AnimationProps.ALPHA, ENTER_FROM_HOME_ALPHA_INTERPOLATOR)
|
.setInterpolator(AnimationProps.ALPHA, ENTER_FROM_HOME_ALPHA_INTERPOLATOR)
|
||||||
.setListener(postAnimationTrigger.decrementOnAnimationEnd());
|
.setListener(postAnimationTrigger.decrementOnAnimationEnd());
|
||||||
if (Recents.getConfiguration().isLowRamDevice) {
|
if (isLowRamDevice) {
|
||||||
taskAnimation.setInterpolator(AnimationProps.BOUNDS,
|
taskAnimation.setInterpolator(AnimationProps.BOUNDS,
|
||||||
Interpolators.FAST_OUT_SLOW_IN)
|
Interpolators.FAST_OUT_SLOW_IN)
|
||||||
.setDuration(AnimationProps.BOUNDS, 150)
|
.setDuration(AnimationProps.BOUNDS, 150)
|
||||||
|
|||||||
Reference in New Issue
Block a user