Search in sources :

Example 51 with ItemTouchHelper

use of android.support.v7.widget.helper.ItemTouchHelper in project SmartNews by JavenLu.

the class NewsChannelActivity method initItemDragHelper.

private void initItemDragHelper() {
    ItemDragHelperCallback itemDragHelperCallback = new ItemDragHelperCallback(newsMineAdapter);
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemDragHelperCallback);
    itemTouchHelper.attachToRecyclerView(mineRecyclerView);
    newsMineAdapter.newsChannelDelegate.setOnLongPressClickListener(position -> {
        newsMineAdapter.setLongPressEnable(itemDragHelperCallback, position);
    });
}
Also used : ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) ItemDragHelperCallback(javen.example.com.commonlibrary.utils.ItemDragHelperCallback)

Example 52 with ItemTouchHelper

use of android.support.v7.widget.helper.ItemTouchHelper in project GeometricWeather by WangDaYeeeeee.

the class ManageActivity method initWidget.

private void initWidget() {
    this.container = findViewById(R.id.activity_manage_container);
    this.cardView = findViewById(R.id.activity_manage_searchBar);
    cardView.setOnClickListener(this);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        cardView.setTransitionName(getString(R.string.transition_activity_search_bar));
    }
    this.recyclerView = findViewById(R.id.activity_manage_recyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    recyclerView.addItemDecoration(new ListDecoration(this));
    recyclerView.setAdapter(adapter);
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new LocationSwipeCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT));
    itemTouchHelper.attachToRecyclerView(recyclerView);
}
Also used : ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) ListDecoration(wangdaye.com.geometricweather.ui.decotarion.ListDecoration)

Example 53 with ItemTouchHelper

use of android.support.v7.widget.helper.ItemTouchHelper in project Zom-Android by zom.

the class ContactsListFragment method setupRecyclerView.

private void setupRecyclerView(RecyclerView recyclerView) {
    recyclerView.setLayoutManager(new LinearLayoutManager(recyclerView.getContext()));
    Uri baseUri = Imps.Contacts.CONTENT_URI;
    Uri.Builder builder = baseUri.buildUpon();
    mUri = builder.build();
    mLoaderManager = getLoaderManager();
    mLoaderCallbacks = new MyLoaderCallbacks();
    mLoaderManager.initLoader(mLoaderId, null, mLoaderCallbacks);
    Cursor cursor = null;
    mAdapter = new ContactListRecyclerViewAdapter(getActivity(), cursor);
    if (mAdapter.getItemCount() == 0) {
        mRecView.setVisibility(View.GONE);
        mEmptyView.setVisibility(View.VISIBLE);
    } else {
        mRecView.setVisibility(View.VISIBLE);
        mEmptyView.setVisibility(View.GONE);
    }
    // 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 ContactViewHolder) {
                    // Let the view holder know that this item is being moved or dragged
                    ContactViewHolder itemViewHolder = (ContactViewHolder) 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) {
                int contactType = Imps.Contacts.TYPE_NORMAL;
                if (viewHolder instanceof ContactViewHolder) {
                    // Let the view holder know that this item is being moved or dragged
                    ContactViewHolder itemViewHolder = (ContactViewHolder) viewHolder;
                    contactType = itemViewHolder.mType;
                }
                // Get RecyclerView item from the ViewHolder
                View itemView = viewHolder.itemView;
                Paint p = new Paint();
                Bitmap icon;
                if (dX > 0) {
                    if (contactType == Imps.Contacts.TYPE_HIDDEN || contactType == Imps.Contacts.TYPE_HIDDEN_GROUP) {
                        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 ContactViewHolder) {
                // Tell the view holder it's time to restore the idle state
                ContactViewHolder itemViewHolder = (ContactViewHolder) 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();
            if (viewHolder instanceof ContactViewHolder) {
                // Tell the view holder it's time to restore the idle state
                ContactViewHolder itemViewHolder = (ContactViewHolder) viewHolder;
                // itemViewHolder.onItemClear();
                final boolean doArchive = (itemViewHolder.mType == Imps.Contacts.TYPE_NORMAL);
                final int contactType = itemViewHolder.mType;
                final String address = itemViewHolder.mAddress;
                final long providerId = itemViewHolder.mProviderId;
                final long accountId = itemViewHolder.mAccountId;
                if (doArchive) {
                    Snackbar snack = Snackbar.make(mRecView, getString(R.string.are_you_sure), Snackbar.LENGTH_LONG);
                    snack.setAction(R.string.yes, new View.OnClickListener() {

                        @Override
                        public void onClick(View view) {
                            archiveContact(getActivity(), address, contactType, providerId, accountId);
                        }
                    });
                    snack.show();
                } else {
                    Snackbar snack = Snackbar.make(mRecView, getString(R.string.action_unarchived), Snackbar.LENGTH_SHORT);
                    unarchiveContact(getActivity(), address, contactType, providerId, accountId);
                    snack.show();
                }
            }
        }

        @Override
        public boolean isLongPressDragEnabled() {
            return true;
        }

        @Override
        public boolean isItemViewSwipeEnabled() {
            return true;
        }
    });
    swipeToDismissTouchHelper.attachToRecyclerView(recyclerView);
}
Also used : 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) RecyclerView(android.support.v7.widget.RecyclerView) TextView(android.widget.TextView) 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)

