From 09d6eb0f3fb1d81ea59881e6c65512d09d573cc1 Mon Sep 17 00:00:00 2001 From: Michael Jurka Date: Fri, 28 Jan 2011 16:05:09 -0800 Subject: [PATCH] Fix bug # 3370739 - wallpaper overscroll doesn't work with non-static wallpapers --- src/com/android/launcher2/Workspace.java | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index 4ff9f40b68..004de3ae19 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -666,19 +666,27 @@ public class Workspace extends SmoothPagedView int wallpaperTravelWidth = (int) (display.getWidth() * wallpaperTravelToScreenWidthRatio(display.getWidth(), display.getHeight())); - // Account for overscroll: you only see the absolute edge of the wallpaper if - // you overscroll as far as you can in landscape mode - int overscrollOffset = (int) (maxOverScroll() * display.getWidth()); - float overscrollRatio = overscrollOffset / (float) getScrollRange(); - int scrollRangeWithOverscroll = getScrollRange() + 2 * overscrollOffset; - // Set wallpaper offset steps (1 / (number of screens - 1)) // We have 3 vertical offset states (centered, and then top/bottom aligned // for all apps/customize) mWallpaperManager.setWallpaperOffsetSteps(1.0f / (getChildCount() - 1), 1.0f / (3 - 1)); + int scrollRange = getScrollRange(); + float scrollProgressOffset = 0; + + // Account for overscroll: you only see the absolute edge of the wallpaper if + // you overscroll as far as you can in landscape mode. Only do this for static wallpapers + // because live wallpapers (and probably 3rd party wallpaper providers) rely on the offset + // being even intervals from 0 to 1 (eg [0, 0.25, 0.5, 0.75, 1]) + final boolean isStaticWallpaper = (mWallpaperManager.getWallpaperInfo() == null); + if (isStaticWallpaper) { + int overscrollOffset = (int) (maxOverScroll() * display.getWidth()); + scrollProgressOffset += overscrollOffset / (float) getScrollRange(); + scrollRange += 2 * overscrollOffset; + } + float scrollProgress = - mScrollX / (float) scrollRangeWithOverscroll + overscrollRatio; + mScrollX / (float) scrollRange + scrollProgressOffset; float offsetInDips = wallpaperTravelWidth * scrollProgress + (mWallpaperWidth - wallpaperTravelWidth) / 2; float offset = offsetInDips / (float) mWallpaperWidth;