diff --git a/OsmAnd/src/net/osmand/plus/poi/RearrangePoiFiltersFragment.java b/OsmAnd/src/net/osmand/plus/poi/RearrangePoiFiltersFragment.java index e9077bb143..97ad08899d 100644 --- a/OsmAnd/src/net/osmand/plus/poi/RearrangePoiFiltersFragment.java +++ b/OsmAnd/src/net/osmand/plus/poi/RearrangePoiFiltersFragment.java @@ -30,6 +30,7 @@ import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.snackbar.BaseTransientBottomBar; import com.google.android.material.snackbar.Snackbar; import net.osmand.AndroidUtils; @@ -106,7 +107,7 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { final OsmandApplication app = requireMyApplication(); - boolean nightMode = isNightMode(app, usedOnMap); + final boolean nightMode = isNightMode(app, usedOnMap); View mainView = UiUtilities.getInflater(app, nightMode).inflate(R.layout.edit_arrangement_list_fragment, container, false); createToolbar(mainView, nightMode); @@ -158,6 +159,39 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec updateItems(); } } + + @Override + public void onDeleteClicked(final int position) { + final ListItem item = items.get(position); + if (item.value instanceof PoiUIFilterDataObject) { + PoiUIFilterDataObject poiInfo = (PoiUIFilterDataObject) item.value; + final PoiUIFilter filter = app.getPoiFilters().getFilterById(poiInfo.filterId); + if (filter != null && app.getPoiFilters().removePoiFilter(filter)) { + filter.setDeleted(true); + filterDeleted = true; + } + items.remove(item); + adapter.notifyDataSetChanged(); + Snackbar snackbar = Snackbar.make(requireView(), + getString(R.string.item_deleted, poiInfo.name), Snackbar.LENGTH_LONG) + .setAction(R.string.shared_string_undo, new View.OnClickListener() { + @Override + public void onClick(View view) { + items.add(position, item); + adapter.notifyDataSetChanged(); + if (filter != null) { + filter.setDeleted(false); + app.getPoiFilters().createPoiFilter(filter, false); + } + } + }); + ViewCompat.setElevation(snackbar.getView(), 0f); + snackbar.setAnchorView(buttonsContainer); + snackbar.setAnimationMode(BaseTransientBottomBar.ANIMATION_MODE_FADE); + UiUtilities.setupSnackbar(snackbar, nightMode); + snackbar.show(); + } + } }); recyclerView.setAdapter(adapter); @@ -577,19 +611,23 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec @SuppressLint("ClickableViewAccessibility") @Override - public void onBindViewHolder(final @NonNull RecyclerView.ViewHolder holder, final int position) { - final ListItem item = items.get(position); - final boolean nightMode = isNightMode(app, usedOnMap); + public void onBindViewHolder(final @NonNull RecyclerView.ViewHolder holder, int position) { + ListItem item = items.get(position); + boolean nightMode = isNightMode(app, usedOnMap); int activeColorResId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light; if (holder instanceof PoiViewHolder) { PoiViewHolder h = (PoiViewHolder) holder; - final PoiUIFilterDataObject poiInfo = (PoiUIFilterDataObject) item.value; + PoiUIFilterDataObject poiInfo = (PoiUIFilterDataObject) item.value; int osmandOrangeColorResId = nightMode ? R.color.osmand_orange_dark : R.color.osmand_orange; + boolean isActive = poiInfo.isActive; h.title.setText(poiInfo.name); + int padding = (int) getResources().getDimension(R.dimen.content_padding); + int paddingSmall = (int) getResources().getDimension(R.dimen.content_padding_small); + h.title.setPadding(isActive ? 0 : padding, paddingSmall, paddingSmall, padding); boolean userFilter = poiInfo.filterId.startsWith(USER_PREFIX); int iconRes = QuickSearchListItem.getCustomFilterIconRes(poiHelper.getFilterById(poiInfo.filterId)); h.icon.setImageDrawable(uiUtilities.getIcon(userFilter ? iconRes : poiInfo.iconRes, osmandOrangeColorResId)); - h.moveIcon.setVisibility(poiInfo.isActive ? View.VISIBLE : View.GONE); + h.moveIcon.setVisibility(isActive ? View.VISIBLE : View.GONE); h.actionIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -599,7 +637,7 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec } } }); - if (poiInfo.isActive) { + if (isActive) { h.actionIcon.setImageDrawable(uiUtilities.getIcon(R.drawable.ic_action_remove, R.color.color_osm_edit_delete)); h.moveIcon.setOnTouchListener(new View.OnTouchListener() { @Override @@ -618,40 +656,10 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec h.actionDelete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - Snackbar snackbar = Snackbar.make(requireView(), - getString(R.string.item_deleted, poiInfo.name), Snackbar.LENGTH_LONG) - .setAction(R.string.shared_string_undo, new View.OnClickListener() { - @Override - public void onClick(View view) { - items.add(position, item); - notifyDataSetChanged(); - } - }) - .addCallback(new Snackbar.Callback() { - @Override - public void onShown(Snackbar sb) { - super.onShown(sb); - items.remove(item); - notifyDataSetChanged(); - } - - @Override - public void onDismissed(Snackbar transientBottomBar, int event) { - super.onDismissed(transientBottomBar, event); - if (DISMISS_EVENT_ACTION != event) { - PoiUIFilter filter = poiHelper.getFilterById(poiInfo.filterId); - if (filter != null && poiHelper.removePoiFilter(filter)) { - availableFiltersKeys.remove(poiInfo.filterId); - filter.setDeleted(true); - filterDeleted = true; - } - } - } - }); - ViewCompat.setElevation(snackbar.getView(), 0f); - snackbar.setAnchorView(buttonsContainer); - UiUtilities.setupSnackbar(snackbar, nightMode); - snackbar.show(); + int pos = holder.getAdapterPosition(); + if (listener != null && pos != RecyclerView.NO_POSITION) { + listener.onDeleteClicked(pos); + } } }); } else if (holder instanceof SpaceViewHolder) { @@ -864,7 +872,9 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec void onDragOrSwipeEnded(RecyclerView.ViewHolder holder); - void onButtonClicked(int view); + void onButtonClicked(int position); + + void onDeleteClicked(int position); } public interface OnApplyPoiFiltersState {