summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/Workspace.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/Workspace.java')
-rw-r--r--src/com/android/launcher3/Workspace.java75
1 files changed, 50 insertions, 25 deletions
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index 05f9e2d7f..b6ef27d6d 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -971,16 +971,7 @@ public class Workspace extends SmoothPagedView
}
- private float wallpaperOffsetForCurrentScroll() {
- // Set wallpaper offset steps (1 / (number of screens - 1))
- mWallpaperManager.setWallpaperOffsetSteps(1.0f / (getChildCount() - 1), 1.0f);
- if (mMaxScrollX == 0) {
- return 0;
- }
- // do different behavior if it's alive wallpaper?
- return getScrollX() / (float) mMaxScrollX;
- }
protected void snapToPage(int whichPage, Runnable r) {
if (mDelayedSnapToPageRunnable != null) {
@@ -998,7 +989,7 @@ public class Workspace extends SmoothPagedView
float mFinalOffset = 0.0f;
float mCurrentOffset = 0.0f;
//long mLastWallpaperOffsetUpdateTime;
- boolean mWaitingForCallback;
+ boolean mWaitingForUpdate;
Choreographer mChoreographer;
Interpolator mInterpolator;
boolean mAnimating;
@@ -1014,10 +1005,18 @@ public class Workspace extends SmoothPagedView
@Override
public void doFrame(long frameTimeNanos) {
- mWaitingForCallback = false;
- if (computeScrollOffset()) {
- mWallpaperManager.setWallpaperOffsets(mWindowToken,
- mWallpaperOffset.getCurrX(), 0f);
+ updateOffset(false);
+ }
+
+
+ private void updateOffset(boolean force) {
+ if (mWaitingForUpdate || force) {
+ mWaitingForUpdate = false;
+ if (computeScrollOffset()) {
+ mWallpaperManager.setWallpaperOffsets(mWindowToken,
+ mWallpaperOffset.getCurrX(), 0.5f);
+ setWallpaperOffsetSteps();
+ }
}
}
@@ -1034,13 +1033,38 @@ public class Workspace extends SmoothPagedView
mCurrentOffset = mFinalOffset;
}
+ if (Math.abs(mCurrentOffset - mFinalOffset) > 0.0000001f) {
+ scheduleUpdate();
+ }
if (Math.abs(oldOffset - mCurrentOffset) > 0.0000001f) {
- scheduleCallback();
return true;
}
return false;
}
+ private float wallpaperOffsetForCurrentScroll() {
+ if (getChildCount() <= 1) {
+ return 0;
+ }
+ final int lastIndex = isLayoutRtl() ? 0 : getChildCount() - 1;
+ final int firstIndex = isLayoutRtl() ? getChildCount() - 2 : 1;
+ int firstPageScrollX = getScrollForPage(firstIndex);
+ int scrollRange = getScrollForPage(lastIndex) - firstPageScrollX;
+ if (scrollRange == 0) {
+ return 0;
+ } else {
+ // do different behavior if it's a live wallpaper?
+ float offset = (getScrollX() - firstPageScrollX) / (float) scrollRange;
+ return offset;
+ }
+ }
+
+ public void syncWithScroll() {
+ float offset = wallpaperOffsetForCurrentScroll();
+ mWallpaperOffset.setFinalX(offset);
+ updateOffset(true);
+ }
+
public float getCurrX() {
return mCurrentOffset;
}
@@ -1055,8 +1079,13 @@ public class Workspace extends SmoothPagedView
mAnimationStartTime = System.currentTimeMillis();
}
+ private void setWallpaperOffsetSteps() {
+ // Set wallpaper offset steps (1 / (number of screens - 1))
+ mWallpaperManager.setWallpaperOffsetSteps(1.0f / (getChildCount() - 1), 1.0f);
+ }
+
public void setFinalX(float x) {
- scheduleCallback();
+ scheduleUpdate();
mFinalOffset = Math.max(0f, Math.min(x, 1.0f));
if (getChildCount() != mNumScreens) {
if (mNumScreens > 0) {
@@ -1067,10 +1096,10 @@ public class Workspace extends SmoothPagedView
}
}
- private void scheduleCallback() {
- if (!mWaitingForCallback) {
+ private void scheduleUpdate() {
+ if (!mWaitingForUpdate) {
mChoreographer.postFrameCallback(this);
- mWaitingForCallback = true;
+ mWaitingForUpdate = true;
}
}
@@ -1082,11 +1111,7 @@ public class Workspace extends SmoothPagedView
@Override
public void computeScroll() {
super.computeScroll();
- syncWallpaperOffsetWithScroll();
- }
-
- private void syncWallpaperOffsetWithScroll() {
- mWallpaperOffset.setFinalX(wallpaperOffsetForCurrentScroll());
+ mWallpaperOffset.syncWithScroll();
}
void showOutlines() {
@@ -1325,7 +1350,7 @@ public class Workspace extends SmoothPagedView
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
if (mFirstLayout && mCurrentPage >= 0 && mCurrentPage < getChildCount()) {
- syncWallpaperOffsetWithScroll();
+ mWallpaperOffset.syncWithScroll();
mWallpaperOffset.jumpToFinal();
}
super.onLayout(changed, left, top, right, bottom);