diff options
author | Winson Chung <winsonc@google.com> | 2011-07-19 15:47:55 -0700 |
---|---|---|
committer | Winson Chung <winsonc@google.com> | 2011-07-19 17:59:48 -0700 |
commit | 32174c878c77b4e0f13449f4c26ff6b487bc7ca6 (patch) | |
tree | 374b58ddd29e6b638aedee4b6c4e65d4f3498e53 | |
parent | 95383fe41dacc45c2aa97e7f47bafebb5b7655d8 (diff) | |
download | packages_apps_trebuchet-32174c878c77b4e0f13449f4c26ff6b487bc7ca6.zip packages_apps_trebuchet-32174c878c77b4e0f13449f4c26ff6b487bc7ca6.tar.gz packages_apps_trebuchet-32174c878c77b4e0f13449f4c26ff6b487bc7ca6.tar.bz2 |
Fxing issues with the scroll bar
- Removing track from AllApps
- Scrollbar should reach edge of track now
- Fixing flashing when going from AppsCustomize to workspace and switching tabs in AppsCustomize
Change-Id: Id69bd04dc503608566c3a33a1344904e3db383bf
-rw-r--r-- | res/layout-land/launcher.xml | 30 | ||||
-rw-r--r-- | res/layout-port/launcher.xml | 36 | ||||
-rw-r--r-- | res/layout/apps_customize_pane.xml | 7 | ||||
-rw-r--r-- | res/layout/scroll_indicator_track.xml | 4 | ||||
-rw-r--r-- | res/values-land/dimens.xml | 2 | ||||
-rw-r--r-- | res/values-large/styles.xml | 5 | ||||
-rw-r--r-- | res/values/dimens.xml | 3 | ||||
-rw-r--r-- | res/values/styles.xml | 6 | ||||
-rw-r--r-- | src/com/android/launcher2/AppsCustomizeTabHost.java | 4 | ||||
-rw-r--r-- | src/com/android/launcher2/Launcher.java | 26 | ||||
-rw-r--r-- | src/com/android/launcher2/PagedView.java | 83 | ||||
-rw-r--r-- | src/com/android/launcher2/Workspace.java | 7 |
12 files changed, 133 insertions, 80 deletions
diff --git a/res/layout-land/launcher.xml b/res/layout-land/launcher.xml index 4aa4870..428a0a7 100644 --- a/res/layout-land/launcher.xml +++ b/res/layout-land/launcher.xml @@ -4,9 +4,9 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -22,6 +22,19 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + <include + android:id="@+id/paged_view_indicator_track" + layout="@layout/scroll_indicator_track" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" /> + <include + android:id="@+id/paged_view_indicator" + layout="@layout/scroll_indicator" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom" /> + <!-- The workspace contains 5 screens of cells --> <com.android.launcher2.Workspace android:id="@+id/workspace" @@ -41,19 +54,6 @@ <include android:id="@+id/cell5" layout="@layout/workspace_screen" /> </com.android.launcher2.Workspace> - <include - android:id="@+id/paged_view_indicator_track" - layout="@layout/scroll_indicator_track" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="bottom" /> - <include - android:id="@+id/paged_view_indicator" - layout="@layout/scroll_indicator" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="bottom" /> - <include layout="@layout/qsb_bar" android:id="@+id/qsb_bar" android:layout_width="@dimen/qsb_bar_height" diff --git a/res/layout-port/launcher.xml b/res/layout-port/launcher.xml index 73051ba..d9750db 100644 --- a/res/layout-port/launcher.xml +++ b/res/layout-port/launcher.xml @@ -4,9 +4,9 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -22,6 +22,23 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + <!-- Keep these behind the workspace so that they are not visible when + we go into AllApps --> + <include + android:id="@+id/paged_view_indicator_track" + layout="@layout/scroll_indicator_track" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginBottom="@dimen/button_bar_height" /> + <include + android:id="@+id/paged_view_indicator" + layout="@layout/scroll_indicator" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginBottom="@dimen/button_bar_height" /> + <!-- The workspace contains 5 screens of cells --> <com.android.launcher2.Workspace android:id="@+id/workspace" @@ -39,21 +56,6 @@ <include android:id="@+id/cell5" layout="@layout/workspace_screen" /> </com.android.launcher2.Workspace> - <include - android:id="@+id/paged_view_indicator_track" - layout="@layout/scroll_indicator_track" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="bottom" - android:layout_marginBottom="@dimen/button_bar_height" /> - <include - android:id="@+id/paged_view_indicator" - layout="@layout/scroll_indicator" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="bottom" - android:layout_marginBottom="@dimen/button_bar_height" /> - <include layout="@layout/qsb_bar" android:id="@+id/qsb_bar" android:layout_width="match_parent" diff --git a/res/layout/apps_customize_pane.xml b/res/layout/apps_customize_pane.xml index adb0a6d..c277153 100644 --- a/res/layout/apps_customize_pane.xml +++ b/res/layout/apps_customize_pane.xml @@ -79,13 +79,6 @@ launcher:maxGap="@dimen/workspace_max_gap" /> <include - style="@style/AppsCustomizeScrollTrack" - android:id="@+id/paged_view_indicator_track" - layout="@layout/scroll_indicator_track" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_gravity="bottom" /> - <include android:id="@+id/paged_view_indicator" layout="@layout/scroll_indicator" android:layout_width="wrap_content" diff --git a/res/layout/scroll_indicator_track.xml b/res/layout/scroll_indicator_track.xml index c0d065a..e3aa625 100644 --- a/res/layout/scroll_indicator_track.xml +++ b/res/layout/scroll_indicator_track.xml @@ -16,7 +16,7 @@ <ImageView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher" - android:paddingLeft="@dimen/scroll_track_padding" - android:paddingRight="@dimen/scroll_track_padding" + android:paddingLeft="@dimen/scroll_track_padding_left" + android:paddingRight="@dimen/scroll_track_padding_right" android:scaleType="fitXY" android:src="@drawable/hotseat_track_holo" />
\ No newline at end of file diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml index 463cd17..305e730 100644 --- a/res/values-land/dimens.xml +++ b/res/values-land/dimens.xml @@ -25,6 +25,8 @@ <dimen name="workspace_top_padding">0dp</dimen> <dimen name="workspace_bottom_padding">0dp</dimen> <dimen name="workspace_page_spacing">8dp</dimen> + <dimen name="scroll_track_padding_left">@dimen/qsb_bar_height</dimen> + <dimen name="scroll_track_padding_right">@dimen/button_bar_height</dimen> <dimen name="folder_cell_width">100dip</dimen> <dimen name="folder_cell_height">74dip</dimen> diff --git a/res/values-large/styles.xml b/res/values-large/styles.xml index bd4efe7..17c806b 100644 --- a/res/values-large/styles.xml +++ b/res/values-large/styles.xml @@ -18,11 +18,6 @@ --> <resources> -<!-- AppsCustomize --> - <style name="AppsCustomizeScrollTrack"> - <item name="android:visibility">gone</item> - </style> - <!-- Workspace --> <style name="ScrollIndicatorTrack"> <item name="android:visibility">gone</item> diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 08a2c76..083a887 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -22,7 +22,8 @@ <dimen name="workspace_width_gap">-1dp</dimen> <dimen name="workspace_height_gap">-1dp</dimen> <dimen name="workspace_max_gap">8dp</dimen> - <dimen name="scroll_track_padding">10dp</dimen> + <dimen name="scroll_track_padding_left">12dp</dimen> + <dimen name="scroll_track_padding_right">12dp</dimen> <!-- QSB --> <dimen name="toolbar_button_vertical_padding">0dip</dimen> diff --git a/res/values/styles.xml b/res/values/styles.xml index 46e5f95..9d3a02b 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -29,15 +29,11 @@ <item name="android:windowNoTitle">true</item> </style> - <style name="AppsCustomizeScrollTrack"> - <item name="android:visibility">visible</item> - </style> - <style name="AnimationPreview"> <item name="android:windowEnterAnimation">@anim/fade_in_fast</item> <item name="android:windowExitAnimation">@anim/fade_out_fast</item> </style> - + <style name="WorkspaceIcon"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">match_parent</item> diff --git a/src/com/android/launcher2/AppsCustomizeTabHost.java b/src/com/android/launcher2/AppsCustomizeTabHost.java index 2623586..ed408df 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 489f3fb..7341e71 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 9ef1fa8..bed107a 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 ba290d3..d79158d 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; + } } |