Add fallback for missing remote animation callbacks
- In some cases WM won't callback the remote animation callbacks (neither start nor cancel) and Launcher never finishes executing the pending command (preventing the subsequent commands from running). For the time being, just cancel the current state to allow the commands to be processed. Bug: 194011186 Test: Mash on overview and home buttons with a 3p launcher Signed-off-by: Winson Chung <winsonc@google.com> Change-Id: I1b1296fab316b979f441ebb474d1475e3fa68f95 Merged-In: I1b1296fab316b979f441ebb474d1475e3fa68f95 (cherry picked from commit bb530e9058e085bb1668a42ed9dc81f079af6304) Merged-In:I1b1296fab316b979f441ebb474d1475e3fa68f95
This commit is contained in:
parent
48264072f8
commit
354b6d6f96
|
@ -38,6 +38,7 @@ import com.android.quickstep.views.TaskView;
|
|||
import com.android.systemui.shared.recents.model.ThumbnailData;
|
||||
import com.android.systemui.shared.system.InteractionJankMonitorWrapper;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
|
@ -271,6 +272,14 @@ public class OverviewCommandHelper {
|
|||
scheduleNextTask(cmd);
|
||||
}
|
||||
|
||||
public void dump(PrintWriter pw) {
|
||||
pw.println("OverviewCommandHelper:");
|
||||
pw.println(" mPendingCommands=" + mPendingCommands.size());
|
||||
if (!mPendingCommands.isEmpty()) {
|
||||
pw.println(" pendingCommandType=" + mPendingCommands.get(0).type);
|
||||
}
|
||||
}
|
||||
|
||||
private static class CommandInfo {
|
||||
public final long createTime = SystemClock.elapsedRealtime();
|
||||
public final int type;
|
||||
|
|
|
@ -99,6 +99,7 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
|
|||
private Handler mUiHandler = new Handler(Looper.getMainLooper());
|
||||
|
||||
private static final long HOME_APPEAR_DURATION = 250;
|
||||
private static final long RECENTS_ANIMATION_TIMEOUT = 1000;
|
||||
|
||||
private RecentsDragLayer mDragLayer;
|
||||
private ScrimView mScrimView;
|
||||
|
@ -115,6 +116,11 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
|
|||
// Strong refs to runners which are cleared when the activity is destroyed
|
||||
private RemoteAnimationFactory mActivityLaunchAnimationRunner;
|
||||
|
||||
// For handling degenerate cases where starting an activity doesn't actually trigger the remote
|
||||
// animation callback
|
||||
private final Handler mHandler = new Handler();
|
||||
private final Runnable mAnimationStartTimeoutRunnable = this::onAnimationStartTimeout;
|
||||
|
||||
/**
|
||||
* Init drag layer and overview panel views.
|
||||
*/
|
||||
|
@ -219,6 +225,16 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
|
|||
// TODO(b/137318995) This should go home, but doing so removes freeform windows
|
||||
}
|
||||
|
||||
/**
|
||||
* Called if the remote animation callback from #getActivityLaunchOptions() hasn't called back
|
||||
* in a reasonable time due to a conflict with the recents animation.
|
||||
*/
|
||||
private void onAnimationStartTimeout() {
|
||||
if (mActivityLaunchAnimationRunner != null) {
|
||||
mActivityLaunchAnimationRunner.onAnimationCancelled();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ActivityOptionsWrapper getActivityLaunchOptions(final View v, @Nullable ItemInfo item) {
|
||||
if (!(v instanceof TaskView)) {
|
||||
|
@ -233,6 +249,7 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
|
|||
public void onCreateAnimation(int transit, RemoteAnimationTargetCompat[] appTargets,
|
||||
RemoteAnimationTargetCompat[] wallpaperTargets,
|
||||
RemoteAnimationTargetCompat[] nonAppTargets, AnimationResult result) {
|
||||
mHandler.removeCallbacks(mAnimationStartTimeoutRunnable);
|
||||
AnimatorSet anim = composeRecentsLaunchAnimator(taskView, appTargets,
|
||||
wallpaperTargets, nonAppTargets);
|
||||
anim.addListener(resetStateListener());
|
||||
|
@ -242,6 +259,7 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
|
|||
|
||||
@Override
|
||||
public void onAnimationCancelled() {
|
||||
mHandler.removeCallbacks(mAnimationStartTimeoutRunnable);
|
||||
onEndCallback.executeAllAndDestroy();
|
||||
}
|
||||
};
|
||||
|
@ -256,6 +274,7 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
|
|||
ActivityOptionsCompat.makeRemoteAnimation(adapterCompat),
|
||||
onEndCallback);
|
||||
activityOptions.options.setSplashscreenStyle(SplashScreen.SPLASH_SCREEN_STYLE_ICON);
|
||||
mHandler.postDelayed(mAnimationStartTimeoutRunnable, RECENTS_ANIMATION_TIMEOUT);
|
||||
return activityOptions;
|
||||
}
|
||||
|
||||
|
|
|
@ -967,6 +967,9 @@ public class TouchInteractionService extends Service
|
|||
if (mOverviewComponentObserver != null) {
|
||||
mOverviewComponentObserver.dump(pw);
|
||||
}
|
||||
if (mOverviewCommandHelper != null) {
|
||||
mOverviewCommandHelper.dump(pw);
|
||||
}
|
||||
if (mGestureState != null) {
|
||||
mGestureState.dump(pw);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue