use of org.awesomeapp.messenger.ui.widgets.ConversationViewHolder in project Zom-Android by zom.
the class ConversationListFragment method setupRecyclerView.
private void setupRecyclerView(RecyclerView recyclerView) {
recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
Uri baseUri = Imps.Contacts.CONTENT_URI_CHAT_CONTACTS_BY;
Uri.Builder builder = baseUri.buildUpon();
mUri = builder.build();
if (mLoaderManager == null || mAdapter == null) {
mLoaderManager = getLoaderManager();
mLoaderCallbacks = new MyLoaderCallbacks();
mLoaderManager.initLoader(mLoaderId, null, mLoaderCallbacks);
Cursor cursor = null;
mAdapter = new ConversationListRecyclerViewAdapter(getActivity(), cursor);
} else {
mRecView.setAdapter(mAdapter);
}
// init swipe to dismiss logic
ItemTouchHelper swipeToDismissTouchHelper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.RIGHT, ItemTouchHelper.RIGHT) {
public static final float ALPHA_FULL = 1.0f;
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
// We only want the active item to change
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
if (viewHolder instanceof ConversationViewHolder) {
// Let the view holder know that this item is being moved or dragged
ConversationViewHolder itemViewHolder = (ConversationViewHolder) viewHolder;
itemViewHolder.onItemSelected();
}
}
super.onSelectedChanged(viewHolder, actionState);
}
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
// Get RecyclerView item from the ViewHolder
View itemView = viewHolder.itemView;
Paint p = new Paint();
Bitmap icon;
if (dX > 0) {
if (mChatType == Imps.Chats.CHAT_TYPE_ARCHIVED) {
icon = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.ic_unarchive_white_24dp);
p.setColor(getResources().getColor(R.color.holo_green_dark));
} else {
icon = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.ic_archive_white_24dp);
p.setARGB(255, 150, 150, 150);
}
// Draw Rect with varying right side, equal to displacement dX
c.drawRect((float) itemView.getLeft(), (float) itemView.getTop(), dX, (float) itemView.getBottom(), p);
// Set the image icon for Right swipe
c.drawBitmap(icon, (float) itemView.getLeft() + convertDpToPx(16), (float) itemView.getTop() + ((float) itemView.getBottom() - (float) itemView.getTop() - icon.getHeight()) / 2, p);
}
// Fade out the view as it is swiped out of the parent's bounds
final float alpha = ALPHA_FULL - Math.abs(dX) / (float) viewHolder.itemView.getWidth();
viewHolder.itemView.setAlpha(alpha);
viewHolder.itemView.setTranslationX(dX);
} else {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}
private int convertDpToPx(int dp) {
return Math.round(dp * (getResources().getDisplayMetrics().xdpi / DisplayMetrics.DENSITY_DEFAULT));
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
viewHolder.itemView.setAlpha(ALPHA_FULL);
if (viewHolder instanceof ConversationViewHolder) {
// Tell the view holder it's time to restore the idle state
ConversationViewHolder itemViewHolder = (ConversationViewHolder) viewHolder;
itemViewHolder.onItemClear();
}
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
// callback for drag-n-drop, false to skip this feature
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
// callback for swipe to dismiss, removing item from data and adapter
int position = viewHolder.getAdapterPosition();
final long itemId = mAdapter.getItemId(position);
if (mChatType == Imps.Chats.CHAT_TYPE_ACTIVE) {
archiveConversation(itemId);
Snackbar snack = Snackbar.make(mRecView, getString(R.string.action_archived), Snackbar.LENGTH_LONG);
snack.setAction(R.string.action_undo, new View.OnClickListener() {
@Override
public void onClick(View view) {
unarchiveConversation(itemId);
}
});
snack.show();
} else {
unarchiveConversation(itemId);
Snackbar snack = Snackbar.make(mRecView, getString(R.string.action_unarchived), Snackbar.LENGTH_SHORT);
snack.show();
}
}
@Override
public boolean isLongPressDragEnabled() {
return true;
}
@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
});
swipeToDismissTouchHelper.attachToRecyclerView(recyclerView);
if (mAdapter.getItemCount() == 0) {
mRecView.setVisibility(View.GONE);
mEmptyView.setVisibility(View.VISIBLE);
mEmptyViewImage.setVisibility(View.VISIBLE);
} else if (mRecView.getVisibility() == View.GONE) {
mRecView.setVisibility(View.VISIBLE);
mEmptyView.setVisibility(View.GONE);
mEmptyViewImage.setVisibility(View.GONE);
}
}
Aggregations