Refactor LauncherAppTransitionManager & polish for new app transitions.
* Add start delay when launcher resumes from all apps or landscape.
* Track the last app transition animator and cancel it before beginning a new one,
otherwise the animators can conflict with each other.
ie. Opening an app from all apps and then immediately pressing back to return to
all apps.
* Use class overrride instead of UiFactory.
Bug: 70220260
Change-Id: I4755d45d820f9d551e443d6c4a148e8789c5bc57
This commit is contained in:
@@ -214,6 +214,8 @@ public class Launcher extends BaseActivity
|
||||
private static final int NEW_APPS_ANIMATION_INACTIVE_TIMEOUT_SECONDS = 5;
|
||||
@Thunk static final int NEW_APPS_ANIMATION_DELAY = 500;
|
||||
|
||||
private LauncherAppTransitionManager mAppTransitionManager;
|
||||
|
||||
@Thunk Workspace mWorkspace;
|
||||
private View mLauncherView;
|
||||
@Thunk DragLayer mDragLayer;
|
||||
@@ -403,8 +405,11 @@ public class Launcher extends BaseActivity
|
||||
getSystemUiController().updateUiState(SystemUiController.UI_STATE_BASE_WINDOW,
|
||||
Themes.getAttrBoolean(this, R.attr.isWorkspaceDarkText));
|
||||
|
||||
mAppTransitionManager = Utilities.getOverrideObject(LauncherAppTransitionManager.class,
|
||||
this, R.string.app_transition_manager_class);
|
||||
|
||||
if (!isInMultiWindowModeCompat()) {
|
||||
UiFactory.registerRemoteAnimations(this);
|
||||
mAppTransitionManager.registerRemoteAnimations();
|
||||
}
|
||||
|
||||
if (mLauncherCallbacks != null) {
|
||||
@@ -1918,38 +1923,11 @@ public class Launcher extends BaseActivity
|
||||
}
|
||||
}
|
||||
|
||||
public Bundle getDefaultActivityLaunchOptions(View v) {
|
||||
if (Utilities.ATLEAST_MARSHMALLOW) {
|
||||
int left = 0, top = 0;
|
||||
int width = v.getMeasuredWidth(), height = v.getMeasuredHeight();
|
||||
if (v instanceof BubbleTextView) {
|
||||
// Launch from center of icon, not entire view
|
||||
Drawable icon = ((BubbleTextView) v).getIcon();
|
||||
if (icon != null) {
|
||||
Rect bounds = icon.getBounds();
|
||||
left = (width - bounds.width()) / 2;
|
||||
top = v.getPaddingTop();
|
||||
width = bounds.width();
|
||||
height = bounds.height();
|
||||
}
|
||||
}
|
||||
return ActivityOptions.makeClipRevealAnimation(v, left, top, width, height)
|
||||
.toBundle();
|
||||
} else if (Utilities.ATLEAST_LOLLIPOP_MR1) {
|
||||
// On L devices, we use the device default slide-up transition.
|
||||
// On L MR1 devices, we use a custom version of the slide-up transition which
|
||||
// doesn't have the delay present in the device default.
|
||||
return ActivityOptions.makeCustomAnimation(
|
||||
this, R.anim.task_open_enter, R.anim.no_anim).toBundle();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.M)
|
||||
public Bundle getActivityLaunchOptions(View v, boolean useDefaultLaunchOptions) {
|
||||
return useDefaultLaunchOptions
|
||||
? getDefaultActivityLaunchOptions(v)
|
||||
: UiFactory.getActivityLaunchOptions(this, v);
|
||||
? mAppTransitionManager.getDefaultActivityLaunchOptions(this, v)
|
||||
: mAppTransitionManager.getActivityLaunchOptions(this, v);
|
||||
}
|
||||
|
||||
public Rect getViewBounds(View v) {
|
||||
|
||||
Reference in New Issue
Block a user