use of com.volokh.danylo.visibility_utils.items.ListItem in project VideoPlayerManager by danylovolokh.
the class SingleListViewItemActiveCalculator method bottomToTopMostVisibleItem.
private void bottomToTopMostVisibleItem(ItemsPositionGetter itemsPositionGetter, int maxVisibilityPercents, ListItemData outMostVisibleItem) {
int mostVisibleItemVisibilityPercents = maxVisibilityPercents;
int currentItemVisibilityPercents;
for (int indexOfCurrentItem = itemsPositionGetter.getLastVisiblePosition(), indexOfCurrentView = itemsPositionGetter.indexOfChild(outMostVisibleItem.getView()); // iterating via listView Items
indexOfCurrentView >= 0; indexOfCurrentItem--, indexOfCurrentView--) {
if (SHOW_LOGS)
Logger.v(TAG, "bottomToTopMostVisibleItem, indexOfCurrentView " + indexOfCurrentView);
ListItem listItem = mListItems.get(indexOfCurrentItem);
View currentView = itemsPositionGetter.getChildAt(indexOfCurrentView);
currentItemVisibilityPercents = listItem.getVisibilityPercents(currentView);
if (SHOW_LOGS)
Logger.v(TAG, "bottomToTopMostVisibleItem, currentItemVisibilityPercents " + currentItemVisibilityPercents);
if (currentItemVisibilityPercents > mostVisibleItemVisibilityPercents) {
mostVisibleItemVisibilityPercents = currentItemVisibilityPercents;
outMostVisibleItem.fillWithData(indexOfCurrentItem, currentView);
}
View currentItemView = mCurrentItem.getView();
View mostVisibleView = outMostVisibleItem.getView();
// set if newly found most visible view is different from previous most visible view
boolean itemChanged = currentItemView != mostVisibleView;
if (SHOW_LOGS)
Logger.v(TAG, "topToBottomMostVisibleItem, itemChanged " + itemChanged);
outMostVisibleItem.setMostVisibleItemChanged(itemChanged);
}
if (SHOW_LOGS)
Logger.v(TAG, "bottomToTopMostVisibleItem, outMostVisibleItem " + outMostVisibleItem);
}
use of com.volokh.danylo.visibility_utils.items.ListItem in project VideoPlayerManager by danylovolokh.
the class SingleListViewItemActiveCalculator method findPreviousItem.
/**
* This method calculates visibility of previous item.
* There are some cases when previous item cannot be filled with data:
*
* 1. When current data is first item in the list. in this case there is no previous data
* 2. Index of current view cannot be calculated because view was already recycled
*
* @param itemsPositionGetter
* @param currentIem - the item that is active right now
* @param outPreviousItemData - out parameter. It will be filled with previous item data if the one exists
*/
private void findPreviousItem(ItemsPositionGetter itemsPositionGetter, ListItemData currentIem, ListItemData outPreviousItemData) {
int previousItemVisibilityPercents = 0;
int previousItemIndex = currentIem.getIndex() - 1;
if (SHOW_LOGS)
Logger.v(TAG, "findPreviousItem, previousItemIndex " + previousItemIndex);
if (previousItemIndex >= 0) {
int indexOfCurrentView = itemsPositionGetter.indexOfChild(currentIem.getView());
if (SHOW_LOGS)
Logger.v(TAG, "findPreviousItem, indexOfCurrentView " + indexOfCurrentView);
if (indexOfCurrentView > 0) {
View previousView = itemsPositionGetter.getChildAt(indexOfCurrentView - 1);
ListItem previous = mListItems.get(previousItemIndex);
if (SHOW_LOGS)
Logger.v(TAG, "findPreviousItem, previous " + previous + ", previousView " + previousView);
previousItemVisibilityPercents = previous.getVisibilityPercents(previousView);
outPreviousItemData.fillWithData(previousItemIndex, previousView);
} else {
if (SHOW_LOGS)
Logger.v(TAG, "findPreviousItem, current view is no longer attached to listView");
}
}
if (SHOW_LOGS)
Logger.v(TAG, "findPreviousItem, previousItemVisibilityPercents " + previousItemVisibilityPercents);
}
use of com.volokh.danylo.visibility_utils.items.ListItem in project VideoPlayerManager by danylovolokh.
the class SingleListViewItemActiveCalculator method findNextItem.
/**
* This method calculates visibility of next item.
* There are some cases when next item cannot be filled with data:
*
* 1. When current data is last item in the list. In this case there is no next data
* 2. Index of current view cannot be calculated because view was already recycled
*
* @param itemsPositionGetter
* @param currentIem - the item that is active right now
* @param outNextItemData - out parameter. It will be filled with next item data if the one exists
*/
private void findNextItem(ItemsPositionGetter itemsPositionGetter, ListItemData currentIem, ListItemData outNextItemData) {
int nextItemVisibilityPercents = 0;
int nextItemIndex = currentIem.getIndex() + 1;
if (SHOW_LOGS)
Logger.v(TAG, "findNextItem, nextItemIndex " + nextItemIndex);
if (nextItemIndex < mListItems.size()) {
int indexOfCurrentView = itemsPositionGetter.indexOfChild(currentIem.getView());
if (SHOW_LOGS)
Logger.v(TAG, "findNextItem, indexOfCurrentView " + indexOfCurrentView);
if (indexOfCurrentView >= 0) {
View nextView = itemsPositionGetter.getChildAt(indexOfCurrentView + 1);
if (nextView != null) {
ListItem next = mListItems.get(nextItemIndex);
if (SHOW_LOGS)
Logger.v(TAG, "findNextItem, next " + next + ", nextView " + nextView);
nextItemVisibilityPercents = next.getVisibilityPercents(nextView);
outNextItemData.fillWithData(nextItemIndex, nextView);
} else {
if (SHOW_LOGS)
Logger.v(TAG, "findNextItem, nextView null. There is no view next to current");
}
} else {
if (SHOW_LOGS)
Logger.v(TAG, "findNextItem, current view is no longer attached to listView");
}
}
if (SHOW_LOGS)
Logger.v(TAG, "findNextItem, nextItemVisibilityPercents " + nextItemVisibilityPercents);
}
use of com.volokh.danylo.visibility_utils.items.ListItem in project VideoPlayerManager by danylovolokh.
the class SingleListViewItemActiveCalculator method topToBottomMostVisibleItem.
private void topToBottomMostVisibleItem(ItemsPositionGetter itemsPositionGetter, int maxVisibilityPercents, ListItemData outMostVisibleItem) {
int mostVisibleItemVisibilityPercents = maxVisibilityPercents;
int currentItemVisibilityPercents;
for (int indexOfCurrentItem = itemsPositionGetter.getFirstVisiblePosition(), indexOfCurrentView = itemsPositionGetter.indexOfChild(outMostVisibleItem.getView()); // iterating via listView Items
indexOfCurrentView < itemsPositionGetter.getChildCount(); indexOfCurrentItem++, indexOfCurrentView++) {
if (SHOW_LOGS)
Logger.v(TAG, "topToBottomMostVisibleItem, indexOfCurrentView " + indexOfCurrentView);
ListItem listItem = mListItems.get(indexOfCurrentItem);
View currentView = itemsPositionGetter.getChildAt(indexOfCurrentView);
currentItemVisibilityPercents = listItem.getVisibilityPercents(currentView);
if (SHOW_LOGS)
Logger.v(TAG, "topToBottomMostVisibleItem, currentItemVisibilityPercents " + currentItemVisibilityPercents);
if (SHOW_LOGS)
Logger.v(TAG, "topToBottomMostVisibleItem, mostVisibleItemVisibilityPercents " + mostVisibleItemVisibilityPercents);
if (currentItemVisibilityPercents > mostVisibleItemVisibilityPercents) {
mostVisibleItemVisibilityPercents = currentItemVisibilityPercents;
outMostVisibleItem.fillWithData(indexOfCurrentItem, currentView);
}
}
View currentItemView = mCurrentItem.getView();
View mostVisibleView = outMostVisibleItem.getView();
// set if newly found most visible view is different from previous most visible view
boolean itemChanged = currentItemView != mostVisibleView;
if (SHOW_LOGS)
Logger.v(TAG, "topToBottomMostVisibleItem, itemChanged " + itemChanged);
outMostVisibleItem.setMostVisibleItemChanged(itemChanged);
if (SHOW_LOGS)
Logger.v(TAG, "topToBottomMostVisibleItem, outMostVisibleItem index " + outMostVisibleItem.getIndex() + ", outMostVisibleItem view " + outMostVisibleItem.getView());
}