Search in sources :

Example 1 with ConversationViewHolder

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);
    }
}
Also used : ConversationViewHolder(org.awesomeapp.messenger.ui.widgets.ConversationViewHolder) Canvas(android.graphics.Canvas) Paint(android.graphics.Paint) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) Cursor(android.database.Cursor) Uri(android.net.Uri) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) RecyclerView(android.support.v7.widget.RecyclerView) Paint(android.graphics.Paint) ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) Bitmap(android.graphics.Bitmap) RecyclerView(android.support.v7.widget.RecyclerView) Snackbar(android.support.design.widget.Snackbar)

Aggregations

Cursor (android.database.Cursor)1 Bitmap (android.graphics.Bitmap)1 Canvas (android.graphics.Canvas)1 Paint (android.graphics.Paint)1 Uri (android.net.Uri)1 Snackbar (android.support.design.widget.Snackbar)1 LinearLayoutManager (android.support.v7.widget.LinearLayoutManager)1 RecyclerView (android.support.v7.widget.RecyclerView)1 ItemTouchHelper (android.support.v7.widget.helper.ItemTouchHelper)1 View (android.view.View)1 ImageView (android.widget.ImageView)1 TextView (android.widget.TextView)1 ConversationViewHolder (org.awesomeapp.messenger.ui.widgets.ConversationViewHolder)1