Cancel launcher app transition when changing states

The app transition might change an object that the new
state depends on, causing an inconsistent state.

Bug: 72816542
Change-Id: Ia6dd52971b52be5589c88f4f6d93d06146fbadab
This commit is contained in:
Tony
2018-02-02 21:45:39 -06:00
parent 9c70e7e220
commit dc76f8e856
4 changed files with 23 additions and 5 deletions
@@ -33,7 +33,6 @@ import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.media.midi.MidiManager.OnDeviceOpenedListener;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
@@ -118,6 +117,14 @@ public class LauncherAppTransitionManagerImpl extends LauncherAppTransitionManag
mCurrentAnimator = animator;
}
@Override
public void finishAnimation() {
if (mCurrentAnimator != null && mCurrentAnimator.isRunning()) {
mCurrentAnimator.end();
}
mCurrentAnimator = null;
}
/**
* @return A Bundle with remote animations that controls how the window of the opening
* targets are displayed.
+4 -4
View File
@@ -20,7 +20,6 @@ import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION;
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_SIZE;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_BY_PUBLISHER;
import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_LOCKED_USER;
import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_QUIET_USER;
@@ -40,7 +39,6 @@ import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.ActivityOptions;
import android.app.AlertDialog;
import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetManager;
@@ -55,14 +53,12 @@ import android.content.IntentFilter;
import android.content.IntentSender;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Point;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
@@ -446,6 +442,10 @@ public class Launcher extends BaseActivity
return mStateManager;
}
public LauncherAppTransitionManager getAppTransitionManager() {
return mAppTransitionManager;
}
protected void overrideTheme(boolean isDark, boolean supportsDarkText) {
if (isDark) {
setTheme(R.style.LauncherThemeDark);
@@ -64,4 +64,8 @@ public class LauncherAppTransitionManager {
public Bundle getActivityLaunchOptions(Launcher launcher, View v) {
return getDefaultActivityLaunchOptions(launcher, v);
}
/** Cancels the current transition animation */
public void finishAnimation() {
}
}
@@ -269,6 +269,13 @@ public class LauncherStateManager {
// Only disable clipping if needed, otherwise leave it as previous value.
mLauncher.getWorkspace().setClipChildren(false);
}
// If we are still animating to launcher from an app,
// finish it and let this state animation take over.
LauncherAppTransitionManager transitionManager = mLauncher.getAppTransitionManager();
if (transitionManager != null) {
transitionManager.finishAnimation();
}
}
private void onStateTransitionEnd(LauncherState state) {