diff --git a/quickstep/recents_ui_overrides/res/values/config.xml b/quickstep/recents_ui_overrides/res/values/config.xml index 527eec6457..120e03456f 100644 --- a/quickstep/recents_ui_overrides/res/values/config.xml +++ b/quickstep/recents_ui_overrides/res/values/config.xml @@ -14,8 +14,5 @@ limitations under the License. --> - 150 - 90 - 50 - 20 + 150 \ No newline at end of file diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java index 9afa862a44..0019ecb427 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java @@ -91,7 +91,7 @@ public final class LauncherAppTransitionManagerImpl extends QuickstepAppTransiti AppWindowAnimationHelper helper = new AppWindowAnimationHelper(recentsView.getPagedViewOrientedState(), mLauncher); Animator recentsAnimator = getRecentsWindowAnimator(taskView, skipLauncherChanges, - appTargets, wallpaperTargets, mLauncher.getBackgroundBlurController(), helper); + appTargets, wallpaperTargets, mLauncher.getDepthController(), helper); anim.play(recentsAnimator.setDuration(RECENTS_LAUNCH_DURATION)); Animator childStateAnimation = null; diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java index 5bac964b1a..de3fce13ce 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/BackgroundAppState.java @@ -19,7 +19,6 @@ import android.content.Context; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; -import com.android.launcher3.R; import com.android.launcher3.allapps.AllAppsTransitionController; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.quickstep.util.LayoutUtils; @@ -107,7 +106,7 @@ public class BackgroundAppState extends OverviewState { } @Override - public int getBackgroundBlurRadius(Context context) { - return context.getResources().getInteger(R.integer.app_background_blur_radius); + public float getDepth(Context context) { + return 1f; } } diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java index 6a34917a26..024872fec4 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/OverviewState.java @@ -207,8 +207,8 @@ public class OverviewState extends LauncherState { } @Override - public int getBackgroundBlurRadius(Context context) { - return context.getResources().getInteger(R.integer.overview_background_blur_radius); + public float getDepth(Context context) { + return 1f; } @Override diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java index aaf7619dc6..ce7fa0d413 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java @@ -19,7 +19,7 @@ import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.LauncherState.OVERVIEW; import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.TOUCH_RESPONSE_INTERPOLATOR; -import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; +import static com.android.launcher3.uioverrides.DepthController.DEPTH; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_CLOSING; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING; @@ -34,7 +34,7 @@ import android.view.View; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.anim.AnimationSuccessListener; -import com.android.launcher3.uioverrides.BackgroundBlurController; +import com.android.launcher3.uioverrides.DepthController; import com.android.quickstep.util.AppWindowAnimationHelper; import com.android.quickstep.util.AppWindowAnimationHelper.TransformParams; import com.android.quickstep.util.RemoteAnimationProvider; @@ -105,10 +105,10 @@ final class AppToOverviewAnimationProvider exten mRecentsView.setRunningTaskIconScaledDown(true); } - BackgroundBlurController blurController = mActivityInterface.getBackgroundBlurController(); - if (blurController != null) { + DepthController depthController = mActivityInterface.getDepthController(); + if (depthController != null) { // Update the surface to be the lowest closing app surface - blurController.setSurfaceToLauncher(mRecentsView); + depthController.setSurfaceToLauncher(mRecentsView); } AnimatorSet anim = new AnimatorSet(); @@ -124,7 +124,7 @@ final class AppToOverviewAnimationProvider exten if (mActivity == null) { Log.e(TAG, "Animation created, before activity"); anim.play(ValueAnimator.ofInt(0, 1).setDuration(RECENTS_LAUNCH_DURATION)) - .with(createBackgroundBlurAnimator(blurController)); + .with(createDepthAnimator(depthController)); return anim; } @@ -136,7 +136,7 @@ final class AppToOverviewAnimationProvider exten if (runningTaskTarget == null) { Log.e(TAG, "No closing app"); anim.play(ValueAnimator.ofInt(0, 1).setDuration(RECENTS_LAUNCH_DURATION)) - .with(createBackgroundBlurAnimator(blurController)); + .with(createDepthAnimator(depthController)); return anim; } @@ -184,7 +184,7 @@ final class AppToOverviewAnimationProvider exten }); } anim.play(valueAnimator) - .with(createBackgroundBlurAnimator(blurController)); + .with(createDepthAnimator(depthController)); return anim; } @@ -197,14 +197,14 @@ final class AppToOverviewAnimationProvider exten return RECENTS_LAUNCH_DURATION; } - private Animator createBackgroundBlurAnimator(BackgroundBlurController blurController) { - if (blurController == null) { + private Animator createDepthAnimator(DepthController depthController) { + if (depthController == null) { // Dummy animation return ValueAnimator.ofInt(0); } - return ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR, - BACKGROUND_APP.getBackgroundBlurRadius(mActivity), - OVERVIEW.getBackgroundBlurRadius(mActivity)) + return ObjectAnimator.ofFloat(depthController, DEPTH, + BACKGROUND_APP.getDepth(mActivity), + OVERVIEW.getDepth(mActivity)) .setDuration(RECENTS_LAUNCH_DURATION); } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java index d402a75602..55e6ba2117 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityInterface.java @@ -56,8 +56,8 @@ import com.android.launcher3.allapps.DiscoveryBounce; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.appprediction.PredictionUiStateManager; import com.android.launcher3.touch.PagedOrientationHandler; -import com.android.launcher3.uioverrides.BackgroundBlurController; -import com.android.launcher3.uioverrides.BackgroundBlurController.ClampedBlurProperty; +import com.android.launcher3.uioverrides.DepthController; +import com.android.launcher3.uioverrides.DepthController.ClampedDepthProperty; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.views.FloatingIconView; import com.android.quickstep.SysUINavigationMode.Mode; @@ -330,18 +330,17 @@ public final class LauncherActivityInterface implements BaseActivityInterface } setupRecentsViewUi(); - mActivityInterface.getBackgroundBlurController().setSurfaceToLauncher(mRecentsView); + mActivityInterface.getDepthController().setSurfaceToLauncher(mRecentsView); if (mDeviceState.getNavMode() == TWO_BUTTONS) { // If the device is in two button mode, swiping up will show overview with predictions diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java index 3ab0f19069..42d944fb78 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/RecentsActivity.java @@ -186,7 +186,7 @@ public final class RecentsActivity extends BaseRecentsActivity { AppWindowAnimationHelper helper = new AppWindowAnimationHelper( mFallbackRecentsView.getPagedViewOrientedState(), this); Animator recentsAnimator = getRecentsWindowAnimator(taskView, !activityClosing, appTargets, - wallpaperTargets, null /* backgroundBlurController */, + wallpaperTargets, null /* depthController */, helper); target.play(recentsAnimator.setDuration(RECENTS_LAUNCH_DURATION)); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java index 38b86cea43..7ec083e5df 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/TaskViewUtils.java @@ -19,7 +19,7 @@ import static com.android.launcher3.LauncherState.BACKGROUND_APP; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.anim.Interpolators.TOUCH_RESPONSE_INTERPOLATOR; import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE; -import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; +import static com.android.launcher3.uioverrides.DepthController.DEPTH; import static com.android.systemui.shared.system.RemoteAnimationTargetCompat.MODE_OPENING; import android.animation.Animator; @@ -35,7 +35,7 @@ import com.android.launcher3.BaseActivity; import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.ItemInfo; import com.android.launcher3.Utilities; -import com.android.launcher3.uioverrides.BackgroundBlurController; +import com.android.launcher3.uioverrides.DepthController; import com.android.quickstep.util.AppWindowAnimationHelper; import com.android.quickstep.util.MultiValueUpdateListener; import com.android.quickstep.views.RecentsView; @@ -123,7 +123,7 @@ public final class TaskViewUtils { public static Animator getRecentsWindowAnimator(TaskView v, boolean skipViewChanges, RemoteAnimationTargetCompat[] appTargets, RemoteAnimationTargetCompat[] wallpaperTargets, - BackgroundBlurController backgroundBlurController, + DepthController depthController, final AppWindowAnimationHelper inOutHelper) { SyncRtSurfaceTransactionApplierCompat applier = new SyncRtSurfaceTransactionApplierCompat(v); @@ -215,9 +215,9 @@ public final class TaskViewUtils { } }); - if (backgroundBlurController != null) { - ObjectAnimator backgroundRadiusAnim = ObjectAnimator.ofInt(backgroundBlurController, - BACKGROUND_BLUR, BACKGROUND_APP.getBackgroundBlurRadius(v.getContext())); + if (depthController != null) { + ObjectAnimator backgroundRadiusAnim = ObjectAnimator.ofFloat(depthController, + DEPTH, BACKGROUND_APP.getDepth(v.getContext())); animatorSet.playTogether(appAnimator, backgroundRadiusAnim); } else { animatorSet.play(appAnimator); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java index 3ed7530e6c..a027feaed5 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/LauncherRecentsView.java @@ -46,9 +46,9 @@ import com.android.launcher3.R; import com.android.launcher3.anim.Interpolators; import com.android.launcher3.appprediction.PredictionUiStateManager; import com.android.launcher3.appprediction.PredictionUiStateManager.Client; -import com.android.launcher3.states.RotationHelper; -import com.android.launcher3.uioverrides.BackgroundBlurController; import com.android.launcher3.config.FeatureFlags; +import com.android.launcher3.states.RotationHelper; +import com.android.launcher3.uioverrides.DepthController; import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper; import com.android.launcher3.util.TraceHelper; import com.android.launcher3.views.ScrimView; @@ -409,7 +409,7 @@ public class LauncherRecentsView extends RecentsView implements StateL } @Override - protected BackgroundBlurController getBackgroundBlurController() { - return mActivity.getBackgroundBlurController(); + protected DepthController getDepthController() { + return mActivity.getDepthController(); } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index e15ac46432..4917cbe17f 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -29,7 +29,7 @@ import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.config.FeatureFlags.ENABLE_OVERVIEW_ACTIONS; import static com.android.launcher3.config.FeatureFlags.ENABLE_QUICKSTEP_LIVE_TILE; -import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; +import static com.android.launcher3.uioverrides.DepthController.DEPTH; import static com.android.launcher3.uioverrides.touchcontrollers.TaskViewTouchController.SUCCESS_TRANSITION_PROGRESS; import static com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch.TAP; import static com.android.launcher3.userevent.nano.LauncherLogProto.ControlType.CLEAR_ALL_BUTTON; @@ -97,7 +97,7 @@ import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.graphics.RotationMode; import com.android.launcher3.states.RotationHelper; import com.android.launcher3.touch.PagedOrientationHandler.CurveProperties; -import com.android.launcher3.uioverrides.BackgroundBlurController; +import com.android.launcher3.uioverrides.DepthController; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; @@ -1702,11 +1702,11 @@ public abstract class RecentsView extends PagedView impl appWindowAnimationHelper.prepareAnimation(mActivity.getDeviceProfile(), true /* isOpening */); AnimatorSet anim = createAdjacentPageAnimForTaskLaunch(tv, appWindowAnimationHelper); - BackgroundBlurController blurController = getBackgroundBlurController(); - if (blurController != null) { - ObjectAnimator backgroundBlur = ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR, - BACKGROUND_APP.getBackgroundBlurRadius(mActivity)); - anim.play(backgroundBlur); + DepthController depthController = getDepthController(); + if (depthController != null) { + ObjectAnimator depthAnimator = ObjectAnimator.ofFloat(depthController, DEPTH, + BACKGROUND_APP.getDepth(mActivity)); + anim.play(depthAnimator); } anim.play(progressAnim); anim.setDuration(duration).setInterpolator(interpolator); @@ -2009,7 +2009,7 @@ public abstract class RecentsView extends PagedView impl } @Nullable - protected BackgroundBlurController getBackgroundBlurController() { + protected DepthController getDepthController() { return null; } diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java index a7d00c5c72..ec66f115f9 100644 --- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java @@ -244,7 +244,7 @@ public abstract class BaseQuickstepLauncher extends Launcher return new StateHandler[] { getAllAppsController(), getWorkspace(), - getBackgroundBlurController(), + getDepthController(), new RecentsViewStateController(this), new BackButtonAlphaHandler(this)}; } diff --git a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java index 1b39242ef4..a366f081e2 100644 --- a/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java +++ b/quickstep/src/com/android/launcher3/QuickstepAppTransitionManagerImpl.java @@ -33,7 +33,7 @@ import static com.android.launcher3.anim.Interpolators.EXAGGERATED_EASE; import static com.android.launcher3.anim.Interpolators.LINEAR; import static com.android.launcher3.config.FeatureFlags.KEYGUARD_ANIMATION; import static com.android.launcher3.dragndrop.DragLayer.ALPHA_INDEX_TRANSITIONS; -import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; +import static com.android.launcher3.uioverrides.DepthController.DEPTH; import static com.android.launcher3.views.FloatingIconView.SHAPE_PROGRESS_DURATION; import static com.android.quickstep.TaskUtils.taskIsATargetWithMode; import static com.android.systemui.shared.system.QuickStepContract.getWindowCornerRadius; @@ -73,7 +73,7 @@ import com.android.launcher3.anim.Interpolators; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.shortcuts.DeepShortcutView; -import com.android.launcher3.uioverrides.BackgroundBlurController; +import com.android.launcher3.uioverrides.DepthController; import com.android.launcher3.util.DynamicResource; import com.android.launcher3.util.MultiValueAlpha; import com.android.launcher3.util.MultiValueAlpha.AlphaProperty; @@ -596,17 +596,17 @@ public abstract class QuickstepAppTransitionManagerImpl extends LauncherAppTrans // When launching an app from overview that doesn't map to a task, we still want to just // blur the wallpaper instead of the launcher surface as well boolean allowBlurringLauncher = mLauncher.getStateManager().getState() != OVERVIEW; - BackgroundBlurController blurController = mLauncher.getBackgroundBlurController(); - ObjectAnimator backgroundRadiusAnim = ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR, - BACKGROUND_APP.getBackgroundBlurRadius(mLauncher)) + DepthController depthController = mLauncher.getDepthController(); + ObjectAnimator backgroundRadiusAnim = ObjectAnimator.ofFloat(depthController, DEPTH, + BACKGROUND_APP.getDepth(mLauncher)) .setDuration(APP_LAUNCH_DURATION); if (allowBlurringLauncher) { - blurController.setSurfaceToApp(RemoteAnimationProvider.findLowestOpaqueLayerTarget( + depthController.setSurfaceToApp(RemoteAnimationProvider.findLowestOpaqueLayerTarget( appTargets, MODE_OPENING)); backgroundRadiusAnim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - blurController.setSurfaceToLauncher(mLauncher.getDragLayer()); + depthController.setSurfaceToLauncher(mLauncher.getDragLayer()); } }); } diff --git a/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java b/quickstep/src/com/android/launcher3/uioverrides/DepthController.java similarity index 53% rename from quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java rename to quickstep/src/com/android/launcher3/uioverrides/DepthController.java index 513310e945..8995a7e1a0 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/BackgroundBlurController.java +++ b/quickstep/src/com/android/launcher3/uioverrides/DepthController.java @@ -18,7 +18,8 @@ package com.android.launcher3.uioverrides; import static com.android.launcher3.anim.Interpolators.LINEAR; -import android.util.IntProperty; +import android.os.IBinder; +import android.util.FloatProperty; import android.view.View; import com.android.launcher3.Launcher; @@ -31,22 +32,23 @@ import com.android.launcher3.states.StateAnimationConfig; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; import com.android.systemui.shared.system.SurfaceControlCompat; import com.android.systemui.shared.system.TransactionCompat; +import com.android.systemui.shared.system.WallpaperManagerCompat; /** - * Controls the blur, for the Launcher surface only. + * Controls blur and wallpaper zoom, for the Launcher surface only. */ -public class BackgroundBlurController implements LauncherStateManager.StateHandler { +public class DepthController implements LauncherStateManager.StateHandler { - public static final IntProperty BACKGROUND_BLUR = - new IntProperty("backgroundBlur") { + public static final FloatProperty DEPTH = + new FloatProperty("depth") { @Override - public void setValue(BackgroundBlurController blurController, int blurRadius) { - blurController.setBackgroundBlurRadius(blurRadius); + public void setValue(DepthController depthController, float depth) { + depthController.setDepth(depth); } @Override - public Integer get(BackgroundBlurController blurController) { - return blurController.mBackgroundBlurRadius; + public Float get(DepthController depthController) { + return depthController.mDepth; } }; @@ -54,42 +56,50 @@ public class BackgroundBlurController implements LauncherStateManager.StateHandl * A property that updates the background blur within a given range of values (ie. even if the * animator goes beyond 0..1, the interpolated value will still be bounded). */ - public static class ClampedBlurProperty extends IntProperty { - private final int mMinValue; - private final int mMaxValue; + public static class ClampedDepthProperty extends FloatProperty { + private final float mMinValue; + private final float mMaxValue; - public ClampedBlurProperty(int minValue, int maxValue) { - super(("backgroundBlurClamped")); + public ClampedDepthProperty(float minValue, float maxValue) { + super("depthClamped"); mMinValue = minValue; mMaxValue = maxValue; } @Override - public void setValue(BackgroundBlurController blurController, int blurRadius) { - blurController.setBackgroundBlurRadius(Utilities.boundToRange(blurRadius, - mMinValue, mMaxValue)); + public void setValue(DepthController depthController, float depth) { + depthController.setDepth(Utilities.boundToRange(depth, mMinValue, mMaxValue)); } @Override - public Integer get(BackgroundBlurController blurController) { - return blurController.mBackgroundBlurRadius; + public Float get(DepthController depthController) { + return depthController.mDepth; } } private final Launcher mLauncher; + /** + * Blur radius when completely zoomed out, in pixels. + */ + private int mMaxBlurRadius; + private WallpaperManagerCompat mWallpaperManager; private SurfaceControlCompat mSurface; - private int mBackgroundBlurRadius; + /** + * Ratio from 0 to 1, where 0 is fully zoomed out, and 1 is zoomed in. + * @see android.service.wallpaper.WallpaperService.Engine#onZoomChanged(float) + */ + private float mDepth; - public BackgroundBlurController(Launcher l) { + public DepthController(Launcher l) { mLauncher = l; } - /** - * @return the background blur adjustment for folders - */ - public int getFolderBackgroundBlurAdjustment() { - return mLauncher.getResources().getInteger( - R.integer.folder_background_blur_radius_adjustment); + private void ensureDependencies() { + if (mWallpaperManager != null) { + return; + } + mMaxBlurRadius = mLauncher.getResources().getInteger(R.integer.max_depth_blur_radius); + mWallpaperManager = new WallpaperManagerCompat(mLauncher); } /** @@ -112,10 +122,10 @@ public class BackgroundBlurController implements LauncherStateManager.StateHandl if (mSurface != surface) { mSurface = surface; if (surface != null) { - setBackgroundBlurRadius(mBackgroundBlurRadius); + setDepth(mDepth); } else { - // If there is no surface, then reset the blur radius - setBackgroundBlurRadius(0); + // If there is no surface, then reset the ratio + setDepth(0f); } } } @@ -126,9 +136,9 @@ public class BackgroundBlurController implements LauncherStateManager.StateHandl return; } - int toBackgroundBlurRadius = toState.getBackgroundBlurRadius(mLauncher); - if (mBackgroundBlurRadius != toBackgroundBlurRadius) { - setBackgroundBlurRadius(toBackgroundBlurRadius); + float toDepth = toState.getDepth(mLauncher); + if (Float.compare(mDepth, toDepth) != 0) { + setDepth(toDepth); } } @@ -139,22 +149,24 @@ public class BackgroundBlurController implements LauncherStateManager.StateHandl return; } - int toBackgroundBlurRadius = toState.getBackgroundBlurRadius(mLauncher); - if (mBackgroundBlurRadius != toBackgroundBlurRadius) { - animation.setInt(this, BACKGROUND_BLUR, toBackgroundBlurRadius, LINEAR); + float toDepth = toState.getDepth(mLauncher); + if (Float.compare(mDepth, toDepth) != 0) { + animation.setFloat(this, DEPTH, toDepth, LINEAR); } } - private void setBackgroundBlurRadius(int blurRadius) { - // TODO: Do nothing if the shadows are not enabled - // Always update the background blur as it will be reapplied when a surface is next - // available - mBackgroundBlurRadius = blurRadius; + private void setDepth(float depth) { + mDepth = depth; if (mSurface == null || !mSurface.isValid()) { return; } + ensureDependencies(); + IBinder windowToken = mLauncher.getRootView().getWindowToken(); + if (windowToken != null) { + mWallpaperManager.setWallpaperZoomOut(windowToken, mDepth); + } new TransactionCompat() - .setBackgroundBlurRadius(mSurface, blurRadius) + .setBackgroundBlurRadius(mSurface, (int) (mDepth * mMaxBlurRadius)) .apply(); } } diff --git a/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java b/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java index 971d917445..93e02a111f 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/states/AllAppsState.java @@ -22,7 +22,6 @@ import android.content.Context; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; -import com.android.launcher3.R; import com.android.launcher3.allapps.AllAppsContainerView; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; import com.android.quickstep.SysUINavigationMode; @@ -88,8 +87,8 @@ public class AllAppsState extends LauncherState { } @Override - public int getBackgroundBlurRadius(Context context) { - return context.getResources().getInteger(R.integer.allapps_background_blur_radius); + public float getDepth(Context context) { + return 1f; } @Override diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java index be0bdd8cac..2a569f5d35 100644 --- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java +++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java @@ -33,7 +33,7 @@ import com.android.launcher3.BaseDraggingActivity; import com.android.launcher3.DeviceProfile; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.touch.PagedOrientationHandler; -import com.android.launcher3.uioverrides.BackgroundBlurController; +import com.android.launcher3.uioverrides.DepthController; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.ShelfPeekAnim; import com.android.systemui.shared.recents.model.ThumbnailData; @@ -81,7 +81,8 @@ public interface BaseActivityInterface { @Nullable T getCreatedActivity(); - default @Nullable BackgroundBlurController getBackgroundBlurController() { + @Nullable + default DepthController getDepthController() { return null; } diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 1413a5cd1f..921d34ade8 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -124,7 +124,7 @@ import com.android.launcher3.testing.TestLogging; import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.touch.AllAppsSwipeController; import com.android.launcher3.touch.ItemClickHandler; -import com.android.launcher3.uioverrides.BackgroundBlurController; +import com.android.launcher3.uioverrides.DepthController; import com.android.launcher3.uioverrides.plugins.PluginManagerWrapper; import com.android.launcher3.userevent.nano.LauncherLogProto.Action; import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType; @@ -326,14 +326,14 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, private boolean mDeferOverlayCallbacks; private final Runnable mDeferredOverlayCallbacks = this::checkIfOverlayStillDeferred; - private BackgroundBlurController mBackgroundBlurController = - new BackgroundBlurController(this); + private DepthController mDepthController = + new DepthController(this); private final ViewTreeObserver.OnDrawListener mOnDrawListener = new ViewTreeObserver.OnDrawListener() { @Override public void onDraw() { - getBackgroundBlurController().setSurfaceToLauncher(mDragLayer); + getDepthController().setSurfaceToLauncher(mDragLayer); mDragLayer.post(() -> mDragLayer.getViewTreeObserver().removeOnDrawListener( this)); } @@ -954,7 +954,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, NotificationListener.removeNotificationsChangedListener(); getStateManager().moveToRestState(); - getBackgroundBlurController().setSurfaceToLauncher(null); + getDepthController().setSurfaceToLauncher(null); // Workaround for b/78520668, explicitly trim memory once UI is hidden onTrimMemory(TRIM_MEMORY_UI_HIDDEN); @@ -2708,7 +2708,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, protected StateHandler[] createStateHandlers() { return new StateHandler[] { getAllAppsController(), getWorkspace(), - getBackgroundBlurController() }; + getDepthController() }; } public TouchController[] createTouchControllers() { @@ -2745,8 +2745,8 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, return Stream.of(APP_INFO, WIDGETS, INSTALL); } - public BackgroundBlurController getBackgroundBlurController() { - return mBackgroundBlurController; + public DepthController getDepthController() { + return mDepthController; } public static Launcher getLauncher(Context context) { diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java index df71f16ec7..6ee82cd509 100644 --- a/src/com/android/launcher3/LauncherState.java +++ b/src/com/android/launcher3/LauncherState.java @@ -271,11 +271,13 @@ public abstract class LauncherState { } /** - * The amount of blur to apply to the background of either the app or Launcher surface in this - * state. + * The amount of blur and wallpaper zoom to apply to the background of either the app + * or Launcher surface in this state. Should be a number between 0 and 1, inclusive. + * + * 0 means completely zoomed in, without blurs. 1 is zoomed out, with blurs. */ - public int getBackgroundBlurRadius(Context context) { - return 0; + public float getDepth(Context context) { + return 0f; } public String getDescription(Launcher launcher) { diff --git a/src/com/android/launcher3/folder/FolderAnimationManager.java b/src/com/android/launcher3/folder/FolderAnimationManager.java index f72e67438b..b83609e680 100644 --- a/src/com/android/launcher3/folder/FolderAnimationManager.java +++ b/src/com/android/launcher3/folder/FolderAnimationManager.java @@ -21,7 +21,6 @@ import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW; import static com.android.launcher3.graphics.IconShape.getShape; import static com.android.launcher3.icons.GraphicsUtils.setColorAlphaBound; -import static com.android.launcher3.uioverrides.BackgroundBlurController.BACKGROUND_BLUR; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; @@ -47,7 +46,6 @@ import com.android.launcher3.ShortcutAndWidgetContainer; import com.android.launcher3.Utilities; import com.android.launcher3.anim.PropertyResetListener; import com.android.launcher3.dragndrop.DragLayer; -import com.android.launcher3.uioverrides.BackgroundBlurController; import com.android.launcher3.util.Themes; import java.util.List; @@ -222,14 +220,6 @@ public class FolderAnimationManager { Animator z = getAnimator(mFolder, View.TRANSLATION_Z, -mFolder.getElevation(), 0); play(a, z, mIsOpening ? midDuration : 0, midDuration); - BackgroundBlurController blurController = mLauncher.getBackgroundBlurController(); - int stateBackgroundBlur = mLauncher.getStateManager().getState() - .getBackgroundBlurRadius(mLauncher); - int folderBackgroundBlurAdjustment = blurController.getFolderBackgroundBlurAdjustment(); - play(a, ObjectAnimator.ofInt(blurController, BACKGROUND_BLUR, mIsOpening - ? stateBackgroundBlur + folderBackgroundBlurAdjustment - : stateBackgroundBlur)); - // Store clip variables CellLayout cellLayout = mContent.getCurrentCellLayout(); boolean folderClipChildren = mFolder.getClipChildren(); diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/BackgroundBlurController.java b/src_ui_overrides/com/android/launcher3/uioverrides/DepthController.java similarity index 66% rename from src_ui_overrides/com/android/launcher3/uioverrides/BackgroundBlurController.java rename to src_ui_overrides/com/android/launcher3/uioverrides/DepthController.java index 75f99a9ee9..7ad85e22c3 100644 --- a/src_ui_overrides/com/android/launcher3/uioverrides/BackgroundBlurController.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/DepthController.java @@ -17,7 +17,7 @@ package com.android.launcher3.uioverrides; -import android.util.IntProperty; +import android.util.FloatProperty; import android.view.View; import com.android.launcher3.Launcher; @@ -27,26 +27,22 @@ import com.android.launcher3.anim.PendingAnimation; import com.android.launcher3.states.StateAnimationConfig; /** - * Controls the blur, for the Launcher surface only. + * Controls blur and wallpaper zoom, for the Launcher surface only. */ -public class BackgroundBlurController implements LauncherStateManager.StateHandler { +public class DepthController implements LauncherStateManager.StateHandler { - public static final IntProperty BACKGROUND_BLUR = - new IntProperty("backgroundBlur") { + public static final FloatProperty DEPTH = + new FloatProperty("depth") { @Override - public void setValue(BackgroundBlurController blurController, int blurRadius) {} + public void setValue(DepthController depthController, float depth) {} @Override - public Integer get(BackgroundBlurController blurController) { - return 0; + public Float get(DepthController depthController) { + return 0f; } }; - public BackgroundBlurController(Launcher l) {} - - public int getFolderBackgroundBlurAdjustment() { - return 0; - } + public DepthController(Launcher l) {} public void setSurfaceToLauncher(View v) {}