diff options
Diffstat (limited to 'src/com/android/packageinstaller/CaffeinatedScrollView.java')
-rw-r--r-- | src/com/android/packageinstaller/CaffeinatedScrollView.java | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/com/android/packageinstaller/CaffeinatedScrollView.java b/src/com/android/packageinstaller/CaffeinatedScrollView.java new file mode 100644 index 0000000..723ae13 --- /dev/null +++ b/src/com/android/packageinstaller/CaffeinatedScrollView.java @@ -0,0 +1,75 @@ +/* +** +** Copyright 2012, The Android Open Source Project +** +** 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. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package com.android.packageinstaller; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.widget.ScrollView; + +/** + * It's a ScrollView that knows how to stay awake. + */ +class CaffeinatedScrollView extends ScrollView { + private Runnable mFullScrollAction; + private int mBottomSlop; + + public CaffeinatedScrollView(Context context) { + super(context); + } + + public CaffeinatedScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + /** + * Make this visible so we can call it + */ + @Override + public boolean awakenScrollBars() { + return super.awakenScrollBars(); + } + + public void setFullScrollAction(Runnable action) { + mFullScrollAction = action; + mBottomSlop = (int)(4 * getResources().getDisplayMetrics().density); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + checkFullScrollAction(); + } + + @Override + protected void onScrollChanged(int l, int t, int oldl, int oldt) { + super.onScrollChanged(l, t, oldl, oldt); + checkFullScrollAction(); + } + + private void checkFullScrollAction() { + if (mFullScrollAction != null) { + int daBottom = getChildAt(0).getBottom(); + int screenBottom = getScrollY() + getHeight() - getPaddingBottom(); + if ((daBottom - screenBottom) < mBottomSlop) { + mFullScrollAction.run(); + mFullScrollAction = null; + } + } + } +} |