/*
* Copyright (c) 2014 SBG Apps
*
* 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.likebamboo.osa.android.ui.view.fab;
import android.view.View;
import android.widget.AbsListView;
/**
* Created by Stéphane on 09/07/2014.
*/
public class DirectionScrollListener implements AbsListView.OnScrollListener {
private static final int DIRECTION_CHANGE_THRESHOLD = 1;
private final FloatingView mFloatingView;
private int mPrevPosition;
private int mPrevTop;
private boolean mUpdated;
public DirectionScrollListener(FloatingView floatingView) {
mFloatingView = floatingView;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
final View topChild = view.getChildAt(0);
int firstViewTop = 0;
if (topChild != null) {
firstViewTop = topChild.getTop();
}
boolean goingDown;
boolean changed = true;
if (mPrevPosition == firstVisibleItem) {
final int topDelta = mPrevTop - firstViewTop;
goingDown = firstViewTop < mPrevTop;
changed = Math.abs(topDelta) > DIRECTION_CHANGE_THRESHOLD;
} else {
goingDown = firstVisibleItem > mPrevPosition;
}
if (changed && mUpdated) {
if (goingDown) {
mFloatingView.hide();
} else {
mFloatingView.show();
}
}
mPrevPosition = firstVisibleItem;
mPrevTop = firstViewTop;
mUpdated = true;
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}