mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-02 00:36:49 +00:00
Merge "Add depth animation when multiwindow mode changes." into ub-launcher3-rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
845f135d17
@@ -83,6 +83,7 @@ public abstract class BaseQuickstepLauncher extends Launcher
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
SysUINavigationMode.INSTANCE.get(this).addModeChangeListener(this);
|
||||
addMultiWindowModeChangedListener(mDepthController);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user