Merge "Add depth animation when multiwindow mode changes." into ub-launcher3-rvc-dev

This commit is contained in:
TreeHugger Robot
2020-06-22 17:31:35 +00:00
committed by Android (Google) Code Review
3 changed files with 40 additions and 4 deletions

View File

@@ -83,6 +83,7 @@ public abstract class BaseQuickstepLauncher extends Launcher
super.onCreate(savedInstanceState);
SysUINavigationMode.INSTANCE.get(this).addModeChangeListener(this);
addMultiWindowModeChangedListener(mDepthController);
}
@Override

View File

@@ -20,11 +20,15 @@ import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_DEPTH;
import static com.android.launcher3.states.StateAnimationConfig.SKIP_DEPTH_CONTROLLER;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.os.IBinder;
import android.util.FloatProperty;
import android.view.View;
import android.view.ViewTreeObserver;
import com.android.launcher3.BaseActivity;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.R;
@@ -41,7 +45,8 @@ import com.android.systemui.shared.system.WallpaperManagerCompat;
/**
* Controls blur and wallpaper zoom, for the Launcher surface only.
*/
public class DepthController implements StateHandler<LauncherState> {
public class DepthController implements StateHandler<LauncherState>,
BaseActivity.MultiWindowModeChangedListener {
public static final FloatProperty<DepthController> DEPTH =
new FloatProperty<DepthController>("depth") {
@@ -104,6 +109,9 @@ public class DepthController implements StateHandler<LauncherState> {
*/
private float mDepth;
// Workaround for animating the depth when multiwindow mode changes.
private boolean mIgnoreStateChangesDuringMultiWindowAnimation = false;
private View.OnAttachStateChangeListener mOnAttachListener;
public DepthController(Launcher l) {
@@ -171,7 +179,7 @@ public class DepthController implements StateHandler<LauncherState> {
@Override
public void setState(LauncherState toState) {
if (mSurface == null) {
if (mSurface == null || mIgnoreStateChangesDuringMultiWindowAnimation) {
return;
}
@@ -186,7 +194,8 @@ public class DepthController implements StateHandler<LauncherState> {
PendingAnimation animation) {
if (mSurface == null
|| config.onlyPlayAtomicComponent()
|| config.hasAnimationFlag(SKIP_DEPTH_CONTROLLER)) {
|| config.hasAnimationFlag(SKIP_DEPTH_CONTROLLER)
|| mIgnoreStateChangesDuringMultiWindowAnimation) {
return;
}
@@ -231,4 +240,21 @@ public class DepthController implements StateHandler<LauncherState> {
.apply();
}
}
@Override
public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
mIgnoreStateChangesDuringMultiWindowAnimation = true;
ObjectAnimator mwAnimation = ObjectAnimator.ofFloat(this, DEPTH,
mLauncher.getStateManager().getState().getDepth(mLauncher, isInMultiWindowMode))
.setDuration(300);
mwAnimation.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mIgnoreStateChangesDuringMultiWindowAnimation = false;
}
});
mwAnimation.setAutoCancel(true);
mwAnimation.start();
}
}

View File

@@ -226,7 +226,16 @@ public abstract class LauncherState implements BaseState<LauncherState> {
* 0 means completely zoomed in, without blurs. 1 is zoomed out, with blurs.
*/
public final float getDepth(Context context) {
if (BaseDraggingActivity.fromContext(context).getDeviceProfile().isMultiWindowMode) {
return getDepth(context,
BaseDraggingActivity.fromContext(context).getDeviceProfile().isMultiWindowMode);
}
/**
* Returns the amount of blur and wallpaper zoom for this state with {@param isMultiWindowMode}.
* @see #getDepth(Context).
*/
public final float getDepth(Context context, boolean isMultiWindowMode) {
if (isMultiWindowMode) {
return 0;
}
return getDepthUnchecked(context);