/* ** ** 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; } } } }