blob: 723ae13c84c31bc03d648199ac74fba26477d58a [file] [log] [blame]
/*
**
** 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;
}
}
}
}