diff --git a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java index a44de793a3..de0416b693 100644 --- a/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java +++ b/quickstep/src/com/android/launcher3/BaseQuickstepLauncher.java @@ -200,6 +200,17 @@ public abstract class BaseQuickstepLauncher extends Launcher } } + /** + * {@code LauncherOverlayCallbacks} scroll amount. + * Indicates transition progress to -1 screen. + * @param progress From 0 to 1. + */ + @Override + public void onScrollChanged(float progress) { + super.onScrollChanged(progress); + mDepthController.onOverlayScrollChanged(progress); + } + @Override public void startIntentSenderForResult(IntentSender intent, int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options) { diff --git a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java index 370fb8ef7c..f01ff8bd5d 100644 --- a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java +++ b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java @@ -116,6 +116,10 @@ public class DepthController implements StateHandler, private boolean mCrossWindowBlursEnabled; private WallpaperManagerCompat mWallpaperManager; private SurfaceControl mSurface; + /** + * How visible the -1 overlay is, from 0 to 1. + */ + private float mOverlayScrollProgress; /** * Ratio from 0 to 1, where 0 is fully zoomed out, and 1 is zoomed in. * @see android.service.wallpaper.WallpaperService.Engine#onZoomChanged(float) @@ -251,12 +255,24 @@ public class DepthController implements StateHandler, } } + public void onOverlayScrollChanged(float progress) { + // Round out the progress to dedupe frequent, non-perceptable updates + int progressI = (int) (progress * 256); + float progressF = progressI / 256f; + if (Float.compare(mOverlayScrollProgress, progressF) == 0) { + return; + } + mOverlayScrollProgress = progressF; + dispatchTransactionSurface(mDepth); + } + private boolean dispatchTransactionSurface(float depth) { boolean supportsBlur = BlurUtils.supportsBlursOnWindows(); if (supportsBlur && (mSurface == null || !mSurface.isValid())) { return false; } ensureDependencies(); + depth = Math.max(depth, mOverlayScrollProgress); IBinder windowToken = mLauncher.getRootView().getWindowToken(); if (windowToken != null) { mWallpaperManager.setWallpaperZoomOut(windowToken, depth); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index 099f256982..5fb862ee95 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -218,7 +218,8 @@ import java.util.stream.Stream; * Default launcher application. */ public class Launcher extends StatefulActivity implements LauncherExterns, - Callbacks, InvariantDeviceProfile.OnIDPChangeListener, PluginListener { + Callbacks, InvariantDeviceProfile.OnIDPChangeListener, PluginListener, + LauncherOverlayCallbacks { public static final String TAG = "Launcher"; public static final ActivityTracker ACTIVITY_TRACKER = new ActivityTracker<>(); @@ -619,7 +620,7 @@ public class Launcher extends StatefulActivity implements Launche @Override public void setLauncherOverlay(LauncherOverlay overlay) { if (overlay != null) { - overlay.setOverlayCallbacks(new LauncherOverlayCallbacksImpl()); + overlay.setOverlayCallbacks(this); } mWorkspace.setLauncherOverlay(overlay); } @@ -1123,12 +1124,15 @@ public class Launcher extends StatefulActivity implements Launche mAppWidgetHost.setActivityResumed(false); } - class LauncherOverlayCallbacksImpl implements LauncherOverlayCallbacks { - - public void onScrollChanged(float progress) { - if (mWorkspace != null) { - mWorkspace.onOverlayScrollChanged(progress); - } + /** + * {@code LauncherOverlayCallbacks} scroll amount. + * Indicates transition progress to -1 screen. + * @param progress From 0 to 1. + */ + @Override + public void onScrollChanged(float progress) { + if (mWorkspace != null) { + mWorkspace.onOverlayScrollChanged(progress); } }