diff options
| -rw-r--r-- | core/java/android/transition/TextChange.java | 4 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 12 | ||||
| -rw-r--r-- | core/java/android/widget/AbsListView.java | 16 | ||||
| -rw-r--r-- | core/java/android/widget/FastScroller.java | 95 | ||||
| -rw-r--r-- | docs/html/training/id-auth/authenticate.jd | 2 | 
5 files changed, 74 insertions, 55 deletions
diff --git a/core/java/android/transition/TextChange.java b/core/java/android/transition/TextChange.java index 1b26942fe152..4f14d462675d 100644 --- a/core/java/android/transition/TextChange.java +++ b/core/java/android/transition/TextChange.java @@ -143,8 +143,8 @@ public class TextChange extends Transition {          final TextView view = (TextView) endValues.view;          Map<String, Object> startVals = startValues.values;          Map<String, Object> endVals = endValues.values; -        final String startText = (String) startVals.get(PROPNAME_TEXT); -        final String endText = (String) endVals.get(PROPNAME_TEXT); +        final CharSequence startText = (CharSequence) startVals.get(PROPNAME_TEXT); +        final CharSequence endText = (CharSequence) endVals.get(PROPNAME_TEXT);          if (!startText.equals(endText)) {              view.setText(startText);              Animator anim; diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 8616aba39f71..650d6989bb49 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -9546,9 +9546,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,       */      public void setPivotX(float pivotX) {          ensureTransformationInfo(); -        mPrivateFlags |= PFLAG_PIVOT_EXPLICITLY_SET;          final TransformationInfo info = mTransformationInfo; -        if (info.mPivotX != pivotX) { +        boolean pivotSet = (mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) == +                PFLAG_PIVOT_EXPLICITLY_SET; +        if (info.mPivotX != pivotX || !pivotSet) { +            mPrivateFlags |= PFLAG_PIVOT_EXPLICITLY_SET;              invalidateViewProperty(true, false);              info.mPivotX = pivotX;              info.mMatrixDirty = true; @@ -9596,9 +9598,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback,       */      public void setPivotY(float pivotY) {          ensureTransformationInfo(); -        mPrivateFlags |= PFLAG_PIVOT_EXPLICITLY_SET;          final TransformationInfo info = mTransformationInfo; -        if (info.mPivotY != pivotY) { +        boolean pivotSet = (mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) == +                PFLAG_PIVOT_EXPLICITLY_SET; +        if (info.mPivotY != pivotY || !pivotSet) { +            mPrivateFlags |= PFLAG_PIVOT_EXPLICITLY_SET;              invalidateViewProperty(true, false);              info.mPivotY = pivotY;              info.mMatrixDirty = true; diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java index 29b7cf2095db..7378d7479873 100644 --- a/core/java/android/widget/AbsListView.java +++ b/core/java/android/widget/AbsListView.java @@ -1250,7 +1250,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te              mFastScroller.setEnabled(true);          } -        recomputePadding(); +        resolvePadding();          if (mFastScroller != null) {              mFastScroller.updateLayout(); @@ -1312,7 +1312,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te       * @see #setFastScrollAlwaysVisible(boolean)       */      public boolean isFastScrollAlwaysVisible() { -        return mFastScrollEnabled && mFastScrollAlwaysVisible; +        if (mFastScroller == null) { +            return mFastScrollEnabled && mFastScrollAlwaysVisible; +        } else { +            return mFastScroller.isEnabled() && mFastScroller.isAlwaysShowEnabled(); +        }      }      @Override @@ -1331,7 +1335,11 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te       */      @ViewDebug.ExportedProperty      public boolean isFastScrollEnabled() { -        return mFastScrollEnabled; +        if (mFastScroller == null) { +            return mFastScrollEnabled; +        } else { +            return mFastScroller.isEnabled(); +        }      }      @Override @@ -1356,7 +1364,7 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te       */      @Override      protected boolean isVerticalScrollBarHidden() { -        return mFastScrollEnabled; +        return isFastScrollEnabled();      }      /** diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java index c48955f625b0..006b96e7834d 100644 --- a/core/java/android/widget/FastScroller.java +++ b/core/java/android/widget/FastScroller.java @@ -152,9 +152,6 @@ class FastScroller {      /** The number of headers at the top of the view. */      private int mHeaderCount; -    /** The number of items in the list. */ -    private int mItemCount = -1; -      /** The index of the current section. */      private int mCurrentSection = -1; @@ -324,6 +321,7 @@ class FastScroller {          getSectionsFromIndexer();          refreshDrawablePressedState(); +        updateLongList(listView.getChildCount(), listView.getCount());          setScrollbarPosition(mList.getVerticalScrollbarPosition());          postAutoHide();      } @@ -343,14 +341,10 @@ class FastScroller {       * @param enabled Whether the fast scroll thumb is enabled.       */      public void setEnabled(boolean enabled) { -        mEnabled = enabled; +        if (mEnabled != enabled) { +            mEnabled = enabled; -        if (enabled) { -            if (mAlwaysShow) { -                setState(STATE_VISIBLE); -            } -        } else { -            stop(); +            onStateDependencyChanged();          }      } @@ -358,19 +352,17 @@ class FastScroller {       * @return Whether the fast scroll thumb is enabled.       */      public boolean isEnabled() { -        return mEnabled; +        return mEnabled && (mLongList || mAlwaysShow);      }      /**       * @param alwaysShow Whether the fast scroll thumb should always be shown       */      public void setAlwaysShow(boolean alwaysShow) { -        mAlwaysShow = alwaysShow; +        if (mAlwaysShow != alwaysShow) { +            mAlwaysShow = alwaysShow; -        if (alwaysShow) { -            setState(STATE_VISIBLE); -        } else if (mState == STATE_VISIBLE) { -            postAutoHide(); +            onStateDependencyChanged();          }      } @@ -382,6 +374,23 @@ class FastScroller {          return mAlwaysShow;      } +    /** +     * Called when one of the variables affecting enabled state changes. +     */ +    private void onStateDependencyChanged() { +        if (isEnabled()) { +            if (isAlwaysShowEnabled()) { +                setState(STATE_VISIBLE); +            } else if (mState == STATE_VISIBLE) { +                postAutoHide(); +            } +        } else { +            stop(); +        } + +        mList.resolvePadding(); +    } +      public void setScrollBarStyle(int style) {          if (mScrollBarStyle != style) {              mScrollBarStyle = style; @@ -439,6 +448,18 @@ class FastScroller {              final int firstVisibleItem = mList.getFirstVisiblePosition();              setThumbPos(getPosFromItemCount(firstVisibleItem, visibleItemCount, totalItemCount));          } + +        updateLongList(visibleItemCount, totalItemCount); +    } + +    private void updateLongList(int visibleItemCount, int totalItemCount) { +        final boolean longList = visibleItemCount > 0 +                && totalItemCount / visibleItemCount >= MIN_PAGES; +        if (mLongList != longList) { +            mLongList = longList; + +            onStateDependencyChanged(); +        }      }      /** @@ -795,19 +816,8 @@ class FastScroller {          mList.postDelayed(mDeferHide, FADE_TIMEOUT);      } -    private boolean isLongList(int visibleItemCount, int totalItemCount) { -        // Are there enough pages to require fast scroll? Recompute only if -        // total count changes. -        if (mItemCount != totalItemCount && visibleItemCount > 0) { -            mItemCount = totalItemCount; -            mLongList = mItemCount / visibleItemCount >= MIN_PAGES; -        } - -        return mLongList; -    } -      public void onScroll(int firstVisibleItem, int visibleItemCount, int totalItemCount) { -        if (!mEnabled || !mAlwaysShow && !isLongList(visibleItemCount, totalItemCount)) { +        if (!isEnabled()) {              setState(STATE_NONE);              return;          } @@ -1221,7 +1231,7 @@ class FastScroller {      }      public boolean onInterceptTouchEvent(MotionEvent ev) { -        if (!mEnabled) { +        if (!isEnabled()) {              return false;          } @@ -1233,14 +1243,18 @@ class FastScroller {                      // need to allow the parent time to decide whether it wants                      // to intercept events. If it does, we will receive a CANCEL                      // event. -                    if (mList.isInScrollingContainer()) { -                        mInitialTouchY = ev.getY(); -                        startPendingDrag(); -                        return false; +                    if (!mList.isInScrollingContainer()) { +                        beginDrag(); +                        return true;                      } -                    beginDrag(); -                    return true; +                    mInitialTouchY = ev.getY(); +                    startPendingDrag(); +                } +                break; +            case MotionEvent.ACTION_MOVE: +                if (!isPointInside(ev.getX(), ev.getY())) { +                    cancelPendingDrag();                  }                  break;              case MotionEvent.ACTION_UP: @@ -1253,7 +1267,7 @@ class FastScroller {      }      public boolean onInterceptHoverEvent(MotionEvent ev) { -        if (!mEnabled) { +        if (!isEnabled()) {              return false;          } @@ -1269,18 +1283,11 @@ class FastScroller {      }      public boolean onTouchEvent(MotionEvent me) { -        if (!mEnabled) { +        if (!isEnabled()) {              return false;          }          switch (me.getActionMasked()) { -            case MotionEvent.ACTION_DOWN: { -                if (isPointInside(me.getX(), me.getY())) { -                    beginDrag(); -                    return true; -                } -            } break; -              case MotionEvent.ACTION_UP: {                  if (mHasPendingDrag) {                      // Allow a tap to scroll. diff --git a/docs/html/training/id-auth/authenticate.jd b/docs/html/training/id-auth/authenticate.jd index 3084beac35a9..65dbc3987bd3 100644 --- a/docs/html/training/id-auth/authenticate.jd +++ b/docs/html/training/id-auth/authenticate.jd @@ -79,7 +79,7 @@ a valid auth token from the Android Account Manager"/>  <p>To get an auth token you first need to request the  {@link android.Manifest.permission#ACCOUNT_MANAGER} -to yourmanifest file. To actually do anything useful with the +to your manifest file. To actually do anything useful with the  token, you'll also need to add the {@link android.Manifest.permission#INTERNET}  permission.</p>  |