summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher2
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher2')
-rw-r--r--src/com/android/launcher2/AppsCustomizeTabHost.java4
-rw-r--r--src/com/android/launcher2/Launcher.java26
-rw-r--r--src/com/android/launcher2/PagedView.java83
-rw-r--r--src/com/android/launcher2/Workspace.java7
4 files changed, 92 insertions, 28 deletions
diff --git a/src/com/android/launcher2/AppsCustomizeTabHost.java b/src/com/android/launcher2/AppsCustomizeTabHost.java
index 262358600..ed408df48 100644
--- a/src/com/android/launcher2/AppsCustomizeTabHost.java
+++ b/src/com/android/launcher2/AppsCustomizeTabHost.java
@@ -147,6 +147,10 @@ public class AppsCustomizeTabHost extends TabHost implements LauncherTransitiona
anim.setDuration(duration);
anim.addListener(new AnimatorListenerAdapter() {
@Override
+ public void onAnimationStart(android.animation.Animator animation) {
+ mAppsCustomizePane.hideScrollingIndicator(false);
+ }
+ @Override
public void onAnimationEnd(android.animation.Animator animation) {
mAppsCustomizePane.setContentType(type);
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 489f3fbb8..7341e7133 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -2388,12 +2388,6 @@ public final class Launcher extends Activity
toView.setTranslationY(0.0f);
toView.setVisibility(View.VISIBLE);
toView.bringToFront();
-
- if (!springLoaded && !LauncherApplication.isScreenLarge()) {
- // Hide the workspace scrollbar
- mWorkspace.hideScrollingIndicator(true);
- mWorkspace.hideScrollIndicatorTrack();
- }
}
@Override
public void onAnimationEnd(Animator animation) {
@@ -2405,6 +2399,12 @@ public final class Launcher extends Activity
if (toView instanceof LauncherTransitionable) {
((LauncherTransitionable) toView).onLauncherTransitionEnd(scaleAnim);
}
+
+ if (!springLoaded && !LauncherApplication.isScreenLarge()) {
+ // Hide the workspace scrollbar
+ mWorkspace.hideScrollingIndicator(true);
+ mWorkspace.hideScrollIndicatorTrack();
+ }
}
});
@@ -2484,16 +2484,18 @@ public final class Launcher extends Activity
}
alphaAnim.addListener(new AnimatorListenerAdapter() {
@Override
+ public void onAnimationStart(android.animation.Animator animation) {
+ if (!springLoaded && !LauncherApplication.isScreenLarge()) {
+ // Show the workspace scrollbar
+ mWorkspace.showScrollIndicatorTrack();
+ mWorkspace.flashScrollingIndicator();
+ }
+ }
+ @Override
public void onAnimationEnd(Animator animation) {
fromView.setVisibility(View.GONE);
if (fromView instanceof LauncherTransitionable) {
((LauncherTransitionable) fromView).onLauncherTransitionEnd(alphaAnim);
-
- if (!springLoaded && !LauncherApplication.isScreenLarge()) {
- // Show the workspace scrollbar
- mWorkspace.showScrollIndicatorTrack();
- mWorkspace.flashScrollingIndicator();
- }
}
}
});
diff --git a/src/com/android/launcher2/PagedView.java b/src/com/android/launcher2/PagedView.java
index 9ef1fa8ef..bed107a1f 100644
--- a/src/com/android/launcher2/PagedView.java
+++ b/src/com/android/launcher2/PagedView.java
@@ -161,11 +161,11 @@ public abstract class PagedView extends ViewGroup {
protected boolean mIsDataReady = false;
// Scrolling indicator
+ private android.animation.ValueAnimator mScrollIndicatorAnimator;
private ImageView mScrollIndicator;
private ImageView mScrollTrack;
private boolean mHasScrollIndicator = true;
private static final int sScrollIndicatorFadeInDuration = 150;
- private static final int sScrollIndicatorFastFadeOutDuration = 50;
private static final int sScrollIndicatorFadeOutDuration = 650;
private static final int sScrollIndicatorFlashDuration = 650;
@@ -260,10 +260,6 @@ public abstract class PagedView extends ViewGroup {
return getChildAt(index);
}
- int getScrollWidth() {
- return getWidth();
- }
-
/**
* Updates the scroll of the current page immediately to its final scroll position. We use this
* in CustomizePagedView to allow tabs to share the same PagedView while resetting the scroll of
@@ -1676,7 +1672,13 @@ public abstract class PagedView extends ViewGroup {
if (mScrollIndicator != null) {
// Fade the indicator in
updateScrollingIndicatorPosition();
- mScrollIndicator.animate().alpha(1f).setDuration(sScrollIndicatorFadeInDuration).start();
+ mScrollIndicator.setVisibility(View.VISIBLE);
+ if (mScrollIndicatorAnimator != null) {
+ mScrollIndicatorAnimator.cancel();
+ }
+ mScrollIndicatorAnimator = ObjectAnimator.ofFloat(mScrollIndicator, "alpha", 1f);
+ mScrollIndicatorAnimator.setDuration(sScrollIndicatorFadeInDuration);
+ mScrollIndicatorAnimator.start();
}
}
@@ -1688,11 +1690,41 @@ public abstract class PagedView extends ViewGroup {
if (mScrollIndicator != null) {
// Fade the indicator out
updateScrollingIndicatorPosition();
- mScrollIndicator.animate().alpha(0f).setDuration(immediately ?
- sScrollIndicatorFastFadeOutDuration : sScrollIndicatorFadeOutDuration).start();
+ if (mScrollIndicatorAnimator != null) {
+ mScrollIndicatorAnimator.cancel();
+ }
+ if (immediately) {
+ mScrollIndicator.setVisibility(View.GONE);
+ mScrollIndicator.setAlpha(0f);
+ } else {
+ mScrollIndicatorAnimator = ObjectAnimator.ofFloat(mScrollIndicator, "alpha", 0f);
+ mScrollIndicatorAnimator.setDuration(sScrollIndicatorFadeOutDuration);
+ mScrollIndicatorAnimator.addListener(new AnimatorListenerAdapter() {
+ private boolean cancelled = false;
+ @Override
+ public void onAnimationCancel(android.animation.Animator animation) {
+ cancelled = true;
+ }
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ if (!cancelled) {
+ mScrollIndicator.setVisibility(View.GONE);
+ }
+ }
+ });
+ mScrollIndicatorAnimator.start();
+ }
}
}
+ /**
+ * To be overridden by subclasses to determine whether the scroll indicator should stretch to
+ * fill its space on the track or not.
+ */
+ protected boolean hasElasticScrollIndicator() {
+ return false;
+ }
+
private void updateScrollingIndicator() {
if (getChildCount() <= 1) return;
if (!isScrollingIndicatorEnabled()) return;
@@ -1706,16 +1738,35 @@ public abstract class PagedView extends ViewGroup {
private void updateScrollingIndicatorPosition() {
if (!isScrollingIndicatorEnabled()) return;
- // We can make the page width smaller to make it look more centered
+ int numPages = getChildCount();
+ int pageWidth = getMeasuredWidth();
+ int maxPageWidth = (numPages * getMeasuredWidth()) + ((numPages - 1) * mPageSpacing);
+ int trackWidth = pageWidth;
+ int indicatorWidth = mScrollIndicator.getMeasuredWidth() -
+ mScrollIndicator.getPaddingLeft() - mScrollIndicator.getPaddingRight();
+ int paddingLeft = 0;
+ int paddingRight = 0;
+
+ // Get the track properties
getScrollingIndicatorTrack();
- int pageWidth = mScrollTrack.getMeasuredWidth() - mScrollTrack.getPaddingLeft() -
- mScrollTrack.getPaddingRight();
- int maxPageWidth = getChildCount() * getMeasuredWidth();
+ if (mScrollTrack != null) {
+ paddingLeft = mScrollTrack.getPaddingLeft();
+ paddingRight = mScrollTrack.getPaddingRight();
+ trackWidth = mScrollTrack.getMeasuredWidth() - paddingLeft - paddingRight;
+ }
+
float offset = (float) getScrollX() / maxPageWidth;
- int indicatorWidth = pageWidth / getChildCount();
- int indicatorCenterOffset = indicatorWidth / 2 - mScrollIndicator.getMeasuredWidth() / 2;
- int indicatorPos = (int) (offset * pageWidth) + mScrollTrack.getPaddingLeft() +
- indicatorCenterOffset;
+ int indicatorSpace = trackWidth / numPages;
+ int indicatorPos = (int) (offset * trackWidth) + paddingLeft;
+ if (hasElasticScrollIndicator()) {
+ if (mScrollIndicator.getMeasuredWidth() != indicatorSpace) {
+ mScrollIndicator.getLayoutParams().width = indicatorSpace;
+ mScrollIndicator.requestLayout();
+ }
+ } else {
+ int indicatorCenterOffset = indicatorSpace / 2 - indicatorWidth / 2;
+ indicatorPos += indicatorCenterOffset;
+ }
mScrollIndicator.setTranslationX(indicatorPos);
mScrollIndicator.invalidate();
}
diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java
index ba290d3f2..d79158d61 100644
--- a/src/com/android/launcher2/Workspace.java
+++ b/src/com/android/launcher2/Workspace.java
@@ -3339,4 +3339,11 @@ public class Workspace extends SmoothPagedView
public void getLocationInDragLayer(int[] loc) {
mLauncher.getDragLayer().getLocationInDragLayer(this, loc);
}
+
+ /**
+ * Return true because we want the scrolling indicator to stretch to fit the space.
+ */
+ protected boolean hasElasticScrollIndicator() {
+ return true;
+ }
}