Example 54 with ItemTouchHelper

use of android.support.v7.widget.helper.ItemTouchHelper 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)

Example 55 with ItemTouchHelper

use of android.support.v7.widget.helper.ItemTouchHelper in project Osmand by osmandapp.

the class MapMarkersGroupsFragment method onCreateView.

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    final MapActivity mapActivity = (MapActivity) getActivity();
    final boolean night = !mapActivity.getMyApplication().getSettings().isLightContent();
    mainView = inflater.inflate(R.layout.fragment_map_markers_groups, container, false);
    Fragment selectionMarkersGroupFragment = getChildFragmentManager().findFragmentByTag(SelectionMarkersGroupBottomSheetDialogFragment.TAG);
    if (selectionMarkersGroupFragment != null) {
        ((SelectionMarkersGroupBottomSheetDialogFragment) selectionMarkersGroupFragment).setListener(createAddMarkersGroupFragmentListener());
    }
    Fragment historyMarkerMenuFragment = getChildFragmentManager().findFragmentByTag(HistoryMarkerMenuBottomSheetDialogFragment.TAG);
    if (historyMarkerMenuFragment != null) {
        ((HistoryMarkerMenuBottomSheetDialogFragment) historyMarkerMenuFragment).setListener(createHistoryMarkerMenuListener());
    }
    final EmptyStateRecyclerView recyclerView = (EmptyStateRecyclerView) mainView.findViewById(R.id.list);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            compassUpdateAllowed = newState == RecyclerView.SCROLL_STATE_IDLE;
        }
    });
    backgroundPaint.setColor(ContextCompat.getColor(getActivity(), night ? R.color.dashboard_divider_dark : R.color.dashboard_divider_light));
    backgroundPaint.setStyle(Paint.Style.FILL_AND_STROKE);
    backgroundPaint.setAntiAlias(true);
    iconPaint.setAntiAlias(true);
    iconPaint.setFilterBitmap(true);
    iconPaint.setDither(true);
    textPaint.setTextSize(getResources().getDimension(R.dimen.default_desc_text_size));
    textPaint.setFakeBoldText(true);
    textPaint.setAntiAlias(true);
    final String delStr = getString(R.string.shared_string_delete).toUpperCase();
    final String moveToHistoryStr = getString(R.string.move_to_history).toUpperCase();
    final Rect bounds = new Rect();
    textPaint.getTextBounds(delStr, 0, delStr.length(), bounds);
    final int delStrWidth = bounds.width();
    final int textHeight = bounds.height();
    ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {

        private float marginSides = getResources().getDimension(R.dimen.list_content_padding);

        private Bitmap deleteBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_action_delete_dark);

        private Bitmap historyBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_action_history);

        private boolean iconHidden;

        @Override
        public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            boolean markerViewHolder = viewHolder instanceof MapMarkerItemViewHolder;
            int pos = viewHolder.getAdapterPosition();
            if (markerViewHolder && pos != -1) {
                MapMarker marker = (MapMarker) adapter.getItem(pos);
                if (marker.history) {
                    return ItemTouchHelper.LEFT;
                } else {
                    return ItemTouchHelper.RIGHT;
                }
            } else {
                return 0;
            }
        }

        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            return false;
        }

        @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 && viewHolder instanceof MapMarkerItemViewHolder) {
                if (!iconHidden && isCurrentlyActive) {
                    ((MapMarkerItemViewHolder) viewHolder).optionsBtn.setVisibility(View.GONE);
                    compassUpdateAllowed = false;
                    iconHidden = true;
                }
                View itemView = viewHolder.itemView;
                int colorIcon;
                int colorText;
                if (Math.abs(dX) > itemView.getWidth() / 2) {
                    colorIcon = R.color.map_widget_blue;
                    colorText = R.color.map_widget_blue;
                } else {
                    colorIcon = night ? 0 : R.color.icon_color;
                    colorText = R.color.dashboard_subheader_text_light;
                }
                if (colorIcon != 0) {
                    iconPaint.setColorFilter(new PorterDuffColorFilter(ContextCompat.getColor(getActivity(), colorIcon), PorterDuff.Mode.SRC_IN));
                }
                textPaint.setColor(ContextCompat.getColor(getActivity(), colorText));
                float textMarginTop = ((float) itemView.getHeight() - (float) textHeight) / 2;
                if (dX > 0) {
                    c.drawRect(itemView.getLeft(), itemView.getTop(), dX, itemView.getBottom(), backgroundPaint);
                    float iconMarginTop = ((float) itemView.getHeight() - (float) historyBitmap.getHeight()) / 2;
                    c.drawBitmap(historyBitmap, itemView.getLeft() + marginSides, itemView.getTop() + iconMarginTop, iconPaint);
                    c.drawText(moveToHistoryStr, itemView.getLeft() + 2 * marginSides + historyBitmap.getWidth(), itemView.getTop() + textMarginTop + textHeight, textPaint);
                } else {
                    c.drawRect(itemView.getRight() + dX, itemView.getTop(), itemView.getRight(), itemView.getBottom(), backgroundPaint);
                    float iconMarginTop = ((float) itemView.getHeight() - (float) deleteBitmap.getHeight()) / 2;
                    c.drawBitmap(deleteBitmap, itemView.getRight() - deleteBitmap.getWidth() - marginSides, itemView.getTop() + iconMarginTop, iconPaint);
                    c.drawText(delStr, itemView.getRight() - deleteBitmap.getWidth() - 2 * marginSides - delStrWidth, itemView.getTop() + textMarginTop + textHeight, textPaint);
                }
            }
            super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
        }

        @Override
        public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            if (viewHolder instanceof MapMarkerItemViewHolder) {
                ((MapMarkerItemViewHolder) viewHolder).optionsBtn.setVisibility(View.VISIBLE);
                iconHidden = false;
                compassUpdateAllowed = true;
            }
            super.clearView(recyclerView, viewHolder);
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, final int direction) {
            final int pos = viewHolder.getAdapterPosition();
            Object item = adapter.getItem(pos);
            if (item instanceof MapMarker) {
                final MapMarker marker = (MapMarker) item;
                int snackbarStringRes;
                if (direction == ItemTouchHelper.RIGHT) {
                    mapActivity.getMyApplication().getMapMarkersHelper().moveMapMarkerToHistory((MapMarker) item);
                    snackbarStringRes = R.string.marker_moved_to_history;
                } else {
                    mapActivity.getMyApplication().getMapMarkersHelper().removeMarker((MapMarker) item);
                    snackbarStringRes = R.string.item_removed;
                }
                updateAdapter();
                snackbar = Snackbar.make(viewHolder.itemView, snackbarStringRes, Snackbar.LENGTH_LONG).setAction(R.string.shared_string_undo, new View.OnClickListener() {

                    @Override
                    public void onClick(View view) {
                        if (direction == ItemTouchHelper.RIGHT) {
                            mapActivity.getMyApplication().getMapMarkersHelper().restoreMarkerFromHistory(marker, 0);
                        } else {
                            mapActivity.getMyApplication().getMapMarkersHelper().addMarker(marker);
                        }
                        updateAdapter();
                    }
                });
                AndroidUtils.setSnackbarTextColor(snackbar, R.color.color_dialog_buttons_dark);
                snackbar.show();
            }
        }
    };
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
    itemTouchHelper.attachToRecyclerView(recyclerView);
    adapter = new MapMarkersGroupsAdapter(mapActivity);
    adapter.setListener(new MapMarkersGroupsAdapter.MapMarkersGroupsAdapterListener() {

        @Override
        public void onItemClick(View view) {
            int pos = recyclerView.getChildAdapterPosition(view);
            if (pos == RecyclerView.NO_POSITION) {
                return;
            }
            Object item = adapter.getItem(pos);
            if (item instanceof MapMarker) {
                MapMarker marker = (MapMarker) item;
                OsmandApplication app = mapActivity.getMyApplication();
                if (!marker.history) {
                    if (app.getSettings().SELECT_MARKER_ON_SINGLE_TAP.get()) {
                        app.getMapMarkersHelper().moveMarkerToTop(marker);
                        updateAdapter();
                    } else {
                        FavouritePoint fav = marker.favouritePoint == null ? app.getFavorites().getVisibleFavByLatLon(marker.point) : marker.favouritePoint;
                        if (fav != null) {
                            showMap(marker.point, fav.getPointDescription(), fav);
                            return;
                        }
                        WptPt pt = marker.wptPt == null ? app.getSelectedGpxHelper().getVisibleWayPointByLatLon(marker.point) : marker.wptPt;
                        if (pt != null) {
                            showMap(marker.point, pt.getPointDescription(mapActivity), pt);
                            return;
                        }
                        Amenity mapObj = mapActivity.getMapLayers().getMapMarkersLayer().getMapObjectByMarker(marker);
                        PointDescription desc = mapObj == null ? marker.getPointDescription(mapActivity) : mapActivity.getMapLayers().getPoiMapLayer().getObjectName(mapObj);
                        showMap(marker.point, desc, mapObj == null ? marker : mapObj);
                    }
                } else {
                    showHistoryMenuFragment(pos, marker);
                }
            }
        }

        private void showMap(LatLon latLon, PointDescription desc, Object objToShow) {
            mapActivity.getMyApplication().getSettings().setMapLocationToShow(latLon.getLatitude(), latLon.getLongitude(), 15, desc, true, objToShow);
            MapActivity.launchMapActivityMoveToTop(mapActivity);
            ((DialogFragment) getParentFragment()).dismiss();
        }

        private void showHistoryMenuFragment(int pos, MapMarker marker) {
            HistoryMarkerMenuBottomSheetDialogFragment fragment = new HistoryMarkerMenuBottomSheetDialogFragment();
            fragment.setUsedOnMap(false);
            Bundle arguments = new Bundle();
            arguments.putInt(HistoryMarkerMenuBottomSheetDialogFragment.MARKER_POSITION, pos);
            arguments.putString(HistoryMarkerMenuBottomSheetDialogFragment.MARKER_NAME, marker.getName(mapActivity));
            arguments.putInt(HistoryMarkerMenuBottomSheetDialogFragment.MARKER_COLOR_INDEX, marker.colorIndex);
            arguments.putLong(HistoryMarkerMenuBottomSheetDialogFragment.MARKER_VISITED_DATE, marker.visitedDate);
            fragment.setArguments(arguments);
            fragment.setListener(createHistoryMarkerMenuListener());
            fragment.show(getChildFragmentManager(), HistoryMarkerMenuBottomSheetDialogFragment.TAG);
        }
    });
    adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {

        @Override
        public void onChanged() {
            changeFabVisibilityIfNeeded();
        }

        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
            changeFabVisibilityIfNeeded();
        }

        @Override
        public void onItemRangeRemoved(int positionStart, int itemCount) {
            changeFabVisibilityIfNeeded();
        }
    });
    final View emptyView = mainView.findViewById(R.id.empty_view);
    mainView.findViewById(R.id.import_button).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            openAddGroupMenu();
        }
    });
    ImageView emptyImageView = (ImageView) emptyView.findViewById(R.id.empty_state_image_view);
    if (Build.VERSION.SDK_INT >= 18) {
        emptyImageView.setImageResource(night ? R.drawable.ic_empty_state_marker_group_night : R.drawable.ic_empty_state_marker_group_day);
    } else {
        emptyImageView.setVisibility(View.INVISIBLE);
    }
    recyclerView.setEmptyView(emptyView);
    recyclerView.setAdapter(adapter);
    mainView.findViewById(R.id.add_group_fab).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            openAddGroupMenu();
        }
    });
    if (groupIdToOpen != null) {
        int groupHeaderPosition = adapter.getGroupHeaderPosition(groupIdToOpen);
        if (groupHeaderPosition != -1) {
            ((EmptyStateRecyclerView) mainView.findViewById(R.id.list)).scrollToPosition(groupHeaderPosition);
        }
    }
    return mainView;
}
Also used : WptPt(net.osmand.plus.GPXUtilities.WptPt) MapMarker(net.osmand.plus.MapMarkersHelper.MapMarker) OsmandApplication(net.osmand.plus.OsmandApplication) FavouritePoint(net.osmand.data.FavouritePoint) EmptyStateRecyclerView(net.osmand.plus.widgets.EmptyStateRecyclerView) MapMarkerItemViewHolder(net.osmand.plus.mapmarkers.adapters.MapMarkerItemViewHolder) PorterDuffColorFilter(android.graphics.PorterDuffColorFilter) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) DialogFragment(android.support.v4.app.DialogFragment) DashLocationFragment(net.osmand.plus.dashboard.DashLocationFragment) Fragment(android.support.v4.app.Fragment) ItemTouchHelper(android.support.v7.widget.helper.ItemTouchHelper) Bitmap(android.graphics.Bitmap) MapMarkerItemViewHolder(net.osmand.plus.mapmarkers.adapters.MapMarkerItemViewHolder) ImageView(android.widget.ImageView) MapActivity(net.osmand.plus.activities.MapActivity) Amenity(net.osmand.data.Amenity) Rect(android.graphics.Rect) Bundle(android.os.Bundle) Canvas(android.graphics.Canvas) EmptyStateRecyclerView(net.osmand.plus.widgets.EmptyStateRecyclerView) ImageView(android.widget.ImageView) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) FavouritePoint(net.osmand.data.FavouritePoint) Paint(android.graphics.Paint) LatLon(net.osmand.data.LatLon) PointDescription(net.osmand.data.PointDescription) EmptyStateRecyclerView(net.osmand.plus.widgets.EmptyStateRecyclerView) RecyclerView(android.support.v7.widget.RecyclerView) MapMarkersGroupsAdapter(net.osmand.plus.mapmarkers.adapters.MapMarkersGroupsAdapter) Nullable(android.support.annotation.Nullable)

Aggregations

ItemTouchHelper (android.support.v7.widget.helper.ItemTouchHelper)124 RecyclerView (android.support.v7.widget.RecyclerView)93 LinearLayoutManager (android.support.v7.widget.LinearLayoutManager)84 View (android.view.View)67 TextView (android.widget.TextView)25 ImageView (android.widget.ImageView)24 ViewGroup (android.view.ViewGroup)20 Toolbar (android.support.v7.widget.Toolbar)16 LayoutInflater (android.view.LayoutInflater)14 SearchView (android.support.v7.widget.SearchView)12 Intent (android.content.Intent)11 DefaultItemAnimator (android.support.v7.widget.DefaultItemAnimator)11 DialogInterface (android.content.DialogInterface)10 Canvas (android.graphics.Canvas)9 Bundle (android.os.Bundle)9 BindView (butterknife.BindView)9 Nullable (android.support.annotation.Nullable)8 FloatingActionButton (android.support.design.widget.FloatingActionButton)8 ArrayList (java.util.ArrayList)8 Context (android.content.Context)7